diff --git a/includes/bootstrap.inc b/includes/bootstrap.inc
index 7e03533..66748d9 100644
--- a/includes/bootstrap.inc
+++ b/includes/bootstrap.inc
@@ -2176,7 +2176,7 @@ function drupal_anonymous_user() {
  *   drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
  * @endcode
  *
- * @param $phase
+ * @param int $phase
  *   A constant telling which phase to bootstrap to. When you bootstrap to a
  *   particular phase, all earlier phases are run automatically. Possible
  *   values:
@@ -2189,11 +2189,11 @@ function drupal_anonymous_user() {
  *   - DRUPAL_BOOTSTRAP_LANGUAGE: Finds out the language of the page.
  *   - DRUPAL_BOOTSTRAP_FULL: Fully loads Drupal. Validates and fixes input
  *     data.
- * @param $new_phase
+ * @param boolean $new_phase
  *   A boolean, set to FALSE if calling drupal_bootstrap from inside a
  *   function called from drupal_bootstrap (recursion).
  *
- * @return
+ * @return int
  *   The most recently completed phase.
  */
 function drupal_bootstrap($phase = NULL, $new_phase = TRUE) {
@@ -2215,12 +2215,13 @@ function drupal_bootstrap($phase = NULL, $new_phase = TRUE) {
   // bootstrap state.
   static $stored_phase = -1;
 
-  // When not recursing, store the phase name so it's not forgotten while
-  // recursing.
-  if ($new_phase) {
-    $final_phase = $phase;
-  }
   if (isset($phase)) {
+    // When not recursing, store the phase name so it's not forgotten while
+    // recursing but take care of not going backwards.
+    if ($new_phase && $phase >= $stored_phase) {
+      $final_phase = $phase;
+    }
+
     // Call a phase if it has not been called before and is below the requested
     // phase.
     while ($phases && $phase > $stored_phase && $final_phase > $stored_phase) {
@@ -2508,7 +2509,7 @@ function _drupal_bootstrap_page_header() {
  * @see drupal_bootstrap()
  */
 function drupal_get_bootstrap_phase() {
-  return drupal_bootstrap();
+  return drupal_bootstrap(NULL, FALSE);
 }
 
 /**
diff --git a/includes/module.inc b/includes/module.inc
index fe2a980..b2179ea 100644
--- a/includes/module.inc
+++ b/includes/module.inc
@@ -694,6 +694,35 @@ function module_hook($module, $hook) {
 function module_implements($hook, $sort = FALSE, $reset = FALSE) {
   // Use the advanced drupal_static() pattern, since this is called very often.
   static $drupal_static_fast;
+  static $full_bootstrap;
+
+  // This ensures that this clause is only called once after full bootstrap has
+  // happened.
+  if (!isset($full_bootstrap) || $full_bootstrap == FALSE) {
+    $full_bootstrap = drupal_get_bootstrap_phase() == DRUPAL_BOOTSTRAP_FULL;
+
+    // In case we are pre-bootstrap, ensure to use a different static
+    // implementation.
+    if (!$full_bootstrap) {
+      if (!isset($drupal_static_fast)) {
+        // This does not need a drupal_static().
+        $drupal_static_fast['implementations'] = array();
+      }
+    }
+    elseif (isset($drupal_static_fast)) {
+      // The first time we come here after full bootstrap, but with
+      // $drupal_static_fast already populated, we reset the
+      // $drupal_static_fast variable.
+      // This MUST not use unset() as unset only resets
+      // the variable for the rest of the function, but
+      // restores it again for the next request.
+      $drupal_static_fast = NULL;
+
+      // And clear any existing drupal_alter() cache.
+      drupal_static_reset('drupal_alter');
+    }
+  }
+
   if (!isset($drupal_static_fast)) {
     $drupal_static_fast['implementations'] = &drupal_static(__FUNCTION__);
   }
@@ -726,6 +755,12 @@ function module_implements($hook, $sort = FALSE, $reset = FALSE) {
     }
     else {
       $implementations = $implementations->data;
+      // In case we don't have full bootstrap, yet, store the data also
+      // in the future static as that cache_get is always the full cache.
+      if (!$full_bootstrap) {
+        $module_implements_cache = &drupal_static('module_implements');
+        $module_implements_cache['implementations'] = $implementations;
+      }
     }
   }
 
diff --git a/modules/README.txt b/modules/README.txt
deleted file mode 100644
index 8928d80..0000000
--- a/modules/README.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
-This directory is reserved for core module files. Custom or contributed modules
-should be placed in their own subdirectory of the sites/all/modules directory.
-For multisite installations, they can also be placed in a subdirectory under
-/sites/{sitename}/modules/, where {sitename} is the name of your site (e.g.,
-www.example.com). This will allow you to more easily update Drupal core files.
-
-For more details, see: http://drupal.org/node/176043
-
diff --git a/modules/aggregator/aggregator-feed-source.tpl.php b/modules/aggregator/aggregator-feed-source.tpl.php
deleted file mode 100644
index f9cfa55..0000000
--- a/modules/aggregator/aggregator-feed-source.tpl.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to present the source of the feed.
- *
- * The contents are rendered above feed listings when browsing source feeds.
- * For example, "example.com/aggregator/sources/1".
- *
- * Available variables:
- * - $source_icon: Feed icon linked to the source. Rendered through
- *   theme_feed_icon().
- * - $source_image: Image set by the feed source.
- * - $source_description: Description set by the feed source.
- * - $source_url: URL to the feed source.
- * - $last_checked: How long ago the feed was checked locally.
- *
- * @see template_preprocess()
- * @see template_preprocess_aggregator_feed_source()
- *
- * @ingroup themeable
- */
-?>
-<div class="feed-source">
-  <?php print $source_icon; ?>
-  <?php print $source_image; ?>
-  <div class="feed-description">
-    <?php print $source_description; ?>
-  </div>
-  <div class="feed-url">
-    <em><?php print t('URL:'); ?></em> <a href="<?php print $source_url; ?>"><?php print $source_url; ?></a>
-  </div>
-  <div class="feed-updated">
-    <em><?php print t('Updated:'); ?></em> <?php print $last_checked; ?>
-  </div>
-</div>
diff --git a/modules/aggregator/aggregator-item.tpl.php b/modules/aggregator/aggregator-item.tpl.php
deleted file mode 100644
index 74b2284..0000000
--- a/modules/aggregator/aggregator-item.tpl.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to format an individual feed item for display
- * on the aggregator page.
- *
- * Available variables:
- * - $feed_url: URL to the originating feed item.
- * - $feed_title: Title of the feed item.
- * - $source_url: Link to the local source section.
- * - $source_title: Title of the remote source.
- * - $source_date: Date the feed was posted on the remote source.
- * - $content: Feed item content.
- * - $categories: Linked categories assigned to the feed.
- *
- * @see template_preprocess()
- * @see template_preprocess_aggregator_item()
- *
- * @ingroup themeable
- */
-?>
-<div class="feed-item">
-  <h3 class="feed-item-title">
-    <a href="<?php print $feed_url; ?>"><?php print $feed_title; ?></a>
-  </h3>
-
-  <div class="feed-item-meta">
-  <?php if ($source_url): ?>
-    <a href="<?php print $source_url; ?>" class="feed-item-source"><?php print $source_title; ?></a> -
-  <?php endif; ?>
-    <span class="feed-item-date"><?php print $source_date; ?></span>
-  </div>
-
-<?php if ($content): ?>
-  <div class="feed-item-body">
-    <?php print $content; ?>
-  </div>
-<?php endif; ?>
-
-<?php if ($categories): ?>
-  <div class="feed-item-categories">
-    <?php print t('Categories'); ?>: <?php print implode(', ', $categories); ?>
-  </div>
-<?php endif ;?>
-
-</div>
diff --git a/modules/aggregator/aggregator-rtl.css b/modules/aggregator/aggregator-rtl.css
deleted file mode 100644
index 057d015..0000000
--- a/modules/aggregator/aggregator-rtl.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * Right-to-Left styles for theme in the Aggregator module.
- */
-
-#aggregator .feed-source .feed-icon {
-  float: left;
-}
diff --git a/modules/aggregator/aggregator-summary-item.tpl.php b/modules/aggregator/aggregator-summary-item.tpl.php
deleted file mode 100644
index f9199a5..0000000
--- a/modules/aggregator/aggregator-summary-item.tpl.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to present a linked feed item for summaries.
- *
- * Available variables:
- * - $feed_url: Link to originating feed.
- * - $feed_title: Title of feed.
- * - $feed_age: Age of remote feed.
- * - $source_url: Link to remote source.
- * - $source_title: Locally set title for the source.
- *
- * @see template_preprocess()
- * @see template_preprocess_aggregator_summary_item()
- *
- * @ingroup themeable
- */
-?>
-<a href="<?php print $feed_url; ?>"><?php print $feed_title; ?></a>
-<span class="age"><?php print $feed_age; ?></span>
-
-<?php if ($source_url): ?>,
-  <span class="source"><a href="<?php print $source_url; ?>"><?php print $source_title; ?></a></span>
-<?php endif; ?>
diff --git a/modules/aggregator/aggregator-summary-items.tpl.php b/modules/aggregator/aggregator-summary-items.tpl.php
deleted file mode 100644
index 4a0551d..0000000
--- a/modules/aggregator/aggregator-summary-items.tpl.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to present feeds as list items.
- *
- * Each iteration generates a single feed source or category.
- *
- * Available variables:
- * - $title: Title of the feed or category.
- * - $summary_list: Unordered list of linked feed items generated through
- *   theme_item_list().
- * - $source_url: URL to the local source or category.
- *
- * @see template_preprocess()
- * @see template_preprocess_aggregator_summary_items()
- *
- * @ingroup themeable
- */
-?>
-<h3><?php print $title; ?></h3>
-<?php print $summary_list; ?>
-<div class="links">
-  <a href="<?php print $source_url; ?>"><?php print t('More'); ?></a>
-</div>
diff --git a/modules/aggregator/aggregator-wrapper.tpl.php b/modules/aggregator/aggregator-wrapper.tpl.php
deleted file mode 100644
index 2fa51a7..0000000
--- a/modules/aggregator/aggregator-wrapper.tpl.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to wrap aggregator content.
- *
- * Available variables:
- * - $content: All aggregator content.
- * - $page: Pager links rendered through theme_pager().
- *
- * @see template_preprocess()
- * @see template_preprocess_aggregator_wrapper()
- *
- * @ingroup themeable
- */
-?>
-<div id="aggregator">
-  <?php print $content; ?>
-  <?php print $pager; ?>
-</div>
diff --git a/modules/aggregator/aggregator.admin.inc b/modules/aggregator/aggregator.admin.inc
deleted file mode 100644
index 443facb..0000000
--- a/modules/aggregator/aggregator.admin.inc
+++ /dev/null
@@ -1,633 +0,0 @@
-<?php
-
-/**
- * @file
- * Administration page callbacks for the Aggregator module.
- */
-
-/**
- * Page callback: Displays the Aggregator module administration page.
- */
-function aggregator_admin_overview() {
-  return aggregator_view();
-}
-
-/**
- * Displays the aggregator administration page.
- *
- * @return
- *   A HTML-formatted string with administration page content.
- */
-function aggregator_view() {
-  $result = db_query('SELECT f.fid, f.title, f.url, f.refresh, f.checked, f.link, f.description, f.hash, f.etag, f.modified, f.image, f.block, COUNT(i.iid) AS items FROM {aggregator_feed} f LEFT JOIN {aggregator_item} i ON f.fid = i.fid GROUP BY f.fid, f.title, f.url, f.refresh, f.checked, f.link, f.description, f.hash, f.etag, f.modified, f.image, f.block ORDER BY f.title');
-
-  $output = '<h3>' . t('Feed overview') . '</h3>';
-
-  $header = array(t('Title'), t('Items'), t('Last update'), t('Next update'), array('data' => t('Operations'), 'colspan' => '3'));
-  $rows = array();
-  foreach ($result as $feed) {
-    $rows[] = array(
-      l($feed->title, "aggregator/sources/$feed->fid"),
-      format_plural($feed->items, '1 item', '@count items'),
-      ($feed->checked ? t('@time ago', array('@time' => format_interval(REQUEST_TIME - $feed->checked))) : t('never')),
-      ($feed->checked && $feed->refresh ? t('%time left', array('%time' => format_interval($feed->checked + $feed->refresh - REQUEST_TIME))) : t('never')),
-      l(t('edit'), "admin/config/services/aggregator/edit/feed/$feed->fid"),
-      l(t('remove items'), "admin/config/services/aggregator/remove/$feed->fid"),
-      l(t('update items'), "admin/config/services/aggregator/update/$feed->fid", array('query' => array('token' => drupal_get_token("aggregator/update/$feed->fid")))),
-    );
-  }
-  $output .= theme('table', array('header' => $header, 'rows' => $rows, 'empty' => t('No feeds available. <a href="@link">Add feed</a>.', array('@link' => url('admin/config/services/aggregator/add/feed')))));
-
-  $result = db_query('SELECT c.cid, c.title, COUNT(ci.iid) as items FROM {aggregator_category} c LEFT JOIN {aggregator_category_item} ci ON c.cid = ci.cid GROUP BY c.cid, c.title ORDER BY title');
-
-  $output .= '<h3>' . t('Category overview') . '</h3>';
-
-  $header = array(t('Title'), t('Items'), t('Operations'));
-  $rows = array();
-  foreach ($result as $category) {
-    $rows[] = array(l($category->title, "aggregator/categories/$category->cid"), format_plural($category->items, '1 item', '@count items'), l(t('edit'), "admin/config/services/aggregator/edit/category/$category->cid"));
-  }
-  $output .= theme('table', array('header' => $header, 'rows' => $rows, 'empty' => t('No categories available. <a href="@link">Add category</a>.', array('@link' => url('admin/config/services/aggregator/add/category')))));
-
-  return $output;
-}
-
-/**
- * Form constructor for adding and editing feed sources.
- *
- * @param $feed
- *   (optional) If editing a feed, the feed to edit as a PHP stdClass value; if
- *   adding a new feed, NULL. Defaults to NULL.
- *
- * @ingroup forms
- * @see aggregator_form_feed_validate()
- * @see aggregator_form_feed_submit()
- */
-function aggregator_form_feed($form, &$form_state, stdClass $feed = NULL) {
-  $period = drupal_map_assoc(array(900, 1800, 3600, 7200, 10800, 21600, 32400, 43200, 64800, 86400, 172800, 259200, 604800, 1209600, 2419200), 'format_interval');
-  $period[AGGREGATOR_CLEAR_NEVER] = t('Never');
-
-  $form['title'] = array('#type' => 'textfield',
-    '#title' => t('Title'),
-    '#default_value' => isset($feed->title) ? $feed->title : '',
-    '#maxlength' => 255,
-    '#description' => t('The name of the feed (or the name of the website providing the feed).'),
-    '#required' => TRUE,
-  );
-  $form['url'] = array('#type' => 'textfield',
-    '#title' => t('URL'),
-    '#default_value' => isset($feed->url) ? $feed->url : '',
-    '#maxlength' => NULL,
-    '#description' => t('The fully-qualified URL of the feed.'),
-    '#required' => TRUE,
-  );
-  $form['refresh'] = array('#type' => 'select',
-    '#title' => t('Update interval'),
-    '#default_value' => isset($feed->refresh) ? $feed->refresh : 3600,
-    '#options' => $period,
-    '#description' => t('The length of time between feed updates. Requires a correctly configured <a href="@cron">cron maintenance task</a>.', array('@cron' => url('admin/reports/status'))),
-  );
-  $form['block'] = array('#type' => 'select',
-    '#title' => t('News items in block'),
-    '#default_value' => isset($feed->block) ? $feed->block : 5,
-    '#options' => drupal_map_assoc(array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)),
-    '#description' => t("Drupal can make a block with the most recent news items of this feed. You can <a href=\"@block-admin\">configure blocks</a> to be displayed in the sidebar of your page. This setting lets you configure the number of news items to show in this feed's block. If you choose '0' this feed's block will be disabled.", array('@block-admin' => url('admin/structure/block'))),
-  );
-
-  // Handling of categories.
-  $options = array();
-  $values = array();
-  $categories = db_query('SELECT c.cid, c.title, f.fid FROM {aggregator_category} c LEFT JOIN {aggregator_category_feed} f ON c.cid = f.cid AND f.fid = :fid ORDER BY title', array(':fid' => isset($feed->fid) ? $feed->fid : NULL));
-  foreach ($categories as $category) {
-    $options[$category->cid] = check_plain($category->title);
-    if ($category->fid) $values[] = $category->cid;
-  }
-
-  if ($options) {
-    $form['category'] = array(
-      '#type' => 'checkboxes',
-      '#title' => t('Categorize news items'),
-      '#default_value' => $values,
-      '#options' => $options,
-      '#description' => t('New feed items are automatically filed in the checked categories.'),
-    );
-  }
-
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Save'),
-  );
-  if (!empty($feed->fid)) {
-    $form['actions']['delete'] = array(
-      '#type' => 'submit',
-      '#value' => t('Delete'),
-    );
-    $form['fid'] = array(
-      '#type' => 'hidden',
-      '#value' => $feed->fid,
-    );
-  }
-
-  return $form;
-}
-
-/**
- * Form validation handler for aggregator_form_feed().
- *
- * @see aggregator_form_feed_submit()
- */
-function aggregator_form_feed_validate($form, &$form_state) {
-  if ($form_state['values']['op'] == t('Save')) {
-    // Ensure URL is valid.
-    if (!valid_url($form_state['values']['url'], TRUE)) {
-      form_set_error('url', t('The URL %url is invalid. Enter a fully-qualified URL, such as http://www.example.com/feed.xml.', array('%url' => $form_state['values']['url'])));
-    }
-    // Check for duplicate titles.
-    if (isset($form_state['values']['fid'])) {
-      $result = db_query("SELECT title, url FROM {aggregator_feed} WHERE (title = :title OR url = :url) AND fid <> :fid", array(':title' => $form_state['values']['title'], ':url' => $form_state['values']['url'], ':fid' => $form_state['values']['fid']));
-    }
-    else {
-      $result = db_query("SELECT title, url FROM {aggregator_feed} WHERE title = :title OR url = :url", array(':title' => $form_state['values']['title'], ':url' => $form_state['values']['url']));
-    }
-    foreach ($result as $feed) {
-      if (strcasecmp($feed->title, $form_state['values']['title']) == 0) {
-        form_set_error('title', t('A feed named %feed already exists. Enter a unique title.', array('%feed' => $form_state['values']['title'])));
-      }
-      if (strcasecmp($feed->url, $form_state['values']['url']) == 0) {
-        form_set_error('url', t('A feed with this URL %url already exists. Enter a unique URL.', array('%url' => $form_state['values']['url'])));
-      }
-    }
-  }
-}
-
-/**
- * Form submission handler for aggregator_form_feed().
- *
- * @see aggregator_form_feed_validate()
- *
- * @todo Add delete confirmation dialog.
- */
-function aggregator_form_feed_submit($form, &$form_state) {
-  if ($form_state['values']['op'] == t('Delete')) {
-    $title = $form_state['values']['title'];
-    // Unset the title.
-    unset($form_state['values']['title']);
-  }
-  aggregator_save_feed($form_state['values']);
-  if (isset($form_state['values']['fid'])) {
-    if (isset($form_state['values']['title'])) {
-      drupal_set_message(t('The feed %feed has been updated.', array('%feed' => $form_state['values']['title'])));
-      if (arg(0) == 'admin') {
-        $form_state['redirect'] = 'admin/config/services/aggregator/';
-        return;
-      }
-      else {
-        $form_state['redirect'] = 'aggregator/sources/' . $form_state['values']['fid'];
-        return;
-      }
-    }
-    else {
-      watchdog('aggregator', 'Feed %feed deleted.', array('%feed' => $title));
-      drupal_set_message(t('The feed %feed has been deleted.', array('%feed' => $title)));
-      if (arg(0) == 'admin') {
-        $form_state['redirect'] = 'admin/config/services/aggregator/';
-        return;
-      }
-      else {
-        $form_state['redirect'] = 'aggregator/sources/';
-        return;
-      }
-    }
-  }
-  else {
-    watchdog('aggregator', 'Feed %feed added.', array('%feed' => $form_state['values']['title']), WATCHDOG_NOTICE, l(t('view'), 'admin/config/services/aggregator'));
-    drupal_set_message(t('The feed %feed has been added.', array('%feed' => $form_state['values']['title'])));
-  }
-}
-
-/**
- * Deletes a feed.
- *
- * @param $feed
- *   An associative array describing the feed to be cleared.
- *
- * @see aggregator_admin_remove_feed_submit()
- */
-function aggregator_admin_remove_feed($form, $form_state, $feed) {
-  return confirm_form(
-    array(
-      'feed' => array(
-        '#type' => 'value',
-        '#value' => $feed,
-      ),
-    ),
-    t('Are you sure you want to remove all items from the feed %feed?', array('%feed' => $feed->title)),
-    'admin/config/services/aggregator',
-    t('This action cannot be undone.'),
-    t('Remove items'),
-    t('Cancel')
-  );
-}
-
-/**
- * Form submission handler for aggregator_admin_remove_feed().
- *
- * Removes all items from a feed and redirects to the overview page.
- */
-function aggregator_admin_remove_feed_submit($form, &$form_state) {
-  aggregator_remove($form_state['values']['feed']);
-  $form_state['redirect'] = 'admin/config/services/aggregator';
-}
-
-/**
- * Form constructor for importing feeds from OPML.
- *
- * @ingroup forms
- * @see aggregator_form_opml_validate()
- * @see aggregator_form_opml_submit()
- */
-function aggregator_form_opml($form, &$form_state) {
-  $period = drupal_map_assoc(array(900, 1800, 3600, 7200, 10800, 21600, 32400, 43200, 64800, 86400, 172800, 259200, 604800, 1209600, 2419200), 'format_interval');
-
-  $form['upload'] = array(
-    '#type' => 'file',
-    '#title' => t('OPML File'),
-    '#description' => t('Upload an OPML file containing a list of feeds to be imported.'),
-  );
-  $form['remote'] = array(
-    '#type' => 'textfield',
-    '#title' => t('OPML Remote URL'),
-    '#maxlength' => 1024,
-    '#description' => t('Enter the URL of an OPML file. This file will be downloaded and processed only once on submission of the form.'),
-  );
-  $form['refresh'] = array(
-    '#type' => 'select',
-    '#title' => t('Update interval'),
-    '#default_value' => 3600,
-    '#options' => $period,
-    '#description' => t('The length of time between feed updates. Requires a correctly configured <a href="@cron">cron maintenance task</a>.', array('@cron' => url('admin/reports/status'))),
-  );
-  $form['block'] = array('#type' => 'select',
-    '#title' => t('News items in block'),
-    '#default_value' => 5,
-    '#options' => drupal_map_assoc(array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)),
-    '#description' => t("Drupal can make a block with the most recent news items of a feed. You can <a href=\"@block-admin\">configure blocks</a> to be displayed in the sidebar of your page. This setting lets you configure the number of news items to show in a feed's block. If you choose '0' these feeds' blocks will be disabled.", array('@block-admin' => url('admin/structure/block'))),
-  );
-
-  // Handling of categories.
-  $options = array_map('check_plain', db_query("SELECT cid, title FROM {aggregator_category} ORDER BY title")->fetchAllKeyed());
-  if ($options) {
-    $form['category'] = array(
-      '#type' => 'checkboxes',
-      '#title' => t('Categorize news items'),
-      '#options' => $options,
-      '#description' => t('New feed items are automatically filed in the checked categories.'),
-    );
-  }
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Import')
-  );
-
-  return $form;
-}
-
-/**
- * Form validation handler for aggregator_form_opml().
- *
- * @see aggregator_form_opml_submit()
- */
-function aggregator_form_opml_validate($form, &$form_state) {
-  // If both fields are empty or filled, cancel.
-  if (empty($form_state['values']['remote']) == empty($_FILES['files']['name']['upload'])) {
-    form_set_error('remote', t('You must <em>either</em> upload a file or enter a URL.'));
-  }
-
-  // Validate the URL, if one was entered.
-  if (!empty($form_state['values']['remote']) && !valid_url($form_state['values']['remote'], TRUE)) {
-    form_set_error('remote', t('This URL is not valid.'));
-  }
-}
-
-/**
- * Form submission handler for aggregator_form_opml().
- *
- * @see aggregator_form_opml_validate()
- */
-function aggregator_form_opml_submit($form, &$form_state) {
-  $data = '';
-  $validators = array('file_validate_extensions' => array('opml xml'));
-  if ($file = file_save_upload('upload', $validators)) {
-    $data = file_get_contents($file->uri);
-  }
-  else {
-    $response = drupal_http_request($form_state['values']['remote']);
-    if (!isset($response->error)) {
-      $data = $response->data;
-    }
-  }
-
-  $feeds = _aggregator_parse_opml($data);
-  if (empty($feeds)) {
-    drupal_set_message(t('No new feed has been added.'));
-    return;
-  }
-
-  $form_state['values']['op'] = t('Save');
-
-  foreach ($feeds as $feed) {
-    // Ensure URL is valid.
-    if (!valid_url($feed['url'], TRUE)) {
-      drupal_set_message(t('The URL %url is invalid.', array('%url' => $feed['url'])), 'warning');
-      continue;
-    }
-
-    // Check for duplicate titles or URLs.
-    $result = db_query("SELECT title, url FROM {aggregator_feed} WHERE title = :title OR url = :url", array(':title' => $feed['title'], ':url' => $feed['url']));
-    foreach ($result as $old) {
-      if (strcasecmp($old->title, $feed['title']) == 0) {
-        drupal_set_message(t('A feed named %title already exists.', array('%title' => $old->title)), 'warning');
-        continue 2;
-      }
-      if (strcasecmp($old->url, $feed['url']) == 0) {
-        drupal_set_message(t('A feed with the URL %url already exists.', array('%url' => $old->url)), 'warning');
-        continue 2;
-      }
-    }
-
-    $form_state['values']['title'] = $feed['title'];
-    $form_state['values']['url'] = $feed['url'];
-    drupal_form_submit('aggregator_form_feed', $form_state);
-  }
-
-  $form_state['redirect'] = 'admin/config/services/aggregator';
-}
-
-/**
- * Parses an OPML file.
- *
- * Feeds are recognized as <outline> elements with the attributes "text" and
- * "xmlurl" set.
- *
- * @param $opml
- *   The complete contents of an OPML document.
- *
- * @return
- *   An array of feeds, each an associative array with a "title" and a "url"
- *   element, or NULL if the OPML document failed to be parsed. An empty array
- *   will be returned if the document is valid but contains no feeds, as some
- *   OPML documents do.
- */
-function _aggregator_parse_opml($opml) {
-  $feeds = array();
-  $xml_parser = drupal_xml_parser_create($opml);
-  if (xml_parse_into_struct($xml_parser, $opml, $values)) {
-    foreach ($values as $entry) {
-      if ($entry['tag'] == 'OUTLINE' && isset($entry['attributes'])) {
-        $item = $entry['attributes'];
-        if (!empty($item['XMLURL']) && !empty($item['TEXT'])) {
-          $feeds[] = array('title' => $item['TEXT'], 'url' => $item['XMLURL']);
-        }
-      }
-    }
-  }
-  xml_parser_free($xml_parser);
-
-  return $feeds;
-}
-
-/**
- * Page callback: Refreshes a feed, then redirects to the overview page.
- *
- * @param $feed
- *   An object describing the feed to be refreshed.
- */
-function aggregator_admin_refresh_feed($feed) {
-  if (!isset($_GET['token']) || !drupal_valid_token($_GET['token'], 'aggregator/update/' . $feed->fid)) {
-    return MENU_ACCESS_DENIED;
-  }
-  aggregator_refresh($feed);
-  drupal_goto('admin/config/services/aggregator');
-}
-
-/**
- * Form constructor for the aggregator system settings.
- *
- * @see aggregator_admin_form_submit()
- * @ingroup forms
- */
-function aggregator_admin_form($form, $form_state) {
-  // Global aggregator settings.
-  $form['aggregator_allowed_html_tags'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Allowed HTML tags'),
-    '#size' => 80,
-    '#maxlength' => 255,
-    '#default_value' => variable_get('aggregator_allowed_html_tags', '<a> <b> <br> <dd> <dl> <dt> <em> <i> <li> <ol> <p> <strong> <u> <ul>'),
-    '#description' => t('A space-separated list of HTML tags allowed in the content of feed items. Disallowed tags are stripped from the content.'),
-  );
-
-  // Make sure configuration is sane.
-  aggregator_sanitize_configuration();
-
-  // Get all available fetchers.
-  $fetchers = module_implements('aggregator_fetch');
-  foreach ($fetchers as $k => $module) {
-    if ($info = module_invoke($module, 'aggregator_fetch_info')) {
-      $label = $info['title'] . ' <span class="description">' . $info['description'] . '</span>';
-    }
-    else {
-      $label = $module;
-    }
-    unset($fetchers[$k]);
-    $fetchers[$module] = $label;
-  }
-
-  // Get all available parsers.
-  $parsers = module_implements('aggregator_parse');
-  foreach ($parsers as $k => $module) {
-    if ($info = module_invoke($module, 'aggregator_parse_info')) {
-      $label = $info['title'] . ' <span class="description">' . $info['description'] . '</span>';
-    }
-    else {
-      $label = $module;
-    }
-    unset($parsers[$k]);
-    $parsers[$module] = $label;
-  }
-
-  // Get all available processors.
-  $processors = module_implements('aggregator_process');
-  foreach ($processors as $k => $module) {
-    if ($info = module_invoke($module, 'aggregator_process_info')) {
-      $label = $info['title'] . ' <span class="description">' . $info['description'] . '</span>';
-    }
-    else {
-      $label = $module;
-    }
-    unset($processors[$k]);
-    $processors[$module] = $label;
-  }
-
-  // Only show basic configuration if there are actually options.
-  $basic_conf = array();
-  if (count($fetchers) > 1) {
-    $basic_conf['aggregator_fetcher'] = array(
-      '#type' => 'radios',
-      '#title' => t('Fetcher'),
-      '#description' => t('Fetchers download data from an external source. Choose a fetcher suitable for the external source you would like to download from.'),
-      '#options' => $fetchers,
-      '#default_value' => variable_get('aggregator_fetcher', 'aggregator'),
-    );
-  }
-  if (count($parsers) > 1) {
-    $basic_conf['aggregator_parser'] = array(
-      '#type' => 'radios',
-      '#title' => t('Parser'),
-      '#description' => t('Parsers transform downloaded data into standard structures. Choose a parser suitable for the type of feeds you would like to aggregate.'),
-      '#options' => $parsers,
-      '#default_value' => variable_get('aggregator_parser', 'aggregator'),
-    );
-  }
-  if (count($processors) > 1) {
-    $basic_conf['aggregator_processors'] = array(
-      '#type' => 'checkboxes',
-      '#title' => t('Processors'),
-      '#description' => t('Processors act on parsed feed data, for example they store feed items. Choose the processors suitable for your task.'),
-      '#options' => $processors,
-      '#default_value' => variable_get('aggregator_processors', array('aggregator')),
-    );
-  }
-  if (count($basic_conf)) {
-    $form['basic_conf'] = array(
-      '#type' => 'fieldset',
-      '#title' => t('Basic configuration'),
-      '#description' => t('For most aggregation tasks, the default settings are fine.'),
-      '#collapsible' => TRUE,
-      '#collapsed' => FALSE,
-      );
-    $form['basic_conf'] += $basic_conf;
-  }
-
-  // Implementing modules will expect an array at $form['modules'].
-  $form['modules'] = array();
-
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Save configuration'),
-  );
-
-  return $form;
-}
-
-/**
- * Form submission handler for aggregator_admin_form().
- */
-function aggregator_admin_form_submit($form, &$form_state) {
-  if (isset($form_state['values']['aggregator_processors'])) {
-    $form_state['values']['aggregator_processors'] = array_filter($form_state['values']['aggregator_processors']);
-  }
-  system_settings_form_submit($form, $form_state);
-}
-
-/**
- * Form constructor to add/edit/delete aggregator categories.
- *
- * @param $edit
- *   An associative array containing:
- *   - title: A string to use for the category title.
- *   - description: A string to use for the category description.
- *   - cid: The category ID.
- *
- * @ingroup forms
- * @see aggregator_form_category_validate()
- * @see aggregator_form_category_submit()
- */
-function aggregator_form_category($form, &$form_state, $edit = array('title' => '', 'description' => '', 'cid' => NULL)) {
-  $form['title'] = array('#type' => 'textfield',
-    '#title' => t('Title'),
-    '#default_value' => $edit['title'],
-    '#maxlength' => 64,
-    '#required' => TRUE,
-  );
-  $form['description'] = array('#type' => 'textarea',
-    '#title' => t('Description'),
-    '#default_value' => $edit['description'],
-  );
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save'));
-  if ($edit['cid']) {
-    $form['actions']['delete'] = array('#type' => 'submit', '#value' => t('Delete'));
-    $form['cid'] = array('#type' => 'hidden', '#value' => $edit['cid']);
-  }
-
-  return $form;
-}
-
-/**
- * Form validation handler for aggregator_form_category().
- *
- * @see aggregator_form_category_submit()
- */
-function aggregator_form_category_validate($form, &$form_state) {
-  if ($form_state['values']['op'] == t('Save')) {
-    // Check for duplicate titles
-    if (isset($form_state['values']['cid'])) {
-      $category = db_query("SELECT cid FROM {aggregator_category} WHERE title = :title AND cid <> :cid", array(':title' => $form_state['values']['title'], ':cid' => $form_state['values']['cid']))->fetchObject();
-    }
-    else {
-      $category = db_query("SELECT cid FROM {aggregator_category} WHERE title = :title", array(':title' => $form_state['values']['title']))->fetchObject();
-    }
-    if ($category) {
-      form_set_error('title', t('A category named %category already exists. Enter a unique title.', array('%category' => $form_state['values']['title'])));
-    }
-  }
-}
-
-/**
- * Form submission handler for aggregator_form_category().
- *
- * @see aggregator_form_category_validate()
- *
- * @todo Add delete confirmation dialog.
- */
-function aggregator_form_category_submit($form, &$form_state) {
-  if ($form_state['values']['op'] == t('Delete')) {
-    $title = $form_state['values']['title'];
-    // Unset the title.
-    unset($form_state['values']['title']);
-  }
-  aggregator_save_category($form_state['values']);
-  if (isset($form_state['values']['cid'])) {
-    if (isset($form_state['values']['title'])) {
-      drupal_set_message(t('The category %category has been updated.', array('%category' => $form_state['values']['title'])));
-      if (arg(0) == 'admin') {
-        $form_state['redirect'] = 'admin/config/services/aggregator/';
-        return;
-      }
-      else {
-        $form_state['redirect'] = 'aggregator/categories/' . $form_state['values']['cid'];
-        return;
-      }
-    }
-    else {
-      watchdog('aggregator', 'Category %category deleted.', array('%category' => $title));
-      drupal_set_message(t('The category %category has been deleted.', array('%category' => $title)));
-      if (arg(0) == 'admin') {
-        $form_state['redirect'] = 'admin/config/services/aggregator/';
-        return;
-      }
-      else {
-        $form_state['redirect'] = 'aggregator/categories/';
-        return;
-      }
-    }
-  }
-  else {
-    watchdog('aggregator', 'Category %category added.', array('%category' => $form_state['values']['title']), WATCHDOG_NOTICE, l(t('view'), 'admin/config/services/aggregator'));
-    drupal_set_message(t('The category %category has been added.', array('%category' => $form_state['values']['title'])));
-  }
-}
diff --git a/modules/aggregator/aggregator.api.php b/modules/aggregator/aggregator.api.php
deleted file mode 100644
index d5cac4e..0000000
--- a/modules/aggregator/aggregator.api.php
+++ /dev/null
@@ -1,220 +0,0 @@
-<?php
-
-/**
- * @file
- * Documentation for aggregator API.
- */
-
-/**
- * @addtogroup hooks
- * @{
- */
-
-/**
- * Create an alternative fetcher for aggregator.module.
- *
- * A fetcher downloads feed data to a Drupal site. The fetcher is called at the
- * first of the three aggregation stages: first, data is downloaded by the
- * active fetcher; second, it is converted to a common format by the active
- * parser; and finally, it is passed to all active processors, which manipulate
- * or store the data.
- *
- * Modules that define this hook can be set as the active fetcher within the
- * configuration page. Only one fetcher can be active at a time.
- *
- * @param $feed
- *   A feed object representing the resource to be downloaded. $feed->url
- *   contains the link to the feed. Download the data at the URL and expose it
- *   to other modules by attaching it to $feed->source_string.
- *
- * @return
- *   TRUE if fetching was successful, FALSE otherwise.
- *
- * @see hook_aggregator_fetch_info()
- * @see hook_aggregator_parse()
- * @see hook_aggregator_process()
- *
- * @ingroup aggregator
- */
-function hook_aggregator_fetch($feed) {
-  $feed->source_string = mymodule_fetch($feed->url);
-}
-
-/**
- * Specify the title and short description of your fetcher.
- *
- * The title and the description provided are shown within the configuration
- * page. Use as title the human readable name of the fetcher and as description
- * a brief (40 to 80 characters) explanation of the fetcher's functionality.
- *
- * This hook is only called if your module implements hook_aggregator_fetch().
- * If this hook is not implemented aggregator will use your module's file name
- * as title and there will be no description.
- *
- * @return
- *   An associative array defining a title and a description string.
- *
- * @see hook_aggregator_fetch()
- *
- * @ingroup aggregator
- */
-function hook_aggregator_fetch_info() {
-  return array(
-    'title' => t('Default fetcher'),
-    'description' => t('Default fetcher for resources available by URL.'),
-  );
-}
-
-/**
- * Create an alternative parser for aggregator module.
- *
- * A parser converts feed item data to a common format. The parser is called
- * at the second of the three aggregation stages: first, data is downloaded
- * by the active fetcher; second, it is converted to a common format by the
- * active parser; and finally, it is passed to all active processors which
- * manipulate or store the data.
- *
- * Modules that define this hook can be set as the active parser within the
- * configuration page. Only one parser can be active at a time.
- *
- * @param $feed
- *   An object describing the resource to be parsed. $feed->source_string
- *   contains the raw feed data. The hook implementation should parse this data
- *   and add the following properties to the $feed object:
- *   - description: The human-readable description of the feed.
- *   - link: A full URL that directly relates to the feed.
- *   - image: An image URL used to display an image of the feed.
- *   - etag: An entity tag from the HTTP header used for cache validation to
- *     determine if the content has been changed.
- *   - modified: The UNIX timestamp when the feed was last modified.
- *   - items: An array of feed items. The common format for a single feed item
- *     is an associative array containing:
- *     - title: The human-readable title of the feed item.
- *     - description: The full body text of the item or a summary.
- *     - timestamp: The UNIX timestamp when the feed item was last published.
- *     - author: The author of the feed item.
- *     - guid: The global unique identifier (GUID) string that uniquely
- *       identifies the item. If not available, the link is used to identify
- *       the item.
- *     - link: A full URL to the individual feed item.
- *
- * @return
- *   TRUE if parsing was successful, FALSE otherwise.
- *
- * @see hook_aggregator_parse_info()
- * @see hook_aggregator_fetch()
- * @see hook_aggregator_process()
- *
- * @ingroup aggregator
- */
-function hook_aggregator_parse($feed) {
-  if ($items = mymodule_parse($feed->source_string)) {
-    $feed->items = $items;
-    return TRUE;
-  }
-  return FALSE;
-}
-
-/**
- * Specify the title and short description of your parser.
- *
- * The title and the description provided are shown within the configuration
- * page. Use as title the human readable name of the parser and as description
- * a brief (40 to 80 characters) explanation of the parser's functionality.
- *
- * This hook is only called if your module implements hook_aggregator_parse().
- * If this hook is not implemented aggregator will use your module's file name
- * as title and there will be no description.
- *
- * @return
- *   An associative array defining a title and a description string.
- *
- * @see hook_aggregator_parse()
- *
- * @ingroup aggregator
- */
-function hook_aggregator_parse_info() {
-  return array(
-    'title' => t('Default parser'),
-    'description' => t('Default parser for RSS, Atom and RDF feeds.'),
-  );
-}
-
-/**
- * Create a processor for aggregator.module.
- *
- * A processor acts on parsed feed data. Active processors are called at the
- * third and last of the aggregation stages: first, data is downloaded by the
- * active fetcher; second, it is converted to a common format by the active
- * parser; and finally, it is passed to all active processors that manipulate or
- * store the data.
- *
- * Modules that define this hook can be activated as a processor within the
- * configuration page.
- *
- * @param $feed
- *   A feed object representing the resource to be processed. $feed->items
- *   contains an array of feed items downloaded and parsed at the parsing stage.
- *   See hook_aggregator_parse() for the basic format of a single item in the
- *   $feed->items array. For the exact format refer to the particular parser in
- *   use.
- *
- * @see hook_aggregator_process_info()
- * @see hook_aggregator_fetch()
- * @see hook_aggregator_parse()
- *
- * @ingroup aggregator
- */
-function hook_aggregator_process($feed) {
-  foreach ($feed->items as $item) {
-    mymodule_save($item);
-  }
-}
-
-/**
- * Specify the title and short description of your processor.
- *
- * The title and the description provided are shown within the configuration
- * page. Use as title the natural name of the processor and as description a
- * brief (40 to 80 characters) explanation of the functionality.
- *
- * This hook is only called if your module implements hook_aggregator_process().
- * If this hook is not implemented aggregator will use your module's file name
- * as title and there will be no description.
- *
- * @return
- *   An associative array defining a title and a description string.
- *
- * @see hook_aggregator_process()
- *
- * @ingroup aggregator
- */
-function hook_aggregator_process_info() {
-  return array(
-    'title' => t('Default processor'),
-    'description' => t('Creates lightweight records of feed items.'),
-  );
-}
-
-/**
- * Remove stored feed data.
- *
- * Aggregator calls this hook if either a feed is deleted or a user clicks on
- * "remove items".
- *
- * If your module stores feed items for example on hook_aggregator_process() it
- * is recommended to implement this hook and to remove data related to $feed
- * when called.
- *
- * @param $feed
- *   The $feed object whose items are being removed.
- *
- * @ingroup aggregator
- */
-function hook_aggregator_remove($feed) {
-  mymodule_remove_items($feed->fid);
-}
-
-/**
- * @} End of "addtogroup hooks".
- */
diff --git a/modules/aggregator/aggregator.css b/modules/aggregator/aggregator.css
deleted file mode 100644
index 4285631..0000000
--- a/modules/aggregator/aggregator.css
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * Styles for theme in the Aggregator module.
- */
-
-#aggregator .feed-source .feed-title {
-  margin-top: 0;
-}
-#aggregator .feed-source .feed-image img {
-  margin-bottom: 0.75em;
-}
-#aggregator .feed-source .feed-icon {
-  float: right; /* LTR */
-  display: block;
-}
-#aggregator .feed-item {
-  margin-bottom: 1.5em;
-}
-#aggregator .feed-item-title {
-  margin-bottom: 0;
-  font-size: 1.3em;
-}
-#aggregator .feed-item-meta,
-#aggregator .feed-item-body {
-  margin-bottom: 0.5em;
-}
-#aggregator .feed-item-categories {
-  font-size: 0.9em;
-}
-#aggregator td {
-  vertical-align: bottom;
-}
-#aggregator td.categorize-item {
-  white-space: nowrap;
-}
-#aggregator .categorize-item .news-item .body {
-  margin-top: 0;
-}
-#aggregator .categorize-item h3 {
-  margin-bottom: 1em;
-  margin-top: 0;
-}
diff --git a/modules/aggregator/aggregator.fetcher.inc b/modules/aggregator/aggregator.fetcher.inc
deleted file mode 100644
index 0f72877..0000000
--- a/modules/aggregator/aggregator.fetcher.inc
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-
-/**
- * @file
- * Fetcher functions for the aggregator module.
- */
-
-/**
- * Implements hook_aggregator_fetch_info().
- */
-function aggregator_aggregator_fetch_info() {
-  return array(
-    'title' => t('Default fetcher'),
-    'description' => t('Downloads data from a URL using Drupal\'s HTTP request handler.'),
-  );
-}
-
-/**
- * Implements hook_aggregator_fetch().
- */
-function aggregator_aggregator_fetch($feed) {
-  $feed->source_string = FALSE;
-
-  // Generate conditional GET headers.
-  $headers = array();
-  if ($feed->etag) {
-    $headers['If-None-Match'] = $feed->etag;
-  }
-  if ($feed->modified) {
-    $headers['If-Modified-Since'] = gmdate(DATE_RFC1123, $feed->modified);
-  }
-
-  // Request feed.
-  $result = drupal_http_request($feed->url, array('headers' => $headers));
-
-  // Process HTTP response code.
-  switch ($result->code) {
-    case 304:
-      break;
-    case 301:
-      $feed->url = $result->redirect_url;
-      // Do not break here.
-    case 200:
-    case 302:
-    case 307:
-      if (!isset($result->data)) {
-        $result->data = '';
-      }
-      if (!isset($result->headers)) {
-        $result->headers = array();
-      }
-      $feed->source_string = $result->data;
-      $feed->http_headers = $result->headers;
-      break;
-    default:
-      watchdog('aggregator', 'The feed from %site seems to be broken, due to "%error".', array('%site' => $feed->title, '%error' => $result->code . ' ' . $result->error), WATCHDOG_WARNING);
-      drupal_set_message(t('The feed from %site seems to be broken, because of error "%error".', array('%site' => $feed->title, '%error' => $result->code . ' ' . $result->error)));
-  }
-
-  return $feed->source_string === FALSE ? FALSE : TRUE;
-}
diff --git a/modules/aggregator/aggregator.info b/modules/aggregator/aggregator.info
deleted file mode 100644
index 988111e..0000000
--- a/modules/aggregator/aggregator.info
+++ /dev/null
@@ -1,8 +0,0 @@
-name = Aggregator
-description = "Aggregates syndicated content (RSS, RDF, and Atom feeds)."
-package = Core
-version = VERSION
-core = 7.x
-files[] = aggregator.test
-configure = admin/config/services/aggregator/settings
-stylesheets[all][] = aggregator.css
diff --git a/modules/aggregator/aggregator.module b/modules/aggregator/aggregator.module
deleted file mode 100644
index 70f8c5c..0000000
--- a/modules/aggregator/aggregator.module
+++ /dev/null
@@ -1,782 +0,0 @@
-<?php
-
-/**
- * @file
- * Used to aggregate syndicated content (RSS, RDF, and Atom).
- */
-
-/**
- * Denotes that a feed's items should never expire.
- */
-define('AGGREGATOR_CLEAR_NEVER', 0);
-
-/**
- * Implements hook_help().
- */
-function aggregator_help($path, $arg) {
-  switch ($path) {
-    case 'admin/help#aggregator':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Aggregator module is an on-site syndicator and news reader that gathers and displays fresh content from RSS-, RDF-, and Atom-based feeds made available across the web. Thousands of sites (particularly news sites and blogs) publish their latest headlines in feeds, using a number of standardized XML-based formats. For more information, see the online handbook entry for <a href="@aggregator-module">Aggregator module</a>.', array('@aggregator-module' => 'http://drupal.org/documentation/modules/aggregator', '@aggregator' => url('aggregator'))) . '</p>';
-      $output .= '<h3>' . t('Uses') . '</h3>';
-      $output .= '<dl>';
-      $output .= '<dt>' . t('Viewing feeds') . '</dt>';
-      $output .= '<dd>' . t('Feeds contain published content, and may be grouped in categories, generally by topic. Users view feed content in the <a href="@aggregator">main aggregator display</a>, or by <a href="@aggregator-sources">their source</a> (usually via an RSS feed reader). The most recent content in a feed or category can be displayed as a block through the <a href="@admin-block">Blocks administration page</a>.', array('@aggregator' => url('aggregator'), '@aggregator-sources' => url('aggregator/sources'), '@admin-block' => url('admin/structure/block'))) . '</a></dd>';
-      $output .= '<dt>' . t('Adding, editing, and deleting feeds') . '</dt>';
-      $output .= '<dd>' . t('Administrators can add, edit, and delete feeds, and choose how often to check each feed for newly updated items on the <a href="@feededit">Feed aggregator administration page</a>.', array('@feededit' => url('admin/config/services/aggregator'))) . '</dd>';
-      $output .= '<dt>' . t('OPML integration') . '</dt>';
-      $output .= '<dd>' . t('A <a href="@aggregator-opml">machine-readable OPML file</a> of all feeds is available. OPML is an XML-based file format used to share outline-structured information such as a list of RSS feeds. Feeds can also be <a href="@import-opml">imported via an OPML file</a>.', array('@aggregator-opml' => url('aggregator/opml'), '@import-opml' => url('admin/config/services/aggregator'))) . '</dd>';
-      $output .= '<dt>' . t('Configuring cron') . '</dt>';
-      $output .= '<dd>' . t('A correctly configured <a href="@cron">cron maintenance task</a> is required to update feeds automatically.', array('@cron' => 'http://drupal.org/cron')) . '</dd>';
-      $output .= '</dl>';
-      return $output;
-    case 'admin/config/services/aggregator':
-      $output = '<p>' . t('Thousands of sites (particularly news sites and blogs) publish their latest headlines and posts in feeds, using a number of standardized XML-based formats. Formats supported by the aggregator include <a href="@rss">RSS</a>, <a href="@rdf">RDF</a>, and <a href="@atom">Atom</a>.', array('@rss' => 'http://cyber.law.harvard.edu/rss/', '@rdf' => 'http://www.w3.org/RDF/', '@atom' => 'http://www.atomenabled.org')) . '</p>';
-      $output .= '<p>' . t('Current feeds are listed below, and <a href="@addfeed">new feeds may be added</a>. For each feed or feed category, the <em>latest items</em> block may be enabled at the <a href="@block">blocks administration page</a>.', array('@addfeed' => url('admin/config/services/aggregator/add/feed'), '@block' => url('admin/structure/block'))) . '</p>';
-      return $output;
-    case 'admin/config/services/aggregator/add/feed':
-      return '<p>' . t('Add a feed in RSS, RDF or Atom format. A feed may only have one entry.') . '</p>';
-    case 'admin/config/services/aggregator/add/category':
-      return '<p>' . t('Categories allow feed items from different feeds to be grouped together. For example, several sport-related feeds may belong to a category named <em>Sports</em>. Feed items may be grouped automatically (by selecting a category when creating or editing a feed) or manually (via the <em>Categorize</em> page available from feed item listings). Each category provides its own feed page and block.') . '</p>';
-    case 'admin/config/services/aggregator/add/opml':
-      return '<p>' . t('<acronym title="Outline Processor Markup Language">OPML</acronym> is an XML format used to exchange multiple feeds between aggregators. A single OPML document may contain a collection of many feeds. Drupal can parse such a file and import all feeds at once, saving you the effort of adding them manually. You may either upload a local file from your computer or enter a URL where Drupal can download it.') . '</p>';
-  }
-}
-
-/**
- * Implements hook_theme().
- */
-function aggregator_theme() {
-  return array(
-    'aggregator_wrapper' => array(
-      'variables' => array('content' => NULL),
-      'file' => 'aggregator.pages.inc',
-      'template' => 'aggregator-wrapper',
-    ),
-    'aggregator_categorize_items' => array(
-      'render element' => 'form',
-      'file' => 'aggregator.pages.inc',
-    ),
-    'aggregator_feed_source' => array(
-      'variables' => array('feed' => NULL),
-      'file' => 'aggregator.pages.inc',
-      'template' => 'aggregator-feed-source',
-    ),
-    'aggregator_block_item' => array(
-      'variables' => array('item' => NULL, 'feed' => 0),
-    ),
-    'aggregator_summary_items' => array(
-      'variables' => array('summary_items' => NULL, 'source' => NULL),
-      'file' => 'aggregator.pages.inc',
-      'template' => 'aggregator-summary-items',
-    ),
-    'aggregator_summary_item' => array(
-      'variables' => array('item' => NULL),
-      'file' => 'aggregator.pages.inc',
-      'template' => 'aggregator-summary-item',
-    ),
-    'aggregator_item' => array(
-      'variables' => array('item' => NULL),
-      'file' => 'aggregator.pages.inc',
-      'template' => 'aggregator-item',
-    ),
-    'aggregator_page_opml' => array(
-      'variables' => array('feeds' => NULL),
-      'file' => 'aggregator.pages.inc',
-    ),
-    'aggregator_page_rss' => array(
-      'variables' => array('feeds' => NULL, 'category' => NULL),
-      'file' => 'aggregator.pages.inc',
-    ),
-  );
-}
-
-/**
- * Implements hook_menu().
- */
-function aggregator_menu() {
-  $items['admin/config/services/aggregator'] = array(
-    'title' => 'Feed aggregator',
-    'description' => "Configure which content your site aggregates from other sites, how often it polls them, and how they're categorized.",
-    'page callback' => 'aggregator_admin_overview',
-    'access arguments' => array('administer news feeds'),
-    'weight' => 10,
-    'file' => 'aggregator.admin.inc',
-  );
-  $items['admin/config/services/aggregator/add/feed'] = array(
-    'title' => 'Add feed',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('aggregator_form_feed'),
-    'access arguments' => array('administer news feeds'),
-    'type' => MENU_LOCAL_ACTION,
-    'file' => 'aggregator.admin.inc',
-  );
-  $items['admin/config/services/aggregator/add/category'] = array(
-    'title' => 'Add category',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('aggregator_form_category'),
-    'access arguments' => array('administer news feeds'),
-    'type' => MENU_LOCAL_ACTION,
-    'file' => 'aggregator.admin.inc',
-  );
-  $items['admin/config/services/aggregator/add/opml'] = array(
-    'title' => 'Import OPML',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('aggregator_form_opml'),
-    'access arguments' => array('administer news feeds'),
-    'type' => MENU_LOCAL_ACTION,
-    'file' => 'aggregator.admin.inc',
-  );
-  $items['admin/config/services/aggregator/remove/%aggregator_feed'] = array(
-    'title' => 'Remove items',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('aggregator_admin_remove_feed', 5),
-    'access arguments' => array('administer news feeds'),
-    'file' => 'aggregator.admin.inc',
-  );
-  $items['admin/config/services/aggregator/update/%aggregator_feed'] = array(
-    'title' => 'Update items',
-    'page callback' => 'aggregator_admin_refresh_feed',
-    'page arguments' => array(5),
-    'access arguments' => array('administer news feeds'),
-    'file' => 'aggregator.admin.inc',
-  );
-  $items['admin/config/services/aggregator/list'] = array(
-    'title' => 'List',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-    'weight' => -10,
-  );
-  $items['admin/config/services/aggregator/settings'] = array(
-    'title' => 'Settings',
-    'description' => 'Configure the behavior of the feed aggregator, including when to discard feed items and how to present feed items and categories.',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('aggregator_admin_form'),
-    'access arguments' => array('administer news feeds'),
-    'type' => MENU_LOCAL_TASK,
-    'file' => 'aggregator.admin.inc',
-  );
-  $items['aggregator'] = array(
-    'title' => 'Feed aggregator',
-    'page callback' => 'aggregator_page_last',
-    'access arguments' => array('access news feeds'),
-    'weight' => 5,
-    'file' => 'aggregator.pages.inc',
-  );
-  $items['aggregator/sources'] = array(
-    'title' => 'Sources',
-    'page callback' => 'aggregator_page_sources',
-    'access arguments' => array('access news feeds'),
-    'file' => 'aggregator.pages.inc',
-  );
-  $items['aggregator/categories'] = array(
-    'title' => 'Categories',
-    'page callback' => 'aggregator_page_categories',
-    'access callback' => '_aggregator_has_categories',
-    'file' => 'aggregator.pages.inc',
-  );
-  $items['aggregator/rss'] = array(
-    'title' => 'RSS feed',
-    'page callback' => 'aggregator_page_rss',
-    'access arguments' => array('access news feeds'),
-    'type' => MENU_CALLBACK,
-    'file' => 'aggregator.pages.inc',
-  );
-  $items['aggregator/opml'] = array(
-    'title' => 'OPML feed',
-    'page callback' => 'aggregator_page_opml',
-    'access arguments' => array('access news feeds'),
-    'type' => MENU_CALLBACK,
-    'file' => 'aggregator.pages.inc',
-  );
-  $items['aggregator/categories/%aggregator_category'] = array(
-    'title callback' => '_aggregator_category_title',
-    'title arguments' => array(2),
-    'page callback' => 'aggregator_page_category',
-    'page arguments' => array(2),
-    'access arguments' => array('access news feeds'),
-    'file' => 'aggregator.pages.inc',
-  );
-  $items['aggregator/categories/%aggregator_category/view'] = array(
-    'title' => 'View',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-    'weight' => -10,
-  );
-  $items['aggregator/categories/%aggregator_category/categorize'] = array(
-    'title' => 'Categorize',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('aggregator_page_category_form', 2),
-    'access arguments' => array('administer news feeds'),
-    'type' => MENU_LOCAL_TASK,
-    'file' => 'aggregator.pages.inc',
-  );
-  $items['aggregator/categories/%aggregator_category/configure'] = array(
-    'title' => 'Configure',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('aggregator_form_category', 2),
-    'access arguments' => array('administer news feeds'),
-    'type' => MENU_LOCAL_TASK,
-    'weight' => 1,
-    'file' => 'aggregator.admin.inc',
-  );
-  $items['aggregator/sources/%aggregator_feed'] = array(
-    'page callback' => 'aggregator_page_source',
-    'page arguments' => array(2),
-    'access arguments' => array('access news feeds'),
-    'file' => 'aggregator.pages.inc',
-  );
-  $items['aggregator/sources/%aggregator_feed/view'] = array(
-    'title' => 'View',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-    'weight' => -10,
-  );
-  $items['aggregator/sources/%aggregator_feed/categorize'] = array(
-    'title' => 'Categorize',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('aggregator_page_source_form', 2),
-    'access arguments' => array('administer news feeds'),
-    'type' => MENU_LOCAL_TASK,
-    'file' => 'aggregator.pages.inc',
-  );
-  $items['aggregator/sources/%aggregator_feed/configure'] = array(
-    'title' => 'Configure',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('aggregator_form_feed', 2),
-    'access arguments' => array('administer news feeds'),
-    'type' => MENU_LOCAL_TASK,
-    'weight' => 1,
-    'file' => 'aggregator.admin.inc',
-  );
-  $items['admin/config/services/aggregator/edit/feed/%aggregator_feed'] = array(
-    'title' => 'Edit feed',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('aggregator_form_feed', 6),
-    'access arguments' => array('administer news feeds'),
-    'file' => 'aggregator.admin.inc',
-  );
-  $items['admin/config/services/aggregator/edit/category/%aggregator_category'] = array(
-    'title' => 'Edit category',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('aggregator_form_category', 6),
-    'access arguments' => array('administer news feeds'),
-    'file' => 'aggregator.admin.inc',
-  );
-
-  return $items;
-}
-
-/**
- * Title callback: Returns a title for aggregator category pages.
- *
- * @param $category
- *   An aggregator category.
- *
- * @return
- *   A string with the aggregator category title.
- */
-function _aggregator_category_title($category) {
-  return $category['title'];
-}
-
-/**
- * Determines whether there are any aggregator categories.
- *
- * @return
- *   TRUE if there is at least one category and the user has access to them;
- *   FALSE otherwise.
- */
-function _aggregator_has_categories() {
-  return user_access('access news feeds') && (bool) db_query_range('SELECT 1 FROM {aggregator_category}', 0, 1)->fetchField();
-}
-
-/**
- * Implements hook_permission().
- */
-function aggregator_permission() {
-  return array(
-    'administer news feeds' => array(
-      'title' => t('Administer news feeds'),
-    ),
-    'access news feeds' => array(
-      'title' => t('View news feeds'),
-    ),
-  );
-}
-
-/**
- * Implements hook_cron().
- *
- * Queues news feeds for updates once their refresh interval has elapsed.
- */
-function aggregator_cron() {
-  $result = db_query('SELECT * FROM {aggregator_feed} WHERE queued = 0 AND checked + refresh < :time AND refresh <> :never', array(
-    ':time' => REQUEST_TIME,
-    ':never' => AGGREGATOR_CLEAR_NEVER
-  ));
-  $queue = DrupalQueue::get('aggregator_feeds');
-  foreach ($result as $feed) {
-    if ($queue->createItem($feed)) {
-      // Add timestamp to avoid queueing item more than once.
-      db_update('aggregator_feed')
-        ->fields(array('queued' => REQUEST_TIME))
-        ->condition('fid', $feed->fid)
-        ->execute();
-    }
-  }
-
-  // Remove queued timestamp after 6 hours assuming the update has failed.
-  db_update('aggregator_feed')
-    ->fields(array('queued' => 0))
-    ->condition('queued', REQUEST_TIME - (3600 * 6), '<')
-    ->execute();
-}
-
-/**
- * Implements hook_cron_queue_info().
- */
-function aggregator_cron_queue_info() {
-  $queues['aggregator_feeds'] = array(
-    'worker callback' => 'aggregator_refresh',
-    'time' => 60,
-  );
-  return $queues;
-}
-
-/**
- * Implements hook_block_info().
- */
-function aggregator_block_info() {
-  $blocks = array();
-  $result = db_query('SELECT cid, title FROM {aggregator_category} ORDER BY title');
-  foreach ($result as $category) {
-    $blocks['category-' . $category->cid]['info'] = t('!title category latest items', array('!title' => $category->title));
-  }
-  $result = db_query('SELECT fid, title FROM {aggregator_feed} WHERE block <> 0 ORDER BY fid');
-  foreach ($result as $feed) {
-    $blocks['feed-' . $feed->fid]['info'] = t('!title feed latest items', array('!title' => $feed->title));
-  }
-  return $blocks;
-}
-
-/**
- * Implements hook_block_configure().
- */
-function aggregator_block_configure($delta = '') {
-  list($type, $id) = explode('-', $delta);
-  if ($type == 'category') {
-    $value = db_query('SELECT block FROM {aggregator_category} WHERE cid = :cid', array(':cid' => $id))->fetchField();
-    $form['block'] = array(
-      '#type' => 'select',
-      '#title' => t('Number of news items in block'),
-      '#default_value' => $value,
-      '#options' => drupal_map_assoc(range(2, 20)),
-    );
-    return $form;
-  }
-}
-
-/**
- * Implements hook_block_save().
- */
-function aggregator_block_save($delta = '', $edit = array()) {
-  list($type, $id) = explode('-', $delta);
-  if ($type == 'category') {
-    db_update('aggregator_category')
-      ->fields(array('block' => $edit['block']))
-      ->condition('cid', $id)
-      ->execute();
-  }
-}
-
-/**
- * Implements hook_block_view().
- *
- * Generates blocks for the latest news items in each category and feed.
- */
-function aggregator_block_view($delta = '') {
-  if (user_access('access news feeds')) {
-    $block = array();
-    list($type, $id) = explode('-', $delta);
-    $result = FALSE;
-    switch ($type) {
-      case 'feed':
-        if ($feed = db_query('SELECT fid, title, block FROM {aggregator_feed} WHERE block <> 0 AND fid = :fid', array(':fid' => $id))->fetchObject()) {
-          $block['subject'] = check_plain($feed->title);
-          $result = db_query_range("SELECT * FROM {aggregator_item} WHERE fid = :fid ORDER BY timestamp DESC, iid DESC", 0, $feed->block, array(':fid' => $id));
-          $read_more = theme('more_link', array('url' => 'aggregator/sources/' . $feed->fid, 'title' => t("View this feed's recent news.")));
-        }
-        break;
-
-      case 'category':
-        if ($category = db_query('SELECT cid, title, block FROM {aggregator_category} WHERE cid = :cid', array(':cid' => $id))->fetchObject()) {
-          $block['subject'] = check_plain($category->title);
-          $result = db_query_range('SELECT i.* FROM {aggregator_category_item} ci LEFT JOIN {aggregator_item} i ON ci.iid = i.iid WHERE ci.cid = :cid ORDER BY i.timestamp DESC, i.iid DESC', 0, $category->block, array(':cid' => $category->cid));
-          $read_more = theme('more_link', array('url' => 'aggregator/categories/' . $category->cid, 'title' => t("View this category's recent news.")));
-        }
-        break;
-    }
-
-    $items = array();
-    if (!empty($result)) {
-      foreach ($result as $item) {
-        $items[] = theme('aggregator_block_item', array('item' => $item));
-      }
-    }
-
-    // Only display the block if there are items to show.
-    if (count($items) > 0) {
-      $block['content'] = theme('item_list', array('items' => $items)) . $read_more;
-    }
-    return $block;
-  }
-}
-
-/**
- * Adds/edits/deletes aggregator categories.
- *
- * @param $edit
- *   An associative array describing the category to be added/edited/deleted.
- */
-function aggregator_save_category($edit) {
-  $link_path = 'aggregator/categories/';
-  if (!empty($edit['cid'])) {
-    $link_path .= $edit['cid'];
-    if (!empty($edit['title'])) {
-      db_merge('aggregator_category')
-        ->key(array('cid' => $edit['cid']))
-        ->fields(array(
-          'title' => $edit['title'],
-          'description' => $edit['description'],
-        ))
-        ->execute();
-      $op = 'update';
-    }
-    else {
-      db_delete('aggregator_category')
-        ->condition('cid', $edit['cid'])
-        ->execute();
-      // Make sure there is no active block for this category.
-      if (module_exists('block')) {
-        db_delete('block')
-          ->condition('module', 'aggregator')
-          ->condition('delta', 'category-' . $edit['cid'])
-          ->execute();
-      }
-      $edit['title'] = '';
-      $op = 'delete';
-    }
-  }
-  elseif (!empty($edit['title'])) {
-    // A single unique id for bundles and feeds, to use in blocks.
-    $link_path .= db_insert('aggregator_category')
-      ->fields(array(
-        'title' => $edit['title'],
-        'description' => $edit['description'],
-        'block' => 5,
-      ))
-      ->execute();
-    $op = 'insert';
-  }
-  if (isset($op)) {
-    menu_link_maintain('aggregator', $op, $link_path, $edit['title']);
-  }
-}
-
-/**
- * Add/edit/delete an aggregator feed.
- *
- * @param $edit
- *   An associative array describing the feed to be added/edited/deleted.
- */
-function aggregator_save_feed($edit) {
-  if (!empty($edit['fid'])) {
-    // An existing feed is being modified, delete the category listings.
-    db_delete('aggregator_category_feed')
-      ->condition('fid', $edit['fid'])
-      ->execute();
-  }
-  if (!empty($edit['fid']) && !empty($edit['title'])) {
-    db_update('aggregator_feed')
-      ->condition('fid', $edit['fid'])
-      ->fields(array(
-        'title' => $edit['title'],
-        'url' => $edit['url'],
-        'refresh' => $edit['refresh'],
-        'block' => $edit['block'],
-      ))
-      ->execute();
-  }
-  elseif (!empty($edit['fid'])) {
-    $iids = db_query('SELECT iid FROM {aggregator_item} WHERE fid = :fid', array(':fid' => $edit['fid']))->fetchCol();
-    if ($iids) {
-      db_delete('aggregator_category_item')
-        ->condition('iid', $iids, 'IN')
-        ->execute();
-    }
-    db_delete('aggregator_feed')->
-      condition('fid', $edit['fid'])
-      ->execute();
-    db_delete('aggregator_item')
-      ->condition('fid', $edit['fid'])
-      ->execute();
-    // Make sure there is no active block for this feed.
-    if (module_exists('block')) {
-      db_delete('block')
-        ->condition('module', 'aggregator')
-        ->condition('delta', 'feed-' . $edit['fid'])
-        ->execute();
-    }
-  }
-  elseif (!empty($edit['title'])) {
-    $edit['fid'] = db_insert('aggregator_feed')
-      ->fields(array(
-        'title' => $edit['title'],
-        'url' => $edit['url'],
-        'refresh' => $edit['refresh'],
-        'block' => $edit['block'],
-        'link' => '',
-        'description' => '',
-        'image' => '',
-      ))
-      ->execute();
-
-  }
-  if (!empty($edit['title'])) {
-    // The feed is being saved, save the categories as well.
-    if (!empty($edit['category'])) {
-      foreach ($edit['category'] as $cid => $value) {
-        if ($value) {
-          db_insert('aggregator_category_feed')
-            ->fields(array(
-              'fid' => $edit['fid'],
-              'cid' => $cid,
-            ))
-            ->execute();
-        }
-      }
-    }
-  }
-}
-
-/**
- * Removes all items from a feed.
- *
- * @param $feed
- *   An object describing the feed to be cleared.
- */
-function aggregator_remove($feed) {
-  _aggregator_get_variables();
-  // Call hook_aggregator_remove() on all modules.
-  module_invoke_all('aggregator_remove', $feed);
-  // Reset feed.
-  db_update('aggregator_feed')
-    ->condition('fid', $feed->fid)
-    ->fields(array(
-      'checked' => 0,
-      'hash' => '',
-      'etag' => '',
-      'modified' => 0,
-    ))
-    ->execute();
-}
-
-/**
- * Gets the fetcher, parser, and processors.
- *
- * @return
- *   An array containing the fetcher, parser, and processors.
- */
-function _aggregator_get_variables() {
-  // Fetch the feed.
-  $fetcher = variable_get('aggregator_fetcher', 'aggregator');
-  if ($fetcher == 'aggregator') {
-    include_once DRUPAL_ROOT . '/' . drupal_get_path('module', 'aggregator') . '/aggregator.fetcher.inc';
-  }
-  $parser = variable_get('aggregator_parser', 'aggregator');
-  if ($parser == 'aggregator') {
-    include_once DRUPAL_ROOT . '/' . drupal_get_path('module', 'aggregator') . '/aggregator.parser.inc';
-  }
-  $processors = variable_get('aggregator_processors', array('aggregator'));
-  if (in_array('aggregator', $processors)) {
-    include_once DRUPAL_ROOT . '/' . drupal_get_path('module', 'aggregator') . '/aggregator.processor.inc';
-  }
-  return array($fetcher, $parser, $processors);
-}
-
-/**
- * Checks a news feed for new items.
- *
- * @param $feed
- *   An object describing the feed to be refreshed.
- */
-function aggregator_refresh($feed) {
-  // Store feed URL to track changes.
-  $feed_url = $feed->url;
-
-  // Fetch the feed.
-  list($fetcher, $parser, $processors) = _aggregator_get_variables();
-  $success = module_invoke($fetcher, 'aggregator_fetch', $feed);
-
-  // We store the hash of feed data in the database. When refreshing a
-  // feed we compare stored hash and new hash calculated from downloaded
-  // data. If both are equal we say that feed is not updated.
-  $hash = hash('sha256', $feed->source_string);
-
-  if ($success && ($feed->hash != $hash)) {
-    // Parse the feed.
-    if (module_invoke($parser, 'aggregator_parse', $feed)) {
-      // Update feed with parsed data.
-      db_merge('aggregator_feed')
-        ->key(array('fid' => $feed->fid))
-        ->fields(array(
-          'url' => $feed->url,
-          'link' => empty($feed->link) ? $feed->url : $feed->link,
-          'description' => empty($feed->description) ? '' : $feed->description,
-          'image' => empty($feed->image) ? '' : $feed->image,
-          'hash' => $hash,
-          'etag' => empty($feed->etag) ? '' : $feed->etag,
-          'modified' => empty($feed->modified) ? 0 : $feed->modified,
-        ))
-        ->execute();
-
-      // Log if feed URL has changed.
-      if ($feed->url != $feed_url) {
-        watchdog('aggregator', 'Updated URL for feed %title to %url.', array('%title' => $feed->title, '%url' => $feed->url));
-      }
-
-      watchdog('aggregator', 'There is new syndicated content from %site.', array('%site' => $feed->title));
-      drupal_set_message(t('There is new syndicated content from %site.', array('%site' => $feed->title)));
-
-      // If there are items on the feed, let all enabled processors do their work on it.
-      if (@count($feed->items)) {
-        foreach ($processors as $processor) {
-          module_invoke($processor, 'aggregator_process', $feed);
-        }
-      }
-    }
-  }
-  else {
-    drupal_set_message(t('There is no new syndicated content from %site.', array('%site' => $feed->title)));
-  }
-
-  // Regardless of successful or not, indicate that this feed has been checked.
-  db_update('aggregator_feed')
-    ->fields(array('checked' => REQUEST_TIME, 'queued' => 0))
-    ->condition('fid', $feed->fid)
-    ->execute();
-
-  // Expire old feed items.
-  if (function_exists('aggregator_expire')) {
-    aggregator_expire($feed);
-  }
-}
-
-/**
- * Loads an aggregator feed.
- *
- * @param $fid
- *   The feed id.
- *
- * @return
- *   An object describing the feed.
- */
-function aggregator_feed_load($fid) {
-  $feeds = &drupal_static(__FUNCTION__);
-  if (!isset($feeds[$fid])) {
-    $feeds[$fid] = db_query('SELECT * FROM {aggregator_feed} WHERE fid = :fid', array(':fid' => $fid))->fetchObject();
-  }
-
-  return $feeds[$fid];
-}
-
-/**
- * Loads an aggregator category.
- *
- * @param $cid
- *   The category id.
- *
- * @return
- *   An associative array describing the category.
- */
-function aggregator_category_load($cid) {
-  $categories = &drupal_static(__FUNCTION__);
-  if (!isset($categories[$cid])) {
-    $categories[$cid] = db_query('SELECT * FROM {aggregator_category} WHERE cid = :cid', array(':cid' => $cid))->fetchAssoc();
-  }
-
-  return $categories[$cid];
-}
-
-/**
- * Returns HTML for an individual feed item for display in the block.
- *
- * @param $variables
- *   An associative array containing:
- *   - item: The item to be displayed.
- *   - feed: Not used.
- *
- * @ingroup themeable
- */
-function theme_aggregator_block_item($variables) {
-  // Display the external link to the item.
-  return '<a href="' . check_url($variables['item']->link) . '">' . check_plain($variables['item']->title) . "</a>\n";
-}
-
-/**
- * Renders the HTML content safely, as allowed.
- *
- * @param $value
- *   The content to be filtered.
- *
- * @return
- *   The filtered content.
- */
-function aggregator_filter_xss($value) {
-  return filter_xss($value, preg_split('/\s+|<|>/', variable_get('aggregator_allowed_html_tags', '<a> <b> <br> <dd> <dl> <dt> <em> <i> <li> <ol> <p> <strong> <u> <ul>'), -1, PREG_SPLIT_NO_EMPTY));
-}
-
-/**
- * Checks and sanitizes the aggregator configuration.
- *
- * Goes through all fetchers, parsers and processors and checks whether they
- * are available. If one is missing, resets to standard configuration.
- *
- * @return
- *   TRUE if this function resets the configuration; FALSE if not.
- */
-function aggregator_sanitize_configuration() {
-  $reset = FALSE;
-  list($fetcher, $parser, $processors) = _aggregator_get_variables();
-  if (!module_exists($fetcher)) {
-    $reset = TRUE;
-  }
-  if (!module_exists($parser)) {
-    $reset = TRUE;
-  }
-  foreach ($processors as $processor) {
-    if (!module_exists($processor)) {
-      $reset = TRUE;
-      break;
-    }
-  }
-  if ($reset) {
-    variable_del('aggregator_fetcher');
-    variable_del('aggregator_parser');
-    variable_del('aggregator_processors');
-    return TRUE;
-  }
-  return FALSE;
-}
-
-/**
- * Helper function for drupal_map_assoc.
- *
- * @param $count
- *   Items count.
- *
- * @return
- *   A string that is plural-formatted as "@count items".
- */
-function _aggregator_items($count) {
-  return format_plural($count, '1 item', '@count items');
-}
diff --git a/modules/aggregator/aggregator.pages.inc b/modules/aggregator/aggregator.pages.inc
deleted file mode 100644
index bfba3ff..0000000
--- a/modules/aggregator/aggregator.pages.inc
+++ /dev/null
@@ -1,582 +0,0 @@
-<?php
-
-/**
- * @file
- * User page callbacks for the Aggregator module.
- */
-
-/**
- * Page callback: Displays the most recent items gathered from any feed.
- *
- * @return
- *   The rendered list of items for the feed.
- */
-function aggregator_page_last() {
-  drupal_add_feed('aggregator/rss', variable_get('site_name', 'Drupal') . ' ' . t('aggregator'));
-
-  $items = aggregator_feed_items_load('sum');
-
-  return _aggregator_page_list($items, arg(1));
-}
-
-/**
- * Page callback: Displays all the items captured from the particular feed.
- *
- * @param $feed
- *   The feed for which to display all items.
- *
- * @return
- *   The rendered list of items for a feed.
- *
- * @see aggregator_menu()
- */
-function aggregator_page_source($feed) {
-  drupal_set_title($feed->title);
-  $feed_source = theme('aggregator_feed_source', array('feed' => $feed));
-
-  // It is safe to include the fid in the query because it's loaded from the
-  // database by aggregator_feed_load.
-  $items = aggregator_feed_items_load('source', $feed);
-
-  return _aggregator_page_list($items, arg(3), $feed_source);
-}
-
-/**
- * Page callback: Displays a form with all items captured from a feed.
- *
- * @param $feed
- *   The feed for which to list all of the aggregated items.
- *
- * @return
- *   The rendered list of items for the feed.
- *
- * @see aggregator_page_source()
- */
-function aggregator_page_source_form($form, $form_state, $feed) {
-  return aggregator_page_source($feed);
-}
-
-/**
- * Page callback: Displays all the items aggregated in a particular category.
- *
- * @param $category
- *   The category for which to list all of the aggregated items.
- *
- * @return
- *   The rendered list of items for the feed.
- */
-function aggregator_page_category($category) {
-  drupal_add_feed('aggregator/rss/' . $category['cid'], variable_get('site_name', 'Drupal') . ' ' . t('aggregator - @title', array('@title' => $category['title'])));
-
-  // It is safe to include the cid in the query because it's loaded from the
-  // database by aggregator_category_load.
-  $items = aggregator_feed_items_load('category', $category);
-
-  return _aggregator_page_list($items, arg(3));
-}
-
-/**
- * Page callback: Displays a form containing items aggregated in a category.
- *
- * @param $category
- *   The category for which to list all of the aggregated items.
- *
- * @return
- *   The rendered list of items for the feed.
- *
- * @see aggregator_page_category()
- */
-function aggregator_page_category_form($form, $form_state, $category) {
-  return aggregator_page_category($category);
-}
-
-/**
- * Loads and optionally filters feed items.
- *
- * @param $type
- *   The type of filter for the items. Possible values are:
- *   - sum: No filtering.
- *   - source: Filter the feed items, limiting the result to items from a
- *     single source.
- *   - category: Filter the feed items by category.
- * @param $data
- *   Feed or category data used for filtering. The type and value of $data
- *   depends on $type:
- *   - source: $data is an object with $data->fid identifying the feed used to
- *     as filter.
- *   - category: $data is an array with $data['cid'] being the category id to
- *     filter on.
- *   The $data parameter is not used when $type is 'sum'.
- *
- * @return
- *   An array of the feed items.
- */
-function aggregator_feed_items_load($type, $data = NULL) {
-  $items = array();
-  switch ($type) {
-    case 'sum':
-      $query = db_select('aggregator_item', 'i');
-      $query->join('aggregator_feed', 'f', 'i.fid = f.fid');
-      $query->fields('i');
-      $query->addField('f', 'title', 'ftitle');
-      $query->addField('f', 'link', 'flink');
-      break;
-    case 'source':
-      $query = db_select('aggregator_item', 'i');
-      $query
-        ->fields('i')
-        ->condition('i.fid', $data->fid);
-      break;
-    case 'category':
-      $query = db_select('aggregator_category_item', 'c');
-      $query->leftJoin('aggregator_item', 'i', 'c.iid = i.iid');
-      $query->leftJoin('aggregator_feed', 'f', 'i.fid = f.fid');
-      $query
-        ->fields('i')
-        ->condition('cid', $data['cid']);
-      $query->addField('f', 'title', 'ftitle');
-      $query->addField('f', 'link', 'flink');
-      break;
-  }
-
-  $result = $query
-    ->extend('PagerDefault')
-    ->limit(20)
-    ->orderBy('i.timestamp', 'DESC')
-    ->orderBy('i.iid', 'DESC')
-    ->execute();
-
-  foreach ($result as $item) {
-    $item->categories = db_query('SELECT c.title, c.cid FROM {aggregator_category_item} ci LEFT JOIN {aggregator_category} c ON ci.cid = c.cid WHERE ci.iid = :iid ORDER BY c.title', array(':iid' => $item->iid))->fetchAll();
-    $items[] = $item;
-  }
-
-  return $items;
-}
-
-/**
- * Prints an aggregator page listing a number of feed items.
- *
- * Various menu callbacks use this function to print their feeds.
- *
- * @param $items
- *   The items to be listed.
- * @param $op
- *   Which form should be added to the items. Only 'categorize' is now
- *   recognized.
- * @param $feed_source
- *   The feed source URL.
- *
- * @return
- *   The rendered list of items for the feed.
- */
-function _aggregator_page_list($items, $op, $feed_source = '') {
-  if (user_access('administer news feeds') && ($op == 'categorize')) {
-    // Get form data.
-    $output = aggregator_categorize_items($items, $feed_source);
-  }
-  else {
-    // Assemble themed output.
-    $output = $feed_source;
-    foreach ($items as $item) {
-      $output .= theme('aggregator_item', array('item' => $item));
-    }
-    $output = theme('aggregator_wrapper', array('content' => $output));
-  }
-
-  return $output;
-}
-
-/**
- * Form constructor to build the page list form.
- *
- * @param $items
- *   An array of the feed items.
- * @param $feed_source
- *   (optional) The feed source URL. Defaults to an empty string.
- *
- * @return array
- *   An array of FAPI elements.
- *
- * @see aggregator_categorize_items_submit()
- * @see theme_aggregator_categorize_items()
- * @ingroup forms
- */
-function aggregator_categorize_items($items, $feed_source = '') {
-  $form['#submit'][] = 'aggregator_categorize_items_submit';
-  $form['#theme'] = 'aggregator_categorize_items';
-  $form['feed_source'] = array(
-    '#value' => $feed_source,
-  );
-  $categories = array();
-  $done = FALSE;
-  $form['items'] = array();
-  $form['categories'] = array(
-    '#tree' => TRUE,
-  );
-  foreach ($items as $item) {
-    $form['items'][$item->iid] = array('#markup' => theme('aggregator_item', array('item' => $item)));
-    $form['categories'][$item->iid] = array();
-    $categories_result = db_query('SELECT c.cid, c.title, ci.iid FROM {aggregator_category} c LEFT JOIN {aggregator_category_item} ci ON c.cid = ci.cid AND ci.iid = :iid', array(':iid' => $item->iid));
-    $selected = array();
-    foreach ($categories_result as $category) {
-      if (!$done) {
-        $categories[$category->cid] = check_plain($category->title);
-      }
-      if ($category->iid) {
-        $selected[] = $category->cid;
-      }
-    }
-    $done = TRUE;
-    $form['categories'][$item->iid] = array(
-      '#type' => variable_get('aggregator_category_selector', 'checkboxes'),
-      '#default_value' => $selected,
-      '#options' => $categories,
-      '#size' => 10,
-      '#multiple' => TRUE
-    );
-  }
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save categories'));
-
-  return $form;
-}
-
-/**
- * Form submission handler for aggregator_categorize_items().
- */
-function aggregator_categorize_items_submit($form, &$form_state) {
-  if (!empty($form_state['values']['categories'])) {
-    foreach ($form_state['values']['categories'] as $iid => $selection) {
-      db_delete('aggregator_category_item')
-        ->condition('iid', $iid)
-        ->execute();
-      $insert = db_insert('aggregator_category_item')->fields(array('iid', 'cid'));
-      $has_values = FALSE;
-      foreach ($selection as $cid) {
-        if ($cid && $iid) {
-          $has_values = TRUE;
-          $insert->values(array(
-            'iid' => $iid,
-            'cid' => $cid,
-          ));
-        }
-      }
-      if ($has_values) {
-        $insert->execute();
-      }
-    }
-  }
-  drupal_set_message(t('The categories have been saved.'));
-}
-
-/**
- * Returns HTML for the aggregator page list form for assigning categories.
- *
- * @param $variables
- *   An associative array containing:
- *   - form: A render element representing the form.
- *
- * @ingroup themeable
- */
-function theme_aggregator_categorize_items($variables) {
-  $form = $variables['form'];
-
-  $output = drupal_render($form['feed_source']);
-  $rows = array();
-  if (!empty($form['items'])) {
-    foreach (element_children($form['items']) as $key) {
-      $rows[] = array(
-        drupal_render($form['items'][$key]),
-        array('data' => drupal_render($form['categories'][$key]), 'class' => array('categorize-item')),
-      );
-    }
-  }
-  $output .= theme('table', array('header' => array('', t('Categorize')), 'rows' => $rows));
-  $output .= drupal_render($form['submit']);
-  $output .= drupal_render_children($form);
-
-  return theme('aggregator_wrapper', array('content' => $output));
-}
-
-/**
- * Processes variables for aggregator-wrapper.tpl.php.
- *
- * @see aggregator-wrapper.tpl.php
- */
-function template_preprocess_aggregator_wrapper(&$variables) {
-  $variables['pager'] = theme('pager');
-}
-
-/**
- * Processes variables for aggregator-item.tpl.php.
- *
- * @see aggregator-item.tpl.php
- */
-function template_preprocess_aggregator_item(&$variables) {
-  $item = $variables['item'];
-
-  $variables['feed_url'] = check_url($item->link);
-  $variables['feed_title'] = check_plain($item->title);
-  $variables['content'] = aggregator_filter_xss($item->description);
-
-  $variables['source_url'] = '';
-  $variables['source_title'] = '';
-  if (isset($item->ftitle) && isset($item->fid)) {
-    $variables['source_url'] = url("aggregator/sources/$item->fid");
-    $variables['source_title'] = check_plain($item->ftitle);
-  }
-  if (date('Ymd', $item->timestamp) == date('Ymd')) {
-    $variables['source_date'] = t('%ago ago', array('%ago' => format_interval(REQUEST_TIME - $item->timestamp)));
-  }
-  else {
-    $variables['source_date'] = format_date($item->timestamp, 'custom', variable_get('date_format_medium', 'D, m/d/Y - H:i'));
-  }
-
-  $variables['categories'] = array();
-  foreach ($item->categories as $category) {
-    $variables['categories'][$category->cid] = l($category->title, 'aggregator/categories/' . $category->cid);
-  }
-}
-
-/**
- * Page callback: Displays all the feeds used by the aggregator.
- *
- * @return
- *   An HTML-formatted string.
- *
- * @see aggregator_menu()
- */
-function aggregator_page_sources() {
-  $result = db_query('SELECT f.fid, f.title, f.description, f.image, MAX(i.timestamp) AS last FROM {aggregator_feed} f LEFT JOIN {aggregator_item} i ON f.fid = i.fid GROUP BY f.fid, f.title, f.description, f.image ORDER BY last DESC, f.title');
-
-  $output = '';
-  foreach ($result as $feed) {
-    // Most recent items:
-    $summary_items = array();
-    if (variable_get('aggregator_summary_items', 3)) {
-      $items = db_query_range('SELECT i.title, i.timestamp, i.link FROM {aggregator_item} i WHERE i.fid = :fid ORDER BY i.timestamp DESC', 0, variable_get('aggregator_summary_items', 3), array(':fid' => $feed->fid));
-      foreach ($items as $item) {
-        $summary_items[] = theme('aggregator_summary_item', array('item' => $item));
-      }
-    }
-    $feed->url = url('aggregator/sources/' . $feed->fid);
-    $output .= theme('aggregator_summary_items', array('summary_items' => $summary_items, 'source' => $feed));
-  }
-  $output .= theme('feed_icon', array('url' => 'aggregator/opml', 'title' => t('OPML feed')));
-
-  return theme('aggregator_wrapper', array('content' => $output));
-}
-
-/**
- * Page callback: Displays all the categories used by the Aggregator module.
- *
- * @return string
- *   An HTML formatted string.
- *
- * @see aggregator_menu()
- */
-function aggregator_page_categories() {
-  $result = db_query('SELECT c.cid, c.title, c.description FROM {aggregator_category} c LEFT JOIN {aggregator_category_item} ci ON c.cid = ci.cid LEFT JOIN {aggregator_item} i ON ci.iid = i.iid GROUP BY c.cid, c.title, c.description');
-
-  $output = '';
-  foreach ($result as $category) {
-    if (variable_get('aggregator_summary_items', 3)) {
-      $summary_items = array();
-      $items = db_query_range('SELECT i.title, i.timestamp, i.link, f.title as feed_title, f.link as feed_link FROM {aggregator_category_item} ci LEFT JOIN {aggregator_item} i ON i.iid = ci.iid LEFT JOIN {aggregator_feed} f ON i.fid = f.fid WHERE ci.cid = :cid ORDER BY i.timestamp DESC', 0, variable_get('aggregator_summary_items', 3), array(':cid' => $category->cid));
-      foreach ($items as $item) {
-        $summary_items[] = theme('aggregator_summary_item', array('item' => $item));
-      }
-    }
-    $category->url = url('aggregator/categories/' . $category->cid);
-    $output .= theme('aggregator_summary_items', array('summary_items' => $summary_items, 'source' => $category));
-  }
-
-  return theme('aggregator_wrapper', array('content' => $output));
-}
-
-/**
- * Page callback: Generates an RSS 0.92 feed of aggregator items or categories.
- *
- * @return string
- *   An HTML formatted string.
- */
-function aggregator_page_rss() {
-  $result = NULL;
-  // arg(2) is the passed cid, only select for that category.
-  if (arg(2)) {
-    $category = db_query('SELECT cid, title FROM {aggregator_category} WHERE cid = :cid', array(':cid' => arg(2)))->fetchObject();
-    $result = db_query_range('SELECT i.*, f.title AS ftitle, f.link AS flink FROM {aggregator_category_item} c LEFT JOIN {aggregator_item} i ON c.iid = i.iid LEFT JOIN {aggregator_feed} f ON i.fid = f.fid WHERE cid = :cid ORDER BY timestamp DESC, i.iid DESC', 0, variable_get('feed_default_items', 10), array(':cid' => $category->cid));
-  }
-  // Or, get the default aggregator items.
-  else {
-    $category = NULL;
-    $result = db_query_range('SELECT i.*, f.title AS ftitle, f.link AS flink FROM {aggregator_item} i INNER JOIN {aggregator_feed} f ON i.fid = f.fid ORDER BY i.timestamp DESC, i.iid DESC', 0, variable_get('feed_default_items', 10));
-  }
-
-  $feeds = $result->fetchAll();
-  return theme('aggregator_page_rss', array('feeds' => $feeds, 'category' => $category));
-}
-
-/**
- * Prints the RSS page for a feed.
- *
- * @param $variables
- *   An associative array containing:
- *   - feeds: An array of the feeds to theme.
- *   - category: A common category, if any, for all the feeds.
- *
- * @return void
- *
- * @ingroup themeable
- */
-function theme_aggregator_page_rss($variables) {
-  $feeds = $variables['feeds'];
-  $category = $variables['category'];
-
-  drupal_add_http_header('Content-Type', 'application/rss+xml; charset=utf-8');
-
-  $items = '';
-  $feed_length = variable_get('feed_item_length', 'fulltext');
-  foreach ($feeds as $feed) {
-    switch ($feed_length) {
-      case 'teaser':
-        $summary = text_summary($feed->description, NULL, variable_get('aggregator_teaser_length', 600));
-        if ($summary != $feed->description) {
-          $summary .= '<p><a href="' . check_url($feed->link) . '">' . t('read more') . "</a></p>\n";
-        }
-        $feed->description = $summary;
-        break;
-      case 'title':
-        $feed->description = '';
-        break;
-    }
-    $items .= format_rss_item($feed->ftitle . ': ' . $feed->title, $feed->link, $feed->description, array('pubDate' => date('r', $feed->timestamp)));
-  }
-
-  $site_name = variable_get('site_name', 'Drupal');
-  $url = url((isset($category) ? 'aggregator/categories/' . $category->cid : 'aggregator'), array('absolute' => TRUE));
-  $description = isset($category) ? t('@site_name - aggregated feeds in category @title', array('@site_name' => $site_name, '@title' => $category->title)) : t('@site_name - aggregated feeds', array('@site_name' => $site_name));
-
-  $output  = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
-  $output .= "<rss version=\"2.0\">\n";
-  $output .= format_rss_channel(t('@site_name aggregator', array('@site_name' => $site_name)), $url, $description, $items);
-  $output .= "</rss>\n";
-
-  print $output;
-}
-
-/**
- * Page callback: Generates an OPML representation of all feeds.
- *
- * @param $cid
- *   (optional) If set, feeds are exported only from a category with this ID.
- *   Otherwise, all feeds are exported. Defaults to NULL.
- *
- * @return
- *   An OPML formatted string.
- */
-function aggregator_page_opml($cid = NULL) {
-  if ($cid) {
-    $result = db_query('SELECT f.title, f.url FROM {aggregator_feed} f LEFT JOIN {aggregator_category_feed} c on f.fid = c.fid WHERE c.cid = :cid ORDER BY title', array(':cid' => $cid));
-  }
-  else {
-    $result = db_query('SELECT * FROM {aggregator_feed} ORDER BY title');
-  }
-
-  $feeds = $result->fetchAll();
-  return theme('aggregator_page_opml', array('feeds' => $feeds));
-}
-
-/**
- * Prints the OPML page for the feed.
- *
- * @param $variables
- *   An associative array containing:
- *   - feeds: An array of the feeds to theme.
- *
- * @ingroup themeable
- */
-function theme_aggregator_page_opml($variables) {
-  $feeds = $variables['feeds'];
-
-  drupal_add_http_header('Content-Type', 'text/xml; charset=utf-8');
-
-  $output  = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
-  $output .= "<opml version=\"1.1\">\n";
-  $output .= "<head>\n";
-  $output .= '<title>' . check_plain(variable_get('site_name', 'Drupal')) . "</title>\n";
-  $output .= '<dateModified>' . gmdate(DATE_RFC2822, REQUEST_TIME) . "</dateModified>\n";
-  $output .= "</head>\n";
-  $output .= "<body>\n";
-  foreach ($feeds as $feed) {
-    $output .= '<outline text="' . check_plain($feed->title) . '" xmlUrl="' . check_url($feed->url) . "\" />\n";
-  }
-  $output .= "</body>\n";
-  $output .= "</opml>\n";
-
-  print $output;
-}
-
-/**
- * Processes variables for aggregator-summary-items.tpl.php.
- *
- * @see aggregator-summary-items.tpl.php
- */
-function template_preprocess_aggregator_summary_items(&$variables) {
-  $variables['title'] = check_plain($variables['source']->title);
-  $variables['summary_list'] = theme('item_list', array('items' => $variables['summary_items']));
-  $variables['source_url'] = $variables['source']->url;
-}
-
-/**
- * Processes variables for aggregator-summary-item.tpl.php.
- *
- * @see aggregator-summary-item.tpl.php
- */
-function template_preprocess_aggregator_summary_item(&$variables) {
-  $item = $variables['item'];
-
-  $variables['feed_url'] = check_url($item->link);
-  $variables['feed_title'] = check_plain($item->title);
-  $variables['feed_age'] = t('%age old', array('%age' => format_interval(REQUEST_TIME - $item->timestamp)));
-
-  $variables['source_url'] = '';
-  $variables['source_title'] = '';
-  if (!empty($item->feed_link)) {
-    $variables['source_url'] = check_url($item->feed_link);
-    $variables['source_title'] = check_plain($item->feed_title);
-  }
-}
-
-/**
- * Processes variables for aggregator-feed-source.tpl.php.
- *
- * @see aggregator-feed-source.tpl.php
- */
-function template_preprocess_aggregator_feed_source(&$variables) {
-  $feed = $variables['feed'];
-
-  $variables['source_icon'] = theme('feed_icon', array('url' => $feed->url, 'title' => t('!title feed', array('!title' => $feed->title))));
-
-  if (!empty($feed->image) && !empty($feed->title) && !empty($feed->link)) {
-    $variables['source_image'] = l(theme('image', array('path' => $feed->image, 'alt' => $feed->title)), $feed->link, array('html' => TRUE, 'attributes' => array('class' => 'feed-image')));
-  }
-  else {
-    $variables['source_image'] = '';
-  }
-
-  $variables['source_description'] = aggregator_filter_xss($feed->description);
-  $variables['source_url'] = check_url(url($feed->link, array('absolute' => TRUE)));
-
-  if ($feed->checked) {
-    $variables['last_checked'] = t('@time ago', array('@time' => format_interval(REQUEST_TIME - $feed->checked)));
-  }
-  else {
-    $variables['last_checked'] = t('never');
-  }
-
-  if (user_access('administer news feeds')) {
-    $variables['last_checked'] = l($variables['last_checked'], 'admin/config/services/aggregator');
-  }
-}
diff --git a/modules/aggregator/aggregator.parser.inc b/modules/aggregator/aggregator.parser.inc
deleted file mode 100644
index 91fbe3a..0000000
--- a/modules/aggregator/aggregator.parser.inc
+++ /dev/null
@@ -1,329 +0,0 @@
-<?php
-
-/**
- * @file
- * Parser functions for the aggregator module.
- */
-
-/**
- * Implements hook_aggregator_parse_info().
- */
-function aggregator_aggregator_parse_info() {
-  return array(
-    'title' => t('Default parser'),
-    'description' => t('Parses RSS, Atom and RDF feeds.'),
-  );
-}
-
-/**
- * Implements hook_aggregator_parse().
- */
-function aggregator_aggregator_parse($feed) {
-  global $channel, $image;
-
-  // Filter the input data.
-  if (aggregator_parse_feed($feed->source_string, $feed)) {
-    $modified = empty($feed->http_headers['last-modified']) ? 0 : strtotime($feed->http_headers['last-modified']);
-
-    // Prepare the channel data.
-    foreach ($channel as $key => $value) {
-      $channel[$key] = trim($value);
-    }
-
-    // Prepare the image data (if any).
-    foreach ($image as $key => $value) {
-      $image[$key] = trim($value);
-    }
-
-    $etag = empty($feed->http_headers['etag']) ? '' : $feed->http_headers['etag'];
-
-    // Add parsed data to the feed object.
-    $feed->link = !empty($channel['link']) ? $channel['link'] : '';
-    $feed->description = !empty($channel['description']) ? $channel['description'] : '';
-    $feed->image = !empty($image['url']) ? $image['url'] : '';
-    $feed->etag = $etag;
-    $feed->modified = $modified;
-
-    // Clear the cache.
-    cache_clear_all();
-
-    return TRUE;
-  }
-
-  return FALSE;
-}
-
-/**
- * Parses a feed and stores its items.
- *
- * @param $data
- *   The feed data.
- * @param $feed
- *   An object describing the feed to be parsed.
- *
- * @return
- *   FALSE on error, TRUE otherwise.
- */
-function aggregator_parse_feed(&$data, $feed) {
-  global $items, $image, $channel;
-
-  // Unset the global variables before we use them.
-  unset($GLOBALS['element'], $GLOBALS['item'], $GLOBALS['tag']);
-  $items = array();
-  $image = array();
-  $channel = array();
-
-  // Parse the data.
-  $xml_parser = drupal_xml_parser_create($data);
-  xml_set_element_handler($xml_parser, 'aggregator_element_start', 'aggregator_element_end');
-  xml_set_character_data_handler($xml_parser, 'aggregator_element_data');
-
-  if (!xml_parse($xml_parser, $data, 1)) {
-    watchdog('aggregator', 'The feed from %site seems to be broken, due to an error "%error" on line %line.', array('%site' => $feed->title, '%error' => xml_error_string(xml_get_error_code($xml_parser)), '%line' => xml_get_current_line_number($xml_parser)), WATCHDOG_WARNING);
-    drupal_set_message(t('The feed from %site seems to be broken, because of error "%error" on line %line.', array('%site' => $feed->title, '%error' => xml_error_string(xml_get_error_code($xml_parser)), '%line' => xml_get_current_line_number($xml_parser))), 'error');
-    return FALSE;
-  }
-  xml_parser_free($xml_parser);
-
-  // We reverse the array such that we store the first item last, and the last
-  // item first. In the database, the newest item should be at the top.
-  $items = array_reverse($items);
-
-  // Initialize items array.
-  $feed->items = array();
-  foreach ($items as $item) {
-
-    // Prepare the item:
-    foreach ($item as $key => $value) {
-      $item[$key] = trim($value);
-    }
-
-    // Resolve the item's title. If no title is found, we use up to 40
-    // characters of the description ending at a word boundary, but not
-    // splitting potential entities.
-    if (!empty($item['title'])) {
-      $item['title'] = $item['title'];
-    }
-    elseif (!empty($item['description'])) {
-      $item['title'] = preg_replace('/^(.*)[^\w;&].*?$/', "\\1", truncate_utf8($item['description'], 40));
-    }
-    else {
-      $item['title'] = '';
-    }
-
-    // Resolve the items link.
-    if (!empty($item['link'])) {
-      $item['link'] = $item['link'];
-    }
-    else {
-      $item['link'] = $feed->link;
-    }
-
-    // Atom feeds have an ID tag instead of a GUID tag.
-    if (!isset($item['guid'])) {
-      $item['guid'] = isset($item['id']) ? $item['id'] : '';
-    }
-
-    // Atom feeds have a content and/or summary tag instead of a description tag.
-    if (!empty($item['content:encoded'])) {
-      $item['description'] = $item['content:encoded'];
-    }
-    elseif (!empty($item['summary'])) {
-      $item['description'] = $item['summary'];
-    }
-    elseif (!empty($item['content'])) {
-      $item['description'] = $item['content'];
-    }
-
-    // Try to resolve and parse the item's publication date.
-    $date = '';
-    foreach (array('pubdate', 'dc:date', 'dcterms:issued', 'dcterms:created', 'dcterms:modified', 'issued', 'created', 'modified', 'published', 'updated') as $key) {
-      if (!empty($item[$key])) {
-        $date = $item[$key];
-        break;
-      }
-    }
-
-    $item['timestamp'] = strtotime($date);
-
-    if ($item['timestamp'] === FALSE) {
-      $item['timestamp'] = aggregator_parse_w3cdtf($date); // Aggregator_parse_w3cdtf() returns FALSE on failure.
-    }
-
-    // Resolve dc:creator tag as the item author if author tag is not set.
-    if (empty($item['author']) && !empty($item['dc:creator'])) {
-      $item['author'] = $item['dc:creator'];
-    }
-
-    $item += array('author' => '', 'description' => '');
-
-    // Store on $feed object. This is where processors will look for parsed items.
-    $feed->items[] = $item;
-  }
-
-  return TRUE;
-}
-
-/**
- * Performs an action when an opening tag is encountered.
- *
- * Callback function used by xml_parse() within aggregator_parse_feed().
- */
-function aggregator_element_start($parser, $name, $attributes) {
-  global $item, $element, $tag, $items, $channel;
-
-  $name = strtolower($name);
-  switch ($name) {
-    case 'image':
-    case 'textinput':
-    case 'summary':
-    case 'tagline':
-    case 'subtitle':
-    case 'logo':
-    case 'info':
-      $element = $name;
-      break;
-    case 'id':
-    case 'content':
-      if ($element != 'item') {
-        $element = $name;
-      }
-    case 'link':
-      // According to RFC 4287, link elements in Atom feeds without a 'rel'
-      // attribute should be interpreted as though the relation type is
-      // "alternate".
-      if (!empty($attributes['HREF']) && (empty($attributes['REL']) || $attributes['REL'] == 'alternate')) {
-        if ($element == 'item') {
-          $items[$item]['link'] = $attributes['HREF'];
-        }
-        else {
-          $channel['link'] = $attributes['HREF'];
-        }
-      }
-      break;
-    case 'item':
-      $element = $name;
-      $item += 1;
-      break;
-    case 'entry':
-      $element = 'item';
-      $item += 1;
-      break;
-  }
-
-  $tag = $name;
-}
-
-/**
- * Performs an action when a closing tag is encountered.
- *
- * Callback function used by xml_parse() within aggregator_parse_feed().
- */
-function aggregator_element_end($parser, $name) {
-  global $element;
-
-  switch ($name) {
-    case 'image':
-    case 'textinput':
-    case 'item':
-    case 'entry':
-    case 'info':
-      $element = '';
-      break;
-    case 'id':
-    case 'content':
-      if ($element == $name) {
-        $element = '';
-      }
-  }
-}
-
-/**
- * Performs an action when data is encountered.
- *
- * Callback function used by xml_parse() within aggregator_parse_feed().
- */
-function aggregator_element_data($parser, $data) {
-  global $channel, $element, $items, $item, $image, $tag;
-  $items += array($item => array());
-  switch ($element) {
-    case 'item':
-      $items[$item] += array($tag => '');
-      $items[$item][$tag] .= $data;
-      break;
-    case 'image':
-    case 'logo':
-      $image += array($tag => '');
-      $image[$tag] .= $data;
-      break;
-    case 'link':
-      if ($data) {
-        $items[$item] += array($tag => '');
-        $items[$item][$tag] .= $data;
-      }
-      break;
-    case 'content':
-      $items[$item] += array('content' => '');
-      $items[$item]['content'] .= $data;
-      break;
-    case 'summary':
-      $items[$item] += array('summary' => '');
-      $items[$item]['summary'] .= $data;
-      break;
-    case 'tagline':
-    case 'subtitle':
-      $channel += array('description' => '');
-      $channel['description'] .= $data;
-      break;
-    case 'info':
-    case 'id':
-    case 'textinput':
-      // The sub-element is not supported. However, we must recognize
-      // it or its contents will end up in the item array.
-      break;
-    default:
-      $channel += array($tag => '');
-      $channel[$tag] .= $data;
-  }
-}
-
-/**
- * Parses the W3C date/time format, a subset of ISO 8601.
- *
- * PHP date parsing functions do not handle this format. See
- * http://www.w3.org/TR/NOTE-datetime for more information. Originally from
- * MagpieRSS (http://magpierss.sourceforge.net/).
- *
- * @param $date_str
- *   A string with a potentially W3C DTF date.
- *
- * @return
- *   A timestamp if parsed successfully or FALSE if not.
- */
-function aggregator_parse_w3cdtf($date_str) {
-  if (preg_match('/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(:(\d{2}))?(?:([-+])(\d{2}):?(\d{2})|(Z))?/', $date_str, $match)) {
-    list($year, $month, $day, $hours, $minutes, $seconds) = array($match[1], $match[2], $match[3], $match[4], $match[5], $match[6]);
-    // Calculate the epoch for current date assuming GMT.
-    $epoch = gmmktime($hours, $minutes, $seconds, $month, $day, $year);
-    if ($match[10] != 'Z') { // Z is zulu time, aka GMT
-      list($tz_mod, $tz_hour, $tz_min) = array($match[8], $match[9], $match[10]);
-      // Zero out the variables.
-      if (!$tz_hour) {
-        $tz_hour = 0;
-      }
-      if (!$tz_min) {
-        $tz_min = 0;
-      }
-      $offset_secs = (($tz_hour * 60) + $tz_min) * 60;
-      // Is timezone ahead of GMT?  If yes, subtract offset.
-      if ($tz_mod == '+') {
-        $offset_secs *= -1;
-      }
-      $epoch += $offset_secs;
-    }
-    return $epoch;
-  }
-  else {
-    return FALSE;
-  }
-}
diff --git a/modules/aggregator/aggregator.processor.inc b/modules/aggregator/aggregator.processor.inc
deleted file mode 100644
index 44ed549..0000000
--- a/modules/aggregator/aggregator.processor.inc
+++ /dev/null
@@ -1,213 +0,0 @@
-<?php
-
-/**
- * @file
- * Processor functions for the aggregator module.
- */
-
-/**
- * Implements hook_aggregator_process_info().
- */
-function aggregator_aggregator_process_info() {
-  return array(
-    'title' => t('Default processor'),
-    'description' => t('Creates lightweight records from feed items.'),
-  );
-}
-
-/**
- * Implements hook_aggregator_process().
- */
-function aggregator_aggregator_process($feed) {
-  if (is_object($feed)) {
-    if (is_array($feed->items)) {
-      foreach ($feed->items as $item) {
-        // Save this item. Try to avoid duplicate entries as much as possible. If
-        // we find a duplicate entry, we resolve it and pass along its ID is such
-        // that we can update it if needed.
-        if (!empty($item['guid'])) {
-          $entry = db_query("SELECT iid, timestamp FROM {aggregator_item} WHERE fid = :fid AND guid = :guid", array(':fid' => $feed->fid, ':guid' => $item['guid']))->fetchObject();
-        }
-        elseif ($item['link'] && $item['link'] != $feed->link && $item['link'] != $feed->url) {
-          $entry = db_query("SELECT iid, timestamp FROM {aggregator_item} WHERE fid = :fid AND link = :link", array(':fid' => $feed->fid, ':link' => $item['link']))->fetchObject();
-        }
-        else {
-          $entry = db_query("SELECT iid, timestamp FROM {aggregator_item} WHERE fid = :fid AND title = :title", array(':fid' => $feed->fid, ':title' => $item['title']))->fetchObject();
-        }
-        if (!$item['timestamp']) {
-          $item['timestamp'] = isset($entry->timestamp) ? $entry->timestamp : REQUEST_TIME;
-        }
-
-        // Make sure the item title and author fit in the 255 varchar column.
-        $item['title'] = truncate_utf8($item['title'], 255, TRUE, TRUE);
-        $item['author'] = truncate_utf8($item['author'], 255, TRUE, TRUE);
-        aggregator_save_item(array('iid' => (isset($entry->iid) ? $entry->iid : ''), 'fid' => $feed->fid, 'timestamp' => $item['timestamp'], 'title' => $item['title'], 'link' => $item['link'], 'author' => $item['author'], 'description' => $item['description'], 'guid' => $item['guid']));
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_aggregator_remove().
- */
-function aggregator_aggregator_remove($feed) {
-  $iids = db_query('SELECT iid FROM {aggregator_item} WHERE fid = :fid', array(':fid' => $feed->fid))->fetchCol();
-  if ($iids) {
-    db_delete('aggregator_category_item')
-      ->condition('iid', $iids, 'IN')
-      ->execute();
-  }
-  db_delete('aggregator_item')
-    ->condition('fid', $feed->fid)
-    ->execute();
-
-  drupal_set_message(t('The news items from %site have been removed.', array('%site' => $feed->title)));
-}
-
-/**
- * Implements hook_form_aggregator_admin_form_alter().
- *
- * Form alter aggregator module's own form to keep processor functionality
- * separate from aggregator API functionality.
- */
-function aggregator_form_aggregator_admin_form_alter(&$form, $form_state) {
-  if (in_array('aggregator', variable_get('aggregator_processors', array('aggregator')))) {
-    $info = module_invoke('aggregator', 'aggregator_process', 'info');
-    $items = drupal_map_assoc(array(3, 5, 10, 15, 20, 25), '_aggregator_items');
-    $period = drupal_map_assoc(array(3600, 10800, 21600, 32400, 43200, 86400, 172800, 259200, 604800, 1209600, 2419200, 4838400, 9676800), 'format_interval');
-    $period[AGGREGATOR_CLEAR_NEVER] = t('Never');
-
-    // Only wrap into a collapsible fieldset if there is a basic configuration.
-    if (isset($form['basic_conf'])) {
-      $form['modules']['aggregator'] = array(
-        '#type' => 'fieldset',
-        '#title' => t('Default processor settings'),
-        '#description' => $info['description'],
-        '#collapsible' => TRUE,
-        '#collapsed' => !in_array('aggregator', variable_get('aggregator_processors', array('aggregator'))),
-      );
-    }
-    else {
-      $form['modules']['aggregator'] = array();
-    }
-
-    $form['modules']['aggregator']['aggregator_summary_items'] = array(
-      '#type' => 'select',
-      '#title' => t('Number of items shown in listing pages'),
-      '#default_value' => variable_get('aggregator_summary_items', 3),
-      '#empty_value' => 0,
-      '#options' => $items,
-    );
-
-    $form['modules']['aggregator']['aggregator_clear'] = array(
-      '#type' => 'select',
-      '#title' => t('Discard items older than'),
-      '#default_value' => variable_get('aggregator_clear', 9676800),
-      '#options' => $period,
-      '#description' => t('Requires a correctly configured <a href="@cron">cron maintenance task</a>.', array('@cron' => url('admin/reports/status'))),
-    );
-
-    $form['modules']['aggregator']['aggregator_category_selector'] = array(
-      '#type' => 'radios',
-      '#title' => t('Select categories using'),
-      '#default_value' => variable_get('aggregator_category_selector', 'checkboxes'),
-      '#options' => array('checkboxes' => t('checkboxes'),
-      'select' => t('multiple selector')),
-      '#description' => t('For a small number of categories, checkboxes are easier to use, while a multiple selector works well with large numbers of categories.'),
-    );
-    $form['modules']['aggregator']['aggregator_teaser_length'] = array(
-      '#type' => 'select',
-      '#title' => t('Length of trimmed description'),
-      '#default_value' => variable_get('aggregator_teaser_length', 600),
-      '#options' => drupal_map_assoc(array(0, 200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000), '_aggregator_characters'),
-      '#description' => t("The maximum number of characters used in the trimmed version of content.")
-    );
-
-  }
-}
-
-/**
- * Creates display text for teaser length option values.
- *
- * Callback for drupal_map_assoc() within
- * aggregator_form_aggregator_admin_form_alter().
- *
- * @param $length
- *   The desired length of teaser text, in bytes.
- *
- * @return
- *   A translated string explaining the teaser string length.
- */
-function _aggregator_characters($length) {
-  return ($length == 0) ? t('Unlimited') : format_plural($length, '1 character', '@count characters');
-}
-
-/**
- * Adds/edits/deletes an aggregator item.
- *
- * @param $edit
- *   An associative array describing the item to be added/edited/deleted.
- */
-function aggregator_save_item($edit) {
-  if ($edit['title'] && empty($edit['iid'])) {
-    $edit['iid'] = db_insert('aggregator_item')
-      ->fields(array(
-        'title' => $edit['title'],
-        'link' => $edit['link'],
-        'author' => $edit['author'],
-        'description' => $edit['description'],
-        'guid' => $edit['guid'],
-        'timestamp' => $edit['timestamp'],
-        'fid' => $edit['fid'],
-      ))
-      ->execute();
-  }
-  if ($edit['iid'] && !$edit['title']) {
-    db_delete('aggregator_item')
-      ->condition('iid', $edit['iid'])
-      ->execute();
-    db_delete('aggregator_category_item')
-      ->condition('iid', $edit['iid'])
-      ->execute();
-  }
-  elseif ($edit['title'] && $edit['link']) {
-    // file the items in the categories indicated by the feed
-    $result = db_query('SELECT cid FROM {aggregator_category_feed} WHERE fid = :fid', array(':fid' => $edit['fid']));
-    foreach ($result as $category) {
-      db_merge('aggregator_category_item')
-        ->key(array(
-          'iid' => $edit['iid'],
-          'cid' => $category->cid,
-        ))
-        ->execute();
-    }
-  }
-}
-
-/**
- * Expires items from a feed depending on expiration settings.
- *
- * @param $feed
- *   Object describing feed.
- */
-function aggregator_expire($feed) {
-  $aggregator_clear = variable_get('aggregator_clear', 9676800);
-
-  if ($aggregator_clear != AGGREGATOR_CLEAR_NEVER) {
-    // Remove all items that are older than flush item timer.
-    $age = REQUEST_TIME - $aggregator_clear;
-    $iids = db_query('SELECT iid FROM {aggregator_item} WHERE fid = :fid AND timestamp < :timestamp', array(
-      ':fid' => $feed->fid,
-      ':timestamp' => $age,
-    ))
-    ->fetchCol();
-    if ($iids) {
-      db_delete('aggregator_category_item')
-        ->condition('iid', $iids, 'IN')
-        ->execute();
-      db_delete('aggregator_item')
-        ->condition('iid', $iids, 'IN')
-        ->execute();
-    }
-  }
-}
diff --git a/modules/aggregator/tests/aggregator_test.info b/modules/aggregator/tests/aggregator_test.info
deleted file mode 100644
index b8dd19d..0000000
--- a/modules/aggregator/tests/aggregator_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Aggregator module tests"
-description = "Support module for aggregator related testing."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/aggregator/tests/aggregator_test.module b/modules/aggregator/tests/aggregator_test.module
deleted file mode 100644
index 2d26a5d..0000000
--- a/modules/aggregator/tests/aggregator_test.module
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-/**
- * Implements hook_menu().
- */
-function aggregator_test_menu() {
-  $items['aggregator/test-feed'] = array(
-    'title' => 'Test feed static last modified date',
-    'description' => "A cached test feed with a static last modified date.",
-    'page callback' => 'aggregator_test_feed',
-    'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
-  );
-  return $items;
-}
-
-/**
- * Page callback. Generates a test feed and simulates last-modified and etags.
- *
- * @param $use_last_modified
- *   Set TRUE to send a last modified header.
- * @param $use_etag
- *   Set TRUE to send an etag.
- */
-function aggregator_test_feed($use_last_modified = FALSE, $use_etag = FALSE) {
-  $last_modified = strtotime('Sun, 19 Nov 1978 05:00:00 GMT');
-  $etag = drupal_hash_base64($last_modified);
-
-  $if_modified_since = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) : FALSE;
-  $if_none_match = isset($_SERVER['HTTP_IF_NONE_MATCH']) ? stripslashes($_SERVER['HTTP_IF_NONE_MATCH']) : FALSE;
-
-  // Send appropriate response. We respond with a 304 not modified on either
-  // etag or on last modified.
-  if ($use_last_modified) {
-    drupal_add_http_header('Last-Modified', gmdate(DATE_RFC1123, $last_modified));
-  }
-  if ($use_etag) {
-    drupal_add_http_header('ETag', $etag);
-  }
-  // Return 304 not modified if either last modified or etag match.
-  if ($last_modified == $if_modified_since || $etag == $if_none_match) {
-    drupal_add_http_header('Status', '304 Not Modified');
-    return;
-  }
-
-  // The following headers force validation of cache:
-  drupal_add_http_header('Expires', 'Sun, 19 Nov 1978 05:00:00 GMT');
-  drupal_add_http_header('Cache-Control', 'must-revalidate');
-  drupal_add_http_header('Content-Type', 'application/rss+xml; charset=utf-8');
-
-  // Read actual feed from file.
-  $file_name = DRUPAL_ROOT . '/' . drupal_get_path('module', 'aggregator') . '/tests/aggregator_test_rss091.xml';
-  $handle = fopen($file_name, 'r');
-  $feed = fread($handle, filesize($file_name));
-  fclose($handle);
-
-  print $feed;
-}
diff --git a/modules/aggregator/tests/aggregator_test_atom.xml b/modules/aggregator/tests/aggregator_test_atom.xml
deleted file mode 100644
index 357b2e5..0000000
--- a/modules/aggregator/tests/aggregator_test_atom.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
-
-  <title>Example Feed</title>
-  <link href="http://example.org/" />
-  <updated>2003-12-13T18:30:02Z</updated>
-  <author>
-    <name>John Doe</name>
-  </author>
-  <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>
-
-  <entry>
-    <title>Atom-Powered Robots Run Amok</title>
-    <link href="http://example.org/2003/12/13/atom03" />
-    <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
-    <updated>2003-12-13T18:30:02Z</updated>
-    <summary>Some text.</summary>
-  </entry>
-
-</feed>
diff --git a/modules/aggregator/tests/aggregator_test_rss091.xml b/modules/aggregator/tests/aggregator_test_rss091.xml
deleted file mode 100644
index 2944022..0000000
--- a/modules/aggregator/tests/aggregator_test_rss091.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<rss version="0.91">
-  <channel>
-    <title>Example</title>
-    <link>http://example.com</link>
-    <description>Example updates</description>
-    <language>en-us</language>
-    <copyright>Copyright 2000, Example team.</copyright>
-    <managingEditor>editor@example.com</managingEditor>
-    <webMaster>webmaster@example.com</webMaster>
-    <image>
-      <title>Example</title>
-      <url>http://example.com/images/druplicon.png</url>
-      <link>http://example.com</link>
-      <width>88</width>
-      <height>100</height>
-      <description>Example updates</description>
-    </image>
-    <item>
-      <title>First example feed item title</title>
-      <link>http://example.com/example-turns-one</link>
-      <description>First example feed item description.</description>
-    </item>
-    <item>
-      <title>Second example feed item title. This title is extremely long so that it exceeds the 255 character limit for titles in feed item storage. In fact it's so long that this sentence isn't long enough so I'm rambling a bit to make it longer, nearly there now. Ah now it's long enough so I'll shut up.</title>
-      <link>http://example.com/example-turns-two</link>
-      <description>Second example feed item description.</description>
-    </item>
-    <item>
-      <title>Long link feed item title.</title>
-      <link>http://example.com/tomorrow/and/tomorrow/and/tomorrow/creeps/in/this/petty/pace/from/day/to/day/to/the/last/syllable/of/recorded/time/and/all/our/yesterdays/have/lighted/fools/the/way/to/dusty/death/out/out/brief/candle/life/is/but/a/walking/shadow/a/poor/player/that/struts/and/frets/his/hour/upon/the/stage/and/is/heard/no/more/it/is/a/tale/told/by/an/idiot/full/of/sound/and/fury/signifying/nothing</link>
-      <description>Long link feed item description.</description>
-    </item>
-    <item>
-      <title>Long author feed item title.</title>
-      <link>http://example.com/long/author</link>
-      <author>I wanted to get out and walk eastward toward the park through the soft twilight, but each time I tried to go I became entangled in some wild, strident argument which pulled me back, as if with ropes, into my chair. Yet high over the city our line of yellow windows must have contributed their share of human secrecy to the casual watcher in the darkening streets, and I was him too, looking up and wondering. I was within and without, simultaneously enchanted and repelled by the inexhaustible variety of life.</author>
-      <description>Long author feed item description.</description>
-    </item>
-  </channel>
-</rss>
diff --git a/modules/block/block-admin-display-form.tpl.php b/modules/block/block-admin-display-form.tpl.php
deleted file mode 100644
index 17a15e4..0000000
--- a/modules/block/block-admin-display-form.tpl.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to configure blocks.
- *
- * Available variables:
- * - $block_regions: An array of regions. Keyed by name with the title as value.
- * - $block_listing: An array of blocks keyed by region and then delta.
- * - $form_submit: Form submit button.
- *
- * Each $block_listing[$region] contains an array of blocks for that region.
- *
- * Each $data in $block_listing[$region] contains:
- * - $data->region_title: Region title for the listed block.
- * - $data->block_title: Block title.
- * - $data->region_select: Drop-down menu for assigning a region.
- * - $data->weight_select: Drop-down menu for setting weights.
- * - $data->configure_link: Block configuration link.
- * - $data->delete_link: For deleting user added blocks.
- *
- * @see template_preprocess_block_admin_display_form()
- * @see theme_block_admin_display()
- *
- * @ingroup themeable
- */
-?>
-<?php
-  // Add table javascript.
-  drupal_add_js('misc/tableheader.js');
-  drupal_add_js(drupal_get_path('module', 'block') . '/block.js');
-  foreach ($block_regions as $region => $title) {
-    drupal_add_tabledrag('blocks', 'match', 'sibling', 'block-region-select', 'block-region-' . $region, NULL, FALSE);
-    drupal_add_tabledrag('blocks', 'order', 'sibling', 'block-weight', 'block-weight-' . $region);
-  }
-?>
-<table id="blocks" class="sticky-enabled">
-  <thead>
-    <tr>
-      <th><?php print t('Block'); ?></th>
-      <th><?php print t('Region'); ?></th>
-      <th><?php print t('Weight'); ?></th>
-      <th colspan="2"><?php print t('Operations'); ?></th>
-    </tr>
-  </thead>
-  <tbody>
-    <?php $row = 0; ?>
-    <?php foreach ($block_regions as $region => $title): ?>
-      <tr class="region-title region-title-<?php print $region?>">
-        <td colspan="5"><?php print $title; ?></td>
-      </tr>
-      <tr class="region-message region-<?php print $region?>-message <?php print empty($block_listing[$region]) ? 'region-empty' : 'region-populated'; ?>">
-        <td colspan="5"><em><?php print t('No blocks in this region'); ?></em></td>
-      </tr>
-      <?php foreach ($block_listing[$region] as $delta => $data): ?>
-      <tr class="draggable <?php print $row % 2 == 0 ? 'odd' : 'even'; ?><?php print $data->row_class ? ' ' . $data->row_class : ''; ?>">
-        <td class="block"><?php print $data->block_title; ?></td>
-        <td><?php print $data->region_select; ?></td>
-        <td><?php print $data->weight_select; ?></td>
-        <td><?php print $data->configure_link; ?></td>
-        <td><?php print $data->delete_link; ?></td>
-      </tr>
-      <?php $row++; ?>
-      <?php endforeach; ?>
-    <?php endforeach; ?>
-  </tbody>
-</table>
-
-<?php print $form_submit; ?>
diff --git a/modules/block/block.admin.inc b/modules/block/block.admin.inc
deleted file mode 100644
index bd61790..0000000
--- a/modules/block/block.admin.inc
+++ /dev/null
@@ -1,700 +0,0 @@
-<?php
-
-/**
- * @file
- * Admin page callbacks for the block module.
- */
-
-/**
- * Menu callback for admin/structure/block/demo.
- */
-function block_admin_demo($theme = NULL) {
-  drupal_add_css(drupal_get_path('module', 'block') . '/block.css');
-  return '';
-}
-
-/**
- * Menu callback for admin/structure/block.
- *
- * @param $theme
- *   The theme to display the administration page for. If not provided, defaults
- *   to the currently used theme.
- */
-function block_admin_display($theme = NULL) {
-  global $theme_key;
-
-  drupal_theme_initialize();
-
-  if (!isset($theme)) {
-    // If theme is not specifically set, rehash for the current theme.
-    $theme = $theme_key;
-  }
-
-  // Fetch and sort blocks.
-  $blocks = block_admin_display_prepare_blocks($theme);
-
-  return drupal_get_form('block_admin_display_form', $blocks, $theme);
-}
-
-/**
- * Prepares a list of blocks for display on the blocks administration page.
- *
- * @param $theme
- *   The machine-readable name of the theme whose blocks should be returned.
- *
- * @return
- *   An array of blocks, as returned by _block_rehash(), sorted by region in
- *   preparation for display on the blocks administration page.
- *
- * @see block_admin_display_form()
- */
-function block_admin_display_prepare_blocks($theme) {
-  $blocks = _block_rehash($theme);
-  $compare_theme = &drupal_static('_block_compare:theme');
-  $compare_theme = $theme;
-  usort($blocks, '_block_compare');
-  return $blocks;
-}
-
-/**
- * Form constructor for the main block administration form.
- *
- * @param $blocks
- *   An array of blocks, as returned by block_admin_display_prepare_blocks().
- * @param $theme
- *   A string representing the name of the theme to edit blocks for.
- * @param $block_regions
- *   (optional) An array of regions in which the blocks will be allowed to be
- *   placed. Defaults to all visible regions for the theme whose blocks are
- *   being configured. In all cases, a dummy region for disabled blocks will
- *   also be displayed.
- *
- * @return
- *   An array representing the form definition.
- *
- * @ingroup forms
- * @see block_admin_display_form_submit()
- */
-function block_admin_display_form($form, &$form_state, $blocks, $theme, $block_regions = NULL) {
-
-  $form['#attached']['css'] = array(drupal_get_path('module', 'block') . '/block.css');
-
-  // Get a list of block regions if one was not provided.
-  if (!isset($block_regions)) {
-    $block_regions = system_region_list($theme, REGIONS_VISIBLE);
-  }
-
-  // Weights range from -delta to +delta, so delta should be at least half
-  // of the amount of blocks present. This makes sure all blocks in the same
-  // region get an unique weight.
-  $weight_delta = round(count($blocks) / 2);
-
-  // Build the form tree.
-  $form['edited_theme'] = array(
-    '#type' => 'value',
-    '#value' => $theme,
-  );
-  $form['block_regions'] = array(
-    '#type' => 'value',
-    // Add a last region for disabled blocks.
-    '#value' => $block_regions + array(BLOCK_REGION_NONE => BLOCK_REGION_NONE),
-  );
-  $form['blocks'] = array();
-  $form['#tree'] = TRUE;
-
-  foreach ($blocks as $i => $block) {
-    $key = $block['module'] . '_' . $block['delta'];
-    $form['blocks'][$key]['module'] = array(
-      '#type' => 'value',
-      '#value' => $block['module'],
-    );
-    $form['blocks'][$key]['delta'] = array(
-      '#type' => 'value',
-      '#value' => $block['delta'],
-    );
-    $form['blocks'][$key]['info'] = array(
-      '#markup' => check_plain($block['info']),
-    );
-    $form['blocks'][$key]['theme'] = array(
-      '#type' => 'hidden',
-      '#value' => $theme,
-    );
-    $form['blocks'][$key]['weight'] = array(
-      '#type' => 'weight',
-      '#default_value' => $block['weight'],
-      '#delta' => $weight_delta,
-      '#title_display' => 'invisible',
-      '#title' => t('Weight for @block block', array('@block' => $block['info'])),
-    );
-    $form['blocks'][$key]['region'] = array(
-      '#type' => 'select',
-      '#default_value' => $block['region'] != BLOCK_REGION_NONE ? $block['region'] : NULL,
-      '#empty_value' => BLOCK_REGION_NONE,
-      '#title_display' => 'invisible',
-      '#title' => t('Region for @block block', array('@block' => $block['info'])),
-      '#options' => $block_regions,
-    );
-    $form['blocks'][$key]['configure'] = array(
-      '#type' => 'link',
-      '#title' => t('configure'),
-      '#href' => 'admin/structure/block/manage/' . $block['module'] . '/' . $block['delta'] . '/configure',
-    );
-    if ($block['module'] == 'block') {
-      $form['blocks'][$key]['delete'] = array(
-        '#type' => 'link',
-        '#title' => t('delete'),
-        '#href' => 'admin/structure/block/manage/' . $block['module'] . '/' . $block['delta'] . '/delete',
-     );
-    }
-  }
-  // Do not allow disabling the main system content block when it is present.
-  if (isset($form['blocks']['system_main']['region'])) {
-    $form['blocks']['system_main']['region']['#required'] = TRUE;
-  }
-
-  $form['actions'] = array(
-    '#tree' => FALSE,
-    '#type' => 'actions',
-  );
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Save blocks'),
-  );
-
-  return $form;
-}
-
-/**
- * Form submission handler for block_admin_display_form().
- *
- * @see block_admin_display_form()
- */
-function block_admin_display_form_submit($form, &$form_state) {
-  $transaction = db_transaction();
-  try {
-    foreach ($form_state['values']['blocks'] as $block) {
-      $block['status'] = (int) ($block['region'] != BLOCK_REGION_NONE);
-      $block['region'] = $block['status'] ? $block['region'] : '';
-      db_update('block')
-        ->fields(array(
-          'status' => $block['status'],
-          'weight' => $block['weight'],
-          'region' => $block['region'],
-        ))
-        ->condition('module', $block['module'])
-        ->condition('delta', $block['delta'])
-        ->condition('theme', $block['theme'])
-        ->execute();
-    }
-  }
-  catch (Exception $e) {
-    $transaction->rollback();
-    watchdog_exception('block', $e);
-    throw $e;
-  }
-  drupal_set_message(t('The block settings have been updated.'));
-  cache_clear_all();
-}
-
-/**
- * Sorts active blocks by region, then by weight; sorts inactive blocks by name.
- *
- * Callback for usort() in block_admin_display_prepare_blocks().
- */
-function _block_compare($a, $b) {
-  global $theme_key;
-
-  // Theme should be set before calling this function, or the current theme
-  // is being used.
-  $theme = &drupal_static(__FUNCTION__ . ':theme');
-  if (!isset($theme)) {
-    $theme = $theme_key;
-  }
-
-  $regions = &drupal_static(__FUNCTION__ . ':regions');
-  // We need the region list to correctly order by region.
-  if (!isset($regions)) {
-    $regions = array_flip(array_keys(system_region_list($theme)));
-    $regions[BLOCK_REGION_NONE] = count($regions);
-  }
-
-  // Separate enabled from disabled.
-  $status = $b['status'] - $a['status'];
-  if ($status) {
-    return $status;
-  }
-  // Sort by region (in the order defined by theme .info file).
-  if ((!empty($a['region']) && !empty($b['region'])) && ($place = ($regions[$a['region']] - $regions[$b['region']]))) {
-    return $place;
-  }
-  // Sort by weight, unless disabled.
-  if ($a['region'] != BLOCK_REGION_NONE) {
-    $weight = $a['weight'] - $b['weight'];
-    if ($weight) {
-      return $weight;
-    }
-  }
-  // Sort by title.
-  return strcmp($a['info'], $b['info']);
-}
-
-/**
- * Form constructor for the block configuration form.
- *
- * Also used by block_add_block_form() for adding a new custom block.
- *
- * @param $module
- *   Name of the module that implements the block to be configured.
- * @param $delta
- *   Unique ID of the block within the context of $module.
- *
- * @see block_admin_configure_validate()
- * @see block_admin_configure_submit()
- * @ingroup forms
- */
-function block_admin_configure($form, &$form_state, $module, $delta) {
-  $block = block_load($module, $delta);
-  $form['module'] = array(
-    '#type' => 'value',
-    '#value' => $block->module,
-  );
-  $form['delta'] = array(
-    '#type' => 'value',
-    '#value' => $block->delta,
-  );
-
-  // Get the block subject for the page title.
-  $info = module_invoke($block->module, 'block_info');
-  if (isset($info[$block->delta])) {
-    drupal_set_title(t("'%name' block", array('%name' => $info[$block->delta]['info'])), PASS_THROUGH);
-  }
-
-  $form['settings']['title'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Block title'),
-    '#maxlength' => 64,
-    '#description' => $block->module == 'block' ? t('The title of the block as shown to the user.') : t('Override the default title for the block. Use <em>!placeholder</em> to display no title, or leave blank to use the default block title.', array('!placeholder' => '&lt;none&gt;')),
-    '#default_value' => isset($block->title) ? $block->title : '',
-    '#weight' => -19,
-  );
-
-  // Module-specific block configuration.
-  if ($settings = module_invoke($block->module, 'block_configure', $block->delta)) {
-    foreach ($settings as $k => $v) {
-      $form['settings'][$k] = $v;
-    }
-  }
-
-  // Region settings.
-  $form['regions'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Region settings'),
-    '#collapsible' => FALSE,
-    '#description' => t('Specify in which themes and regions this block is displayed.'),
-    '#tree' => TRUE,
-  );
-
-  $theme_default = variable_get('theme_default', 'bartik');
-  $admin_theme = variable_get('admin_theme');
-  foreach (list_themes() as $key => $theme) {
-    // Only display enabled themes
-    if ($theme->status) {
-      $region = db_query("SELECT region FROM {block} WHERE module = :module AND delta = :delta AND theme = :theme", array(
-        ':module' => $block->module,
-        ':delta' => $block->delta,
-        ':theme' => $key,
-      ))->fetchField();
-
-      // Use a meaningful title for the main site theme and administrative
-      // theme.
-      $theme_title = $theme->info['name'];
-      if ($key == $theme_default) {
-        $theme_title = t('!theme (default theme)', array('!theme' => $theme_title));
-      }
-      elseif ($admin_theme && $key == $admin_theme) {
-        $theme_title = t('!theme (administration theme)', array('!theme' => $theme_title));
-      }
-      $form['regions'][$key] = array(
-        '#type' => 'select',
-        '#title' => $theme_title,
-        '#default_value' => !empty($region) && $region != -1 ? $region : NULL,
-        '#empty_value' => BLOCK_REGION_NONE,
-        '#options' => system_region_list($key, REGIONS_VISIBLE),
-        '#weight' => ($key == $theme_default ? 9 : 10),
-      );
-    }
-  }
-
-  // Visibility settings.
-  $form['visibility_title'] = array(
-    '#type' => 'item',
-    '#title' => t('Visibility settings'),
-  );
-  $form['visibility'] = array(
-    '#type' => 'vertical_tabs',
-    '#attached' => array(
-      'js' => array(drupal_get_path('module', 'block') . '/block.js'),
-    ),
-  );
-
-  // Per-path visibility.
-  $form['visibility']['path'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Pages'),
-    '#collapsible' => TRUE,
-    '#collapsed' => TRUE,
-    '#group' => 'visibility',
-    '#weight' => 0,
-  );
-
-  $access = user_access('use PHP for settings');
-  if (isset($block->visibility) && $block->visibility == BLOCK_VISIBILITY_PHP && !$access) {
-    $form['visibility']['path']['visibility'] = array(
-      '#type' => 'value',
-      '#value' => BLOCK_VISIBILITY_PHP,
-    );
-    $form['visibility']['path']['pages'] = array(
-      '#type' => 'value',
-      '#value' => isset($block->pages) ? $block->pages : '',
-    );
-  }
-  else {
-    $options = array(
-      BLOCK_VISIBILITY_NOTLISTED => t('All pages except those listed'),
-      BLOCK_VISIBILITY_LISTED => t('Only the listed pages'),
-    );
-    $description = t("Specify pages by using their paths. Enter one path per line. The '*' character is a wildcard. Example paths are %blog for the blog page and %blog-wildcard for every personal blog. %front is the front page.", array('%blog' => 'blog', '%blog-wildcard' => 'blog/*', '%front' => '<front>'));
-
-    if (module_exists('php') && $access) {
-      $options += array(BLOCK_VISIBILITY_PHP => t('Pages on which this PHP code returns <code>TRUE</code> (experts only)'));
-      $title = t('Pages or PHP code');
-      $description .= ' ' . t('If the PHP option is chosen, enter PHP code between %php. Note that executing incorrect PHP code can break your Drupal site.', array('%php' => '<?php ?>'));
-    }
-    else {
-      $title = t('Pages');
-    }
-    $form['visibility']['path']['visibility'] = array(
-      '#type' => 'radios',
-      '#title' => t('Show block on specific pages'),
-      '#options' => $options,
-      '#default_value' => isset($block->visibility) ? $block->visibility : BLOCK_VISIBILITY_NOTLISTED,
-    );
-    $form['visibility']['path']['pages'] = array(
-      '#type' => 'textarea',
-      '#title' => '<span class="element-invisible">' . $title . '</span>',
-      '#default_value' => isset($block->pages) ? $block->pages : '',
-      '#description' => $description,
-    );
-  }
-
-  // Per-role visibility.
-  $default_role_options = db_query("SELECT rid FROM {block_role} WHERE module = :module AND delta = :delta", array(
-    ':module' => $block->module,
-    ':delta' => $block->delta,
-  ))->fetchCol();
-  $role_options = array_map('check_plain', user_roles());
-  $form['visibility']['role'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Roles'),
-    '#collapsible' => TRUE,
-    '#collapsed' => TRUE,
-    '#group' => 'visibility',
-    '#weight' => 10,
-  );
-  $form['visibility']['role']['roles'] = array(
-    '#type' => 'checkboxes',
-    '#title' => t('Show block for specific roles'),
-    '#default_value' => $default_role_options,
-    '#options' => $role_options,
-    '#description' => t('Show this block only for the selected role(s). If you select no roles, the block will be visible to all users.'),
-  );
-
-  // Per-user visibility.
-  $form['visibility']['user'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Users'),
-    '#collapsible' => TRUE,
-    '#collapsed' => TRUE,
-    '#group' => 'visibility',
-    '#weight' => 20,
-  );
-  $form['visibility']['user']['custom'] = array(
-    '#type' => 'radios',
-    '#title' => t('Customizable per user'),
-    '#options' => array(
-      BLOCK_CUSTOM_FIXED => t('Not customizable'),
-      BLOCK_CUSTOM_ENABLED => t('Customizable, visible by default'),
-      BLOCK_CUSTOM_DISABLED => t('Customizable, hidden by default'),
-    ),
-    '#description' => t('Allow individual users to customize the visibility of this block in their account settings.'),
-    '#default_value' => isset($block->custom) ? $block->custom : BLOCK_CUSTOM_FIXED,
-  );
-
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Save block'),
-  );
-
-  return $form;
-}
-
-/**
- * Form validation handler for block_admin_configure().
- *
- * @see block_admin_configure()
- * @see block_admin_configure_submit()
- */
-function block_admin_configure_validate($form, &$form_state) {
-  if ($form_state['values']['module'] == 'block') {
-    $custom_block_exists = (bool) db_query_range('SELECT 1 FROM {block_custom} WHERE bid <> :bid AND info = :info', 0, 1, array(
-      ':bid' => $form_state['values']['delta'],
-      ':info' => $form_state['values']['info'],
-    ))->fetchField();
-    if (empty($form_state['values']['info']) || $custom_block_exists) {
-      form_set_error('info', t('Ensure that each block description is unique.'));
-    }
-  }
-}
-
-/**
- * Form submission handler for block_admin_configure().
- *
- * @see block_admin_configure()
- * @see block_admin_configure_validate()
- */
-function block_admin_configure_submit($form, &$form_state) {
-  if (!form_get_errors()) {
-    $transaction = db_transaction();
-    try {
-      db_update('block')
-        ->fields(array(
-          'visibility' => (int) $form_state['values']['visibility'],
-          'pages' => trim($form_state['values']['pages']),
-          'custom' => (int) $form_state['values']['custom'],
-          'title' => $form_state['values']['title'],
-        ))
-        ->condition('module', $form_state['values']['module'])
-        ->condition('delta', $form_state['values']['delta'])
-        ->execute();
-
-      db_delete('block_role')
-        ->condition('module', $form_state['values']['module'])
-        ->condition('delta', $form_state['values']['delta'])
-        ->execute();
-      $query = db_insert('block_role')->fields(array('rid', 'module', 'delta'));
-      foreach (array_filter($form_state['values']['roles']) as $rid) {
-        $query->values(array(
-          'rid' => $rid,
-          'module' => $form_state['values']['module'],
-          'delta' => $form_state['values']['delta'],
-        ));
-      }
-      $query->execute();
-
-      // Store regions per theme for this block
-      foreach ($form_state['values']['regions'] as $theme => $region) {
-        db_merge('block')
-          ->key(array('theme' => $theme, 'delta' => $form_state['values']['delta'], 'module' => $form_state['values']['module']))
-          ->fields(array(
-            'region' => ($region == BLOCK_REGION_NONE ? '' : $region),
-            'pages' => trim($form_state['values']['pages']),
-            'status' => (int) ($region != BLOCK_REGION_NONE),
-          ))
-          ->execute();
-      }
-
-      module_invoke($form_state['values']['module'], 'block_save', $form_state['values']['delta'], $form_state['values']);
-    }
-    catch (Exception $e) {
-      $transaction->rollback();
-      watchdog_exception('block', $e);
-      throw $e;
-    }
-    drupal_set_message(t('The block configuration has been saved.'));
-    cache_clear_all();
-    $form_state['redirect'] = 'admin/structure/block';
-  }
-}
-
-/**
- * Form constructor for the add block form.
- *
- * @see block_add_block_form_validate()
- * @see block_add_block_form_submit()
- * @ingroup forms
- */
-function block_add_block_form($form, &$form_state) {
-  return block_admin_configure($form, $form_state, 'block', NULL);
-}
-
-/**
- * Form validation handler for block_add_block_form().
- *
- * @see block_add_block_form()
- * @see block_add_block_form_submit()
- */
-function block_add_block_form_validate($form, &$form_state) {
-  $custom_block_exists = (bool) db_query_range('SELECT 1 FROM {block_custom} WHERE info = :info', 0, 1, array(':info' => $form_state['values']['info']))->fetchField();
-
-  if (empty($form_state['values']['info']) || $custom_block_exists) {
-    form_set_error('info', t('Ensure that each block description is unique.'));
-  }
-}
-
-/**
- * Form submission handler for block_add_block_form().
- *
- * Saves the new custom block.
- *
- * @see block_add_block_form()
- * @see block_add_block_form_validate()
- */
-function block_add_block_form_submit($form, &$form_state) {
-  $delta = db_insert('block_custom')
-    ->fields(array(
-      'body' => $form_state['values']['body']['value'],
-      'info' => $form_state['values']['info'],
-      'format' => $form_state['values']['body']['format'],
-    ))
-    ->execute();
-  // Store block delta to allow other modules to work with new block.
-  $form_state['values']['delta'] = $delta;
-
-  $query = db_insert('block')->fields(array('visibility', 'pages', 'custom', 'title', 'module', 'theme', 'status', 'weight', 'delta', 'cache'));
-  foreach (list_themes() as $key => $theme) {
-    if ($theme->status) {
-      $query->values(array(
-        'visibility' => (int) $form_state['values']['visibility'],
-        'pages' => trim($form_state['values']['pages']),
-        'custom' => (int) $form_state['values']['custom'],
-        'title' => $form_state['values']['title'],
-        'module' => $form_state['values']['module'],
-        'theme' => $theme->name,
-        'status' => 0,
-        'weight' => 0,
-        'delta' => $delta,
-        'cache' => DRUPAL_NO_CACHE,
-      ));
-    }
-  }
-  $query->execute();
-
-  $query = db_insert('block_role')->fields(array('rid', 'module', 'delta'));
-  foreach (array_filter($form_state['values']['roles']) as $rid) {
-    $query->values(array(
-      'rid' => $rid,
-      'module' => $form_state['values']['module'],
-      'delta' => $delta,
-    ));
-  }
-  $query->execute();
-
-  // Store regions per theme for this block
-  foreach ($form_state['values']['regions'] as $theme => $region) {
-    db_merge('block')
-      ->key(array('theme' => $theme, 'delta' => $delta, 'module' => $form_state['values']['module']))
-      ->fields(array(
-        'region' => ($region == BLOCK_REGION_NONE ? '' : $region),
-        'pages' => trim($form_state['values']['pages']),
-        'status' => (int) ($region != BLOCK_REGION_NONE),
-      ))
-      ->execute();
-  }
-
-  drupal_set_message(t('The block has been created.'));
-  cache_clear_all();
-  $form_state['redirect'] = 'admin/structure/block';
-}
-
-/**
- * Form constructor for the custom block deletion form.
- *
- * @param $module
- *   The name of the module that implements the block to be deleted. This should
- *   always equal 'block' since it only allows custom blocks to be deleted.
- * @param $delta
- *   The unique ID of the block within the context of $module.
- *
- * @see block_custom_block_delete_submit()
- */
-function block_custom_block_delete($form, &$form_state, $module, $delta) {
-  $block = block_load($module, $delta);
-  $custom_block = block_custom_block_get($block->delta);
-  $form['info'] = array('#type' => 'hidden', '#value' => $custom_block['info'] ? $custom_block['info'] : $custom_block['title']);
-  $form['bid'] = array('#type' => 'hidden', '#value' => $block->delta);
-
-  return confirm_form($form, t('Are you sure you want to delete the block %name?', array('%name' => $custom_block['info'])), 'admin/structure/block', '', t('Delete'), t('Cancel'));
-}
-
-/**
- * Form submission handler for block_custom_block_delete().
- *
- * @see block_custom_block_delete()
- */
-function block_custom_block_delete_submit($form, &$form_state) {
-  db_delete('block_custom')
-    ->condition('bid', $form_state['values']['bid'])
-    ->execute();
-  db_delete('block')
-    ->condition('module', 'block')
-    ->condition('delta', $form_state['values']['bid'])
-    ->execute();
-  db_delete('block_role')
-    ->condition('module', 'block')
-    ->condition('delta', $form_state['values']['bid'])
-    ->execute();
-  drupal_set_message(t('The block %name has been removed.', array('%name' => $form_state['values']['info'])));
-  cache_clear_all();
-  $form_state['redirect'] = 'admin/structure/block';
-  return;
-}
-
-/**
- * Processes variables for block-admin-display-form.tpl.php.
- *
- * The $variables array contains the following arguments:
- * - $form
- *
- * @see block-admin-display.tpl.php
- * @see theme_block_admin_display()
- */
-function template_preprocess_block_admin_display_form(&$variables) {
-  $variables['block_regions'] = $variables['form']['block_regions']['#value'];
-  if (isset($variables['block_regions'][BLOCK_REGION_NONE])) {
-    $variables['block_regions'][BLOCK_REGION_NONE] = t('Disabled');
-  }
-
-  foreach ($variables['block_regions'] as $key => $value) {
-    // Initialize an empty array for the region.
-    $variables['block_listing'][$key] = array();
-  }
-
-  // Initialize disabled blocks array.
-  $variables['block_listing'][BLOCK_REGION_NONE] = array();
-
-  // Add each block in the form to the appropriate place in the block listing.
-  foreach (element_children($variables['form']['blocks']) as $i) {
-    $block = &$variables['form']['blocks'][$i];
-
-    // Fetch the region for the current block.
-    $region = (isset($block['region']['#default_value']) ? $block['region']['#default_value'] : BLOCK_REGION_NONE);
-
-    // Set special classes needed for table drag and drop.
-    $block['region']['#attributes']['class'] = array('block-region-select', 'block-region-' . $region);
-    $block['weight']['#attributes']['class'] = array('block-weight', 'block-weight-' . $region);
-
-    $variables['block_listing'][$region][$i] = new stdClass();
-    $variables['block_listing'][$region][$i]->row_class = !empty($block['#attributes']['class']) ? implode(' ', $block['#attributes']['class']) : '';
-    $variables['block_listing'][$region][$i]->block_modified = !empty($block['#attributes']['class']) && in_array('block-modified', $block['#attributes']['class']);
-    $variables['block_listing'][$region][$i]->block_title = drupal_render($block['info']);
-    $variables['block_listing'][$region][$i]->region_select = drupal_render($block['region']) . drupal_render($block['theme']);
-    $variables['block_listing'][$region][$i]->weight_select = drupal_render($block['weight']);
-    $variables['block_listing'][$region][$i]->configure_link = drupal_render($block['configure']);
-    $variables['block_listing'][$region][$i]->delete_link = !empty($block['delete']) ? drupal_render($block['delete']) : '';
-    $variables['block_listing'][$region][$i]->printed = FALSE;
-  }
-
-  $variables['form_submit'] = drupal_render_children($variables['form']);
-}
-
diff --git a/modules/block/block.css b/modules/block/block.css
deleted file mode 100644
index 214c8a2..0000000
--- a/modules/block/block.css
+++ /dev/null
@@ -1,36 +0,0 @@
-
-#blocks tr.region-title td {
-  font-weight: bold;
-}
-#blocks tr.region-message {
-  font-weight: normal;
-  color: #999;
-}
-#blocks tr.region-populated {
-  display: none;
-}
-.block-region {
-  background-color: #ff6;
-  margin-top: 4px;
-  margin-bottom: 4px;
-  padding: 3px;
-}
-a.block-demo-backlink,
-a.block-demo-backlink:link,
-a.block-demo-backlink:visited {
-  background-color: #B4D7F0;
-  -moz-border-radius: 0 0 10px 10px;
-  -webkit-border-radius: 0 0 10px 10px;
-  border-radius: 0 0 10px 10px;
-  color: #000;
-  font-family: "Lucida Grande", Verdana, sans-serif;
-  font-size: small;
-  line-height: 20px;
-  left: 20px; /*LTR*/
-  padding: 5px 10px;
-  position: fixed;
-  z-index: 499;
-}
-a.block-demo-backlink:hover {
-  text-decoration: underline;
-}
diff --git a/modules/block/block.info b/modules/block/block.info
deleted file mode 100644
index f8c0f0c..0000000
--- a/modules/block/block.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Block
-description = Controls the visual building blocks a page is constructed with. Blocks are boxes of content rendered into an area, or region, of a web page.
-package = Core
-version = VERSION
-core = 7.x
-files[] = block.test
-configure = admin/structure/block
diff --git a/modules/block/block.install b/modules/block/block.install
deleted file mode 100644
index a78c885..0000000
--- a/modules/block/block.install
+++ /dev/null
@@ -1,477 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the block module.
- */
-
-/**
- * Implements hook_schema().
- */
-function block_schema() {
-  $schema['block'] = array(
-    'description' => 'Stores block settings, such as region and visibility settings.',
-    'fields' => array(
-      'bid' => array(
-        'type' => 'serial',
-        'not null' => TRUE,
-        'description' => 'Primary Key: Unique block ID.',
-      ),
-      'module' => array(
-        'type' => 'varchar',
-        'length' => 64,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => "The module from which the block originates; for example, 'user' for the Who's Online block, and 'block' for any custom blocks.",
-      ),
-      'delta' => array(
-        'type' => 'varchar',
-        'length' => 32,
-        'not null' => TRUE,
-        'default' => '0',
-        'description' => 'Unique ID for block within a module.',
-      ),
-      'theme' => array(
-        'type' => 'varchar',
-        'length' => 64,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'The theme under which the block settings apply.',
-      ),
-      'status' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'size' => 'tiny',
-        'description' => 'Block enabled status. (1 = enabled, 0 = disabled)',
-      ),
-      'weight' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Block weight within region.',
-      ),
-      'region' => array(
-        'type' => 'varchar',
-        'length' => 64,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Theme region within which the block is set.',
-      ),
-      'custom' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'size' => 'tiny',
-        'description' => 'Flag to indicate how users may control visibility of the block. (0 = Users cannot control, 1 = On by default, but can be hidden, 2 = Hidden by default, but can be shown)',
-      ),
-      'visibility' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'size' => 'tiny',
-        'description' => 'Flag to indicate how to show blocks on pages. (0 = Show on all pages except listed pages, 1 = Show only on listed pages, 2 = Use custom PHP code to determine visibility)',
-      ),
-      'pages' => array(
-        'type' => 'text',
-        'not null' => TRUE,
-        'description' => 'Contents of the "Pages" block; contains either a list of paths on which to include/exclude the block or PHP code, depending on "visibility" setting.',
-      ),
-      'title' => array(
-        'type' => 'varchar',
-        'length' => 64,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Custom title for the block. (Empty string will use block default title, <none> will remove the title, text will cause block to use specified title.)',
-        'translatable' => TRUE,
-      ),
-      'cache' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 1,
-        'size' => 'tiny',
-        'description' => 'Binary flag to indicate block cache mode. (-2: Custom cache, -1: Do not cache, 1: Cache per role, 2: Cache per user, 4: Cache per page, 8: Block cache global) See DRUPAL_CACHE_* constants in ../includes/common.inc for more detailed information.',
-      ),
-    ),
-    'primary key' => array('bid'),
-    'unique keys' => array(
-      'tmd' => array('theme', 'module', 'delta'),
-    ),
-    'indexes' => array(
-      'list' => array('theme', 'status', 'region', 'weight', 'module'),
-    ),
-  );
-
-  $schema['block_role'] = array(
-    'description' => 'Sets up access permissions for blocks based on user roles',
-    'fields' => array(
-      'module' => array(
-        'type' => 'varchar',
-        'length' => 64,
-        'not null' => TRUE,
-        'description' => "The block's origin module, from {block}.module.",
-      ),
-      'delta' => array(
-        'type' => 'varchar',
-        'length' => 32,
-        'not null' => TRUE,
-        'description' => "The block's unique delta within module, from {block}.delta.",
-      ),
-      'rid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'description' => "The user's role ID from {users_roles}.rid.",
-      ),
-    ),
-    'primary key' => array('module', 'delta', 'rid'),
-    'indexes' => array(
-      'rid' => array('rid'),
-    ),
-  );
-
-  $schema['block_custom'] = array(
-    'description' => 'Stores contents of custom-made blocks.',
-    'fields' => array(
-      'bid' => array(
-        'type' => 'serial',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'description' => "The block's {block}.bid.",
-      ),
-      'body' => array(
-        'type' => 'text',
-        'not null' => FALSE,
-        'size' => 'big',
-        'description' => 'Block contents.',
-        'translatable' => TRUE,
-      ),
-      'info' => array(
-        'type' => 'varchar',
-        'length' => 128,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Block description.',
-      ),
-      'format' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => FALSE,
-        'description' => 'The {filter_format}.format of the block body.',
-      ),
-    ),
-    'unique keys' => array(
-      'info' => array('info'),
-    ),
-    'primary key' => array('bid'),
-  );
-
-  $schema['cache_block'] = drupal_get_schema_unprocessed('system', 'cache');
-  $schema['cache_block']['description'] = 'Cache table for the Block module to store already built blocks, identified by module, delta, and various contexts which may change the block, such as theme, locale, and caching mode defined for the block.';
-
-  return $schema;
-}
-
-/**
- * Implements hook_install().
- */
-function block_install() {
-
-  // Block should go first so that other modules can alter its output
-  // during hook_page_alter(). Almost everything on the page is a block,
-  // so before block module runs, there will not be much to alter.
-  db_update('system')
-    ->fields(array('weight' => -5))
-    ->condition('name', 'block')
-    ->execute();
-}
-
-/**
- * Implements hook_update_dependencies().
- */
-function block_update_dependencies() {
-  // block_update_7005() needs to query the {filter_format} table to get a list
-  // of existing text formats, so it must run after filter_update_7000(), which
-  // creates that table.
-  $dependencies['block'][7005] = array(
-    'filter' => 7000,
-  );
-
-  return $dependencies;
-}
-
-/**
- * @addtogroup updates-6.x-to-7.x
- * @{
- */
-
-/**
- * Set system.weight to a low value for block module.
- *
- * Block should go first so that other modules can alter its output
- * during hook_page_alter(). Almost everything on the page is a block,
- * so before block module runs, there will not be much to alter.
- */
-function block_update_7000() {
-  db_update('system')
-    ->fields(array('weight' => '-5'))
-    ->condition('name', 'block')
-    ->execute();
-}
-
-/**
- * Rename {blocks} table to {block}, {blocks_roles} to {block_role} and
- * {boxes} to {block_custom}.
- */
-function block_update_7002() {
-  db_drop_index('blocks', 'list');
-  db_rename_table('blocks', 'block');
-  db_rename_table('blocks_roles', 'block_role');
-  db_rename_table('boxes', 'block_custom');
-}
-
-/**
- * Change the weight column to normal int.
- */
-function block_update_7003() {
-  db_change_field('block', 'weight', 'weight', array(
-    'type' => 'int',
-    'not null' => TRUE,
-    'default' => 0,
-    'description' => 'Block weight within region.',
-  ), array(
-    'indexes' => array(
-      'list' => array('theme', 'status', 'region', 'weight', 'module'),
-    ),
-  ));
-}
-
-/**
- * Add new blocks to new regions, migrate custom variables to blocks.
- */
-function block_update_7004() {
-  // Collect a list of themes with blocks.
-  $themes_with_blocks = array();
-  $result = db_query("SELECT s.name FROM {system} s INNER JOIN {block} b ON s.name = b.theme WHERE s.type = 'theme' GROUP by s.name");
-
-  $insert = db_insert('block')->fields(array('module', 'delta', 'theme', 'status', 'weight', 'region', 'pages', 'cache'));
-  foreach ($result as $theme) {
-    $themes_with_blocks[] = $theme->name;
-    // Add new system generated help block.
-    $insert->values(array(
-      'module' => 'system',
-      'delta' => 'help',
-      'theme' => $theme->name,
-      'status' => 1,
-      'weight' => 0,
-      'region' => 'help',
-      'pages' => '',
-      'cache' => DRUPAL_CACHE_PER_ROLE,
-    ));
-    // Add new system generated main page content block.
-    $insert->values(array(
-      'module' => 'system',
-      'delta' => 'main',
-      'theme' => $theme->name,
-      'status' => 1,
-      'weight' => 0,
-      'region' => 'content',
-      'pages' => '',
-      'cache' => DRUPAL_NO_CACHE,
-    ));
-  }
-  $insert->execute();
-
-  // Migrate blocks from left/right regions to first/second regions.
-  db_update('block')
-    ->fields(array('region' => 'sidebar_first'))
-    ->condition('region', 'left')
-    ->execute();
-  db_update('block')
-    ->fields(array('region' => 'sidebar_second'))
-    ->condition('region', 'right')
-    ->execute();
-
-  // Migrate contact form information.
-  $default_format = variable_get('filter_default_format', 1);
-  if ($contact_help = variable_get('contact_form_information', '')) {
-    $bid = db_insert('block_custom')
-      ->fields(array(
-        'body' => $contact_help,
-        'info' => 'Contact page help',
-        'format' => $default_format,
-      ))
-      ->execute();
-
-    $insert = db_insert('block')->fields(array('module', 'delta', 'theme', 'status', 'weight', 'region', 'visibility', 'pages', 'cache'));
-    foreach ($themes_with_blocks as $theme) {
-      // Add contact help block for themes, which had blocks.
-      $insert->values(array(
-        'module' => 'block',
-        'delta' => $bid,
-        'theme' => $theme,
-        'status' => 1,
-        'weight' => 5,
-        'region' => 'help',
-        'visibility' => BLOCK_VISIBILITY_LISTED,
-        'pages' => 'contact',
-        'cache' => DRUPAL_NO_CACHE,
-      ));
-    }
-    drupal_set_message('The contact form information setting was migrated to <a href="' . url('admin/structure/block/manage/block/' . $bid . '/configure') . '">a custom block</a> and set up to only show on the site-wide contact page. The block was set to use the default text format, which might differ from the HTML based format used before. Check the block and ensure that the output is right.');
-  }
-  $insert->execute();
-
-  // Migrate user help setting.
-  if ($user_help = variable_get('user_registration_help', '')) {
-    $bid = db_insert('block_custom')->fields(array('body' => $user_help, 'info' => 'User registration guidelines', 'format' => $default_format))->execute();
-
-    $insert = db_insert('block')->fields(array('module', 'delta', 'theme', 'status', 'weight', 'region', 'visibility', 'pages', 'cache'));
-    foreach ($themes_with_blocks as $theme) {
-      // Add user registration help block for themes, which had blocks.
-      $insert->values(array(
-        'module' => 'block',
-        'delta' => $bid,
-        'theme' => $theme,
-        'status' => 1,
-        'weight' => 5,
-        'region' => 'help',
-        'visibility' => BLOCK_VISIBILITY_LISTED,
-        'pages' => 'user/register',
-        'cache' => DRUPAL_NO_CACHE,
-      ));
-    }
-    drupal_set_message('The user registration guidelines were migrated to <a href="' . url('admin/structure/block/manage/block/' . $bid . '/configure') . '">a custom block</a> and set up to only show on the user registration page. The block was set to use the default text format, which might differ from the HTML based format used before. Check the block and ensure that the output is right.');
-    $insert->execute();
-  }
-
-  // Migrate site mission setting.
-  if ($mission = variable_get('site_mission')) {
-    $bid = db_insert('block_custom')->fields(array('body' => $mission, 'info' => 'Site mission', 'format' => $default_format))->execute();
-
-    $insert = db_insert('block')->fields(array('module', 'delta', 'theme', 'status', 'weight', 'region', 'visibility', 'pages', 'cache'));
-    foreach ($themes_with_blocks as $theme) {
-      // Add mission block for themes, which had blocks.
-      $insert->values(array(
-        'module' => 'block',
-        'delta' => $bid,
-        'theme' => $theme,
-        'status' => 1,
-        'weight' => 0,
-        'region' => 'highlighted',
-        'visibility' => BLOCK_VISIBILITY_LISTED,
-        'pages' => '<front>',
-        'cache' => DRUPAL_NO_CACHE,
-      ));
-    }
-    drupal_set_message('The site mission was migrated to <a href="' . url('admin/structure/block/manage/block/' . $bid . '/configure') . '">a custom block</a> and set up to only show on the front page in the highlighted content region. The block was set to use the default text format, which might differ from the HTML based format used before. Check the block and ensure that the output is right. If your theme does not have a highlighted content region, you might need to <a href="' . url('admin/structure/block') . '">relocate the block</a>.');
-    $insert->execute();
-    // Migrate mission to RSS site description.
-    variable_set('feed_description', $mission);
-  }
-
-  // Migrate site footer message to a custom block.
-  if ($footer_message = variable_get('site_footer', '')) {
-    $bid = db_insert('block_custom')->fields(array('body' => $footer_message, 'info' => 'Footer message', 'format' => $default_format))->execute();
-
-    $insert = db_insert('block')->fields(array('module', 'delta', 'theme', 'status', 'weight', 'region', 'pages', 'cache'));
-    foreach ($themes_with_blocks as $theme) {
-      // Add site footer block for themes, which had blocks.
-      // Set low weight, so the block comes early (it used to be
-      // before the other blocks).
-      $insert->values(array(
-        'module' => 'block',
-        'delta' => $bid,
-        'theme' => $theme,
-        'status' => 1,
-        'weight' => -10,
-        'region' => 'footer',
-        'pages' => '',
-        'cache' => DRUPAL_NO_CACHE,
-      ));
-    }
-    drupal_set_message('The footer message was migrated to <a href="' . url('admin/structure/block/manage/block/' . $bid . '/configure') . '">a custom block</a> and set up to appear in the footer. The block was set to use the default text format, which might differ from the HTML based format used before. Check the block and ensure that the output is right. If your theme does not have a footer region, you might need to <a href="' . url('admin/structure/block') . '">relocate the block</a>.');
-    $insert->execute();
-  }
-
-  // Remove the variables (even if they were saved empty on the admin interface),
-  // to avoid keeping clutter in the variables table.
-  variable_del('contact_form_information');
-  variable_del('user_registration_help');
-  variable_del('site_mission');
-  variable_del('site_footer');
-
-  // Rebuild theme data, so the new 'help' region is identified.
-  system_rebuild_theme_data();
-}
-
-/**
- * Update the {block_custom}.format column.
- */
-function block_update_7005() {
-  // For an explanation of these updates, see the code comments in
-  // user_update_7010().
-  db_change_field('block_custom', 'format', 'format', array(
-    'type' => 'int',
-    'unsigned' => TRUE,
-    'not null' => FALSE,
-    'description' => 'The {filter_format}.format of the block body.',
-  ));
-  db_update('block_custom')
-    ->fields(array('format' => NULL))
-    ->condition('body', '')
-    ->condition('format', 0)
-    ->execute();
-  $existing_formats = db_query("SELECT format FROM {filter_format}")->fetchCol();
-  $default_format = variable_get('filter_default_format', 1);
-  db_update('block_custom')
-    ->fields(array('format' => $default_format))
-    ->isNotNull('format')
-    ->condition('format', $existing_formats, 'NOT IN')
-    ->execute();
-}
-
-/**
- * Recreates cache_block table.
- *
- * Converts fields that hold serialized variables from text to blob.
- * Removes 'headers' column.
- */
-function block_update_7006() {
-  $schema = system_schema_cache_7054();
-
-  db_drop_table('cache_block');
-  db_create_table('cache_block', $schema);
-}
-
-/**
- * Change {block_custom}.format into varchar.
- */
-function block_update_7007() {
-  db_change_field('block_custom', 'format', 'format', array(
-    'type' => 'varchar',
-    'length' => 255,
-    'not null' => FALSE,
-    'description' => 'The {filter_format}.format of the block body.',
-  ));
-}
-
-/**
- * @} End of "addtogroup updates-6.x-to-7.x".
- */
-
-/**
- * @addtogroup updates-7.x-extra
- * @{
- */
-
-/**
- * Update database to match Drupal 7 schema.
- */
-function block_update_7008() {
-  db_drop_field('block', 'throttle');
-}
-
-/**
- * @} End of "addtogroup updates-7.x-extra".
- */
diff --git a/modules/block/block.js b/modules/block/block.js
deleted file mode 100644
index acd3f5a..0000000
--- a/modules/block/block.js
+++ /dev/null
@@ -1,152 +0,0 @@
-(function ($) {
-
-/**
- * Provide the summary information for the block settings vertical tabs.
- */
-Drupal.behaviors.blockSettingsSummary = {
-  attach: function (context) {
-    // The drupalSetSummary method required for this behavior is not available
-    // on the Blocks administration page, so we need to make sure this
-    // behavior is processed only if drupalSetSummary is defined.
-    if (typeof jQuery.fn.drupalSetSummary == 'undefined') {
-      return;
-    }
-
-    $('fieldset#edit-path', context).drupalSetSummary(function (context) {
-      if (!$('textarea[name="pages"]', context).val()) {
-        return Drupal.t('Not restricted');
-      }
-      else {
-        return Drupal.t('Restricted to certain pages');
-      }
-    });
-
-    $('fieldset#edit-node-type', context).drupalSetSummary(function (context) {
-      var vals = [];
-      $('input[type="checkbox"]:checked', context).each(function () {
-        vals.push($.trim($(this).next('label').text()));
-      });
-      if (!vals.length) {
-        vals.push(Drupal.t('Not restricted'));
-      }
-      return vals.join(', ');
-    });
-
-    $('fieldset#edit-role', context).drupalSetSummary(function (context) {
-      var vals = [];
-      $('input[type="checkbox"]:checked', context).each(function () {
-        vals.push($.trim($(this).next('label').text()));
-      });
-      if (!vals.length) {
-        vals.push(Drupal.t('Not restricted'));
-      }
-      return vals.join(', ');
-    });
-
-    $('fieldset#edit-user', context).drupalSetSummary(function (context) {
-      var $radio = $('input[name="custom"]:checked', context);
-      if ($radio.val() == 0) {
-        return Drupal.t('Not customizable');
-      }
-      else {
-        return $radio.next('label').text();
-      }
-    });
-  }
-};
-
-/**
- * Move a block in the blocks table from one region to another via select list.
- *
- * This behavior is dependent on the tableDrag behavior, since it uses the
- * objects initialized in that behavior to update the row.
- */
-Drupal.behaviors.blockDrag = {
-  attach: function (context, settings) {
-    // tableDrag is required and we should be on the blocks admin page.
-    if (typeof Drupal.tableDrag == 'undefined' || typeof Drupal.tableDrag.blocks == 'undefined') {
-      return;
-    }
-
-    var table = $('table#blocks');
-    var tableDrag = Drupal.tableDrag.blocks; // Get the blocks tableDrag object.
-
-    // Add a handler for when a row is swapped, update empty regions.
-    tableDrag.row.prototype.onSwap = function (swappedRow) {
-      checkEmptyRegions(table, this);
-    };
-
-    // A custom message for the blocks page specifically.
-    Drupal.theme.tableDragChangedWarning = function () {
-      return '<div class="messages warning">' + Drupal.theme('tableDragChangedMarker') + ' ' + Drupal.t('The changes to these blocks will not be saved until the <em>Save blocks</em> button is clicked.') + '</div>';
-    };
-
-    // Add a handler so when a row is dropped, update fields dropped into new regions.
-    tableDrag.onDrop = function () {
-      dragObject = this;
-      // Use "region-message" row instead of "region" row because
-      // "region-{region_name}-message" is less prone to regexp match errors.
-      var regionRow = $(dragObject.rowObject.element).prevAll('tr.region-message').get(0);
-      var regionName = regionRow.className.replace(/([^ ]+[ ]+)*region-([^ ]+)-message([ ]+[^ ]+)*/, '$2');
-      var regionField = $('select.block-region-select', dragObject.rowObject.element);
-      // Check whether the newly picked region is available for this block.
-      if ($('option[value=' + regionName + ']', regionField).length == 0) {
-        // If not, alert the user and keep the block in its old region setting.
-        alert(Drupal.t('The block cannot be placed in this region.'));
-        // Simulate that there was a selected element change, so the row is put
-        // back to from where the user tried to drag it.
-        regionField.change();
-      }
-      else if ($(dragObject.rowObject.element).prev('tr').is('.region-message')) {
-        var weightField = $('select.block-weight', dragObject.rowObject.element);
-        var oldRegionName = weightField[0].className.replace(/([^ ]+[ ]+)*block-weight-([^ ]+)([ ]+[^ ]+)*/, '$2');
-
-        if (!regionField.is('.block-region-' + regionName)) {
-          regionField.removeClass('block-region-' + oldRegionName).addClass('block-region-' + regionName);
-          weightField.removeClass('block-weight-' + oldRegionName).addClass('block-weight-' + regionName);
-          regionField.val(regionName);
-        }
-      }
-    };
-
-    // Add the behavior to each region select list.
-    $('select.block-region-select', context).once('block-region-select', function () {
-      $(this).change(function (event) {
-        // Make our new row and select field.
-        var row = $(this).closest('tr');
-        var select = $(this);
-        tableDrag.rowObject = new tableDrag.row(row);
-
-        // Find the correct region and insert the row as the last in the region.
-        table.find('.region-' + select[0].value + '-message').nextUntil('.region-message').last().before(row);
-
-        // Modify empty regions with added or removed fields.
-        checkEmptyRegions(table, row);
-        // Remove focus from selectbox.
-        select.get(0).blur();
-      });
-    });
-
-    var checkEmptyRegions = function (table, rowObject) {
-      $('tr.region-message', table).each(function () {
-        // If the dragged row is in this region, but above the message row, swap it down one space.
-        if ($(this).prev('tr').get(0) == rowObject.element) {
-          // Prevent a recursion problem when using the keyboard to move rows up.
-          if ((rowObject.method != 'keyboard' || rowObject.direction == 'down')) {
-            rowObject.swap('after', this);
-          }
-        }
-        // This region has become empty.
-        if ($(this).next('tr').is(':not(.draggable)') || $(this).next('tr').length == 0) {
-          $(this).removeClass('region-populated').addClass('region-empty');
-        }
-        // This region has become populated.
-        else if ($(this).is('.region-empty')) {
-          $(this).removeClass('region-empty').addClass('region-populated');
-        }
-      });
-    };
-  }
-};
-
-})(jQuery);
diff --git a/modules/block/block.tpl.php b/modules/block/block.tpl.php
deleted file mode 100644
index f0bfa5c..0000000
--- a/modules/block/block.tpl.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to display a block.
- *
- * Available variables:
- * - $block->subject: Block title.
- * - $content: Block content.
- * - $block->module: Module that generated the block.
- * - $block->delta: An ID for the block, unique within each module.
- * - $block->region: The block region embedding the current block.
- * - $classes: String of classes that can be used to style contextually through
- *   CSS. It can be manipulated through the variable $classes_array from
- *   preprocess functions. The default values can be one or more of the
- *   following:
- *   - block: The current template type, i.e., "theming hook".
- *   - block-[module]: The module generating the block. For example, the user
- *     module is responsible for handling the default user navigation block. In
- *     that case the class would be 'block-user'.
- * - $title_prefix (array): An array containing additional output populated by
- *   modules, intended to be displayed in front of the main title tag that
- *   appears in the template.
- * - $title_suffix (array): An array containing additional output populated by
- *   modules, intended to be displayed after the main title tag that appears in
- *   the template.
- *
- * Helper variables:
- * - $classes_array: Array of html class attribute values. It is flattened
- *   into a string within the variable $classes.
- * - $block_zebra: Outputs 'odd' and 'even' dependent on each block region.
- * - $zebra: Same output as $block_zebra but independent of any block region.
- * - $block_id: Counter dependent on each block region.
- * - $id: Same output as $block_id but independent of any block region.
- * - $is_front: Flags true when presented in the front page.
- * - $logged_in: Flags true when the current user is a logged-in member.
- * - $is_admin: Flags true when the current user is an administrator.
- * - $block_html_id: A valid HTML ID and guaranteed unique.
- *
- * @see template_preprocess()
- * @see template_preprocess_block()
- * @see template_process()
- *
- * @ingroup themeable
- */
-?>
-<div id="<?php print $block_html_id; ?>" class="<?php print $classes; ?>"<?php print $attributes; ?>>
-
-  <?php print render($title_prefix); ?>
-<?php if ($block->subject): ?>
-  <h2<?php print $title_attributes; ?>><?php print $block->subject ?></h2>
-<?php endif;?>
-  <?php print render($title_suffix); ?>
-
-  <div class="content"<?php print $content_attributes; ?>>
-    <?php print $content ?>
-  </div>
-</div>
diff --git a/modules/block/tests/block_test.info b/modules/block/tests/block_test.info
deleted file mode 100644
index 879f251..0000000
--- a/modules/block/tests/block_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = Block test
-description = Provides test blocks.
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/block/tests/themes/block_test_theme/block_test_theme.info b/modules/block/tests/themes/block_test_theme/block_test_theme.info
deleted file mode 100644
index 06b6e99..0000000
--- a/modules/block/tests/themes/block_test_theme/block_test_theme.info
+++ /dev/null
@@ -1,14 +0,0 @@
-name = Block test theme
-description = Theme for testing the block system
-core = 7.x
-hidden = TRUE
-
-regions[sidebar_first] = Left sidebar
-regions_hidden[]  = sidebar_first
-regions[sidebar_second] = Right sidebar
-regions_hidden[]  = sidebar_second
-regions[content] = Content
-regions[header] = Header
-regions[footer] = Footer
-regions[highlighted] = Highlighted
-regions[help] = Help
diff --git a/modules/block/tests/themes/block_test_theme/page.tpl.php b/modules/block/tests/themes/block_test_theme/page.tpl.php
deleted file mode 100644
index ba72882..0000000
--- a/modules/block/tests/themes/block_test_theme/page.tpl.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-
-/**
- * @file
- * Custom theme implementation to display a single Drupal page without
- * sidebars. The sidebars are hidden by regions_hidden for this theme, so
- * the default page.tpl.php will not work without throwing exceptions.
- */
-?>
-
-  <div id="page-wrapper"><div id="page">
-
-    <div id="header"><div class="section clearfix">
-
-      <?php if ($logo): ?>
-        <a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home" id="logo">
-          <img src="<?php print $logo; ?>" alt="<?php print t('Home'); ?>" />
-        </a>
-      <?php endif; ?>
-
-      <?php if ($site_name || $site_slogan): ?>
-        <div id="name-and-slogan">
-          <?php if ($site_name): ?>
-            <?php if ($title): ?>
-              <div id="site-name"><strong>
-                <a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home"><span><?php print $site_name; ?></span></a>
-              </strong></div>
-            <?php else: /* Use h1 when the content title is empty */ ?>
-              <h1 id="site-name">
-                <a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home"><span><?php print $site_name; ?></span></a>
-              </h1>
-            <?php endif; ?>
-          <?php endif; ?>
-
-          <?php if ($site_slogan): ?>
-            <div id="site-slogan"><?php print $site_slogan; ?></div>
-          <?php endif; ?>
-        </div> <!-- /#name-and-slogan -->
-      <?php endif; ?>
-
-      <?php print render($page['header']); ?>
-
-    </div></div> <!-- /.section, /#header -->
-
-    <?php if ($main_menu || $secondary_menu): ?>
-      <div id="navigation"><div class="section">
-        <?php print theme('links__system_main_menu', array('links' => $main_menu, 'attributes' => array('id' => 'main-menu', 'class' => array('links', 'inline', 'clearfix')), 'heading' => t('Main menu'))); ?>
-        <?php print theme('links__system_secondary_menu', array('links' => $secondary_menu, 'attributes' => array('id' => 'secondary-menu', 'class' => array('links', 'inline', 'clearfix')), 'heading' => t('Secondary menu'))); ?>
-      </div></div> <!-- /.section, /#navigation -->
-    <?php endif; ?>
-
-    <?php if ($breadcrumb): ?>
-      <div id="breadcrumb"><?php print $breadcrumb; ?></div>
-    <?php endif; ?>
-
-    <?php print $messages; ?>
-
-    <div id="main-wrapper"><div id="main" class="clearfix">
-
-      <div id="content" class="column"><div class="section">
-        <?php if ($page['highlighted']): ?><div id="highlighted"><?php print render($page['highlighted']); ?></div><?php endif; ?>
-        <a id="main-content"></a>
-        <?php print render($title_prefix); ?>
-        <?php if ($title): ?><h1 class="title" id="page-title"><?php print $title; ?></h1><?php endif; ?>
-        <?php print render($title_suffix); ?>
-        <?php if ($tabs = render($tabs)): ?><div class="tabs"><?php print $tabs; ?></div><?php endif; ?>
-        <?php print render($page['help']); ?>
-        <?php if ($action_links): ?><ul class="action-links"><?php print render($action_links); ?></ul><?php endif; ?>
-        <?php print render($page['content']); ?>
-        <?php print $feed_icons; ?>
-      </div></div> <!-- /.section, /#content -->
-    </div></div> <!-- /#main, /#main-wrapper -->
-
-    <div id="footer"><div class="section">
-      <?php print render($page['footer']); ?>
-    </div></div> <!-- /.section, /#footer -->
-
-  </div></div> <!-- /#page, /#page-wrapper -->
diff --git a/modules/blog/blog.info b/modules/blog/blog.info
deleted file mode 100644
index 801abfb..0000000
--- a/modules/blog/blog.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = Blog
-description = Enables multi-user blogs.
-package = Core
-version = VERSION
-core = 7.x
-files[] = blog.test
diff --git a/modules/blog/blog.install b/modules/blog/blog.install
deleted file mode 100644
index fffb14b..0000000
--- a/modules/blog/blog.install
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the blog module.
- */
-
-/**
- * Implements hook_install().
- */
-function blog_install() {
-  // Ensure the blog node type is available.
-  node_types_rebuild();
-  $types = node_type_get_types();
-  node_add_body_field($types['blog']);
-}
-
-/**
- * Implements hook_uninstall().
- */
-function blog_uninstall() {
-  variable_del('blog_block_count');
-}
diff --git a/modules/blog/blog.module b/modules/blog/blog.module
deleted file mode 100644
index 11e3ab9..0000000
--- a/modules/blog/blog.module
+++ /dev/null
@@ -1,272 +0,0 @@
-<?php
-
-/**
- * @file
- * Enables multi-user blogs.
- */
-
-/**
- * Implements hook_node_info().
- */
-function blog_node_info() {
-  return array(
-    'blog' => array(
-      'name' => t('Blog entry'),
-      'base' => 'blog',
-      'description' => t('Use for multi-user blogs. Every user gets a personal blog.'),
-    )
-  );
-}
-
-/**
- * Implements hook_user_view().
- */
-function blog_user_view($account) {
-  if (user_access('create blog content', $account)) {
-    $account->content['summary']['blog'] =  array(
-      '#type' => 'user_profile_item',
-      '#title' => t('Blog'),
-      // l() escapes the attributes, so we should not escape !username here.
-      '#markup' => l(t('View recent blog entries'), "blog/$account->uid", array('attributes' => array('title' => t("Read !username's latest blog entries.", array('!username' => format_username($account)))))),
-      '#attributes' => array('class' => array('blog')),
-    );
-  }
-}
-
-/**
- * Implements hook_help().
- */
-function blog_help($path, $arg) {
-  switch ($path) {
-    case 'admin/help#blog':
-      $output = '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t("The Blog module allows registered users to maintain an online journal, or <em>blog</em>. Blogs are made up of individual <em>blog entries</em>. By default, the blog entries are displayed by creation time in descending order, with comments enabled, and are promoted to the site's front page. For more information, see the online handbook entry for <a href='@blog'>Blog module</a>.", array('@blog' => 'http://drupal.org/documentation/modules/blog/')) . '</p>';
-      $output .= '<h3>' . t('Uses') . '</h3>';
-      $output .= '<dl>';
-      $output .= '<dt>' . t('Single-user blogs') . '</dt>';
-      $output .= '<dd>' . t("Each user's blog entries are automatically displayed with a link to the user's main blog page. You can create as many single-user blogs as you have site users with permission to create blog content.") . '</dd>';
-      $output .= '<dt>' . t('Multi-user blogs') . '</dt>';
-      $output .= '<dd>' . t("Blog entries from each single-user blog are also aggregated into one central multi-user blog, which displays the blog content of all users in a single listing.") . '</dd>';
-      $output .= '<dt>' . t('Navigation') . '</dt>';
-      $output .= '<dd>' . t("There is an optional <em>Blogs</em> menu item added to the Navigation menu, which displays all blogs available on your site, and a <em>My blog</em> item displaying the current user's blog entries.") . '</dd>';
-      $output .= '<dt>' . t('Blocks') . '</dt>';
-      $output .= '<dd>' . t('The Blog module also creates a default <em>Recent blog posts</em> block that may be enabled at the <a href="@blocks">blocks administration page</a>.', array('@blocks' => url('admin/structure/block'))) . '</dd>';
-      $output .= '</dl>';
-      return $output;
-  }
-}
-
-/**
- * Implements hook_form().
- */
-function blog_form($node, $form_state) {
-  return node_content_form($node, $form_state);
-}
-
-/**
- * Implements hook_view().
- */
-function blog_view($node, $view_mode) {
-  if ($view_mode == 'full' && node_is_page($node)) {
-    // Breadcrumb navigation.  l() escapes title, so we should not escape !name.
-    drupal_set_breadcrumb(array(l(t('Home'), NULL), l(t('Blogs'), 'blog'), l(t("!name's blog", array('!name' => format_username($node))), 'blog/' . $node->uid)));
-  }
-  return $node;
-}
-
-/**
- * Implements hook_node_view().
- */
-function blog_node_view($node, $view_mode) {
-  if ($view_mode != 'rss') {
-    if ($node->type == 'blog' && (arg(0) != 'blog' || arg(1) != $node->uid)) {
-      // This goes to l(), which escapes !username in both title and attributes.
-      $links['blog_usernames_blog'] = array(
-        'title' => t("!username's blog", array('!username' => format_username($node))),
-        'href' => "blog/$node->uid",
-        'attributes' => array('title' => t("Read !username's latest blog entries.", array('!username' => format_username($node)))),
-      );
-      $node->content['links']['blog'] = array(
-        '#theme' => 'links__node__blog',
-        '#links' => $links,
-        '#attributes' => array('class' => array('links', 'inline')),
-      );
-    }
-  }
-}
-
-/**
- * Implements hook_menu().
- */
-function blog_menu() {
-  $items['blog'] = array(
-    'title' => 'Blogs',
-    'page callback' => 'blog_page_last',
-    'access arguments' => array('access content'),
-    'type' => MENU_SUGGESTED_ITEM,
-    'file' => 'blog.pages.inc',
-  );
-  $items['blog/%user_uid_optional'] = array(
-    'title' => 'My blog',
-    'page callback' => 'blog_page_user',
-    'page arguments' => array(1),
-    'access callback' => 'blog_page_user_access',
-    'access arguments' => array(1),
-    'file' => 'blog.pages.inc',
-  );
-  $items['blog/%user/feed'] = array(
-    'title' => 'Blogs',
-    'page callback' => 'blog_feed_user',
-    'page arguments' => array(1),
-    'access callback' => 'blog_page_user_access',
-    'access arguments' => array(1),
-    'type' => MENU_CALLBACK,
-    'file' => 'blog.pages.inc',
-  );
-  $items['blog/feed'] = array(
-    'title' => 'Blogs',
-    'page callback' => 'blog_feed_last',
-    'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
-    'file' => 'blog.pages.inc',
-  );
-
-  return $items;
-}
-
-/**
- * Implements hook_menu_local_tasks_alter().
- */
-function blog_menu_local_tasks_alter(&$data, $router_item, $root_path) {
-  global $user;
-
-  // Add action link to 'node/add/blog' on 'blog' page.
-  if ($root_path == 'blog') {
-    $item = menu_get_item('node/add/blog');
-    if ($item['access']) {
-      $item['title'] = t('Create new blog entry');
-      $data['actions']['output'][] = array(
-        '#theme' => 'menu_local_action',
-        '#link' => $item,
-      );
-    }
-  }
-  // Provide a helper action link to the author on the 'blog/%' page.
-  elseif ($root_path == 'blog/%' && $router_item['page_arguments'][0]->uid == $user->uid) {
-    $data['actions']['output']['blog'] = array(
-      '#theme' => 'menu_local_action',
-    );
-    if (user_access('create blog content')) {
-      $data['actions']['output']['blog']['#link']['title'] = t('Post new blog entry.');
-      $data['actions']['output']['blog']['#link']['href'] = 'node/add/blog';
-    }
-    else {
-      $data['actions']['output']['blog']['#link']['title'] = t('You are not allowed to post a new blog entry.');
-    }
-  }
-}
-
-/**
- * Access callback for user blog pages.
- */
-function blog_page_user_access($account) {
-  // The visitor must be able to access the site's content.
-  // For a blog to 'exist' the user must either be able to
-  // create new blog entries, or it must have existing posts.
-  return $account->uid && user_access('access content') && (user_access('create blog content', $account) || _blog_post_exists($account));
-}
-
-/**
- * Helper function to determine if a user has blog posts already.
- */
-function _blog_post_exists($account) {
-  return (bool)db_select('node', 'n')
-    ->fields('n', array('nid'))
-    ->condition('type', 'blog')
-    ->condition('uid', $account->uid)
-    ->condition('status', 1)
-    ->range(0, 1)
-    ->addTag('node_access')
-    ->execute()
-    ->fetchField();
-}
-
-/**
- * Implements hook_block_info().
- */
-function blog_block_info() {
-  $block['recent']['info'] = t('Recent blog posts');
-  $block['recent']['properties']['administrative'] = TRUE;
-  return $block;
-}
-
-/**
- * Implements hook_block_configure().
- */
-function blog_block_configure($delta = '') {
-  if ($delta == 'recent') {
-    $form['blog_block_count'] = array(
-      '#type' => 'select',
-      '#title' => t('Number of recent blog posts to display'),
-      '#default_value' => variable_get('blog_block_count', 10),
-      '#options' => drupal_map_assoc(array(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 30)),
-    );
-    return $form;
-  }
-}
-
-/**
- * Implements hook_block_save().
- */
-function blog_block_save($delta = '', $edit = array()) {
-  if ($delta == 'recent') {
-    variable_set('blog_block_count', $edit['blog_block_count']);
-  }
-}
-
-/**
- * Implements hook_block_view().
- *
- * Displays the most recent 10 blog titles.
- */
-function blog_block_view($delta = '') {
-  global $user;
-
-  if (user_access('access content')) {
-    $result = db_select('node', 'n')
-      ->fields('n', array('nid', 'title', 'created'))
-      ->condition('type', 'blog')
-      ->condition('status', 1)
-      ->orderBy('created', 'DESC')
-      ->range(0, variable_get('blog_block_count', 10))
-      ->addTag('node_access')
-      ->execute();
-
-    if ($node_title_list = node_title_list($result)) {
-      $block['subject'] = t('Recent blog posts');
-      $block['content']['blog_list'] = $node_title_list;
-      $block['content']['blog_more'] = array(
-        '#theme' => 'more_link',
-        '#url' => 'blog',
-        '#title' => t('Read the latest blog entries.'),
-      );
-
-      return $block;
-    }
-  }
-}
-
-/**
- * Implements hook_rdf_mapping().
- */
-function blog_rdf_mapping() {
-  return array(
-    array(
-      'type' => 'node',
-      'bundle' => 'blog',
-      'mapping' => array(
-        'rdftype' => array('sioc:Post', 'sioct:BlogPost'),
-      ),
-    ),
-  );
-}
diff --git a/modules/blog/blog.pages.inc b/modules/blog/blog.pages.inc
deleted file mode 100644
index 3684028..0000000
--- a/modules/blog/blog.pages.inc
+++ /dev/null
@@ -1,127 +0,0 @@
-<?php
-
-/**
- * @file
- * Page callback file for the blog module.
- */
-
-/**
- * Menu callback; displays a Drupal page containing recent blog entries of a given user.
- */
-function blog_page_user($account) {
-  global $user;
-
-  drupal_set_title($title = t("@name's blog", array('@name' => format_username($account))), PASS_THROUGH);
-
-  $build = array();
-
-  $query = db_select('node', 'n')->extend('PagerDefault');
-  $nids = $query
-    ->fields('n', array('nid', 'sticky', 'created'))
-    ->condition('type', 'blog')
-    ->condition('uid', $account->uid)
-    ->condition('status', 1)
-    ->orderBy('sticky', 'DESC')
-    ->orderBy('created', 'DESC')
-    ->limit(variable_get('default_nodes_main', 10))
-    ->addTag('node_access')
-    ->execute()
-    ->fetchCol();
-
-  if (!empty($nids)) {
-    $nodes = node_load_multiple($nids);
-    $build += node_view_multiple($nodes);
-    $build['pager'] = array(
-      '#theme' => 'pager',
-      '#weight' => 5,
-    );
-  }
-  else {
-    if ($account->uid == $user->uid) {
-      drupal_set_message(t('You have not created any blog entries.'));
-    }
-    else {
-      drupal_set_message(t('!author has not created any blog entries.', array('!author' => theme('username', array('account' => $account)))));
-    }
-  }
-  drupal_add_feed('blog/' . $account->uid . '/feed', t('RSS - !title', array('!title' => $title)));
-
-  return $build;
-}
-
-/**
- * Menu callback; displays a Drupal page containing recent blog entries of all users.
- */
-function blog_page_last() {
-  global $user;
-  $build = array();
-
-  $query = db_select('node', 'n')->extend('PagerDefault');
-  $nids = $query
-    ->fields('n', array('nid', 'sticky', 'created'))
-    ->condition('type', 'blog')
-    ->condition('status', 1)
-    ->orderBy('sticky', 'DESC')
-    ->orderBy('created', 'DESC')
-    ->limit(variable_get('default_nodes_main', 10))
-    ->addTag('node_access')
-    ->execute()
-    ->fetchCol();
-
-  if (!empty($nids)) {
-    $nodes = node_load_multiple($nids);
-    $build += node_view_multiple($nodes);
-    $build['pager'] = array(
-      '#theme' => 'pager',
-      '#weight' => 5,
-    );
-  }
-  else {
-    drupal_set_message(t('No blog entries have been created.'));
-  }
-  drupal_add_feed('blog/feed', t('RSS - blogs'));
-
-  return $build;
-}
-
-/**
- * Menu callback; displays an RSS feed containing recent blog entries of a given user.
- */
-function blog_feed_user($account) {
-
-  $nids = db_select('node', 'n')
-    ->fields('n', array('nid', 'created'))
-    ->condition('type', 'blog')
-    ->condition('uid', $account->uid)
-    ->condition('status', 1)
-    ->orderBy('created', 'DESC')
-    ->range(0, variable_get('feed_default_items', 10))
-    ->addTag('node_access')
-    ->execute()
-    ->fetchCol();
-
-  $channel['title'] = t("!name's blog", array('!name' => format_username($account)));
-  $channel['link'] = url('blog/' . $account->uid, array('absolute' => TRUE));
-
-  node_feed($nids, $channel);
-}
-
-/**
- * Menu callback; displays an RSS feed containing recent blog entries of all users.
- */
-function blog_feed_last() {
-  $nids = db_select('node', 'n')
-    ->fields('n', array('nid', 'created'))
-    ->condition('type', 'blog')
-    ->condition('status', 1)
-    ->orderBy('created', 'DESC')
-    ->range(0, variable_get('feed_default_items', 10))
-    ->addTag('node_access')
-    ->execute()
-    ->fetchCol();
-
-  $channel['title'] = t('!site_name blogs', array('!site_name' => variable_get('site_name', 'Drupal')));
-  $channel['link'] = url('blog', array('absolute' => TRUE));
-
-  node_feed($nids, $channel);
-}
diff --git a/modules/blog/blog.test b/modules/blog/blog.test
deleted file mode 100644
index b917294..0000000
--- a/modules/blog/blog.test
+++ /dev/null
@@ -1,213 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for blog.module.
- */
-
-class BlogTestCase extends DrupalWebTestCase {
-  protected $big_user;
-  protected $own_user;
-  protected $any_user;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Blog functionality',
-      'description' => 'Create, view, edit, delete, and change blog entries and verify its consistency in the database.',
-      'group' => 'Blog',
-    );
-  }
-
-  /**
-   * Enable modules and create users with specific permissions.
-   */
-  function setUp() {
-    parent::setUp('blog');
-    // Create users.
-    $this->big_user = $this->drupalCreateUser(array('administer blocks'));
-    $this->own_user = $this->drupalCreateUser(array('create blog content', 'edit own blog content', 'delete own blog content'));
-    $this->any_user = $this->drupalCreateUser(array('create blog content', 'edit any blog content', 'delete any blog content', 'access administration pages'));
-  }
-
-  /**
-   * Confirm that the "You are not allowed to post a new blog entry." message
-   * shows up if a user submitted blog entries, has been denied that
-   * permission, and goes to the blog page.
-   */
-  function testUnprivilegedUser() {
-    // Create a blog node for a user with no blog permissions.
-    $this->drupalCreateNode(array('type' => 'blog', 'uid' => $this->big_user->uid));
-
-    $this->drupalLogin($this->big_user);
-
-    $this->drupalGet('blog/' . $this->big_user->uid);
-    $this->assertResponse(200);
-    $this->assertTitle(t("@name's blog", array('@name' => format_username($this->big_user))) . ' | Drupal', 'Blog title was displayed');
-    $this->assertText(t('You are not allowed to post a new blog entry.'), 'No new entries can be posted without the right permission');
-  }
-
-  /**
-   * View the blog of a user with no blog entries as another user.
-   */
-  function testBlogPageNoEntries() {
-    $this->drupalLogin($this->big_user);
-
-    $this->drupalGet('blog/' . $this->own_user->uid);
-    $this->assertResponse(200);
-    $this->assertTitle(t("@name's blog", array('@name' => format_username($this->own_user))) . ' | Drupal', 'Blog title was displayed');
-    $this->assertText(t('@author has not created any blog entries.', array('@author' => format_username($this->own_user))), 'Users blog displayed with no entries');
-  }
-
-  /**
-   * Login users, create blog nodes, and test blog functionality through the admin and user interfaces.
-   */
-  function testBlog() {
-    // Login the admin user.
-    $this->drupalLogin($this->big_user);
-    // Enable the recent blog block.
-    $edit = array();
-    $edit['blocks[blog_recent][region]'] = 'sidebar_second';
-    $this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
-    $this->assertResponse(200);
-    // Verify ability to change number of recent blog posts in block.
-    $edit = array();
-    $edit['blog_block_count'] = 5;
-    $this->drupalPost('admin/structure/block/manage/blog/recent/configure', $edit, t('Save block'));
-    $this->assertEqual(variable_get('blog_block_count', 10), 5, 'Number of recent blog posts changed.');
-
-    // Do basic tests for each user.
-    $this->doBasicTests($this->any_user, TRUE);
-    $this->doBasicTests($this->own_user, FALSE);
-
-    // Create another blog node for the any blog user.
-    $node = $this->drupalCreateNode(array('type' => 'blog', 'uid' => $this->any_user->uid));
-    // Verify the own blog user only has access to the blog view node.
-    $this->verifyBlogs($this->any_user, $node, FALSE, 403);
-
-    // Create another blog node for the own blog user.
-    $node = $this->drupalCreateNode(array('type' => 'blog', 'uid' => $this->own_user->uid));
-    // Login the any blog user.
-    $this->drupalLogin($this->any_user);
-    // Verify the any blog user has access to all the blog nodes.
-    $this->verifyBlogs($this->own_user, $node, TRUE);
-  }
-
-  /**
-   * Run basic tests on the indicated user.
-   *
-   * @param object $user
-   *   The logged in user.
-   * @param boolean $admin
-   *   User has 'access administration pages' privilege.
-   */
-  private function doBasicTests($user, $admin) {
-    // Login the user.
-    $this->drupalLogin($user);
-    // Create blog node.
-    $node = $this->drupalCreateNode(array('type' => 'blog'));
-    // Verify the user has access to all the blog nodes.
-    $this->verifyBlogs($user, $node, $admin);
-    // Create one more node to test the blog page with more than one node
-    $this->drupalCreateNode(array('type' => 'blog', 'uid' => $user->uid));
-    // Verify the blog links are displayed.
-    $this->verifyBlogLinks($user);
-  }
-
-  /**
-   * Verify the logged in user has the desired access to the various blog nodes.
-   *
-   * @param object $node_user
-   *   The user who creates the node.
-   * @param object $node
-   *   A node object.
-   * @param boolean $admin
-   *   User has 'access administration pages' privilege.
-   * @param integer $response
-   *   HTTP response code.
-   */
-  private function verifyBlogs($node_user, $node, $admin, $response = 200) {
-    $response2 = ($admin) ? 200 : 403;
-
-    // View blog help node.
-    $this->drupalGet('admin/help/blog');
-    $this->assertResponse($response2);
-    if ($response2 == 200) {
-      $this->assertTitle(t('Blog | Drupal'), 'Blog help node was displayed');
-      $this->assertText(t('Blog'), 'Blog help node was displayed');
-    }
-
-    // Verify the blog block was displayed.
-    $this->drupalGet('');
-    $this->assertResponse(200);
-    $this->assertText(t('Recent blog posts'), 'Blog block was displayed');
-
-    // View blog node.
-    $this->drupalGet('node/' . $node->nid);
-    $this->assertResponse(200);
-    $this->assertTitle($node->title . ' | Drupal', 'Blog node was displayed');
-    $breadcrumb = array(
-      l(t('Home'), NULL),
-      l(t('Blogs'), 'blog'),
-      l(t("!name's blog", array('!name' => format_username($node_user))), 'blog/' . $node_user->uid),
-    );
-    $this->assertRaw(theme('breadcrumb', array('breadcrumb' => $breadcrumb)), 'Breadcrumbs were displayed');
-
-    // View blog edit node.
-    $this->drupalGet('node/' . $node->nid . '/edit');
-    $this->assertResponse($response);
-    if ($response == 200) {
-      $this->assertTitle('Edit Blog entry ' . $node->title . ' | Drupal', 'Blog edit node was displayed');
-    }
-
-    if ($response == 200) {
-      // Edit blog node.
-      $edit = array();
-      $langcode = LANGUAGE_NONE;
-      $edit["title"] = 'node/' . $node->nid;
-      $edit["body[$langcode][0][value]"] = $this->randomName(256);
-      $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
-      $this->assertRaw(t('Blog entry %title has been updated.', array('%title' => $edit["title"])), 'Blog node was edited');
-
-      // Delete blog node.
-      $this->drupalPost('node/' . $node->nid . '/delete', array(), t('Delete'));
-      $this->assertResponse($response);
-      $this->assertRaw(t('Blog entry %title has been deleted.', array('%title' => $edit["title"])), 'Blog node was deleted');
-    }
-  }
-
-  /**
-   * Verify the blog links are displayed to the logged in user.
-   *
-   * @param object $user
-   *   The logged in user.
-   */
-  private function verifyBlogLinks($user) {
-    // Confirm blog entries link exists on the user page.
-    $this->drupalGet('user/' . $user->uid);
-    $this->assertResponse(200);
-    $this->assertText(t('View recent blog entries'), 'View recent blog entries link was displayed');
-
-    // Confirm the recent blog entries link goes to the user's blog page.
-    $this->clickLink('View recent blog entries');
-    $this->assertTitle(t("@name's blog | Drupal", array('@name' => format_username($user))), 'View recent blog entries link target was correct');
-
-    // Confirm a blog page was displayed.
-    $this->drupalGet('blog');
-    $this->assertResponse(200);
-    $this->assertTitle('Blogs | Drupal', 'Blog page was displayed');
-    $this->assertText(t('Home'), 'Breadcrumbs were displayed');
-    $this->assertLink(t('Create new blog entry'));
-
-    // Confirm a blog page was displayed per user.
-    $this->drupalGet('blog/' . $user->uid);
-    $this->assertTitle(t("@name's blog | Drupal", array('@name' => format_username($user))), 'User blog node was displayed');
-
-    // Confirm a blog feed was displayed.
-    $this->drupalGet('blog/feed');
-    $this->assertTitle(t('Drupal blogs'), 'Blog feed was displayed');
-
-    // Confirm a blog feed was displayed per user.
-    $this->drupalGet('blog/' . $user->uid . '/feed');
-    $this->assertTitle(t("@name's blog", array('@name' => format_username($user))), 'User blog feed was displayed');
-  }
-}
diff --git a/modules/book/book-all-books-block.tpl.php b/modules/book/book-all-books-block.tpl.php
deleted file mode 100644
index 3a5a287..0000000
--- a/modules/book/book-all-books-block.tpl.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation for rendering book outlines within a block.
- *
- * This template is used only when the block is configured to "show block on all
- * pages", which presents multiple independent books on all pages.
- *
- * Available variables:
- * - $book_menus: Array of book outlines keyed to the parent book ID. Call
- *   render() on each to print it as an unordered list.
- *
- * @see template_preprocess_book_all_books_block()
- *
- * @ingroup themeable
- */
-?>
-<?php foreach ($book_menus as $book_id => $menu): ?>
-  <div id="book-block-menu-<?php print $book_id; ?>" class="book-block-menu">
-    <?php print render($menu); ?>
-  </div>
-<?php endforeach; ?>
diff --git a/modules/book/book-export-html.tpl.php b/modules/book/book-export-html.tpl.php
deleted file mode 100644
index d22b7d2..0000000
--- a/modules/book/book-export-html.tpl.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation for printed version of book outline.
- *
- * Available variables:
- * - $title: Top level node title.
- * - $head: Header tags.
- * - $language: Language code. e.g. "en" for english.
- * - $language_rtl: TRUE or FALSE depending on right to left language scripts.
- * - $base_url: URL to home page.
- * - $contents: Nodes within the current outline rendered through
- *   book-node-export-html.tpl.php.
- *
- * @see template_preprocess_book_export_html()
- *
- * @ingroup themeable
- */
-?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="<?php print $language->language; ?>" xml:lang="<?php print $language->language; ?>" dir="<?php print $dir; ?>">
-  <head>
-    <title><?php print $title; ?></title>
-    <?php print $head; ?>
-    <base href="<?php print $base_url; ?>" />
-    <link type="text/css" rel="stylesheet" href="misc/print.css" />
-    <?php if ($language_rtl): ?>
-      <link type="text/css" rel="stylesheet" href="misc/print-rtl.css" />
-    <?php endif; ?>
-  </head>
-  <body>
-    <?php
-    /**
-     * The given node is /embedded to its absolute depth in a top level
-     * section/. For example, a child node with depth 2 in the hierarchy is
-     * contained in (otherwise empty) &lt;div&gt; elements corresponding to
-     * depth 0 and depth 1. This is intended to support WYSIWYG output - e.g.,
-     * level 3 sections always look like level 3 sections, no matter their
-     * depth relative to the node selected to be exported as printer-friendly
-     * HTML.
-     */
-    $div_close = '';
-    ?>
-    <?php for ($i = 1; $i < $depth; $i++): ?>
-      <div class="section-<?php print $i; ?>">
-      <?php $div_close .= '</div>'; ?>
-    <?php endfor; ?>
-    <?php print $contents; ?>
-    <?php print $div_close; ?>
-  </body>
-</html>
diff --git a/modules/book/book-navigation.tpl.php b/modules/book/book-navigation.tpl.php
deleted file mode 100644
index 7a6b34c..0000000
--- a/modules/book/book-navigation.tpl.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to navigate books.
- *
- * Presented under nodes that are a part of book outlines.
- *
- * Available variables:
- * - $tree: The immediate children of the current node rendered as an unordered
- *   list.
- * - $current_depth: Depth of the current node within the book outline. Provided
- *   for context.
- * - $prev_url: URL to the previous node.
- * - $prev_title: Title of the previous node.
- * - $parent_url: URL to the parent node.
- * - $parent_title: Title of the parent node. Not printed by default. Provided
- *   as an option.
- * - $next_url: URL to the next node.
- * - $next_title: Title of the next node.
- * - $has_links: Flags TRUE whenever the previous, parent or next data has a
- *   value.
- * - $book_id: The book ID of the current outline being viewed. Same as the node
- *   ID containing the entire outline. Provided for context.
- * - $book_url: The book/node URL of the current outline being viewed. Provided
- *   as an option. Not used by default.
- * - $book_title: The book/node title of the current outline being viewed.
- *   Provided as an option. Not used by default.
- *
- * @see template_preprocess_book_navigation()
- *
- * @ingroup themeable
- */
-?>
-<?php if ($tree || $has_links): ?>
-  <div id="book-navigation-<?php print $book_id; ?>" class="book-navigation">
-    <?php print $tree; ?>
-
-    <?php if ($has_links): ?>
-    <div class="page-links clearfix">
-      <?php if ($prev_url): ?>
-        <a href="<?php print $prev_url; ?>" class="page-previous" title="<?php print t('Go to previous page'); ?>"><?php print t('‹ ') . $prev_title; ?></a>
-      <?php endif; ?>
-      <?php if ($parent_url): ?>
-        <a href="<?php print $parent_url; ?>" class="page-up" title="<?php print t('Go to parent page'); ?>"><?php print t('up'); ?></a>
-      <?php endif; ?>
-      <?php if ($next_url): ?>
-        <a href="<?php print $next_url; ?>" class="page-next" title="<?php print t('Go to next page'); ?>"><?php print $next_title . t(' ›'); ?></a>
-      <?php endif; ?>
-    </div>
-    <?php endif; ?>
-
-  </div>
-<?php endif; ?>
diff --git a/modules/book/book-node-export-html.tpl.php b/modules/book/book-node-export-html.tpl.php
deleted file mode 100644
index 0c2c67c..0000000
--- a/modules/book/book-node-export-html.tpl.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation for a single node in a printer-friendly outline.
- *
- * @see book-node-export-html.tpl.php
- * Where it is collected and printed out.
- *
- * Available variables:
- * - $depth: Depth of the current node inside the outline.
- * - $title: Node title.
- * - $content: Node content.
- * - $children: All the child nodes recursively rendered through this file.
- *
- * @see template_preprocess_book_node_export_html()
- *
- * @ingroup themeable
- */
-?>
-<div id="node-<?php print $node->nid; ?>" class="section-<?php print $depth; ?>">
-  <h1 class="book-heading"><?php print $title; ?></h1>
-  <?php print $content; ?>
-  <?php print $children; ?>
-</div>
diff --git a/modules/book/book-rtl.css b/modules/book/book-rtl.css
deleted file mode 100644
index 40dff0e..0000000
--- a/modules/book/book-rtl.css
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * @file
- * Right-to-Left styling for the Book module.
- */
-
-.book-navigation .menu {
-  padding: 1em 3em 0 0;
-}
-
-.book-navigation .page-previous {
-  float: right;
-}
-.book-navigation .page-up {
-  float: right;
-}
diff --git a/modules/book/book.admin.inc b/modules/book/book.admin.inc
deleted file mode 100644
index cc3f08f..0000000
--- a/modules/book/book.admin.inc
+++ /dev/null
@@ -1,289 +0,0 @@
-<?php
-
-/**
- * @file
- * Administration page callbacks for the Book module.
- */
-
-/**
- * Returns an administrative overview of all books.
- *
- * @return string
- *   A HTML-formatted string with the administrative page content.
- *
- * @see book_menu()
- */
-function book_admin_overview() {
-  $rows = array();
-
-  $headers = array(t('Book'), t('Operations'));
-
-  // Add any recognized books to the table list.
-  foreach (book_get_books() as $book) {
-    $rows[] = array(l($book['title'], $book['href'], $book['options']), l(t('edit order and titles'), 'admin/content/book/' . $book['nid']));
-  }
-
-  return theme('table', array('header' => $headers, 'rows' => $rows, 'empty' => t('No books available.')));
-}
-
-/**
- * Form constructor for the book settings form.
- *
- * @see book_admin_settings_validate()
- *
- * @ingroup forms
- */
-function book_admin_settings() {
-  $types = node_type_get_names();
-  $form['book_allowed_types'] = array(
-    '#type' => 'checkboxes',
-    '#title' => t('Content types allowed in book outlines'),
-    '#default_value' => variable_get('book_allowed_types', array('book')),
-    '#options' => $types,
-    '#description' => t('Users with the %outline-perm permission can add all content types.', array('%outline-perm' => t('Administer book outlines'))),
-    '#required' => TRUE,
-  );
-  $form['book_child_type'] = array(
-    '#type' => 'radios',
-    '#title' => t('Content type for child pages'),
-    '#default_value' => variable_get('book_child_type', 'book'),
-    '#options' => $types,
-    '#required' => TRUE,
-  );
-  $form['array_filter'] = array('#type' => 'value', '#value' => TRUE);
-  $form['#validate'][] = 'book_admin_settings_validate';
-
-  return system_settings_form($form);
-}
-
-/**
- * Form validation handler for book_admin_settings().
- *
- * @see book_admin_settings_submit()
- */
-function book_admin_settings_validate($form, &$form_state) {
-  $child_type = $form_state['values']['book_child_type'];
-  if (empty($form_state['values']['book_allowed_types'][$child_type])) {
-    form_set_error('book_child_type', t('The content type for the %add-child link must be one of those selected as an allowed book outline type.', array('%add-child' => t('Add child page'))));
-  }
-}
-
-/**
- * Form constructor for administering a single book's hierarchy.
- *
- * @see book_admin_edit_submit()
- *
- * @param $node
- *   The node of the top-level page in the book.
- *
- * @see book_admin_edit_validate()
- * @see book_admin_edit_submit()
- * @ingroup forms
- */
-function book_admin_edit($form, $form_state, $node) {
-  drupal_set_title($node->title);
-  $form['#node'] = $node;
-  _book_admin_table($node, $form);
-  $form['save'] = array(
-    '#type' => 'submit',
-    '#value' => t('Save book pages'),
-  );
-
-  return $form;
-}
-
-/**
- * Form validation handler for book_admin_edit().
- *
- * Checks that the book has not been changed while using the form.
- *
- * @see book_admin_edit_submit()
- */
-function book_admin_edit_validate($form, &$form_state) {
-  if ($form_state['values']['tree_hash'] != $form_state['values']['tree_current_hash']) {
-    form_set_error('', t('This book has been modified by another user, the changes could not be saved.'));
-  }
-}
-
-/**
- * Form submission handler for book_admin_edit().
- *
- * This function takes care to save parent menu items before their children.
- * Saving menu items in the incorrect order can break the menu tree.
- *
- * @see book_admin_edit_validate()
- * @see menu_overview_form_submit()
- */
-function book_admin_edit_submit($form, &$form_state) {
-  // Save elements in the same order as defined in post rather than the form.
-  // This ensures parents are updated before their children, preventing orphans.
-  $order = array_flip(array_keys($form_state['input']['table']));
-  $form['table'] = array_merge($order, $form['table']);
-
-  foreach (element_children($form['table']) as $key) {
-    if ($form['table'][$key]['#item']) {
-      $row = $form['table'][$key];
-      $values = $form_state['values']['table'][$key];
-
-      // Update menu item if moved.
-      if ($row['plid']['#default_value'] != $values['plid'] || $row['weight']['#default_value'] != $values['weight']) {
-        $row['#item']['plid'] = $values['plid'];
-        $row['#item']['weight'] = $values['weight'];
-        menu_link_save($row['#item']);
-      }
-
-      // Update the title if changed.
-      if ($row['title']['#default_value'] != $values['title']) {
-        $node = node_load($values['nid']);
-        $langcode = LANGUAGE_NONE;
-        $node->title = $values['title'];
-        $node->book['link_title'] = $values['title'];
-        $node->revision = 1;
-        $node->log = t('Title changed from %original to %current.', array('%original' => $node->title, '%current' => $values['title']));
-
-        node_save($node);
-        watchdog('content', 'book: updated %title.', array('%title' => $node->title), WATCHDOG_NOTICE, l(t('view'), 'node/' . $node->nid));
-      }
-    }
-  }
-
-  drupal_set_message(t('Updated book %title.', array('%title' => $form['#node']->title)));
-}
-
-/**
- * Builds the table portion of the form for the book administration page.
- *
- * @param $node
- *   The node of the top-level page in the book.
- * @param $form
- *   The form that is being modified, passed by reference.
- *
- * @see book_admin_edit()
- */
-function _book_admin_table($node, &$form) {
-  $form['table'] = array(
-    '#theme' => 'book_admin_table',
-    '#tree' => TRUE,
-  );
-
-  $tree = book_menu_subtree_data($node->book);
-  $tree = array_shift($tree); // Do not include the book item itself.
-  if ($tree['below']) {
-    $hash = drupal_hash_base64(serialize($tree['below']));
-    // Store the hash value as a hidden form element so that we can detect
-    // if another user changed the book hierarchy.
-    $form['tree_hash'] = array(
-      '#type' => 'hidden',
-      '#default_value' => $hash,
-    );
-    $form['tree_current_hash'] = array(
-      '#type' => 'value',
-      '#value' => $hash,
-    );
-    _book_admin_table_tree($tree['below'], $form['table']);
-  }
-
-}
-
-/**
- * Helps build the main table in the book administration page form.
- *
- * @param $tree
- *   A subtree of the book menu hierarchy.
- * @param $form
- *   The form that is being modified, passed by reference.
- *
- * @return
- *   The modified form array.
- *
- * @see book_admin_edit()
- */
-function _book_admin_table_tree($tree, &$form) {
-  // The delta must be big enough to give each node a distinct value.
-  $count = count($tree);
-  $delta = ($count < 30) ? 15 : intval($count / 2) + 1;
-
-  foreach ($tree as $data) {
-    $form['book-admin-' . $data['link']['nid']] = array(
-      '#item' => $data['link'],
-      'nid' => array('#type' => 'value', '#value' => $data['link']['nid']),
-      'depth' => array('#type' => 'value', '#value' => $data['link']['depth']),
-      'href' => array('#type' => 'value', '#value' => $data['link']['href']),
-      'title' => array(
-        '#type' => 'textfield',
-        '#default_value' => $data['link']['link_title'],
-        '#maxlength' => 255,
-        '#size' => 40,
-      ),
-      'weight' => array(
-        '#type' => 'weight',
-        '#default_value' => $data['link']['weight'],
-        '#delta' => max($delta, abs($data['link']['weight'])),
-        '#title' => t('Weight for @title', array('@title' => $data['link']['title'])),
-        '#title_display' => 'invisible',
-      ),
-      'plid' => array(
-        '#type' => 'hidden',
-        '#default_value' => $data['link']['plid'],
-      ),
-      'mlid' => array(
-        '#type' => 'hidden',
-        '#default_value' => $data['link']['mlid'],
-      ),
-    );
-    if ($data['below']) {
-      _book_admin_table_tree($data['below'], $form);
-    }
-  }
-
-  return $form;
-}
-
-/**
- * Returns HTML for a book administration form.
- *
- * @param $variables
- *   An associative array containing:
- *   - form: A render element representing the form.
- *
- * @see book_admin_table()
- * @ingroup themeable
- */
-function theme_book_admin_table($variables) {
-  $form = $variables['form'];
-
-  drupal_add_tabledrag('book-outline', 'match', 'parent', 'book-plid', 'book-plid', 'book-mlid', TRUE, MENU_MAX_DEPTH - 2);
-  drupal_add_tabledrag('book-outline', 'order', 'sibling', 'book-weight');
-
-  $header = array(t('Title'), t('Weight'), t('Parent'), array('data' => t('Operations'), 'colspan' => '3'));
-
-  $rows = array();
-  $destination = drupal_get_destination();
-  $access = user_access('administer nodes');
-  foreach (element_children($form) as $key) {
-    $nid = $form[$key]['nid']['#value'];
-    $href = $form[$key]['href']['#value'];
-
-    // Add special classes to be used with tabledrag.js.
-    $form[$key]['plid']['#attributes']['class'] = array('book-plid');
-    $form[$key]['mlid']['#attributes']['class'] = array('book-mlid');
-    $form[$key]['weight']['#attributes']['class'] = array('book-weight');
-
-    $data = array(
-      theme('indentation', array('size' => $form[$key]['depth']['#value'] - 2)) . drupal_render($form[$key]['title']),
-      drupal_render($form[$key]['weight']),
-      drupal_render($form[$key]['plid']) . drupal_render($form[$key]['mlid']),
-      l(t('view'), $href),
-      $access ? l(t('edit'), 'node/' . $nid . '/edit', array('query' => $destination)) : '&nbsp;',
-      $access ? l(t('delete'), 'node/' . $nid . '/delete', array('query' => $destination) )  : '&nbsp;',
-    );
-    $row = array('data' => $data);
-    if (isset($form[$key]['#attributes'])) {
-      $row = array_merge($row, $form[$key]['#attributes']);
-    }
-    $row['class'][] = 'draggable';
-    $rows[] = $row;
-  }
-
-  return theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('id' => 'book-outline'), 'empty' => t('No book content available.')));
-}
diff --git a/modules/book/book.css b/modules/book/book.css
deleted file mode 100644
index 00e379e..0000000
--- a/modules/book/book.css
+++ /dev/null
@@ -1,58 +0,0 @@
- /**
-  * @file
-  * Styling for the Book module.
-  */
-
-.book-navigation .menu {
-  border-top: 1px solid #888;
-  padding: 1em 0 0 3em; /* LTR */
-}
-.book-navigation .page-links {
-  border-top: 1px solid #888;
-  border-bottom: 1px solid #888;
-  text-align: center;
-  padding: 0.5em;
-}
-.book-navigation .page-previous {
-  text-align: left;
-  width: 42%;
-  display: block;
-  float: left; /* LTR */
-}
-.book-navigation .page-up {
-  margin: 0 5%;
-  width: 4%;
-  display: block;
-  float: left; /* LTR */
-}
-.book-navigation .page-next {
-  text-align: right;
-  width: 42%;
-  display: block;
-  float: right;
-}
-#book-outline {
-  min-width: 56em;
-}
-.book-outline-form .form-item {
-  margin-top: 0;
-  margin-bottom: 0;
-}
-html.js #edit-book-pick-book {
-  display: none;
-}
-.form-item-book-bid .description {
-  clear: both;
-}
-#book-admin-edit select {
-  margin-right: 24px;
-}
-#book-admin-edit select.progress-disabled {
-  margin-right: 0;
-}
-#book-admin-edit tr.ajax-new-content {
-  background-color: #ffd;
-}
-#book-admin-edit .form-item {
-  float: left;
-}
diff --git a/modules/book/book.info b/modules/book/book.info
deleted file mode 100644
index 2c7311f..0000000
--- a/modules/book/book.info
+++ /dev/null
@@ -1,8 +0,0 @@
-name = Book
-description = Allows users to create and organize related content in an outline.
-package = Core
-version = VERSION
-core = 7.x
-files[] = book.test
-configure = admin/content/book/settings
-stylesheets[all][] = book.css
diff --git a/modules/book/book.install b/modules/book/book.install
deleted file mode 100644
index 899ee81..0000000
--- a/modules/book/book.install
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the book module.
- */
-
-/**
- * Implements hook_install().
- */
-function book_install() {
-  // Add the node type.
-  _book_install_type_create();
-}
-
-/**
- * Implements hook_uninstall().
- */
-function book_uninstall() {
-  variable_del('book_allowed_types');
-  variable_del('book_child_type');
-  variable_del('book_block_mode');
-
-  // Delete menu links.
-  db_delete('menu_links')
-    ->condition('module', 'book')
-    ->execute();
-  menu_cache_clear_all();
-}
-
-/**
- * Creates the book content type.
- */
-function _book_install_type_create() {
-  // Create an additional node type.
-  $book_node_type = array(
-    'type' => 'book',
-    'name' => t('Book page'),
-    'base' => 'node_content',
-    'description' => t('<em>Books</em> have a built-in hierarchical navigation. Use for handbooks or tutorials.'),
-    'custom' => 1,
-    'modified' => 1,
-    'locked' => 0,
-  );
-
-  $book_node_type = node_type_set_defaults($book_node_type);
-  node_type_save($book_node_type);
-  node_add_body_field($book_node_type);
-  // Default to not promoted.
-  variable_set('node_options_book', array('status'));
-  // Use this default type for adding content to books.
-  variable_set('book_allowed_types', array('book'));
-  variable_set('book_child_type', 'book');
-}
-
-/**
- * Implements hook_schema().
- */
-function book_schema() {
-  $schema['book'] = array(
-  'description' => 'Stores book outline information. Uniquely connects each node in the outline to a link in {menu_links}',
-    'fields' => array(
-      'mlid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => "The book page's {menu_links}.mlid.",
-      ),
-      'nid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => "The book page's {node}.nid.",
-      ),
-      'bid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => "The book ID is the {book}.nid of the top-level page.",
-      ),
-    ),
-    'primary key' => array('mlid'),
-    'unique keys' => array(
-      'nid' => array('nid'),
-    ),
-    'indexes' => array(
-      'bid' => array('bid'),
-    ),
-  );
-
-  return $schema;
-}
diff --git a/modules/book/book.js b/modules/book/book.js
deleted file mode 100644
index 64f4aee..0000000
--- a/modules/book/book.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * @file
- * Javascript behaviors for the Book module.
- */
-
-(function ($) {
-
-Drupal.behaviors.bookFieldsetSummaries = {
-  attach: function (context) {
-    $('fieldset.book-outline-form', context).drupalSetSummary(function (context) {
-      var $select = $('.form-item-book-bid select');
-      var val = $select.val();
-
-      if (val === '0') {
-        return Drupal.t('Not in book');
-      }
-      else if (val === 'new') {
-        return Drupal.t('New book');
-      }
-      else {
-        return Drupal.checkPlain($select.find(':selected').text());
-      }
-    });
-  }
-};
-
-})(jQuery);
diff --git a/modules/book/book.module b/modules/book/book.module
deleted file mode 100644
index 7afed9a..0000000
--- a/modules/book/book.module
+++ /dev/null
@@ -1,1437 +0,0 @@
-<?php
-
-/**
- * @file
- * Allows users to create and organize related content in an outline.
- */
-
-/**
- * Implements hook_help().
- */
-function book_help($path, $arg) {
-  switch ($path) {
-    case 'admin/help#book':
-      $output = '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Book module is used for creating structured, multi-page content, such as site resource guides, manuals, and wikis. It allows you to create content that has chapters, sections, subsections, or any similarly-tiered structure. For more information, see the online handbook entry for <a href="@book">Book module</a>.', array('@book' => 'http://drupal.org/documentation/modules/book/')) . '</p>';
-      $output .= '<h3>' . t('Uses') . '</h3>';
-      $output .= '<dl>';
-      $output .= '<dt>' . t('Adding and managing book content') . '</dt>';
-      $output .= '<dd>' . t('You can assign separate permissions for <em>creating</em>, <em>editing</em>, and <em>deleting</em> book content, as well as <em>adding content to books</em>, and <em>creating new books</em>. Users with the <em>Administer book outlines</em> permission can add <em>any</em> type of content to a book by selecting the appropriate book outline while editing the content. They can also view a list of all books, and edit and rearrange section titles on the <a href="@admin-book">Book administration page</a>.', array('@admin-book' => url('admin/content/book'))) . '</dd>';
-      $output .= '<dt>' . t('Book navigation') . '</dt>';
-      $output .= '<dd>' . t("Book pages have a default book-specific navigation block. This navigation block contains links that lead to the previous and next pages in the book, and to the level above the current page in the book's structure. This block can be enabled on the <a href='@admin-block'>Blocks administration page</a>. For book pages to show up in the book navigation, they must be added to a book outline.", array('@admin-block' => url('admin/structure/block'))) . '</dd>';
-      $output .= '<dt>' . t('Collaboration') . '</dt>';
-      $output .= '<dd>' . t('Books can be created collaboratively, as they allow users with appropriate permissions to add pages into existing books, and add those pages to a custom table of contents menu.') . '</dd>';
-      $output .= '<dt>' . t('Printing books') . '</dt>';
-      $output .= '<dd>' . t("Users with the <em>View printer-friendly books</em> permission can select the <em>printer-friendly version</em> link visible at the bottom of a book page's content to generate a printer-friendly display of the page and all of its subsections.") . '</dd>';
-      $output .= '</dl>';
-      return $output;
-    case 'admin/content/book':
-      return '<p>' . t('The book module offers a means to organize a collection of related content pages, collectively known as a book. When viewed, this content automatically displays links to adjacent book pages, providing a simple navigation system for creating and reviewing structured content.') . '</p>';
-    case 'node/%/outline':
-      return '<p>' . t('The outline feature allows you to include pages in the <a href="@book">Book hierarchy</a>, as well as move them within the hierarchy or to <a href="@book-admin">reorder an entire book</a>.', array('@book' => url('book'), '@book-admin' => url('admin/content/book'))) . '</p>';
-  }
-}
-
-/**
- * Implements hook_theme().
- */
-function book_theme() {
-  return array(
-    'book_navigation' => array(
-      'variables' => array('book_link' => NULL),
-      'template' => 'book-navigation',
-    ),
-    'book_export_html' => array(
-      'variables' => array('title' => NULL, 'contents' => NULL, 'depth' => NULL),
-      'template' => 'book-export-html',
-    ),
-    'book_admin_table' => array(
-      'render element' => 'form',
-    ),
-    'book_title_link' => array(
-      'variables' => array('link' => NULL),
-    ),
-    'book_all_books_block' => array(
-      'render element' => 'book_menus',
-      'template' => 'book-all-books-block',
-    ),
-    'book_node_export_html' => array(
-      'variables' => array('node' => NULL, 'children' => NULL),
-      'template' => 'book-node-export-html',
-    ),
-  );
-}
-
-/**
- * Implements hook_permission().
- */
-function book_permission() {
-  return array(
-    'administer book outlines' => array(
-      'title' => t('Administer book outlines'),
-    ),
-    'create new books' => array(
-      'title' => t('Create new books'),
-    ),
-    'add content to books' => array(
-      'title' => t('Add content and child pages to books'),
-    ),
-    'access printer-friendly version' => array(
-      'title' => t('View printer-friendly books'),
-      'description' => t('View a book page and all of its sub-pages as a single document for ease of printing. Can be performance heavy.'),
-    ),
-  );
-}
-
-/**
- * Adds relevant book links to the node's links.
- *
- * @param $node
- *   The book page node to add links to.
- * @param $view_mode
- *   The view mode of the node.
- */
-function book_node_view_link($node, $view_mode) {
-  $links = array();
-
-  if (isset($node->book['depth'])) {
-    if ($view_mode == 'full' && node_is_page($node)) {
-      $child_type = variable_get('book_child_type', 'book');
-      if ((user_access('add content to books') || user_access('administer book outlines')) && node_access('create', $child_type) && $node->status == 1 && $node->book['depth'] < MENU_MAX_DEPTH) {
-        $links['book_add_child'] = array(
-          'title' => t('Add child page'),
-          'href' => 'node/add/' . str_replace('_', '-', $child_type),
-          'query' => array('parent' => $node->book['mlid']),
-        );
-      }
-
-      if (user_access('access printer-friendly version')) {
-        $links['book_printer'] = array(
-          'title' => t('Printer-friendly version'),
-          'href' => 'book/export/html/' . $node->nid,
-          'attributes' => array('title' => t('Show a printer-friendly version of this book page and its sub-pages.'))
-        );
-      }
-    }
-  }
-
-  if (!empty($links)) {
-    $node->content['links']['book'] = array(
-      '#theme' => 'links__node__book',
-      '#links' => $links,
-      '#attributes' => array('class' => array('links', 'inline')),
-    );
-  }
-}
-
-/**
- * Implements hook_menu().
- */
-function book_menu() {
-  $items['admin/content/book'] = array(
-    'title' => 'Books',
-    'description' => "Manage your site's book outlines.",
-    'page callback' => 'book_admin_overview',
-    'access arguments' => array('administer book outlines'),
-    'type' => MENU_LOCAL_TASK,
-    'file' => 'book.admin.inc',
-  );
-  $items['admin/content/book/list'] = array(
-    'title' => 'List',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-  );
-  $items['admin/content/book/settings'] = array(
-    'title' => 'Settings',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('book_admin_settings'),
-    'access arguments' => array('administer site configuration'),
-    'type' => MENU_LOCAL_TASK,
-    'weight' => 8,
-    'file' => 'book.admin.inc',
-  );
-  $items['admin/content/book/%node'] = array(
-    'title' => 'Re-order book pages and change titles',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('book_admin_edit', 3),
-    'access callback' => '_book_outline_access',
-    'access arguments' => array(3),
-    'type' => MENU_CALLBACK,
-    'file' => 'book.admin.inc',
-  );
-  $items['book'] = array(
-    'title' => 'Books',
-    'page callback' => 'book_render',
-    'access arguments' => array('access content'),
-    'type' => MENU_SUGGESTED_ITEM,
-    'file' => 'book.pages.inc',
-  );
-  $items['book/export/%/%'] = array(
-    'page callback' => 'book_export',
-    'page arguments' => array(2, 3),
-    'access arguments' => array('access printer-friendly version'),
-    'type' => MENU_CALLBACK,
-    'file' => 'book.pages.inc',
-  );
-  $items['node/%node/outline'] = array(
-    'title' => 'Outline',
-    'page callback' => 'book_outline',
-    'page arguments' => array(1),
-    'access callback' => '_book_outline_access',
-    'access arguments' => array(1),
-    'type' => MENU_LOCAL_TASK,
-    'weight' => 2,
-    'file' => 'book.pages.inc',
-  );
-  $items['node/%node/outline/remove'] = array(
-    'title' => 'Remove from outline',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('book_remove_form', 1),
-    'access callback' => '_book_outline_remove_access',
-    'access arguments' => array(1),
-    'file' => 'book.pages.inc',
-  );
-
-  return $items;
-}
-
-/**
- * Access callback: Determines if the outline tab is accessible.
- *
- * @param $node
- *   The node whose outline tab is to be viewed.
- */
-function _book_outline_access($node) {
-  return user_access('administer book outlines') && node_access('view', $node);
-}
-
-/**
- * Access callback: Determines if the user can remove nodes from the outline.
- *
- * @param $node
- *   The node to remove from the outline.
- *
- * @see book_menu()
- */
-function _book_outline_remove_access($node) {
-  return _book_node_is_removable($node) && _book_outline_access($node);
-}
-
-/**
- * Determines if a node can be removed from the book.
- *
- * A node can be removed from a book if it is actually in a book and it either
- * is not a top-level page or is a top-level page with no children.
- *
- * @param $node
- *   The node to remove from the outline.
- */
-function _book_node_is_removable($node) {
-  return (!empty($node->book['bid']) && (($node->book['bid'] != $node->nid) || !$node->book['has_children']));
-}
-
-/**
- * Implements hook_admin_paths().
- */
-function book_admin_paths() {
-  if (variable_get('node_admin_theme')) {
-    $paths = array(
-      'node/*/outline' => TRUE,
-      'node/*/outline/remove' => TRUE,
-    );
-    return $paths;
-  }
-}
-
-/**
- * Implements hook_entity_info_alter().
- */
-function book_entity_info_alter(&$info) {
-  // Add the 'Print' view mode for nodes.
-  $info['node']['view modes'] += array(
-    'print' => array(
-      'label' => t('Print'),
-      'custom settings' => FALSE,
-    ),
-  );
-}
-
-/**
- * Implements hook_block_info().
- */
-function book_block_info() {
-  $block = array();
-  $block['navigation']['info'] = t('Book navigation');
-  $block['navigation']['cache'] = DRUPAL_CACHE_PER_PAGE | DRUPAL_CACHE_PER_ROLE;
-
-  return $block;
-}
-
-/**
- * Implements hook_block_view().
- *
- * Displays the book table of contents in a block when the current page is a
- * single-node view of a book node.
- */
-function book_block_view($delta = '') {
-  $block = array();
-  $current_bid = 0;
-  if ($node = menu_get_object()) {
-    $current_bid = empty($node->book['bid']) ? 0 : $node->book['bid'];
-  }
-
-  if (variable_get('book_block_mode', 'all pages') == 'all pages') {
-    $block['subject'] = t('Book navigation');
-    $book_menus = array();
-    $pseudo_tree = array(0 => array('below' => FALSE));
-    foreach (book_get_books() as $book_id => $book) {
-      if ($book['bid'] == $current_bid) {
-        // If the current page is a node associated with a book, the menu
-        // needs to be retrieved.
-        $book_menus[$book_id] = menu_tree_output(menu_tree_all_data($node->book['menu_name'], $node->book));
-      }
-      else {
-        // Since we know we will only display a link to the top node, there
-        // is no reason to run an additional menu tree query for each book.
-        $book['in_active_trail'] = FALSE;
-        // Check whether user can access the book link.
-        $book_node = node_load($book['nid']);
-        $book['access'] = node_access('view', $book_node);
-        $pseudo_tree[0]['link'] = $book;
-        $book_menus[$book_id] = menu_tree_output($pseudo_tree);
-      }
-    }
-    $book_menus['#theme'] = 'book_all_books_block';
-    $block['content'] = $book_menus;
-  }
-  elseif ($current_bid) {
-    // Only display this block when the user is browsing a book.
-  $select = db_select('node', 'n')
-    ->fields('n', array('title'))
-    ->condition('n.nid', $node->book['bid'])
-    ->addTag('node_access');
-    $title = $select->execute()->fetchField();
-    // Only show the block if the user has view access for the top-level node.
-    if ($title) {
-      $tree = menu_tree_all_data($node->book['menu_name'], $node->book);
-      // There should only be one element at the top level.
-      $data = array_shift($tree);
-      $block['subject'] = theme('book_title_link', array('link' => $data['link']));
-      $block['content'] = ($data['below']) ? menu_tree_output($data['below']) : '';
-    }
-  }
-
-  return $block;
-}
-
-/**
- * Implements hook_block_configure().
- */
-function book_block_configure($delta = '') {
-  $block = array();
-  $options = array(
-    'all pages' => t('Show block on all pages'),
-    'book pages' => t('Show block only on book pages'),
-  );
-  $form['book_block_mode'] = array(
-    '#type' => 'radios',
-    '#title' => t('Book navigation block display'),
-    '#options' => $options,
-    '#default_value' => variable_get('book_block_mode', 'all pages'),
-    '#description' => t("If <em>Show block on all pages</em> is selected, the block will contain the automatically generated menus for all of the site's books. If <em>Show block only on book pages</em> is selected, the block will contain only the one menu corresponding to the current page's book. In this case, if the current page is not in a book, no block will be displayed. The <em>Page specific visibility settings</em> or other visibility settings can be used in addition to selectively display this block."),
-    );
-
-  return $form;
-}
-
-/**
- * Implements hook_block_save().
- */
-function book_block_save($delta = '', $edit = array()) {
-  $block = array();
-  variable_set('book_block_mode', $edit['book_block_mode']);
-}
-
-/**
- * Returns HTML for a link to a book title when used as a block title.
- *
- * @param $variables
- *   An associative array containing:
- *   - link: An array containing title, href and options for the link.
- *
- * @ingroup themeable
- */
-function theme_book_title_link($variables) {
-  $link = $variables['link'];
-
-  $link['options']['attributes']['class'] = array('book-title');
-
-  return l($link['title'], $link['href'], $link['options']);
-}
-
-/**
- * Returns an array of all books.
- *
- * This list may be used for generating a list of all the books, or for building
- * the options for a form select.
- *
- * @return
- *   An array of all books.
- */
-function book_get_books() {
-  $all_books = &drupal_static(__FUNCTION__);
-
-  if (!isset($all_books)) {
-    $all_books = array();
-    $nids = db_query("SELECT DISTINCT(bid) FROM {book}")->fetchCol();
-
-    if ($nids) {
-      $query = db_select('book', 'b', array('fetch' => PDO::FETCH_ASSOC));
-      $query->join('node', 'n', 'b.nid = n.nid');
-      $query->join('menu_links', 'ml', 'b.mlid = ml.mlid');
-      $query->addField('n', 'type', 'type');
-      $query->addField('n', 'title', 'title');
-      $query->fields('b');
-      $query->fields('ml');
-      $query->condition('n.nid', $nids, 'IN');
-      $query->condition('n.status', 1);
-      $query->orderBy('ml.weight');
-      $query->orderBy('ml.link_title');
-      $query->addTag('node_access');
-      $result2 = $query->execute();
-      foreach ($result2 as $link) {
-        $link['href'] = $link['link_path'];
-        $link['options'] = unserialize($link['options']);
-        $all_books[$link['bid']] = $link;
-      }
-    }
-  }
-
-  return $all_books;
-}
-
-/**
- * Implements hook_form_BASE_FORM_ID_alter() for node_form().
- *
- * Adds the book fieldset to the node form.
- *
- * @see book_pick_book_nojs_submit()
- */
-function book_form_node_form_alter(&$form, &$form_state, $form_id) {
-  $node = $form['#node'];
-  $access = user_access('administer book outlines');
-  if (!$access) {
-    if (user_access('add content to books') && ((!empty($node->book['mlid']) && !empty($node->nid)) || book_type_is_allowed($node->type))) {
-      // Already in the book hierarchy, or this node type is allowed.
-      $access = TRUE;
-    }
-  }
-
-  if ($access) {
-    _book_add_form_elements($form, $form_state, $node);
-    // Since the "Book" dropdown can't trigger a form submission when
-    // JavaScript is disabled, add a submit button to do that. book.css hides
-    // this button when JavaScript is enabled.
-    $form['book']['pick-book'] = array(
-      '#type' => 'submit',
-      '#value' => t('Change book (update list of parents)'),
-      '#submit' => array('book_pick_book_nojs_submit'),
-      '#weight' => 20,
-    );
-  }
-}
-
-/**
- * Form submission handler for node_form().
- *
- * This handler is run when JavaScript is disabled. It triggers the form to
- * rebuild so that the "Parent item" options are changed to reflect the newly
- * selected book. When JavaScript is enabled, the submit button that triggers
- * this handler is hidden, and the "Book" dropdown directly triggers the
- * book_form_update() Ajax callback instead.
- *
- * @see book_form_update()
- * @see book_form_node_form_alter()
- */
-function book_pick_book_nojs_submit($form, &$form_state) {
-  $form_state['node']->book = $form_state['values']['book'];
-  $form_state['rebuild'] = TRUE;
-}
-
-/**
- * Builds the parent selection form element for the node form or outline tab.
- *
- * This function is also called when generating a new set of options during the
- * Ajax callback, so an array is returned that can be used to replace an
- * existing form element.
- *
- * @param $book_link
- *   A fully loaded menu link that is part of the book hierarchy.
- *
- * @return
- *   A parent selection form element.
- */
-function _book_parent_select($book_link) {
-  if (variable_get('menu_override_parent_selector', FALSE)) {
-    return array();
-  }
-  // Offer a message or a drop-down to choose a different parent page.
-  $form = array(
-    '#type' => 'hidden',
-    '#value' => -1,
-    '#prefix' => '<div id="edit-book-plid-wrapper">',
-    '#suffix' => '</div>',
-  );
-
-  if ($book_link['nid'] === $book_link['bid']) {
-    // This is a book - at the top level.
-    if ($book_link['original_bid'] === $book_link['bid']) {
-      $form['#prefix'] .= '<em>' . t('This is the top-level page in this book.') . '</em>';
-    }
-    else {
-      $form['#prefix'] .= '<em>' . t('This will be the top-level page in this book.') . '</em>';
-    }
-  }
-  elseif (!$book_link['bid']) {
-    $form['#prefix'] .= '<em>' . t('No book selected.') . '</em>';
-  }
-  else {
-    $form = array(
-      '#type' => 'select',
-      '#title' => t('Parent item'),
-      '#default_value' => $book_link['plid'],
-      '#description' => t('The parent page in the book. The maximum depth for a book and all child pages is !maxdepth. Some pages in the selected book may not be available as parents if selecting them would exceed this limit.', array('!maxdepth' => MENU_MAX_DEPTH)),
-      '#options' => book_toc($book_link['bid'], $book_link['parent_depth_limit'], array($book_link['mlid'])),
-      '#attributes' => array('class' => array('book-title-select')),
-      '#prefix' => '<div id="edit-book-plid-wrapper">',
-      '#suffix' => '</div>',
-    );
-  }
-
-  return $form;
-}
-
-/**
- * Builds the common elements of the book form for the node and outline forms.
- *
- * @param $node
- *   The node whose form is being viewed.
- */
-function _book_add_form_elements(&$form, &$form_state, $node) {
-  // If the form is being processed during the Ajax callback of our book bid
-  // dropdown, then $form_state will hold the value that was selected.
-  if (isset($form_state['values']['book'])) {
-    $node->book = $form_state['values']['book'];
-  }
-
-  $form['book'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Book outline'),
-    '#weight' => 10,
-    '#collapsible' => TRUE,
-    '#collapsed' => TRUE,
-    '#group' => 'additional_settings',
-    '#attributes' => array(
-      'class' => array('book-outline-form'),
-    ),
-    '#attached' => array(
-      'js' => array(drupal_get_path('module', 'book') . '/book.js'),
-    ),
-    '#tree' => TRUE,
-  );
-  foreach (array('menu_name', 'mlid', 'nid', 'router_path', 'has_children', 'options', 'module', 'original_bid', 'parent_depth_limit') as $key) {
-    $form['book'][$key] = array(
-      '#type' => 'value',
-      '#value' => $node->book[$key],
-    );
-  }
-
-  $form['book']['plid'] = _book_parent_select($node->book);
-
-  // @see _book_admin_table_tree(). The weight may be larger than 15.
-  $form['book']['weight'] = array(
-    '#type' => 'weight',
-    '#title' => t('Weight'),
-    '#default_value' => $node->book['weight'],
-    '#delta' => max(15, abs($node->book['weight'])),
-    '#weight' => 5,
-    '#description' => t('Pages at a given level are ordered first by weight and then by title.'),
-  );
-  $options = array();
-  $nid = isset($node->nid) ? $node->nid : 'new';
-
-  if (isset($node->nid) && ($nid == $node->book['original_bid']) && ($node->book['parent_depth_limit'] == 0)) {
-    // This is the top level node in a maximum depth book and thus cannot be moved.
-    $options[$node->nid] = $node->title;
-  }
-  else {
-    foreach (book_get_books() as $book) {
-      $options[$book['nid']] = $book['title'];
-    }
-  }
-
-  if (user_access('create new books') && ($nid == 'new' || ($nid != $node->book['original_bid']))) {
-    // The node can become a new book, if it is not one already.
-    $options = array($nid => '<' . t('create a new book') . '>') + $options;
-  }
-  if (!$node->book['mlid']) {
-    // The node is not currently in the hierarchy.
-    $options = array(0 => '<' . t('none') . '>') + $options;
-  }
-
-  // Add a drop-down to select the destination book.
-  $form['book']['bid'] = array(
-    '#type' => 'select',
-    '#title' => t('Book'),
-    '#default_value' => $node->book['bid'],
-    '#options' => $options,
-    '#access' => (bool) $options,
-    '#description' => t('Your page will be a part of the selected book.'),
-    '#weight' => -5,
-    '#attributes' => array('class' => array('book-title-select')),
-    '#ajax' => array(
-      'callback' => 'book_form_update',
-      'wrapper' => 'edit-book-plid-wrapper',
-      'effect' => 'fade',
-      'speed' => 'fast',
-    ),
-  );
-}
-
-/**
- * Renders a new parent page select element when the book selection changes.
- *
- * This function is called via Ajax when the selected book is changed on a node
- * or book outline form.
- *
- * @return
- *   The rendered parent page select element.
- */
-function book_form_update($form, $form_state) {
-  return $form['book']['plid'];
-}
-
-/**
- * Handles additions and updates to the book outline.
- *
- * This common helper function performs all additions and updates to the book
- * outline through node addition, node editing, node deletion, or the outline
- * tab.
- *
- * @param $node
- *   The node that is being saved, added, deleted, or moved.
- *
- * @return
- *   TRUE if the menu link was saved; FALSE otherwise.
- */
-function _book_update_outline($node) {
-  if (empty($node->book['bid'])) {
-    return FALSE;
-  }
-  $new = empty($node->book['mlid']);
-
-  $node->book['link_path'] = 'node/' . $node->nid;
-  $node->book['link_title'] = $node->title;
-  $node->book['parent_mismatch'] = FALSE; // The normal case.
-
-  if ($node->book['bid'] == $node->nid) {
-    $node->book['plid'] = 0;
-    $node->book['menu_name'] = book_menu_name($node->nid);
-  }
-  else {
-    // Check in case the parent is not is this book; the book takes precedence.
-    if (!empty($node->book['plid'])) {
-      $parent = db_query("SELECT * FROM {book} WHERE mlid = :mlid", array(
-        ':mlid' => $node->book['plid'],
-      ))->fetchAssoc();
-    }
-    if (empty($node->book['plid']) || !$parent || $parent['bid'] != $node->book['bid']) {
-      $node->book['plid'] = db_query("SELECT mlid FROM {book} WHERE nid = :nid", array(
-        ':nid' => $node->book['bid'],
-      ))->fetchField();
-      $node->book['parent_mismatch'] = TRUE; // Likely when JS is disabled.
-    }
-  }
-
-  if (menu_link_save($node->book)) {
-    if ($new) {
-      // Insert new.
-      db_insert('book')
-        ->fields(array(
-          'nid' => $node->nid,
-          'mlid' => $node->book['mlid'],
-          'bid' => $node->book['bid'],
-        ))
-        ->execute();
-      // Reset the cache of stored books.
-      drupal_static_reset('book_get_books');
-    }
-    else {
-      if ($node->book['bid'] != db_query("SELECT bid FROM {book} WHERE nid = :nid", array(
-          ':nid' => $node->nid,
-        ))->fetchField()) {
-        // Update the bid for this page and all children.
-        book_update_bid($node->book);
-        // Reset the cache of stored books.
-        drupal_static_reset('book_get_books');
-      }
-    }
-
-    return TRUE;
-  }
-
-  // Failed to save the menu link.
-  return FALSE;
-}
-
-/**
- * Updates the book ID of a page and its children when it moves to a new book.
- *
- * @param $book_link
- *   A fully loaded menu link that is part of the book hierarchy.
- */
-function book_update_bid($book_link) {
-  $query = db_select('menu_links');
-  $query->addField('menu_links', 'mlid');
-  for ($i = 1; $i <= MENU_MAX_DEPTH && $book_link["p$i"]; $i++) {
-    $query->condition("p$i", $book_link["p$i"]);
-  }
-  $mlids = $query->execute()->fetchCol();
-
-  if ($mlids) {
-    db_update('book')
-      ->fields(array('bid' => $book_link['bid']))
-      ->condition('mlid', $mlids, 'IN')
-      ->execute();
-  }
-}
-
-/**
- * Gets the book menu tree for a page and returns it as a linear array.
- *
- * @param $book_link
- *   A fully loaded menu link that is part of the book hierarchy.
- *
- * @return
- *   A linear array of menu links in the order that the links are shown in the
- *   menu, so the previous and next pages are the elements before and after the
- *   element corresponding to the current node. The children of the current node
- *   (if any) will come immediately after it in the array, and links will only
- *   be fetched as deep as one level deeper than $book_link.
- */
-function book_get_flat_menu($book_link) {
-  $flat = &drupal_static(__FUNCTION__, array());
-
-  if (!isset($flat[$book_link['mlid']])) {
-    // Call menu_tree_all_data() to take advantage of the menu system's caching.
-    $tree = menu_tree_all_data($book_link['menu_name'], $book_link, $book_link['depth'] + 1);
-    $flat[$book_link['mlid']] = array();
-    _book_flatten_menu($tree, $flat[$book_link['mlid']]);
-  }
-
-  return $flat[$book_link['mlid']];
-}
-
-/**
- * Recursively converts a tree of menu links to a flat array.
- *
- * @param $tree
- *   A tree of menu links in an array.
- * @param $flat
- *   A flat array of the menu links from $tree, passed by reference.
- *
- * @see book_get_flat_menu().
- */
-function _book_flatten_menu($tree, &$flat) {
-  foreach ($tree as $data) {
-    if (!$data['link']['hidden']) {
-      $flat[$data['link']['mlid']] = $data['link'];
-      if ($data['below']) {
-        _book_flatten_menu($data['below'], $flat);
-      }
-    }
-  }
-}
-
-/**
- * Fetches the menu link for the previous page of the book.
- *
- * @param $book_link
- *   A fully loaded menu link that is part of the book hierarchy.
- *
- * @return
- *   A fully loaded menu link for the page before the one represented in
- *   $book_link.
- */
-function book_prev($book_link) {
-  // If the parent is zero, we are at the start of a book.
-  if ($book_link['plid'] == 0) {
-    return NULL;
-  }
-  $flat = book_get_flat_menu($book_link);
-  // Assigning the array to $flat resets the array pointer for use with each().
-  $curr = NULL;
-  do {
-    $prev = $curr;
-    list($key, $curr) = each($flat);
-  } while ($key && $key != $book_link['mlid']);
-
-  if ($key == $book_link['mlid']) {
-    // The previous page in the book may be a child of the previous visible link.
-    if ($prev['depth'] == $book_link['depth'] && $prev['has_children']) {
-      // The subtree will have only one link at the top level - get its data.
-      $tree = book_menu_subtree_data($prev);
-      $data = array_shift($tree);
-      // The link of interest is the last child - iterate to find the deepest one.
-      while ($data['below']) {
-        $data = end($data['below']);
-      }
-
-      return $data['link'];
-    }
-    else {
-      return $prev;
-    }
-  }
-}
-
-/**
- * Fetches the menu link for the next page of the book.
- *
- * @param $book_link
- *   A fully loaded menu link that is part of the book hierarchy.
- *
- * @return
- *   A fully loaded menu link for the page after the one represented in
- *   $book_link.
- */
-function book_next($book_link) {
-  $flat = book_get_flat_menu($book_link);
-  // Assigning the array to $flat resets the array pointer for use with each().
-  do {
-    list($key, $curr) = each($flat);
-  }
-  while ($key && $key != $book_link['mlid']);
-
-  if ($key == $book_link['mlid']) {
-    return current($flat);
-  }
-}
-
-/**
- * Formats the menu links for the child pages of the current page.
- *
- * @param $book_link
- *   A fully loaded menu link that is part of the book hierarchy.
- *
- * @return
- *   HTML for the links to the child pages of the current page.
- */
-function book_children($book_link) {
-  $flat = book_get_flat_menu($book_link);
-
-  $children = array();
-
-  if ($book_link['has_children']) {
-    // Walk through the array until we find the current page.
-    do {
-      $link = array_shift($flat);
-    }
-    while ($link && ($link['mlid'] != $book_link['mlid']));
-    // Continue though the array and collect the links whose parent is this page.
-    while (($link = array_shift($flat)) && $link['plid'] == $book_link['mlid']) {
-      $data['link'] = $link;
-      $data['below'] = '';
-      $children[] = $data;
-    }
-  }
-
-  if ($children) {
-    $elements = menu_tree_output($children);
-    return drupal_render($elements);
-  }
-  return '';
-}
-
-/**
- * Generates the corresponding menu name from a book ID.
- *
- * @param $bid
- *   The book ID for which to make a menu name.
- *
- * @return
- *   The menu name.
- */
-function book_menu_name($bid) {
-  return 'book-toc-' . $bid;
-}
-
-/**
- * Implements hook_node_load().
- */
-function book_node_load($nodes, $types) {
-  $result = db_query("SELECT * FROM {book} b INNER JOIN {menu_links} ml ON b.mlid = ml.mlid WHERE b.nid IN (:nids)", array(':nids' =>  array_keys($nodes)), array('fetch' => PDO::FETCH_ASSOC));
-  foreach ($result as $record) {
-    $nodes[$record['nid']]->book = $record;
-    $nodes[$record['nid']]->book['href'] = $record['link_path'];
-    $nodes[$record['nid']]->book['title'] = $record['link_title'];
-    $nodes[$record['nid']]->book['options'] = unserialize($record['options']);
-  }
-}
-
-/**
- * Implements hook_node_view().
- */
-function book_node_view($node, $view_mode) {
-  if ($view_mode == 'full') {
-    if (!empty($node->book['bid']) && empty($node->in_preview)) {
-      $node->content['book_navigation'] = array(
-        '#markup' => theme('book_navigation', array('book_link' => $node->book)),
-        '#weight' => 100,
-      );
-    }
-  }
-
-  if ($view_mode != 'rss') {
-    book_node_view_link($node, $view_mode);
-  }
-}
-
-/**
- * Implements hook_page_alter().
- *
- * Adds the book menu to the list of menus used to build the active trail when
- * viewing a book page.
- */
-function book_page_alter(&$page) {
-  if (($node = menu_get_object()) && !empty($node->book['bid'])) {
-    $active_menus = menu_get_active_menu_names();
-    $active_menus[] = $node->book['menu_name'];
-    menu_set_active_menu_names($active_menus);
-  }
-}
-
-/**
- * Implements hook_node_presave().
- */
-function book_node_presave($node) {
-  // Always save a revision for non-administrators.
-  if (!empty($node->book['bid']) && !user_access('administer nodes')) {
-    $node->revision = 1;
-    // The database schema requires a log message for every revision.
-    if (!isset($node->log)) {
-      $node->log = '';
-    }
-  }
-  // Make sure a new node gets a new menu link.
-  if (empty($node->nid)) {
-    $node->book['mlid'] = NULL;
-  }
-}
-
-/**
- * Implements hook_node_insert().
- */
-function book_node_insert($node) {
-  if (!empty($node->book['bid'])) {
-    if ($node->book['bid'] == 'new') {
-      // New nodes that are their own book.
-      $node->book['bid'] = $node->nid;
-    }
-    $node->book['nid'] = $node->nid;
-    $node->book['menu_name'] = book_menu_name($node->book['bid']);
-    _book_update_outline($node);
-  }
-}
-
-/**
- * Implements hook_node_update().
- */
-function book_node_update($node) {
-  if (!empty($node->book['bid'])) {
-    if ($node->book['bid'] == 'new') {
-      // New nodes that are their own book.
-      $node->book['bid'] = $node->nid;
-    }
-    $node->book['nid'] = $node->nid;
-    $node->book['menu_name'] = book_menu_name($node->book['bid']);
-    _book_update_outline($node);
-  }
-}
-
-/**
- * Implements hook_node_delete().
- */
-function book_node_delete($node) {
-  if (!empty($node->book['bid'])) {
-    if ($node->nid == $node->book['bid']) {
-      // Handle deletion of a top-level post.
-      $result = db_query("SELECT b.nid FROM {menu_links} ml INNER JOIN {book} b on b.mlid = ml.mlid WHERE ml.plid = :plid", array(
-        ':plid' => $node->book['mlid']
-      ));
-      foreach ($result as $child) {
-        $child_node = node_load($child->nid);
-        $child_node->book['bid'] = $child_node->nid;
-        _book_update_outline($child_node);
-      }
-    }
-    menu_link_delete($node->book['mlid']);
-    db_delete('book')
-      ->condition('mlid', $node->book['mlid'])
-      ->execute();
-    drupal_static_reset('book_get_books');
-  }
-}
-
-/**
- * Implements hook_node_prepare().
- */
-function book_node_prepare($node) {
-  // Prepare defaults for the add/edit form.
-  if (empty($node->book) && (user_access('add content to books') || user_access('administer book outlines'))) {
-    $node->book = array();
-
-    if (empty($node->nid) && isset($_GET['parent']) && is_numeric($_GET['parent'])) {
-      // Handle "Add child page" links:
-      $parent = book_link_load($_GET['parent']);
-
-      if ($parent && $parent['access']) {
-        $node->book['bid'] = $parent['bid'];
-        $node->book['plid'] = $parent['mlid'];
-        $node->book['menu_name'] = $parent['menu_name'];
-      }
-    }
-    // Set defaults.
-    $node->book += _book_link_defaults(!empty($node->nid) ? $node->nid : 'new');
-  }
-  else {
-    if (isset($node->book['bid']) && !isset($node->book['original_bid'])) {
-      $node->book['original_bid'] = $node->book['bid'];
-    }
-  }
-  // Find the depth limit for the parent select.
-  if (isset($node->book['bid']) && !isset($node->book['parent_depth_limit'])) {
-    $node->book['parent_depth_limit'] = _book_parent_depth_limit($node->book);
-  }
-}
-
-/**
- * Finds the depth limit for items in the parent select.
- *
- * @param $book_link
- *   A fully loaded menu link that is part of the book hierarchy.
- *
- * @return
- *   The depth limit for items in the parent select.
- */
-function _book_parent_depth_limit($book_link) {
-  return MENU_MAX_DEPTH - 1 - (($book_link['mlid'] && $book_link['has_children']) ? menu_link_children_relative_depth($book_link) : 0);
-}
-
-/**
- * Implements hook_form_FORM_ID_alter() for node_delete_confirm().
- *
- * Alters the confirm form for a single node deletion.
- *
- * @see node_delete_confirm()
- */
-function book_form_node_delete_confirm_alter(&$form, $form_state) {
-  $node = node_load($form['nid']['#value']);
-
-  if (isset($node->book) && $node->book['has_children']) {
-    $form['book_warning'] = array(
-      '#markup' => '<p>' . t('%title is part of a book outline, and has associated child pages. If you proceed with deletion, the child pages will be relocated automatically.', array('%title' => $node->title)) . '</p>',
-      '#weight' => -10,
-    );
-  }
-}
-
-/**
- * Returns an array with default values for a book page's menu link.
- *
- * @param $nid
- *   The ID of the node whose menu link is being created.
- *
- * @return
- *   The default values for the menu link.
- */
-function _book_link_defaults($nid) {
-  return array('original_bid' => 0, 'menu_name' => '', 'nid' => $nid, 'bid' => 0, 'router_path' => 'node/%', 'plid' => 0, 'mlid' => 0, 'has_children' => 0, 'weight' => 0, 'module' => 'book', 'options' => array());
-}
-
-/**
- * Processes variables for book-all-books-block.tpl.php.
- *
- * All non-renderable elements are removed so that the template has full access
- * to the structured data but can also simply iterate over all elements and
- * render them (as in the default template).
- *
- * @param $variables
- *   An associative array containing the following key:
- *   - book_menus
- *
- * @see book-all-books-block.tpl.php
- */
-function template_preprocess_book_all_books_block(&$variables) {
-  // Remove all non-renderable elements.
-  $elements = $variables['book_menus'];
-  $variables['book_menus'] = array();
-  foreach (element_children($elements) as $index) {
-    $variables['book_menus'][$index] = $elements[$index];
-  }
-}
-
-/**
- * Processes variables for book-navigation.tpl.php.
- *
- * @param $variables
- *   An associative array containing the following key:
- *   - book_link
- *
- * @see book-navigation.tpl.php
- */
-function template_preprocess_book_navigation(&$variables) {
-  $book_link = $variables['book_link'];
-
-  // Provide extra variables for themers. Not needed by default.
-  $variables['book_id'] = $book_link['bid'];
-  $variables['book_title'] = check_plain($book_link['link_title']);
-  $variables['book_url'] = 'node/' . $book_link['bid'];
-  $variables['current_depth'] = $book_link['depth'];
-  $variables['tree'] = '';
-
-  if ($book_link['mlid']) {
-    $variables['tree'] = book_children($book_link);
-
-    if ($prev = book_prev($book_link)) {
-      $prev_href = url($prev['href']);
-      drupal_add_html_head_link(array('rel' => 'prev', 'href' => $prev_href));
-      $variables['prev_url'] = $prev_href;
-      $variables['prev_title'] = check_plain($prev['title']);
-    }
-
-    if ($book_link['plid'] && $parent = book_link_load($book_link['plid'])) {
-      $parent_href = url($parent['href']);
-      drupal_add_html_head_link(array('rel' => 'up', 'href' => $parent_href));
-      $variables['parent_url'] = $parent_href;
-      $variables['parent_title'] = check_plain($parent['title']);
-    }
-
-    if ($next = book_next($book_link)) {
-      $next_href = url($next['href']);
-      drupal_add_html_head_link(array('rel' => 'next', 'href' => $next_href));
-      $variables['next_url'] = $next_href;
-      $variables['next_title'] = check_plain($next['title']);
-    }
-  }
-
-  $variables['has_links'] = FALSE;
-  // Link variables to filter for values and set state of the flag variable.
-  $links = array('prev_url', 'prev_title', 'parent_url', 'parent_title', 'next_url', 'next_title');
-  foreach ($links as $link) {
-    if (isset($variables[$link])) {
-      // Flag when there is a value.
-      $variables['has_links'] = TRUE;
-    }
-    else {
-      // Set empty to prevent notices.
-      $variables[$link] = '';
-    }
-  }
-}
-
-/**
- * Recursively processes and formats menu items for book_toc().
- *
- * This helper function recursively modifies the table of contents array for
- * each item in the menu tree, ignoring items in the exclude array or at a depth
- * greater than the limit. Truncates titles over thirty characters and appends
- * an indentation string incremented by depth.
- *
- * @param $tree
- *   The data structure of the book's menu tree. Includes hidden links.
- * @param $indent
- *   A string appended to each menu item title. Increments by '--' per depth
- *   level.
- * @param $toc
- *   Reference to the table of contents array. This is modified in place, so the
- *   function does not have a return value.
- * @param $exclude
- *   (optional) An array of menu link ID values. Any link whose menu link ID is
- *   in this array will be excluded (along with its children). Defaults to an
- *   empty array.
- * @param $depth_limit
- *   Any link deeper than this value will be excluded (along with its children).
- */
-function _book_toc_recurse($tree, $indent, &$toc, $exclude, $depth_limit) {
-  foreach ($tree as $data) {
-    if ($data['link']['depth'] > $depth_limit) {
-      // Don't iterate through any links on this level.
-      break;
-    }
-
-    if (!in_array($data['link']['mlid'], $exclude)) {
-      $toc[$data['link']['mlid']] = $indent . ' ' . truncate_utf8($data['link']['title'], 30, TRUE, TRUE);
-      if ($data['below']) {
-        _book_toc_recurse($data['below'], $indent . '--', $toc, $exclude, $depth_limit);
-      }
-    }
-  }
-}
-
-/**
- * Returns an array of book pages in table of contents order.
- *
- * @param $bid
- *   The ID of the book whose pages are to be listed.
- * @param $depth_limit
- *   Any link deeper than this value will be excluded (along with its children).
- * @param $exclude
- *   Optional array of menu link ID values. Any link whose menu link ID is in
- *   this array will be excluded (along with its children).
- *
- * @return
- *   An array of (menu link ID, title) pairs for use as options for selecting a
- *   book page.
- */
-function book_toc($bid, $depth_limit, $exclude = array()) {
-  $tree = menu_tree_all_data(book_menu_name($bid));
-  $toc = array();
-  _book_toc_recurse($tree, '', $toc, $exclude, $depth_limit);
-
-  return $toc;
-}
-
-/**
- * Processes variables for book-export-html.tpl.php.
- *
- * @param $variables
- *   An associative array containing the following keys:
- *   - title
- *   - contents
- *   - depth
- *
- * @see book-export-html.tpl.php
- */
-function template_preprocess_book_export_html(&$variables) {
-  global $base_url, $language;
-
-  $variables['title'] = check_plain($variables['title']);
-  $variables['base_url'] = $base_url;
-  $variables['language'] = $language;
-  $variables['language_rtl'] = ($language->direction == LANGUAGE_RTL);
-  $variables['head'] = drupal_get_html_head();
-  $variables['dir'] = $language->direction ? 'rtl' : 'ltr';
-}
-
-/**
- * Traverses the book tree to build printable or exportable output.
- *
- * During the traversal, the $visit_func() callback is applied to each node and
- * is called recursively for each child of the node (in weight, title order).
- *
- * @param $tree
- *   A subtree of the book menu hierarchy, rooted at the current page.
- * @param $visit_func
- *   A function callback to be called upon visiting a node in the tree.
- *
- * @return
- *   The output generated in visiting each node.
- */
-function book_export_traverse($tree, $visit_func) {
-  $output = '';
-
-  foreach ($tree as $data) {
-    // Note- access checking is already performed when building the tree.
-    if ($node = node_load($data['link']['nid'], FALSE)) {
-      $children = '';
-
-      if ($data['below']) {
-        $children = book_export_traverse($data['below'], $visit_func);
-      }
-
-      if (function_exists($visit_func)) {
-        $output .= call_user_func($visit_func, $node, $children);
-      }
-      else {
-        // Use the default function.
-        $output .= book_node_export($node, $children);
-      }
-    }
-  }
-
-  return $output;
-}
-
-/**
- * Generates printer-friendly HTML for a node.
- *
- * @param $node
- *   The node that will be output.
- * @param $children
- *   (optional) All the rendered child nodes within the current node. Defaults
- *   to an empty string.
- *
- * @return
- *   The HTML generated for the given node.
- *
- * @see book_export_traverse()
- */
-function book_node_export($node, $children = '') {
-  $build = node_view($node, 'print');
-  unset($build['#theme']);
-  // @todo Rendering should happen in the template using render().
-  $node->rendered = drupal_render($build);
-
-  return theme('book_node_export_html', array('node' => $node, 'children' => $children));
-}
-
-/**
- * Processes variables for book-node-export-html.tpl.php.
- *
- * @param $variables
- *   An associative array containing the following keys:
- *   - node
- *   - children
- *
- * @see book-node-export-html.tpl.php
- */
-function template_preprocess_book_node_export_html(&$variables) {
-  $variables['depth'] = $variables['node']->book['depth'];
-  $variables['title'] = check_plain($variables['node']->title);
-  $variables['content'] = $variables['node']->rendered;
-}
-
-/**
- * Determine if a given node type is in the list of types allowed for books.
- *
- * @param $type
- *   A node type.
- *
- * @return
- *   A Boolean TRUE if the node type can be included in books; otherwise, FALSE.
- */
-function book_type_is_allowed($type) {
-  return in_array($type, variable_get('book_allowed_types', array('book')));
-}
-
-/**
- * Implements hook_node_type_update().
- *
- * Updates the Book module's persistent variables if the machine-readable name
- * of a node type is changed.
- */
-function book_node_type_update($type) {
-  if (!empty($type->old_type) && $type->old_type != $type->type) {
-    // Update the list of node types that are allowed to be added to books.
-    $allowed_types = variable_get('book_allowed_types', array('book'));
-    $key = array_search($type->old_type, $allowed_types);
-
-    if ($key !== FALSE) {
-      $allowed_types[$type->type] = $allowed_types[$key] ? $type->type : 0;
-      unset($allowed_types[$key]);
-      variable_set('book_allowed_types', $allowed_types);
-    }
-
-    // Update the setting for the "Add child page" link.
-    if (variable_get('book_child_type', 'book') == $type->old_type) {
-      variable_set('book_child_type', $type->type);
-    }
-  }
-}
-
-/**
- * Gets a book menu link by its menu link ID.
- *
- * Like menu_link_load(), but adds additional data from the {book} table.
- *
- * Do not call when loading a node, since this function may call node_load().
- *
- * @param $mlid
- *   The menu link ID of the menu item.
- *
- * @return
- *   A menu link, with the link translated for rendering and data added from the
- *   {book} table. FALSE if there is an error.
- */
-function book_link_load($mlid) {
-  if ($item = db_query("SELECT * FROM {menu_links} ml INNER JOIN {book} b ON b.mlid = ml.mlid LEFT JOIN {menu_router} m ON m.path = ml.router_path WHERE ml.mlid = :mlid", array(
-      ':mlid' => $mlid,
-    ))->fetchAssoc()) {
-    _menu_link_translate($item);
-    return $item;
-  }
-
-  return FALSE;
-}
-
-/**
- * Gets the data representing a subtree of the book hierarchy.
- *
- * The root of the subtree will be the link passed as a parameter, so the
- * returned tree will contain this item and all its descendents in the menu
- * tree.
- *
- * @param $link
- *   A fully loaded menu link.
- *
- * @return
- *   A subtree of menu links in an array, in the order they should be rendered.
- */
-function book_menu_subtree_data($link) {
-  $tree = &drupal_static(__FUNCTION__, array());
-
-  // Generate a cache ID (cid) specific for this $menu_name and $link.
-  $cid = 'links:' . $link['menu_name'] . ':subtree-cid:' . $link['mlid'];
-
-  if (!isset($tree[$cid])) {
-    $cache = cache_get($cid, 'cache_menu');
-
-    if ($cache && isset($cache->data)) {
-      // If the cache entry exists, it will just be the cid for the actual data.
-      // This avoids duplication of large amounts of data.
-      $cache = cache_get($cache->data, 'cache_menu');
-
-      if ($cache && isset($cache->data)) {
-        $data = $cache->data;
-      }
-    }
-
-    // If the subtree data was not in the cache, $data will be NULL.
-    if (!isset($data)) {
-      $query = db_select('menu_links', 'ml', array('fetch' => PDO::FETCH_ASSOC));
-      $query->join('menu_router', 'm', 'm.path = ml.router_path');
-      $query->join('book', 'b', 'ml.mlid = b.mlid');
-      $query->fields('b');
-      $query->fields('m', array('load_functions', 'to_arg_functions', 'access_callback', 'access_arguments', 'page_callback', 'page_arguments', 'delivery_callback', 'title', 'title_callback', 'title_arguments', 'type'));
-      $query->fields('ml');
-      $query->condition('menu_name', $link['menu_name']);
-      for ($i = 1; $i <= MENU_MAX_DEPTH && $link["p$i"]; ++$i) {
-        $query->condition("p$i", $link["p$i"]);
-      }
-      for ($i = 1; $i <= MENU_MAX_DEPTH; ++$i) {
-        $query->orderBy("p$i");
-      }
-      $links = array();
-      foreach ($query->execute() as $item) {
-        $links[] = $item;
-      }
-      $data['tree'] = menu_tree_data($links, array(), $link['depth']);
-      $data['node_links'] = array();
-      menu_tree_collect_node_links($data['tree'], $data['node_links']);
-      // Compute the real cid for book subtree data.
-      $tree_cid = 'links:' . $item['menu_name'] . ':subtree-data:' . hash('sha256', serialize($data));
-      // Cache the data, if it is not already in the cache.
-
-      if (!cache_get($tree_cid, 'cache_menu')) {
-        cache_set($tree_cid, $data, 'cache_menu');
-      }
-      // Cache the cid of the (shared) data using the menu and item-specific cid.
-      cache_set($cid, $tree_cid, 'cache_menu');
-    }
-    // Check access for the current user to each item in the tree.
-    menu_tree_check_access($data['tree'], $data['node_links']);
-    $tree[$cid] = $data['tree'];
-  }
-
-  return $tree[$cid];
-}
diff --git a/modules/book/book.pages.inc b/modules/book/book.pages.inc
deleted file mode 100644
index ac4f357..0000000
--- a/modules/book/book.pages.inc
+++ /dev/null
@@ -1,247 +0,0 @@
-<?php
-
-/**
- * @file
- * User page callbacks for the book module.
- */
-
-/**
- * Menu callback: Prints a listing of all books.
- *
- * @return string
- *   A HTML-formatted string with the listing of all books content.
- *
- * @see book_menu()
- */
-function book_render() {
-  $book_list = array();
-  foreach (book_get_books() as $book) {
-    $book_list[] = l($book['title'], $book['href'], $book['options']);
-  }
-
-  return theme('item_list', array('items' => $book_list));
-}
-
-/**
- * Menu callback; Generates representations of a book page and its children.
- *
- * The function delegates the generation of output to helper functions. The
- * function name is derived by prepending 'book_export_' to the given output
- * type. So, e.g., a type of 'html' results in a call to the function
- * book_export_html().
- *
- * @param $type
- *   A string encoding the type of output requested. The following types are
- *   currently supported in book module:
- *   - html: Printer-friendly HTML.
- *   Other types may be supported in contributed modules.
- * @param $nid
- *   An integer representing the node id (nid) of the node to export
- *
- * @return
- *   A string representing the node and its children in the book hierarchy in a
- *   format determined by the $type parameter.
- *
- * @see book_menu()
- */
-function book_export($type, $nid) {
-  // Check that the node exists and that the current user has access to it.
-  $node = node_load($nid);
-  if (!$node) {
-    return MENU_NOT_FOUND;
-  }
-  if (!node_access('view', $node)) {
-    return MENU_ACCESS_DENIED;
-  }
-
-  $type = drupal_strtolower($type);
-
-  $export_function = 'book_export_' . $type;
-
-  if (function_exists($export_function)) {
-    print call_user_func($export_function, $nid);
-  }
-  else {
-    drupal_set_message(t('Unknown export format.'));
-    drupal_not_found();
-  }
-}
-
-/**
- * Generates HTML for export when invoked by book_export().
- *
- * The given node is embedded to its absolute depth in a top level section. For
- * example, a child node with depth 2 in the hierarchy is contained in
- * (otherwise empty) <div> elements corresponding to depth 0 and depth 1.
- * This is intended to support WYSIWYG output - e.g., level 3 sections always
- * look like level 3 sections, no matter their depth relative to the node
- * selected to be exported as printer-friendly HTML.
- *
- * @param $nid
- *   An integer representing the node id (nid) of the node to export.
- *
- * @return
- *   A string containing HTML representing the node and its children in
- *   the book hierarchy.
- */
-function book_export_html($nid) {
-  if (user_access('access printer-friendly version')) {
-    $node = node_load($nid);
-    if (isset($node->book)) {
-      $tree = book_menu_subtree_data($node->book);
-      $contents = book_export_traverse($tree, 'book_node_export');
-      return theme('book_export_html', array('title' => $node->title, 'contents' => $contents, 'depth' => $node->book['depth']));
-    }
-    else {
-      drupal_not_found();
-    }
-  }
-  else {
-    drupal_access_denied();
-  }
-}
-
-/**
- * Menu callback: Shows the outline form for a single node.
- *
- * @param $node
- *   The book node for which to show the outline.
- *
- * @return string
- *   A HTML-formatted string with the outline form for a single node.
- *
-  * @see book_menu()
- */
-function book_outline($node) {
-  drupal_set_title($node->title);
-  return drupal_get_form('book_outline_form', $node);
-}
-
-/**
- * Form constructor for the book outline form.
- *
- * Allows handling of all book outline operations via the outline tab.
- *
- * @param $node
- *   The book node for which to show the outline.
- *
- * @see book_outline_form_submit()
- * @see book_remove_button_submit()
- * @ingroup forms
- */
-function book_outline_form($form, &$form_state, $node) {
-  if (!isset($node->book)) {
-    // The node is not part of any book yet - set default options.
-    $node->book = _book_link_defaults($node->nid);
-  }
-  else {
-    $node->book['original_bid'] = $node->book['bid'];
-  }
-
-  // Find the depth limit for the parent select.
-  if (!isset($node->book['parent_depth_limit'])) {
-    $node->book['parent_depth_limit'] = _book_parent_depth_limit($node->book);
-  }
-  $form['#node'] = $node;
-  $form['#id'] = 'book-outline';
-  _book_add_form_elements($form, $form_state, $node);
-
-  $form['book']['#collapsible'] = FALSE;
-
-  $form['update'] = array(
-    '#type' => 'submit',
-    '#value' => $node->book['original_bid'] ? t('Update book outline') : t('Add to book outline'),
-    '#weight' => 15,
-  );
-
-  $form['remove'] = array(
-    '#type' => 'submit',
-    '#value' => t('Remove from book outline'),
-    '#access' => _book_node_is_removable($node),
-    '#weight' => 20,
-    '#submit' => array('book_remove_button_submit'),
-  );
-
-  return $form;
-}
-
-/**
- * Form submission handler for book_outline_form().
- *
- * Redirects to removal confirmation form.
- *
- * @see book_outline_form_submit()
- */
-function book_remove_button_submit($form, &$form_state) {
-  $form_state['redirect'] = 'node/' . $form['#node']->nid . '/outline/remove';
-}
-
-/**
- * Form submission handler for book_outline_form().
- *
- * @see book_remove_button_submit()
- */
-function book_outline_form_submit($form, &$form_state) {
-  $node = $form['#node'];
-  $form_state['redirect'] = "node/" . $node->nid;
-  $book_link = $form_state['values']['book'];
-  if (!$book_link['bid']) {
-    drupal_set_message(t('No changes were made'));
-
-    return;
-  }
-
-  $book_link['menu_name'] = book_menu_name($book_link['bid']);
-  $node->book = $book_link;
-  if (_book_update_outline($node)) {
-    if ($node->book['parent_mismatch']) {
-      // This will usually only happen when JS is disabled.
-      drupal_set_message(t('The post has been added to the selected book. You may now position it relative to other pages.'));
-      $form_state['redirect'] = "node/" . $node->nid . "/outline";
-    }
-    else {
-      drupal_set_message(t('The book outline has been updated.'));
-    }
-  }
-  else {
-    drupal_set_message(t('There was an error adding the post to the book.'), 'error');
-  }
-}
-
-/**
- * Form constructor to confirm removal of a node from a book.
- *
- * @param $node
- *   The node to delete.
- *
- * @see book_remove_form_submit()
- * @ingroup forms
- */
-function book_remove_form($form, &$form_state, $node) {
-  $form['#node'] = $node;
-  $title = array('%title' => $node->title);
-
-  if ($node->book['has_children']) {
-    $description = t('%title has associated child pages, which will be relocated automatically to maintain their connection to the book. To recreate the hierarchy (as it was before removing this page), %title may be added again using the Outline tab, and each of its former child pages will need to be relocated manually.', $title);
-  }
-  else {
-    $description = t('%title may be added to hierarchy again using the Outline tab.', $title);
-  }
-
-  return confirm_form($form, t('Are you sure you want to remove %title from the book hierarchy?', $title), 'node/' . $node->nid, $description, t('Remove'));
-}
-
-/**
- * Form submission handler for book_remove_form().
- */
-function book_remove_form_submit($form, &$form_state) {
-  $node = $form['#node'];
-  if (_book_node_is_removable($node)) {
-    menu_link_delete($node->book['mlid']);
-    db_delete('book')
-      ->condition('nid', $node->nid)
-      ->execute();
-    drupal_set_message(t('The post has been removed from the book.'));
-  }
-  $form_state['redirect'] = 'node/' . $node->nid;
-}
diff --git a/modules/book/book.test b/modules/book/book.test
deleted file mode 100644
index 81f4524..0000000
--- a/modules/book/book.test
+++ /dev/null
@@ -1,398 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for book.module.
- */
-
-/**
- * Tests the functionality of the Book module.
- */
-class BookTestCase extends DrupalWebTestCase {
-
-  /**
-   * A book node.
-   *
-   * @var object
-   */
-  protected $book;
-
-  /**
-   * A user with permission to create and edit books.
-   *
-   * @var object
-   */
-  protected $book_author;
-
-  /**
-   * A user with permission to view a book and access printer-friendly version.
-   *
-   * @var object
-   */
-  protected $web_user;
-
-  /**
-   * A user with permission to create and edit books and to administer blocks.
-   *
-   * @var object
-   */
-  protected $admin_user;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Book functionality',
-      'description' => 'Create a book, add pages, and test book interface.',
-      'group' => 'Book',
-    );
-  }
-
-  function setUp() {
-    parent::setUp(array('book', 'node_access_test'));
-
-    // node_access_test requires a node_access_rebuild().
-    node_access_rebuild();
-
-    // Create users.
-    $this->book_author = $this->drupalCreateUser(array('create new books', 'create book content', 'edit own book content', 'add content to books'));
-    $this->web_user = $this->drupalCreateUser(array('access printer-friendly version', 'node test view'));
-    $this->admin_user = $this->drupalCreateUser(array('create new books', 'create book content', 'edit own book content', 'add content to books', 'administer blocks', 'administer permissions', 'administer book outlines', 'node test view'));
-  }
-
-  /**
-   * Creates a new book with a page hierarchy.
-   */
-  function createBook() {
-    // Create new book.
-    $this->drupalLogin($this->book_author);
-
-    $this->book = $this->createBookNode('new');
-    $book = $this->book;
-
-    /*
-     * Add page hierarchy to book.
-     * Book
-     *  |- Node 0
-     *   |- Node 1
-     *   |- Node 2
-     *  |- Node 3
-     *  |- Node 4
-     */
-    $nodes = array();
-    $nodes[] = $this->createBookNode($book->nid); // Node 0.
-    $nodes[] = $this->createBookNode($book->nid, $nodes[0]->book['mlid']); // Node 1.
-    $nodes[] = $this->createBookNode($book->nid, $nodes[0]->book['mlid']); // Node 2.
-    $nodes[] = $this->createBookNode($book->nid); // Node 3.
-    $nodes[] = $this->createBookNode($book->nid); // Node 4.
-
-    $this->drupalLogout();
-
-    return $nodes;
-  }
-
-  /**
-   * Tests book functionality through node interfaces.
-   */
-  function testBook() {
-    // Create new book.
-    $nodes = $this->createBook();
-    $book = $this->book;
-
-    $this->drupalLogin($this->web_user);
-
-    // Check that book pages display along with the correct outlines and
-    // previous/next links.
-    $this->checkBookNode($book, array($nodes[0], $nodes[3], $nodes[4]), FALSE, FALSE, $nodes[0], array());
-    $this->checkBookNode($nodes[0], array($nodes[1], $nodes[2]), $book, $book, $nodes[1], array($book));
-    $this->checkBookNode($nodes[1], NULL, $nodes[0], $nodes[0], $nodes[2], array($book, $nodes[0]));
-    $this->checkBookNode($nodes[2], NULL, $nodes[1], $nodes[0], $nodes[3], array($book, $nodes[0]));
-    $this->checkBookNode($nodes[3], NULL, $nodes[2], $book, $nodes[4], array($book));
-    $this->checkBookNode($nodes[4], NULL, $nodes[3], $book, FALSE, array($book));
-
-    $this->drupalLogout();
-
-    // Create a second book, and move an existing book page into it.
-    $this->drupalLogin($this->book_author);
-    $other_book = $this->createBookNode('new');
-    $node = $this->createBookNode($book->nid);
-    $edit = array('book[bid]' => $other_book->nid);
-    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
-
-    $this->drupalLogout();
-    $this->drupalLogin($this->web_user);
-
-    // Check that the nodes in the second book are displayed correctly.
-    // First we must set $this->book to the second book, so that the
-    // correct regex will be generated for testing the outline.
-    $this->book = $other_book;
-    $this->checkBookNode($other_book, array($node), FALSE, FALSE, $node, array());
-    $this->checkBookNode($node, NULL, $other_book, $other_book, FALSE, array($other_book));
-  }
-
-  /**
-   * Checks the outline of sub-pages; previous, up, and next.
-   *
-   * Also checks the printer friendly version of the outline.
-   *
-   * @param $node
-   *   Node to check.
-   * @param $nodes
-   *   Nodes that should be in outline.
-   * @param $previous
-   *   (optional) Previous link node. Defaults to FALSE.
-   * @param $up
-   *   (optional) Up link node. Defaults to FALSE.
-   * @param $next
-   *   (optional) Next link node. Defaults to FALSE.
-   * @param $breadcrumb
-   *   The nodes that should be displayed in the breadcrumb.
-   */
-  function checkBookNode($node, $nodes, $previous = FALSE, $up = FALSE, $next = FALSE, array $breadcrumb) {
-    // $number does not use drupal_static as it should not be reset
-    // since it uniquely identifies each call to checkBookNode().
-    static $number = 0;
-    $this->drupalGet('node/' . $node->nid);
-
-    // Check outline structure.
-    if ($nodes !== NULL) {
-      $this->assertPattern($this->generateOutlinePattern($nodes), format_string('Node %number outline confirmed.', array('%number' => $number)));
-    }
-    else {
-      $this->pass(format_string('Node %number does not have outline.', array('%number' => $number)));
-    }
-
-    // Check previous, up, and next links.
-    if ($previous) {
-      $this->assertRaw(l('‹ ' . $previous->title, 'node/' . $previous->nid, array('attributes' => array('class' => array('page-previous'), 'title' => t('Go to previous page')))), 'Previous page link found.');
-    }
-
-    if ($up) {
-      $this->assertRaw(l('up', 'node/' . $up->nid, array('attributes' => array('class' => array('page-up'), 'title' => t('Go to parent page')))), 'Up page link found.');
-    }
-
-    if ($next) {
-      $this->assertRaw(l($next->title . ' ›', 'node/' . $next->nid, array('attributes' => array('class' => array('page-next'), 'title' => t('Go to next page')))), 'Next page link found.');
-    }
-
-    // Compute the expected breadcrumb.
-    $expected_breadcrumb = array();
-    $expected_breadcrumb[] = url('');
-    foreach ($breadcrumb as $a_node) {
-      $expected_breadcrumb[] = url('node/' . $a_node->nid);
-    }
-
-    // Fetch links in the current breadcrumb.
-    $links = $this->xpath('//div[@class="breadcrumb"]/a');
-    $got_breadcrumb = array();
-    foreach ($links as $link) {
-      $got_breadcrumb[] = (string) $link['href'];
-    }
-
-    // Compare expected and got breadcrumbs.
-    $this->assertIdentical($expected_breadcrumb, $got_breadcrumb, 'The breadcrumb is correctly displayed on the page.');
-
-    // Check printer friendly version.
-    $this->drupalGet('book/export/html/' . $node->nid);
-    $this->assertText($node->title, 'Printer friendly title found.');
-    $this->assertRaw(check_markup($node->body[LANGUAGE_NONE][0]['value'], $node->body[LANGUAGE_NONE][0]['format']), 'Printer friendly body found.');
-
-    $number++;
-  }
-
-  /**
-   * Creates a regular expression to check for the sub-nodes in the outline.
-   *
-   * @param array $nodes
-   *   An array of nodes to check in outline.
-   *
-   * @return
-   *   A regular expression that locates sub-nodes of the outline.
-   */
-  function generateOutlinePattern($nodes) {
-    $outline = '';
-    foreach ($nodes as $node) {
-      $outline .= '(node\/' . $node->nid . ')(.*?)(' . $node->title . ')(.*?)';
-    }
-
-    return '/<div id="book-navigation-' . $this->book->nid . '"(.*?)<ul(.*?)' . $outline . '<\/ul>/s';
-  }
-
-  /**
-   * Creates a book node.
-   *
-   * @param $book_nid
-   *   A book node ID or set to 'new' to create a new book.
-   * @param $parent
-   *   (optional) Parent book reference ID. Defaults to NULL.
-   */
-  function createBookNode($book_nid, $parent = NULL) {
-    // $number does not use drupal_static as it should not be reset
-    // since it uniquely identifies each call to createBookNode().
-    static $number = 0; // Used to ensure that when sorted nodes stay in same order.
-
-    $edit = array();
-    $langcode = LANGUAGE_NONE;
-    $edit["title"] = $number . ' - SimpleTest test node ' . $this->randomName(10);
-    $edit["body[$langcode][0][value]"] = 'SimpleTest test body ' . $this->randomName(32) . ' ' . $this->randomName(32);
-    $edit['book[bid]'] = $book_nid;
-
-    if ($parent !== NULL) {
-      $this->drupalPost('node/add/book', $edit, t('Change book (update list of parents)'));
-
-      $edit['book[plid]'] = $parent;
-      $this->drupalPost(NULL, $edit, t('Save'));
-    }
-    else {
-      $this->drupalPost('node/add/book', $edit, t('Save'));
-    }
-
-    // Check to make sure the book node was created.
-    $node = $this->drupalGetNodeByTitle($edit['title']);
-    $this->assertNotNull(($node === FALSE ? NULL : $node), 'Book node found in database.');
-    $number++;
-
-    return $node;
-  }
-
-  /**
-   * Tests book export ("printer-friendly version") functionality.
-   */
-  function testBookExport() {
-    // Create a book.
-    $nodes = $this->createBook();
-
-    // Login as web user and view printer-friendly version.
-    $this->drupalLogin($this->web_user);
-    $this->drupalGet('node/' . $this->book->nid);
-    $this->clickLink(t('Printer-friendly version'));
-
-    // Make sure each part of the book is there.
-    foreach ($nodes as $node) {
-      $this->assertText($node->title, 'Node title found in printer friendly version.');
-      $this->assertRaw(check_markup($node->body[LANGUAGE_NONE][0]['value'], $node->body[LANGUAGE_NONE][0]['format']), 'Node body found in printer friendly version.');
-    }
-
-    // Make sure we can't export an unsupported format.
-    $this->drupalGet('book/export/foobar/' . $this->book->nid);
-    $this->assertResponse('404', 'Unsupported export format returned "not found".');
-
-    // Make sure we get a 404 on a not existing book node.
-    $this->drupalGet('book/export/html/123');
-    $this->assertResponse('404', 'Not existing book node returned "not found".');
-
-    // Make sure an anonymous user cannot view printer-friendly version.
-    $this->drupalLogout();
-
-    // Load the book and verify there is no printer-friendly version link.
-    $this->drupalGet('node/' . $this->book->nid);
-    $this->assertNoLink(t('Printer-friendly version'), 'Anonymous user is not shown link to printer-friendly version.');
-
-    // Try getting the URL directly, and verify it fails.
-    $this->drupalGet('book/export/html/' . $this->book->nid);
-    $this->assertResponse('403', 'Anonymous user properly forbidden.');
-
-    // Now grant anonymous users permission to view the printer-friendly
-    // version and verify that node access restrictions still prevent them from
-    // seeing it.
-    user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('access printer-friendly version'));
-    $this->drupalGet('book/export/html/' . $this->book->nid);
-    $this->assertResponse('403', 'Anonymous user properly forbidden from seeing the printer-friendly version when denied by node access.');
-  }
-
-  /**
-   * Tests the functionality of the book navigation block.
-   */
-  function testBookNavigationBlock() {
-    $this->drupalLogin($this->admin_user);
-
-    // Set block title to confirm that the interface is available.
-    $block_title = $this->randomName(16);
-    $this->drupalPost('admin/structure/block/manage/book/navigation/configure', array('title' => $block_title), t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), 'Block configuration set.');
-
-    // Set the block to a region to confirm block is available.
-    $edit = array();
-    $edit['blocks[book_navigation][region]'] = 'footer';
-    $this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
-    $this->assertText(t('The block settings have been updated.'), 'Block successfully move to footer region.');
-
-     // Give anonymous users the permission 'node test view'.
-     $edit = array();
-     $edit[DRUPAL_ANONYMOUS_RID . '[node test view]'] = TRUE;
-     $this->drupalPost('admin/people/permissions/' . DRUPAL_ANONYMOUS_RID, $edit, t('Save permissions'));
-     $this->assertText(t('The changes have been saved.'), "Permission 'node test view' successfully assigned to anonymous users.");
-
-    // Test correct display of the block.
-    $nodes = $this->createBook();
-    $this->drupalGet('<front>');
-    $this->assertText($block_title, 'Book navigation block is displayed.');
-    $this->assertText($this->book->title, format_string('Link to book root (@title) is displayed.', array('@title' => $nodes[0]->title)));
-    $this->assertNoText($nodes[0]->title, 'No links to individual book pages are displayed.');
-  }
-
-  /**
-   * Tests the book navigation block when an access module is enabled.
-   */
-   function testNavigationBlockOnAccessModuleEnabled() {
-     $this->drupalLogin($this->admin_user);
-     $edit = array();
-
-     // Set the block title.
-     $block_title = $this->randomName(16);
-     $edit['title'] = $block_title;
-
-     // Set block display to 'Show block only on book pages'.
-     $edit['book_block_mode'] = 'book pages';
-     $this->drupalPost('admin/structure/block/manage/book/navigation/configure', $edit, t('Save block'));
-     $this->assertText(t('The block configuration has been saved.'), 'Block configuration set.');
-
-     // Set the block to a region to confirm block is available.
-     $edit = array();
-     $edit['blocks[book_navigation][region]'] = 'footer';
-     $this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
-     $this->assertText(t('The block settings have been updated.'), 'Block successfully move to footer region.');
-
-     // Give anonymous users the permission 'node test view'.
-     $edit = array();
-     $edit[DRUPAL_ANONYMOUS_RID . '[node test view]'] = TRUE;
-     $this->drupalPost('admin/people/permissions/' . DRUPAL_ANONYMOUS_RID, $edit, t('Save permissions'));
-     $this->assertText(t('The changes have been saved.'), "Permission 'node test view' successfully assigned to anonymous users.");
-
-     // Create a book.
-     $this->createBook();
-
-     // Test correct display of the block to registered users.
-     $this->drupalLogin($this->web_user);
-     $this->drupalGet('node/' . $this->book->nid);
-     $this->assertText($block_title, 'Book navigation block is displayed to registered users.');
-     $this->drupalLogout();
-
-     // Test correct display of the block to anonymous users.
-     $this->drupalGet('node/' . $this->book->nid);
-     $this->assertText($block_title, 'Book navigation block is displayed to anonymous users.');
-   }
-
-  /**
-   * Tests the access for deleting top-level book nodes.
-   */
-   function testBookDelete() {
-     $nodes = $this->createBook();
-     $this->drupalLogin($this->admin_user);
-     $edit = array();
-
-     // Test access to delete top-level and child book nodes.
-     $this->drupalGet('node/' . $this->book->nid . '/outline/remove');
-     $this->assertResponse('403', 'Deleting top-level book node properly forbidden.');
-     $this->drupalPost('node/' . $nodes[4]->nid . '/outline/remove', $edit, t('Remove'));
-     $node4 = node_load($nodes[4]->nid, NULL, TRUE);
-     $this->assertTrue(empty($node4->book), 'Deleting child book node properly allowed.');
-
-     // Delete all child book nodes and retest top-level node deletion.
-     foreach ($nodes as $node) {
-       $nids[] = $node->nid;
-     }
-     node_delete_multiple($nids);
-     $this->drupalPost('node/' . $this->book->nid . '/outline/remove', $edit, t('Remove'));
-     $node = node_load($this->book->nid, NULL, TRUE);
-     $this->assertTrue(empty($node->book), 'Deleting childless top-level book node properly allowed.');
-   }
-}
diff --git a/modules/color/color-rtl.css b/modules/color/color-rtl.css
deleted file mode 100644
index 07b754e..0000000
--- a/modules/color/color-rtl.css
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * @file
- * Right-to-left specific stylesheet for the Color module.
- */
-
-#placeholder {
-  left: 0;
-  right: auto;
-}
-
-/* Palette */
-.color-form .form-item {
-  padding-left: 0;
-  padding-right: 1em;
-}
-.color-form label {
-  float: right;
-  clear: right;
-}
-.color-form .form-text,
-.color-form .form-select {
-  float: right;
-}
-.color-form .form-text {
-  margin-right: 0;
-  margin-left: 5px;
-}
-#palette .hook {
-  float: right;
-}
-#palette .down,
-#palette .up,
-#palette .both {
-  background: url(images/hook-rtl.png) no-repeat 0 0;
-}
-#palette .up {
-  background-position: 0 -27px;
-}
-#palette .both {
-  background-position: 0 -54px;
-}
-#palette .lock {
-  float: right;
-  right: -10px;
-}
-html.js #preview {
-  float: right;
-}
diff --git a/modules/color/color.css b/modules/color/color.css
deleted file mode 100644
index 981cff8..0000000
--- a/modules/color/color.css
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- * @file
- * Stylesheet for the administration pages of the Color module.
- */
-
-/* Farbtastic placement */
-.color-form {
-  max-width: 50em;
-  position: relative;
-}
-#placeholder {
-  position: absolute;
-  top: 0;
-  right: 0; /* LTR */
-}
-
-/* Palette */
-.color-form .form-item {
-  height: 2em;
-  line-height: 2em;
-  padding-left: 1em; /* LTR */
-  margin: 0.5em 0;
-}
-.color-form label {
-  float: left; /* LTR */
-  clear: left; /* LTR */
-  width: 10em;
-}
-.color-form .form-text,
-.color-form .form-select {
-  float: left; /* LTR */
-}
-.color-form .form-text {
-  text-align: center;
-  margin-right: 5px; /* LTR */
-  cursor: pointer;
-}
-
-#palette .hook {
-  float: left; /* LTR */
-  margin-top: 3px;
-  width: 16px;
-  height: 16px;
-}
-#palette .down,
-#palette .up,
-#palette .both {
-  background: url(images/hook.png) no-repeat 100% 0; /* LTR */
-}
-#palette .up {
-  background-position: 100% -27px; /* LTR */
-}
-#palette .both {
-  background-position: 100% -54px; /* LTR */
-}
-
-#palette .lock {
-  float: left; /* LTR */
-  position: relative;
-  top: -1.4em;
-  left: -10px; /* LTR */
-  width: 20px;
-  height: 25px;
-  background: url(images/lock.png) no-repeat 50% 2px;
-  cursor: pointer;
-}
-#palette .unlocked {
-  background-position: 50% -22px;
-}
-#palette .form-item {
-  width: 20em;
-}
-#palette .item-selected {
-  background: #eee;
-}
-
-/* Preview */
-#preview {
-  display: none;
-}
-html.js #preview {
-  display: block;
-  position: relative;
-  float: left; /* LTR */
-}
diff --git a/modules/color/color.info b/modules/color/color.info
deleted file mode 100644
index b1b862d..0000000
--- a/modules/color/color.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = Color
-description = Allows administrators to change the color scheme of compatible themes.
-package = Core
-version = VERSION
-core = 7.x
-files[] = color.test
diff --git a/modules/color/color.install b/modules/color/color.install
deleted file mode 100644
index 3a9aea3..0000000
--- a/modules/color/color.install
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the color module.
- */
-
-/**
- * Implements hook_requirements().
- */
-function color_requirements($phase) {
-  $requirements = array();
-
-  if ($phase == 'runtime') {
-    // Check for the PHP GD library.
-    if (function_exists('imagegd2')) {
-      $info = gd_info();
-      $requirements['color_gd'] = array(
-        'value' => $info['GD Version'],
-      );
-
-      // Check for PNG support.
-      if (function_exists('imagecreatefrompng')) {
-        $requirements['color_gd']['severity'] = REQUIREMENT_OK;
-      }
-      else {
-        $requirements['color_gd']['severity'] = REQUIREMENT_WARNING;
-        $requirements['color_gd']['description'] = t('The GD library for PHP is enabled, but was compiled without PNG support. Check the <a href="@url">PHP image documentation</a> for information on how to correct this.', array('@url' => 'http://www.php.net/manual/ref.image.php'));
-      }
-    }
-    else {
-      $requirements['color_gd'] = array(
-        'value' => t('Not installed'),
-        'severity' => REQUIREMENT_ERROR,
-        'description' => t('The GD library for PHP is missing or outdated. Check the <a href="@url">PHP image documentation</a> for information on how to correct this.', array('@url' => 'http://www.php.net/manual/book.image.php')),
-      );
-    }
-    $requirements['color_gd']['title'] = t('GD library PNG support');
-  }
-
-  return $requirements;
-}
-
-/**
- * @addtogroup updates-7.x-extra
- * @{
- */
-
-/**
- * Warn site administrator if unsafe CSS color codes are found in the database.
- */
-function color_update_7001() {
-  $theme_palettes = db_query("SELECT name FROM {variable} WHERE name LIKE 'color_%_palette'")->fetchCol();
-  foreach ($theme_palettes as $name) {
-    $palette = variable_get($name, array());
-    foreach ($palette as $key => $color) {
-      if (!preg_match('/^#([a-f0-9]{3}){1,2}$/iD', $color)) {
-        drupal_set_message('Some of the custom CSS color codes specified via the color module are invalid. Please examine the themes which are making use of the color module at the <a href="'. url('admin/appearance/settings') .'">Appearance settings</a> page to verify their CSS color values.', 'warning');
-      }
-    }
-  }
-}
-
-/**
- * @} End of "addtogroup updates-7.x-extra".
- */
diff --git a/modules/color/color.js b/modules/color/color.js
deleted file mode 100644
index d7e0664..0000000
--- a/modules/color/color.js
+++ /dev/null
@@ -1,250 +0,0 @@
-/**
- * @file
- * Attaches the behaviors for the Color module.
- */
-
-(function ($) {
-
-Drupal.behaviors.color = {
-  attach: function (context, settings) {
-    var i, j, colors, field_name;
-    // This behavior attaches by ID, so is only valid once on a page.
-    var form = $('#system-theme-settings .color-form', context).once('color');
-    if (form.length == 0) {
-      return;
-    }
-    var inputs = [];
-    var hooks = [];
-    var locks = [];
-    var focused = null;
-
-    // Add Farbtastic.
-    $(form).prepend('<div id="placeholder"></div>').addClass('color-processed');
-    var farb = $.farbtastic('#placeholder');
-
-    // Decode reference colors to HSL.
-    var reference = settings.color.reference;
-    for (i in reference) {
-      reference[i] = farb.RGBToHSL(farb.unpack(reference[i]));
-    }
-
-    // Build a preview.
-    var height = [];
-    var width = [];
-    // Loop through all defined gradients.
-    for (i in settings.gradients) {
-      // Add element to display the gradient.
-      $('#preview').once('color').append('<div id="gradient-' + i + '"></div>');
-      var gradient = $('#preview #gradient-' + i);
-      // Add height of current gradient to the list (divided by 10).
-      height.push(parseInt(gradient.css('height'), 10) / 10);
-      // Add width of current gradient to the list (divided by 10).
-      width.push(parseInt(gradient.css('width'), 10) / 10);
-      // Add rows (or columns for horizontal gradients).
-      // Each gradient line should have a height (or width for horizontal
-      // gradients) of 10px (because we divided the height/width by 10 above).
-      for (j = 0; j < (settings.gradients[i]['direction'] == 'vertical' ? height[i] : width[i]); ++j) {
-        gradient.append('<div class="gradient-line"></div>');
-      }
-    }
-
-    // Fix preview background in IE6.
-    if (navigator.appVersion.match(/MSIE [0-6]\./)) {
-      var e = $('#preview #img')[0];
-      var image = e.currentStyle.backgroundImage;
-      e.style.backgroundImage = 'none';
-      e.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image.substring(5, image.length - 2) + "')";
-    }
-
-    // Set up colorScheme selector.
-    $('#edit-scheme', form).change(function () {
-      var schemes = settings.color.schemes, colorScheme = this.options[this.selectedIndex].value;
-      if (colorScheme != '' && schemes[colorScheme]) {
-        // Get colors of active scheme.
-        colors = schemes[colorScheme];
-        for (field_name in colors) {
-          callback($('#edit-palette-' + field_name), colors[field_name], false, true);
-        }
-        preview();
-      }
-    });
-
-    /**
-     * Renders the preview.
-     */
-    function preview() {
-      Drupal.color.callback(context, settings, form, farb, height, width);
-    }
-
-    /**
-     * Shifts a given color, using a reference pair (ref in HSL).
-     *
-     * This algorithm ensures relative ordering on the saturation and luminance
-     * axes is preserved, and performs a simple hue shift.
-     *
-     * It is also symmetrical. If: shift_color(c, a, b) == d, then
-     * shift_color(d, b, a) == c.
-     */
-    function shift_color(given, ref1, ref2) {
-      // Convert to HSL.
-      given = farb.RGBToHSL(farb.unpack(given));
-
-      // Hue: apply delta.
-      given[0] += ref2[0] - ref1[0];
-
-      // Saturation: interpolate.
-      if (ref1[1] == 0 || ref2[1] == 0) {
-        given[1] = ref2[1];
-      }
-      else {
-        var d = ref1[1] / ref2[1];
-        if (d > 1) {
-          given[1] /= d;
-        }
-        else {
-          given[1] = 1 - (1 - given[1]) * d;
-        }
-      }
-
-      // Luminance: interpolate.
-      if (ref1[2] == 0 || ref2[2] == 0) {
-        given[2] = ref2[2];
-      }
-      else {
-        var d = ref1[2] / ref2[2];
-        if (d > 1) {
-          given[2] /= d;
-        }
-        else {
-          given[2] = 1 - (1 - given[2]) * d;
-        }
-      }
-
-      return farb.pack(farb.HSLToRGB(given));
-    }
-
-    /**
-     * Callback for Farbtastic when a new color is chosen.
-     */
-    function callback(input, color, propagate, colorScheme) {
-      var matched;
-      // Set background/foreground colors.
-      $(input).css({
-        backgroundColor: color,
-        'color': farb.RGBToHSL(farb.unpack(color))[2] > 0.5 ? '#000' : '#fff'
-      });
-
-      // Change input value.
-      if ($(input).val() && $(input).val() != color) {
-        $(input).val(color);
-
-        // Update locked values.
-        if (propagate) {
-          i = input.i;
-          for (j = i + 1; ; ++j) {
-            if (!locks[j - 1] || $(locks[j - 1]).is('.unlocked')) break;
-            matched = shift_color(color, reference[input.key], reference[inputs[j].key]);
-            callback(inputs[j], matched, false);
-          }
-          for (j = i - 1; ; --j) {
-            if (!locks[j] || $(locks[j]).is('.unlocked')) break;
-            matched = shift_color(color, reference[input.key], reference[inputs[j].key]);
-            callback(inputs[j], matched, false);
-          }
-
-          // Update preview.
-          preview();
-        }
-
-        // Reset colorScheme selector.
-        if (!colorScheme) {
-          resetScheme();
-        }
-      }
-    }
-
-    /**
-     * Resets the color scheme selector.
-     */
-    function resetScheme() {
-      $('#edit-scheme', form).each(function () {
-        this.selectedIndex = this.options.length - 1;
-      });
-    }
-
-    /**
-     * Focuses Farbtastic on a particular field.
-     */
-    function focus() {
-      var input = this;
-      // Remove old bindings.
-      focused && $(focused).unbind('keyup', farb.updateValue)
-          .unbind('keyup', preview).unbind('keyup', resetScheme)
-          .parent().removeClass('item-selected');
-
-      // Add new bindings.
-      focused = this;
-      farb.linkTo(function (color) { callback(input, color, true, false); });
-      farb.setColor(this.value);
-      $(focused).keyup(farb.updateValue).keyup(preview).keyup(resetScheme)
-        .parent().addClass('item-selected');
-    }
-
-    // Initialize color fields.
-    $('#palette input.form-text', form)
-    .each(function () {
-      // Extract palette field name
-      this.key = this.id.substring(13);
-
-      // Link to color picker temporarily to initialize.
-      farb.linkTo(function () {}).setColor('#000').linkTo(this);
-
-      // Add lock.
-      var i = inputs.length;
-      if (inputs.length) {
-        var lock = $('<div class="lock"></div>').toggle(
-          function () {
-            $(this).addClass('unlocked');
-            $(hooks[i - 1]).attr('class',
-              locks[i - 2] && $(locks[i - 2]).is(':not(.unlocked)') ? 'hook up' : 'hook'
-            );
-            $(hooks[i]).attr('class',
-              locks[i] && $(locks[i]).is(':not(.unlocked)') ? 'hook down' : 'hook'
-            );
-          },
-          function () {
-            $(this).removeClass('unlocked');
-            $(hooks[i - 1]).attr('class',
-              locks[i - 2] && $(locks[i - 2]).is(':not(.unlocked)') ? 'hook both' : 'hook down'
-            );
-            $(hooks[i]).attr('class',
-              locks[i] && $(locks[i]).is(':not(.unlocked)') ? 'hook both' : 'hook up'
-            );
-          }
-        );
-        $(this).after(lock);
-        locks.push(lock);
-      };
-
-      // Add hook.
-      var hook = $('<div class="hook"></div>');
-      $(this).after(hook);
-      hooks.push(hook);
-
-      $(this).parent().find('.lock').click();
-      this.i = i;
-      inputs.push(this);
-    })
-    .focus(focus);
-
-    $('#palette label', form);
-
-    // Focus first color.
-    focus.call(inputs[0]);
-
-    // Render preview.
-    preview();
-  }
-};
-
-})(jQuery);
diff --git a/modules/color/color.test b/modules/color/color.test
deleted file mode 100644
index 0904325..0000000
--- a/modules/color/color.test
+++ /dev/null
@@ -1,133 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for color module.
- */
-
-/**
- * Tests the Color module functionality.
- */
-class ColorTestCase extends DrupalWebTestCase {
-  protected $big_user;
-  protected $themes;
-  protected $colorTests;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Color functionality',
-      'description' => 'Modify the Bartik and Garland theme colors and make sure the changes are reflected on the frontend',
-      'group' => 'Color',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('color');
-
-    // Create users.
-    $this->big_user = $this->drupalCreateUser(array('administer themes'));
-
-    // This tests the color module in both Bartik and Garland.
-    $this->themes = array(
-      'bartik' => array(
-        'palette_input' => 'palette[bg]',
-        'scheme' => 'slate',
-        'scheme_color' => '#3b3b3b',
-      ),
-      'garland' => array(
-        'palette_input' => 'palette[link]',
-        'scheme' => 'greenbeam',
-        'scheme_color' => '#0c7a00',
-      ),
-    );
-    theme_enable(array_keys($this->themes));
-
-    // Array filled with valid and not valid color values
-    $this->colorTests = array(
-      '#000' => TRUE,
-      '#123456' => TRUE,
-      '#abcdef' => TRUE,
-      '#0' => FALSE,
-      '#00' => FALSE,
-      '#0000' => FALSE,
-      '#00000' => FALSE,
-      '123456' => FALSE,
-      '#00000g' => FALSE,
-    );
-  }
-
-  /**
-   * Tests the Color module functionality.
-   */
-  function testColor() {
-    foreach ($this->themes as $theme => $test_values) {
-      $this->_testColor($theme, $test_values);
-    }
-  }
-
-  /**
-   * Tests the Color module functionality using the given theme.
-   */
-  function _testColor($theme, $test_values) {
-    variable_set('theme_default', $theme);
-    $settings_path = 'admin/appearance/settings/' . $theme;
-
-    $this->drupalLogin($this->big_user);
-    $this->drupalGet($settings_path);
-    $this->assertResponse(200);
-    $edit['scheme'] = '';
-    $edit[$test_values['palette_input']] = '#123456';
-    $this->drupalPost($settings_path, $edit, t('Save configuration'));
-
-    $this->drupalGet('<front>');
-    $stylesheets = variable_get('color_' . $theme . '_stylesheets', array());
-    $this->assertPattern('|' . file_create_url($stylesheets[0]) . '|', 'Make sure the color stylesheet is included in the content. (' . $theme . ')');
-
-    $stylesheet_content = join("\n", file($stylesheets[0]));
-    $this->assertTrue(strpos($stylesheet_content, 'color: #123456') !== FALSE, 'Make sure the color we changed is in the color stylesheet. (' . $theme . ')');
-
-    $this->drupalGet($settings_path);
-    $this->assertResponse(200);
-    $edit['scheme'] = $test_values['scheme'];
-    $this->drupalPost($settings_path, $edit, t('Save configuration'));
-
-    $this->drupalGet('<front>');
-    $stylesheets = variable_get('color_' . $theme . '_stylesheets', array());
-    $stylesheet_content = join("\n", file($stylesheets[0]));
-    $this->assertTrue(strpos($stylesheet_content, 'color: ' . $test_values['scheme_color']) !== FALSE, 'Make sure the color we changed is in the color stylesheet. (' . $theme . ')');
-
-    // Test with aggregated CSS turned on.
-    variable_set('preprocess_css', 1);
-    $this->drupalGet('<front>');
-    $stylesheets = variable_get('drupal_css_cache_files', array());
-    $stylesheet_content = '';
-    foreach ($stylesheets as $key => $uri) {
-      $stylesheet_content .= join("\n", file(drupal_realpath($uri)));
-    }
-    $this->assertTrue(strpos($stylesheet_content, 'public://') === FALSE, 'Make sure the color paths have been translated to local paths. (' . $theme . ')');
-    variable_set('preprocess_css', 0);
-  }
-
-  /**
-   * Tests whether the provided color is valid.
-   */
-  function testValidColor() {
-    variable_set('theme_default', 'bartik');
-    $settings_path = 'admin/appearance/settings/bartik';
-
-    $this->drupalLogin($this->big_user);
-    $edit['scheme'] = '';
-
-    foreach ($this->colorTests as $color => $is_valid) {
-      $edit['palette[bg]'] = $color;
-      $this->drupalPost($settings_path, $edit, t('Save configuration'));
-
-      if($is_valid) {
-        $this->assertText('The configuration options have been saved.');
-      }
-      else {
-        $this->assertText('Main background must be a valid hexadecimal CSS color value.');
-      }
-    }
-  }
-}
diff --git a/modules/color/images/hook-rtl.png b/modules/color/images/hook-rtl.png
deleted file mode 100644
index a26b211..0000000
Binary files a/modules/color/images/hook-rtl.png and /dev/null differ
diff --git a/modules/color/images/hook.png b/modules/color/images/hook.png
deleted file mode 100644
index dc18973..0000000
Binary files a/modules/color/images/hook.png and /dev/null differ
diff --git a/modules/color/images/lock.png b/modules/color/images/lock.png
deleted file mode 100644
index 9e1e00e..0000000
Binary files a/modules/color/images/lock.png and /dev/null differ
diff --git a/modules/color/preview.html b/modules/color/preview.html
deleted file mode 100644
index e25b7ad..0000000
--- a/modules/color/preview.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<div id="preview">
-  <div id="text">
-    <h2>Lorem ipsum dolor</h2>
-    <p>Sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud <a href="#">exercitation ullamco</a> laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
-  </div>
-  <div id="img"></div>
-</div>
\ No newline at end of file
diff --git a/modules/color/preview.js b/modules/color/preview.js
deleted file mode 100644
index 67eef0b..0000000
--- a/modules/color/preview.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * @file
- * Attaches preview-related behavior for the Color module.
- */
-
-(function ($) {
-  Drupal.color = {
-    callback: function(context, settings, form, farb, height, width) {
-      // Solid background.
-      $('#preview', form).css('backgroundColor', $('#palette input[name="palette[base]"]', form).val());
-
-      // Text preview
-      $('#text', form).css('color', $('#palette input[name="palette[text]"]', form).val());
-      $('#text a, #text h2', form).css('color', $('#palette input[name="palette[link]"]', form).val());
-
-      // Set up gradients if there are some.
-      var color_start, color_end;
-      for (i in settings.gradients) {
-        color_start = farb.unpack($('#palette input[name="palette[' + settings.gradients[i]['colors'][0] + ']"]', form).val());
-        color_end = farb.unpack($('#palette input[name="palette[' + settings.gradients[i]['colors'][1] + ']"]', form).val());
-        if (color_start && color_end) {
-          var delta = [];
-          for (j in color_start) {
-            delta[j] = (color_end[j] - color_start[j]) / (settings.gradients[i]['vertical'] ? height[i] : width[i]);
-          }
-          var accum = color_start;
-          // Render gradient lines.
-          $('#gradient-' + i + ' > div', form).each(function () {
-            for (j in accum) {
-              accum[j] += delta[j];
-            }
-            this.style.backgroundColor = farb.pack(accum);
-          });
-        }
-      }
-    }
-  };
-})(jQuery);
diff --git a/modules/comment/comment-node-form.js b/modules/comment/comment-node-form.js
deleted file mode 100644
index 76db240..0000000
--- a/modules/comment/comment-node-form.js
+++ /dev/null
@@ -1,32 +0,0 @@
-
-(function ($) {
-
-Drupal.behaviors.commentFieldsetSummaries = {
-  attach: function (context) {
-    $('fieldset.comment-node-settings-form', context).drupalSetSummary(function (context) {
-      return Drupal.checkPlain($('.form-item-comment input:checked', context).next('label').text());
-    });
-
-    // Provide the summary for the node type form.
-    $('fieldset.comment-node-type-settings-form', context).drupalSetSummary(function(context) {
-      var vals = [];
-
-      // Default comment setting.
-      vals.push($(".form-item-comment select option:selected", context).text());
-
-      // Threading.
-      var threading = $(".form-item-comment-default-mode input:checked", context).next('label').text();
-      if (threading) {
-        vals.push(threading);
-      }
-
-      // Comments per page.
-      var number = $(".form-item-comment-default-per-page select option:selected", context).val();
-      vals.push(Drupal.t('@number comments per page', {'@number': number}));
-
-      return Drupal.checkPlain(vals.join(', '));
-    });
-  }
-};
-
-})(jQuery);
diff --git a/modules/comment/comment-rtl.css b/modules/comment/comment-rtl.css
deleted file mode 100644
index 39c3929..0000000
--- a/modules/comment/comment-rtl.css
+++ /dev/null
@@ -1,5 +0,0 @@
-
-.indented {
-  margin-left: 0;
-  margin-right: 25px;
-}
diff --git a/modules/comment/comment-wrapper.tpl.php b/modules/comment/comment-wrapper.tpl.php
deleted file mode 100644
index c691459..0000000
--- a/modules/comment/comment-wrapper.tpl.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to provide an HTML container for comments.
- *
- * Available variables:
- * - $content: The array of content-related elements for the node. Use
- *   render($content) to print them all, or
- *   print a subset such as render($content['comment_form']).
- * - $classes: String of classes that can be used to style contextually through
- *   CSS. It can be manipulated through the variable $classes_array from
- *   preprocess functions. The default value has the following:
- *   - comment-wrapper: The current template type, i.e., "theming hook".
- * - $title_prefix (array): An array containing additional output populated by
- *   modules, intended to be displayed in front of the main title tag that
- *   appears in the template.
- * - $title_suffix (array): An array containing additional output populated by
- *   modules, intended to be displayed after the main title tag that appears in
- *   the template.
- *
- * The following variables are provided for contextual information.
- * - $node: Node object the comments are attached to.
- * The constants below the variables show the possible values and should be
- * used for comparison.
- * - $display_mode
- *   - COMMENT_MODE_FLAT
- *   - COMMENT_MODE_THREADED
- *
- * Other variables:
- * - $classes_array: Array of html class attribute values. It is flattened
- *   into a string within the variable $classes.
- *
- * @see template_preprocess_comment_wrapper()
- *
- * @ingroup themeable
- */
-?>
-<div id="comments" class="<?php print $classes; ?>"<?php print $attributes; ?>>
-  <?php if ($content['comments'] && $node->type != 'forum'): ?>
-    <?php print render($title_prefix); ?>
-    <h2 class="title"><?php print t('Comments'); ?></h2>
-    <?php print render($title_suffix); ?>
-  <?php endif; ?>
-
-  <?php print render($content['comments']); ?>
-
-  <?php if ($content['comment_form']): ?>
-    <h2 class="title comment-form"><?php print t('Add new comment'); ?></h2>
-    <?php print render($content['comment_form']); ?>
-  <?php endif; ?>
-</div>
diff --git a/modules/comment/comment.admin.inc b/modules/comment/comment.admin.inc
deleted file mode 100644
index 43b53e2..0000000
--- a/modules/comment/comment.admin.inc
+++ /dev/null
@@ -1,284 +0,0 @@
-<?php
-
-/**
- * @file
- * Admin page callbacks for the comment module.
- */
-
-/**
- * Menu callback; present an administrative comment listing.
- */
-function comment_admin($type = 'new') {
-  $edit = $_POST;
-
-  if (isset($edit['operation']) && ($edit['operation'] == 'delete') && isset($edit['comments']) && $edit['comments']) {
-    return drupal_get_form('comment_multiple_delete_confirm');
-  }
-  else {
-    return drupal_get_form('comment_admin_overview', $type);
-  }
-}
-
-/**
- * Form builder for the comment overview administration form.
- *
- * @param $arg
- *   Current path's fourth component: the type of overview form ('approval' or
- *   'new').
- *
- * @ingroup forms
- * @see comment_admin_overview_validate()
- * @see comment_admin_overview_submit()
- * @see theme_comment_admin_overview()
- */
-function comment_admin_overview($form, &$form_state, $arg) {
-  // Build an 'Update options' form.
-  $form['options'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Update options'),
-    '#attributes' => array('class' => array('container-inline')),
-  );
-
-  if ($arg == 'approval') {
-    $options['publish'] = t('Publish the selected comments');
-  }
-  else {
-    $options['unpublish'] = t('Unpublish the selected comments');
-  }
-  $options['delete'] = t('Delete the selected comments');
-
-  $form['options']['operation'] = array(
-    '#type' => 'select',
-    '#title' => t('Operation'),
-    '#title_display' => 'invisible',
-    '#options' => $options,
-    '#default_value' => 'publish',
-  );
-  $form['options']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Update'),
-  );
-
-  // Load the comments that need to be displayed.
-  $status = ($arg == 'approval') ? COMMENT_NOT_PUBLISHED : COMMENT_PUBLISHED;
-  $header = array(
-    'subject' => array('data' => t('Subject'), 'field' => 'subject'),
-    'author' => array('data' => t('Author'), 'field' => 'name'),
-    'posted_in' => array('data' => t('Posted in'), 'field' => 'node_title'),
-    'changed' => array('data' => t('Updated'), 'field' => 'c.changed', 'sort' => 'desc'),
-    'operations' => array('data' => t('Operations')),
-  );
-
-  $query = db_select('comment', 'c')->extend('PagerDefault')->extend('TableSort');
-  $query->join('node', 'n', 'n.nid = c.nid');
-  $query->addField('n', 'title', 'node_title');
-  $query->addTag('node_access');
-  $result = $query
-    ->fields('c', array('cid', 'subject', 'name', 'changed'))
-    ->condition('c.status', $status)
-    ->limit(50)
-    ->orderByHeader($header)
-    ->execute();
-
-  $cids = array();
-
-  // We collect a sorted list of node_titles during the query to attach to the
-  // comments later.
-  foreach ($result as $row) {
-    $cids[] = $row->cid;
-    $node_titles[] = $row->node_title;
-  }
-  $comments = comment_load_multiple($cids);
-
-  // Build a table listing the appropriate comments.
-  $options = array();
-  $destination = drupal_get_destination();
-
-  foreach ($comments as $comment) {
-    // Remove the first node title from the node_titles array and attach to
-    // the comment.
-    $comment->node_title = array_shift($node_titles);
-    $comment_body = field_get_items('comment', $comment, 'comment_body');
-    $options[$comment->cid] = array(
-      'subject' => array(
-        'data' => array(
-          '#type' => 'link',
-          '#title' => $comment->subject,
-          '#href' => 'comment/' . $comment->cid,
-          '#options' => array('attributes' => array('title' => truncate_utf8($comment_body[0]['value'], 128)), 'fragment' => 'comment-' . $comment->cid),
-        ),
-      ),
-      'author' => theme('username', array('account' => $comment)),
-      'posted_in' => array(
-        'data' => array(
-          '#type' => 'link',
-          '#title' => $comment->node_title,
-          '#href' => 'node/' . $comment->nid,
-        ),
-      ),
-      'changed' => format_date($comment->changed, 'short'),
-      'operations' => array(
-        'data' => array(
-          '#type' => 'link',
-          '#title' => t('edit'),
-          '#href' => 'comment/' . $comment->cid . '/edit',
-          '#options' => array('query' => $destination),
-        ),
-      ),
-    );
-  }
-
-  $form['comments'] = array(
-    '#type' => 'tableselect',
-    '#header' => $header,
-    '#options' => $options,
-    '#empty' => t('No comments available.'),
-  );
-
-  $form['pager'] = array('#theme' => 'pager');
-
-  return $form;
-}
-
-/**
- * Validate comment_admin_overview form submissions.
- */
-function comment_admin_overview_validate($form, &$form_state) {
-  $form_state['values']['comments'] = array_diff($form_state['values']['comments'], array(0));
-  // We can't execute any 'Update options' if no comments were selected.
-  if (count($form_state['values']['comments']) == 0) {
-    form_set_error('', t('Select one or more comments to perform the update on.'));
-  }
-}
-
-/**
- * Process comment_admin_overview form submissions.
- *
- * Execute the chosen 'Update option' on the selected comments, such as
- * publishing, unpublishing or deleting.
- */
-function comment_admin_overview_submit($form, &$form_state) {
-  $operation = $form_state['values']['operation'];
-  $cids = $form_state['values']['comments'];
-
-  if ($operation == 'delete') {
-    comment_delete_multiple($cids);
-  }
-  else {
-    foreach ($cids as $cid => $value) {
-      $comment = comment_load($value);
-
-      if ($operation == 'unpublish') {
-        $comment->status = COMMENT_NOT_PUBLISHED;
-      }
-      elseif ($operation == 'publish') {
-        $comment->status = COMMENT_PUBLISHED;
-      }
-      comment_save($comment);
-    }
-  }
-  drupal_set_message(t('The update has been performed.'));
-  $form_state['redirect'] = 'admin/content/comment';
-  cache_clear_all();
-}
-
-/**
- * List the selected comments and verify that the admin wants to delete them.
- *
- * @param $form_state
- *   An associative array containing the current state of the form.
- * @return
- *   TRUE if the comments should be deleted, FALSE otherwise.
- * @ingroup forms
- * @see comment_multiple_delete_confirm_submit()
- */
-function comment_multiple_delete_confirm($form, &$form_state) {
-  $edit = $form_state['input'];
-
-  $form['comments'] = array(
-    '#prefix' => '<ul>',
-    '#suffix' => '</ul>',
-    '#tree' => TRUE,
-  );
-  // array_filter() returns only elements with actual values.
-  $comment_counter = 0;
-  foreach (array_filter($edit['comments']) as $cid => $value) {
-    $comment = comment_load($cid);
-    if (is_object($comment) && is_numeric($comment->cid)) {
-      $subject = db_query('SELECT subject FROM {comment} WHERE cid = :cid', array(':cid' => $cid))->fetchField();
-      $form['comments'][$cid] = array('#type' => 'hidden', '#value' => $cid, '#prefix' => '<li>', '#suffix' => check_plain($subject) . '</li>');
-      $comment_counter++;
-    }
-  }
-  $form['operation'] = array('#type' => 'hidden', '#value' => 'delete');
-
-  if (!$comment_counter) {
-    drupal_set_message(t('There do not appear to be any comments to delete, or your selected comment was deleted by another administrator.'));
-    drupal_goto('admin/content/comment');
-  }
-  else {
-    return confirm_form($form,
-                        t('Are you sure you want to delete these comments and all their children?'),
-                        'admin/content/comment', t('This action cannot be undone.'),
-                        t('Delete comments'), t('Cancel'));
-  }
-}
-
-/**
- * Process comment_multiple_delete_confirm form submissions.
- */
-function comment_multiple_delete_confirm_submit($form, &$form_state) {
-  if ($form_state['values']['confirm']) {
-    comment_delete_multiple(array_keys($form_state['values']['comments']));
-    cache_clear_all();
-    $count = count($form_state['values']['comments']);
-    watchdog('content', 'Deleted @count comments.', array('@count' => $count));
-    drupal_set_message(format_plural($count, 'Deleted 1 comment.', 'Deleted @count comments.'));
-  }
-  $form_state['redirect'] = 'admin/content/comment';
-}
-
-/**
- * Page callback for comment deletions.
- */
-function comment_confirm_delete_page($cid) {
-  if ($comment = comment_load($cid)) {
-    return drupal_get_form('comment_confirm_delete', $comment);
-  }
-  return MENU_NOT_FOUND;
-}
-
-/**
- * Form builder; Builds the confirmation form for deleting a single comment.
- *
- * @ingroup forms
- * @see comment_confirm_delete_submit()
- */
-function comment_confirm_delete($form, &$form_state, $comment) {
-  $form['#comment'] = $comment;
-  // Always provide entity id in the same form key as in the entity edit form.
-  $form['cid'] = array('#type' => 'value', '#value' => $comment->cid);
-  return confirm_form(
-    $form,
-    t('Are you sure you want to delete the comment %title?', array('%title' => $comment->subject)),
-    'node/' . $comment->nid,
-    t('Any replies to this comment will be lost. This action cannot be undone.'),
-    t('Delete'),
-    t('Cancel'),
-    'comment_confirm_delete');
-}
-
-/**
- * Process comment_confirm_delete form submissions.
- */
-function comment_confirm_delete_submit($form, &$form_state) {
-  $comment = $form['#comment'];
-  // Delete the comment and its replies.
-  comment_delete($comment->cid);
-  drupal_set_message(t('The comment and all its replies have been deleted.'));
-  watchdog('content', 'Deleted comment @cid and its replies.', array('@cid' => $comment->cid));
-  // Clear the cache so an anonymous user sees that his comment was deleted.
-  cache_clear_all();
-
-  $form_state['redirect'] = "node/$comment->nid";
-}
diff --git a/modules/comment/comment.api.php b/modules/comment/comment.api.php
deleted file mode 100644
index 0591265..0000000
--- a/modules/comment/comment.api.php
+++ /dev/null
@@ -1,145 +0,0 @@
-<?php
-
-/**
- * @file
- * Hooks provided by the Comment module.
- */
-
-/**
- * @addtogroup hooks
- * @{
- */
-
-/**
- * The comment passed validation and is about to be saved.
- *
- * Modules may make changes to the comment before it is saved to the database.
- *
- * @param $comment
- *   The comment object.
- */
-function hook_comment_presave($comment) {
-  // Remove leading & trailing spaces from the comment subject.
-  $comment->subject = trim($comment->subject);
-}
-
-/**
- * The comment is being inserted.
- *
- * @param $comment
- *   The comment object.
- */
-function hook_comment_insert($comment) {
-  // Reindex the node when comments are added.
-  search_touch_node($comment->nid);
-}
-
-/**
- * The comment is being updated.
- *
- * @param $comment
- *   The comment object.
- */
-function hook_comment_update($comment) {
-  // Reindex the node when comments are updated.
-  search_touch_node($comment->nid);
-}
-
-/**
- * Comments are being loaded from the database.
- *
- * @param $comments
- *  An array of comment objects indexed by cid.
- */
-function hook_comment_load($comments) {
-  $result = db_query('SELECT cid, foo FROM {mytable} WHERE cid IN (:cids)', array(':cids' => array_keys($comments)));
-  foreach ($result as $record) {
-    $comments[$record->cid]->foo = $record->foo;
-  }
-}
-
-/**
- * The comment is being viewed. This hook can be used to add additional data to the comment before theming.
- *
- * @param $comment
- *   Passes in the comment the action is being performed on.
- * @param $view_mode
- *   View mode, e.g. 'full', 'teaser'...
- * @param $langcode
- *   The language code used for rendering.
- *
- * @see hook_entity_view()
- */
-function hook_comment_view($comment, $view_mode, $langcode) {
-  // how old is the comment
-  $comment->time_ago = time() - $comment->changed;
-}
-
-/**
- * The comment was built; the module may modify the structured content.
- *
- * This hook is called after the content has been assembled in a structured array
- * and may be used for doing processing which requires that the complete comment
- * content structure has been built.
- *
- * If the module wishes to act on the rendered HTML of the comment rather than the
- * structured content array, it may use this hook to add a #post_render callback.
- * Alternatively, it could also implement hook_preprocess_comment(). See
- * drupal_render() and theme() documentation respectively for details.
- *
- * @param $build
- *   A renderable array representing the comment.
- *
- * @see comment_view()
- * @see hook_entity_view_alter()
- */
-function hook_comment_view_alter(&$build) {
-  // Check for the existence of a field added by another module.
-  if ($build['#view_mode'] == 'full' && isset($build['an_additional_field'])) {
-    // Change its weight.
-    $build['an_additional_field']['#weight'] = -10;
-  }
-
-  // Add a #post_render callback to act on the rendered HTML of the comment.
-  $build['#post_render'][] = 'my_module_comment_post_render';
-}
-
-/**
- * The comment is being published by the moderator.
- *
- * @param $comment
- *   Passes in the comment the action is being performed on.
- * @return
- *   Nothing.
- */
-function hook_comment_publish($comment) {
-  drupal_set_message(t('Comment: @subject has been published', array('@subject' => $comment->subject)));
-}
-
-/**
- * The comment is being unpublished by the moderator.
- *
- * @param $comment
- *   Passes in the comment the action is being performed on.
- * @return
- *   Nothing.
- */
-function hook_comment_unpublish($comment) {
-  drupal_set_message(t('Comment: @subject has been unpublished', array('@subject' => $comment->subject)));
-}
-
-/**
- * The comment is being deleted by the moderator.
- *
- * @param $comment
- *   Passes in the comment the action is being performed on.
- * @return
- *   Nothing.
- */
-function hook_comment_delete($comment) {
-  drupal_set_message(t('Comment: @subject has been deleted', array('@subject' => $comment->subject)));
-}
-
-/**
- * @} End of "addtogroup hooks".
- */
diff --git a/modules/comment/comment.css b/modules/comment/comment.css
deleted file mode 100644
index a55f527..0000000
--- a/modules/comment/comment.css
+++ /dev/null
@@ -1,13 +0,0 @@
-
-#comments {
-  margin-top: 15px;
-}
-.indented {
-  margin-left: 25px; /* LTR */
-}
-.comment-unpublished {
-  background-color: #fff4f4;
-}
-.comment-preview {
-  background-color: #ffffea;
-}
diff --git a/modules/comment/comment.info b/modules/comment/comment.info
deleted file mode 100644
index 7cbe246..0000000
--- a/modules/comment/comment.info
+++ /dev/null
@@ -1,10 +0,0 @@
-name = Comment
-description = Allows users to comment on and discuss published content.
-package = Core
-version = VERSION
-core = 7.x
-dependencies[] = text
-files[] = comment.module
-files[] = comment.test
-configure = admin/content/comment
-stylesheets[all][] = comment.css
diff --git a/modules/comment/comment.install b/modules/comment/comment.install
deleted file mode 100644
index e4da58f..0000000
--- a/modules/comment/comment.install
+++ /dev/null
@@ -1,578 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the comment module.
- */
-
-/**
- * Implements hook_uninstall().
- */
-function comment_uninstall() {
-  // Delete comment_body field.
-  field_delete_field('comment_body');
-
-  // Remove variables.
-  variable_del('comment_block_count');
-  $node_types = array_keys(node_type_get_types());
-  foreach ($node_types as $node_type) {
-    field_attach_delete_bundle('comment', 'comment_node_' . $node_type);
-    variable_del('comment_' . $node_type);
-    variable_del('comment_anonymous_' . $node_type);
-    variable_del('comment_controls_' . $node_type);
-    variable_del('comment_default_mode_' . $node_type);
-    variable_del('comment_default_order_' . $node_type);
-    variable_del('comment_default_per_page_' . $node_type);
-    variable_del('comment_form_location_' . $node_type);
-    variable_del('comment_preview_' . $node_type);
-    variable_del('comment_subject_field_' . $node_type);
-  }
-}
-
-/**
- * Implements hook_enable().
- */
-function comment_enable() {
-  // Insert records into the node_comment_statistics for nodes that are missing.
-  $query = db_select('node', 'n');
-  $query->leftJoin('node_comment_statistics', 'ncs', 'ncs.nid = n.nid');
-  $query->addField('n', 'created', 'last_comment_timestamp');
-  $query->addField('n', 'uid', 'last_comment_uid');
-  $query->addField('n', 'nid');
-  $query->addExpression('0', 'comment_count');
-  $query->addExpression('NULL', 'last_comment_name');
-  $query->isNull('ncs.comment_count');
-
-  db_insert('node_comment_statistics')
-    ->from($query)
-    ->execute();
-}
-
-/**
- * Implements hook_modules_enabled().
- *
- * Creates comment body fields for node types existing before the comment module
- * is enabled. We use hook_modules_enabled() rather than hook_enable() so we can
- * react to node types of existing modules, and those of modules being enabled
- * both before and after comment module in the loop of module_enable().
- *
- * There is a separate comment bundle for each node type to allow for
- * per-node-type customization of comment fields. Each one of these bundles
- * needs a comment body field instance. A comment bundle is needed even for
- * node types whose comments are disabled by default, because individual nodes
- * may override that default.
- *
- * @see comment_node_type_insert()
- */
-function comment_modules_enabled($modules) {
-  // Only react if comment module is one of the modules being enabled.
-  // hook_node_type_insert() is used to create body fields while the comment
-  // module is enabled.
-  if (in_array('comment', $modules)) {
-    // Ensure that the list of node types reflects newly enabled modules.
-    node_types_rebuild();
-
-    // Create comment body fields for each node type, if needed.
-    foreach (node_type_get_types() as $type => $info) {
-      _comment_body_field_create($info);
-    }
-  }
-}
-
-/**
- * Implements hook_update_dependencies().
- */
-function comment_update_dependencies() {
-  // comment_update_7005() creates the comment body field and therefore must
-  // run after all Field modules have been enabled, which happens in
-  // system_update_7027().
-  $dependencies['comment'][7005] = array(
-    'system' => 7027,
-  );
-
-  // comment_update_7006() needs to query the {filter_format} table to get a
-  // list of existing text formats, so it must run after filter_update_7000(),
-  // which creates that table.
-  $dependencies['comment'][7006] = array(
-    'filter' => 7000,
-  );
-
-  return $dependencies;
-}
-
-/**
- * @addtogroup updates-6.x-to-7.x
- * @{
- */
-
-/**
- * Rename comment display setting variables.
- */
-function comment_update_7000() {
-  $types = _update_7000_node_get_types();
-  foreach ($types as $type => $type_object) {
-    variable_del('comment_default_order' . $type);
-
-    // Drupal 6 had four display modes:
-    // - COMMENT_MODE_FLAT_COLLAPSED = 1
-    // - COMMENT_MODE_FLAT_EXPANDED = 2
-    // - COMMENT_MODE_THREADED_COLLAPSED = 3
-    // - COMMENT_MODE_THREADED_EXPANDED = 4
-    //
-    // Drupal 7 doesn't support collapsed/expanded modes anymore, so we
-    // migrate all the flat modes to COMMENT_MODE_FLAT (0) and all the threaded
-    // modes to COMMENT_MODE_THREADED (1).
-    $setting = variable_get('comment_default_mode_' . $type, 4);
-    if ($setting == 3 || $setting == 4) {
-      variable_set('comment_default_mode_' . $type, 1);
-    }
-    else {
-      variable_set('comment_default_mode_' . $type, 0);
-    }
-
-    // There were only two comment modes in the past:
-    // - 1 was 'required' previously, convert into DRUPAL_REQUIRED (2).
-    // - 0 was 'optional' previously, convert into DRUPAL_OPTIONAL (1).
-    $preview = variable_get('comment_preview_' . $type, 1) ? 2 : 1;
-    variable_set('comment_preview_' . $type, $preview);
-  }
-}
-
-/**
- * Change comment status from published being 0 to being 1
- */
-function comment_update_7001() {
-  // Choose a temporary status value different from the existing status values.
-  $tmp_status = db_query('SELECT MAX(status) FROM {comments}')->fetchField() + 1;
-
-  $changes = array(
-    0 => $tmp_status,
-    1 => 0,
-    $tmp_status => 1,
-  );
-
-  foreach ($changes as $old => $new) {
-    db_update('comments')
-      ->fields(array('status' => $new))
-      ->condition('status', $old)
-      ->execute();
-  }
-}
-
-/**
- * Rename {comments} table to {comment} and upgrade it.
- */
-function comment_update_7002() {
-  db_rename_table('comments', 'comment');
-
-  // Add user-related indexes. These may already exist from Drupal 6.
-  if (!db_index_exists('comment', 'comment_uid')) {
-    db_add_index('comment', 'comment_uid', array('uid'));
-    db_add_index('node_comment_statistics', 'last_comment_uid', array('last_comment_uid'));
-  }
-
-  // Create a language column.
-  db_add_field('comment', 'language', array(
-    'type' => 'varchar',
-    'length' => 12,
-    'not null' => TRUE,
-    'default' => '',
-  ));
-  db_add_index('comment', 'comment_nid_language', array('nid', 'language'));
-}
-
-/**
- * Split {comment}.timestamp into 'created' and 'changed', improve indexing on {comment}.
- */
-function comment_update_7003() {
-  // Drop the old indexes.
-  db_drop_index('comment', 'status');
-  db_drop_index('comment', 'pid');
-
-  // Create a created column.
-  db_add_field('comment', 'created', array(
-    'type' => 'int',
-    'not null' => TRUE,
-    'default' => 0,
-  ));
-
-  // Rename the timestamp column to changed.
-  db_change_field('comment', 'timestamp', 'changed', array(
-    'type' => 'int',
-    'not null' => TRUE,
-    'default' => 0,
-  ));
-
-  // Migrate the data.
-  // @todo db_update() should support this.
-  db_query('UPDATE {comment} SET created = changed');
-
-  // Recreate the indexes.
-  // The 'comment_num_new' index is optimized for comment_num_new()
-  // and comment_new_page_count().
-  db_add_index('comment', 'comment_num_new', array('nid', 'status', 'created', 'cid', 'thread'));
-  db_add_index('comment', 'comment_pid_status', array('pid', 'status'));
-}
-
-/**
- * Upgrade the {node_comment_statistics} table.
- */
-function comment_update_7004() {
-  db_add_field('node_comment_statistics', 'cid', array(
-    'type' => 'int',
-    'not null' => TRUE,
-    'default' => 0,
-    'description' => 'The {comment}.cid of the last comment.',
-  ));
-  db_add_index('node_comment_statistics', 'cid', array('cid'));
-
-  // The comment_count index may have been added in Drupal 6.
-  if (!db_index_exists('node_comment_statistics', 'comment_count')) {
-    // Add an index on the comment_count.
-    db_add_index('node_comment_statistics', 'comment_count', array('comment_count'));
-  }
-}
-
-/**
- * Create the comment_body field.
- */
-function comment_update_7005() {
-  // Create comment body field.
-  $field = array(
-    'field_name' => 'comment_body',
-    'type' => 'text_long',
-    'module' => 'text',
-    'entity_types' => array(
-      'comment',
-    ),
-    'settings' => array(),
-    'cardinality' => 1,
-  );
-  _update_7000_field_create_field($field);
-
-  // Add the field to comments for all existing bundles.
-  $generic_instance = array(
-    'entity_type' => 'comment',
-    'label' => t('Comment'),
-    'settings' => array(
-      'text_processing' => 1,
-    ),
-    'required' => TRUE,
-    'display' => array(
-      'default' => array(
-        'label' => 'hidden',
-        'type' => 'text_default',
-        'weight' => 0,
-        'settings' => array(),
-        'module' => 'text',
-      ),
-    ),
-    'widget' => array(
-      'type' => 'text_textarea',
-      'settings' => array(
-        'rows' => 5,
-      ),
-      'weight' => 0,
-      'module' => 'text',
-    ),
-    'description' => '',
-  );
-
-  $types = _update_7000_node_get_types();
-  foreach ($types as $type => $type_object) {
-    $instance = $generic_instance;
-    $instance['bundle'] = 'comment_node_' . $type;
-    _update_7000_field_create_instance($field, $instance);
-  }
-}
-
-/**
- * Migrate data from the comment field to field storage.
- */
-function comment_update_7006(&$sandbox) {
-  // This is a multipass update. First set up some comment variables.
-  if (empty($sandbox['total'])) {
-    $comments = (bool) db_query_range('SELECT 1 FROM {comment}', 0, 1)->fetchField();
-    $sandbox['types'] = array();
-    if ($comments) {
-      $sandbox['types'] = array_keys(_update_7000_node_get_types());
-    }
-    $sandbox['total'] = count($sandbox['types']);
-  }
-
-  if (!empty($sandbox['types'])) {
-    $type = array_shift($sandbox['types']);
-
-    $query = db_select('comment', 'c');
-    $query->innerJoin('node', 'n', 'c.nid = n.nid AND n.type = :type', array(':type' => $type));
-    $query->addField('c', 'cid', 'entity_id');
-    $query->addExpression("'comment_node_$type'", 'bundle');
-    $query->addExpression("'comment'", 'entity_type');
-    $query->addExpression('0', 'deleted');
-    $query->addExpression("'" . LANGUAGE_NONE . "'", 'language');
-    $query->addExpression('0', 'delta');
-    $query->addField('c', 'comment', 'comment_body_value');
-    $query->addField('c', 'format', 'comment_body_format');
-
-    db_insert('field_data_comment_body')
-      ->from($query)
-      ->execute();
-
-    $sandbox['#finished'] = 1 - count($sandbox['types']) / $sandbox['total'];
-  }
-
-  // On the last pass of the update, $sandbox['types'] will be empty.
-  if (empty($sandbox['types'])) {
-    // Update the comment body text formats. For an explanation of these
-    // updates, see the code comments in user_update_7010().
-    db_update('field_data_comment_body')
-      ->fields(array('comment_body_format' => NULL))
-      ->condition('comment_body_value', '')
-      ->condition('comment_body_format', 0)
-      ->execute();
-    $existing_formats = db_query("SELECT format FROM {filter_format}")->fetchCol();
-    $default_format = variable_get('filter_default_format', 1);
-    db_update('field_data_comment_body')
-      ->fields(array('comment_body_format' => $default_format))
-      ->isNotNull('comment_body_format')
-      ->condition('comment_body_format', $existing_formats, 'NOT IN')
-      ->execute();
-
-    // Finally, remove the old comment data.
-    db_drop_field('comment', 'comment');
-    db_drop_field('comment', 'format');
-  }
-}
-
-/**
- * @} End of "addtogroup updates-6.x-to-7.x".
- */
-
-/**
- * @addtogroup updates-7.x-extra
- * @{
- */
-
-/**
- * Add an index to the created column.
- */
-function comment_update_7007() {
-  db_add_index('comment', 'comment_created', array('created'));
-}
-
-/**
- * Update database to match Drupal 7 schema.
- */
-function comment_update_7008() {
-  // Update default status to 1.
-  db_change_field('comment', 'status', 'status', array(
-    'type' => 'int',
-    'unsigned' => TRUE,
-    'not null' => TRUE,
-    'default' => 1,
-    'size' => 'tiny',
-  ));
-
-  // Realign indexes.
-  db_drop_index('comment', 'comment_status_pid');
-  db_add_index('comment', 'comment_status_pid', array('pid', 'status'));
-  db_drop_index('comment', 'comment_pid_status');
-  db_drop_index('comment', 'nid');
-}
-
-/**
- * Change the last_comment_timestamp column description.
- */
-function comment_update_7009() {
-  db_change_field('node_comment_statistics', 'last_comment_timestamp', 'last_comment_timestamp', array(
-    'type' => 'int',
-    'not null' => TRUE,
-    'default' => 0,
-    'description' => 'The Unix timestamp of the last comment that was posted within this node, from {comment}.changed.',
-  ));
-}
-
-/**
- * @} End of "addtogroup updates-7.x-extra".
- */
-
-/**
- * Implements hook_schema().
- */
-function comment_schema() {
-  $schema['comment'] = array(
-    'description' => 'Stores comments and associated data.',
-    'fields' => array(
-      'cid' => array(
-        'type' => 'serial',
-        'not null' => TRUE,
-        'description' => 'Primary Key: Unique comment ID.',
-      ),
-      'pid' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The {comment}.cid to which this comment is a reply. If set to 0, this comment is not a reply to an existing comment.',
-      ),
-      'nid' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The {node}.nid to which this comment is a reply.',
-      ),
-      'uid' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The {users}.uid who authored the comment. If set to 0, this comment was created by an anonymous user.',
-      ),
-      'subject' => array(
-        'type' => 'varchar',
-        'length' => 64,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'The comment title.',
-      ),
-      'hostname' => array(
-        'type' => 'varchar',
-        'length' => 128,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => "The author's host name.",
-      ),
-      'created' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The time that the comment was created, as a Unix timestamp.',
-      ),
-      'changed' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The time that the comment was last edited, as a Unix timestamp.',
-      ),
-      'status' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 1,
-        'size' => 'tiny',
-        'description' => 'The published status of a comment. (0 = Not Published, 1 = Published)',
-      ),
-      'thread' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'description' => "The vancode representation of the comment's place in a thread.",
-      ),
-      'name' => array(
-        'type' => 'varchar',
-        'length' => 60,
-        'not null' => FALSE,
-        'description' => "The comment author's name. Uses {users}.name if the user is logged in, otherwise uses the value typed into the comment form.",
-      ),
-      'mail' => array(
-        'type' => 'varchar',
-        'length' => 64,
-        'not null' => FALSE,
-        'description' => "The comment author's e-mail address from the comment form, if user is anonymous, and the 'Anonymous users may/must leave their contact information' setting is turned on.",
-      ),
-      'homepage' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => FALSE,
-        'description' => "The comment author's home page address from the comment form, if user is anonymous, and the 'Anonymous users may/must leave their contact information' setting is turned on.",
-      ),
-      'language' => array(
-        'description' => 'The {languages}.language of this comment.',
-        'type' => 'varchar',
-        'length' => 12,
-        'not null' => TRUE,
-        'default' => '',
-      ),
-    ),
-    'indexes' => array(
-      'comment_status_pid' => array('pid', 'status'),
-      'comment_num_new' => array('nid', 'status', 'created', 'cid', 'thread'),
-      'comment_uid' => array('uid'),
-      'comment_nid_language' => array('nid', 'language'),
-      'comment_created' => array('created'),
-    ),
-    'primary key' => array('cid'),
-    'foreign keys' => array(
-      'comment_node' => array(
-        'table' => 'node',
-        'columns' => array('nid' => 'nid'),
-      ),
-      'comment_author' => array(
-        'table' => 'users',
-        'columns' => array('uid' => 'uid'),
-      ),
-    ),
-  );
-
-  $schema['node_comment_statistics'] = array(
-    'description' => 'Maintains statistics of node and comments posts to show "new" and "updated" flags.',
-    'fields' => array(
-      'nid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The {node}.nid for which the statistics are compiled.',
-      ),
-      'cid' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The {comment}.cid of the last comment.',
-      ),
-      'last_comment_timestamp' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The Unix timestamp of the last comment that was posted within this node, from {comment}.changed.',
-      ),
-      'last_comment_name' => array(
-        'type' => 'varchar',
-        'length' => 60,
-        'not null' => FALSE,
-        'description' => 'The name of the latest author to post a comment on this node, from {comment}.name.',
-      ),
-      'last_comment_uid' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The user ID of the latest author to post a comment on this node, from {comment}.uid.',
-      ),
-      'comment_count' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The total number of comments on this node.',
-      ),
-    ),
-    'primary key' => array('nid'),
-    'indexes' => array(
-      'node_comment_timestamp' => array('last_comment_timestamp'),
-      'comment_count' => array('comment_count'),
-      'last_comment_uid' => array('last_comment_uid'),
-    ),
-    'foreign keys' => array(
-      'statistics_node' => array(
-        'table' => 'node',
-        'columns' => array('nid' => 'nid'),
-      ),
-      'last_comment_author' => array(
-        'table' => 'users',
-        'columns' => array(
-          'last_comment_uid' => 'uid',
-        ),
-      ),
-    ),
-  );
-
-  return $schema;
-}
diff --git a/modules/comment/comment.pages.inc b/modules/comment/comment.pages.inc
deleted file mode 100644
index 482e3f2..0000000
--- a/modules/comment/comment.pages.inc
+++ /dev/null
@@ -1,123 +0,0 @@
-<?php
-
-/**
- * @file
- * User page callbacks for the comment module.
- */
-
-/**
- * This function is responsible for generating a comment reply form.
- * There are several cases that have to be handled, including:
- *   - replies to comments
- *   - replies to nodes
- *   - attempts to reply to nodes that can no longer accept comments
- *   - respecting access permissions ('access comments', 'post comments', etc.)
- *
- * The node or comment that is being replied to must appear above the comment
- * form to provide the user context while authoring the comment.
- *
- * @param $node
- *   Every comment belongs to a node. This is that node.
- *
- * @param $pid
- *   Some comments are replies to other comments. In those cases, $pid is the parent
- *   comment's cid.
- *
- * @return array
- *   An associative array containing:
- *   - An array for rendering the node or parent comment.
- *     - comment_node: If the comment is a reply to the node.
- *     - comment_parent: If the comment is a reply to another comment.
- *   - comment_form: The comment form as a renderable array.
- */
-function comment_reply($node, $pid = NULL) {
-  // Set the breadcrumb trail.
-  drupal_set_breadcrumb(array(l(t('Home'), NULL), l($node->title, 'node/' . $node->nid)));
-  $op = isset($_POST['op']) ? $_POST['op'] : '';
-  $build = array();
-
-  // The user is previewing a comment prior to submitting it.
-  if ($op == t('Preview')) {
-    if (user_access('post comments')) {
-      $build['comment_form'] = drupal_get_form("comment_node_{$node->type}_form", (object) array('pid' => $pid, 'nid' => $node->nid));
-    }
-    else {
-      drupal_set_message(t('You are not authorized to post comments.'), 'error');
-      drupal_goto("node/$node->nid");
-    }
-  }
-  else {
-    // $pid indicates that this is a reply to a comment.
-    if ($pid) {
-      if (user_access('access comments')) {
-        // Load the comment whose cid = $pid
-        $comment = db_query('SELECT c.*, u.uid, u.name AS registered_name, u.signature, u.signature_format, u.picture, u.data FROM {comment} c INNER JOIN {users} u ON c.uid = u.uid WHERE c.cid = :cid AND c.status = :status', array(
-          ':cid' => $pid,
-          ':status' => COMMENT_PUBLISHED,
-        ))->fetchObject();
-        if ($comment) {
-          // If that comment exists, make sure that the current comment and the
-          // parent comment both belong to the same parent node.
-          if ($comment->nid != $node->nid) {
-            // Attempting to reply to a comment not belonging to the current nid.
-            drupal_set_message(t('The comment you are replying to does not exist.'), 'error');
-            drupal_goto("node/$node->nid");
-          }
-          // Display the parent comment
-          $comment->node_type = 'comment_node_' . $node->type;
-          field_attach_load('comment', array($comment->cid => $comment));
-          $comment->name = $comment->uid ? $comment->registered_name : $comment->name;
-          $build['comment_parent'] = comment_view($comment, $node);
-        }
-        else {
-          drupal_set_message(t('The comment you are replying to does not exist.'), 'error');
-          drupal_goto("node/$node->nid");
-        }
-      }
-      else {
-        drupal_set_message(t('You are not authorized to view comments.'), 'error');
-        drupal_goto("node/$node->nid");
-      }
-    }
-    // This is the case where the comment is in response to a node. Display the node.
-    elseif (user_access('access content')) {
-      $build['comment_node'] = node_view($node);
-    }
-
-    // Should we show the reply box?
-    if ($node->comment != COMMENT_NODE_OPEN) {
-      drupal_set_message(t("This discussion is closed: you can't post new comments."), 'error');
-      drupal_goto("node/$node->nid");
-    }
-    elseif (user_access('post comments')) {
-      $edit = array('nid' => $node->nid, 'pid' => $pid);
-      $build['comment_form'] = drupal_get_form("comment_node_{$node->type}_form", (object) $edit);
-    }
-    else {
-      drupal_set_message(t('You are not authorized to post comments.'), 'error');
-      drupal_goto("node/$node->nid");
-    }
-  }
-
-  return $build;
-}
-
-/**
- * Menu callback; publish specified comment.
- *
- * @param $cid
- *   A comment identifier.
- */
-function comment_approve($cid) {
-  if (!isset($_GET['token']) || !drupal_valid_token($_GET['token'], "comment/$cid/approve")) {
-    return MENU_ACCESS_DENIED;
-  }
-  if ($comment = comment_load($cid)) {
-    $comment->status = COMMENT_PUBLISHED;
-    comment_save($comment);
-
-    drupal_set_message(t('Comment approved.'));
-    drupal_goto('node/' . $comment->nid);
-  }
-  return MENU_NOT_FOUND;
-}
diff --git a/modules/comment/comment.tokens.inc b/modules/comment/comment.tokens.inc
deleted file mode 100644
index c495ec3..0000000
--- a/modules/comment/comment.tokens.inc
+++ /dev/null
@@ -1,243 +0,0 @@
-<?php
-
-/**
- * @file
- * Builds placeholder replacement tokens for comment-related data.
- */
-
-/**
- * Implements hook_token_info().
- */
-function comment_token_info() {
-  $type = array(
-    'name' => t('Comments'),
-    'description' => t('Tokens for comments posted on the site.'),
-    'needs-data' => 'comment',
-  );
-
-  // Comment-related tokens for nodes
-  $node['comment-count'] = array(
-    'name' => t("Comment count"),
-    'description' => t("The number of comments posted on a node."),
-  );
-  $node['comment-count-new'] = array(
-    'name' => t("New comment count"),
-    'description' => t("The number of comments posted on a node since the reader last viewed it."),
-  );
-
-  // Core comment tokens
-  $comment['cid'] = array(
-    'name' => t("Comment ID"),
-    'description' => t("The unique ID of the comment."),
-  );
-  $comment['hostname'] = array(
-    'name' => t("IP Address"),
-    'description' => t("The IP address of the computer the comment was posted from."),
-  );
-  $comment['name'] = array(
-    'name' => t("Name"),
-    'description' => t("The name left by the comment author."),
-  );
-  $comment['mail'] = array(
-    'name' => t("Email address"),
-    'description' => t("The email address left by the comment author."),
-  );
-  $comment['homepage'] = array(
-    'name' => t("Home page"),
-    'description' => t("The home page URL left by the comment author."),
-  );
-  $comment['title'] = array(
-    'name' => t("Title"),
-    'description' => t("The title of the comment."),
-  );
-  $comment['body'] = array(
-    'name' => t("Content"),
-    'description' => t("The formatted content of the comment itself."),
-  );
-  $comment['url'] = array(
-    'name' => t("URL"),
-    'description' => t("The URL of the comment."),
-  );
-  $comment['edit-url'] = array(
-    'name' => t("Edit URL"),
-    'description' => t("The URL of the comment's edit page."),
-  );
-
-  // Chained tokens for comments
-  $comment['created'] = array(
-    'name' => t("Date created"),
-    'description' => t("The date the comment was posted."),
-    'type' => 'date',
-  );
-  $comment['changed'] = array(
-    'name' => t("Date changed"),
-    'description' => t("The date the comment was most recently updated."),
-    'type' => 'date',
-  );
-  $comment['parent'] = array(
-    'name' => t("Parent"),
-    'description' => t("The comment's parent, if comment threading is active."),
-    'type' => 'comment',
-  );
-  $comment['node'] = array(
-    'name' => t("Node"),
-    'description' => t("The node the comment was posted to."),
-    'type' => 'node',
-  );
-  $comment['author'] = array(
-    'name' => t("Author"),
-    'description' => t("The author of the comment, if they were logged in."),
-    'type' => 'user',
-  );
-
-  return array(
-    'types' => array('comment' => $type),
-    'tokens' => array(
-      'node' => $node,
-      'comment' => $comment,
-    ),
-  );
-}
-
-/**
- * Implements hook_tokens().
- */
-function comment_tokens($type, $tokens, array $data = array(), array $options = array()) {
-  $url_options = array('absolute' => TRUE);
-  if (isset($options['language'])) {
-    $url_options['language'] = $options['language'];
-    $language_code = $options['language']->language;
-  }
-  else {
-    $language_code = NULL;
-  }
-  $sanitize = !empty($options['sanitize']);
-
-  $replacements = array();
-
-  if ($type == 'comment' && !empty($data['comment'])) {
-    $comment = $data['comment'];
-
-    foreach ($tokens as $name => $original) {
-      switch ($name) {
-        // Simple key values on the comment.
-        case 'cid':
-          $replacements[$original] = $comment->cid;
-          break;
-
-        // Poster identity information for comments
-        case 'hostname':
-          $replacements[$original] = $sanitize ? check_plain($comment->hostname) : $comment->hostname;
-          break;
-
-        case 'name':
-          $name = ($comment->uid == 0) ? variable_get('anonymous', t('Anonymous')) : $comment->name;
-          $replacements[$original] = $sanitize ? filter_xss($name) : $name;
-          break;
-
-        case 'mail':
-          if ($comment->uid != 0) {
-            $account = user_load($comment->uid);
-            $mail = $account->mail;
-          }
-          else {
-            $mail = $comment->mail;
-          }
-          $replacements[$original] = $sanitize ? check_plain($mail) : $mail;
-          break;
-
-        case 'homepage':
-          $replacements[$original] = $sanitize ? check_url($comment->homepage) : $comment->homepage;
-          break;
-
-        case 'title':
-          $replacements[$original] = $sanitize ? filter_xss($comment->subject) : $comment->subject;
-          break;
-
-        case 'body':
-          if ($items = field_get_items('comment', $comment, 'comment_body', $language_code)) {
-            $instance = field_info_instance('comment', 'body', 'comment_body');
-            $field_langcode = field_language('comment', $comment, 'comment_body', $language_code);
-            $replacements[$original] = $sanitize ? _text_sanitize($instance, $field_langcode, $items[0], 'value') : $items[0]['value'];
-          }
-          break;
-
-        // Comment related URLs.
-        case 'url':
-          $url_options['fragment']  = 'comment-' . $comment->cid;
-          $replacements[$original] = url('comment/' . $comment->cid, $url_options);
-          break;
-
-        case 'edit-url':
-          $url_options['fragment'] = NULL;
-          $replacements[$original] = url('comment/' . $comment->cid . '/edit', $url_options);
-          break;
-
-        // Default values for the chained tokens handled below.
-        case 'author':
-          $replacements[$original] = $sanitize ? filter_xss($comment->name) : $comment->name;
-          break;
-
-        case 'parent':
-          if (!empty($comment->pid)) {
-            $parent = comment_load($comment->pid);
-            $replacements[$original] = $sanitize ? filter_xss($parent->subject) : $parent->subject;
-          }
-          break;
-
-        case 'created':
-          $replacements[$original] = format_date($comment->created, 'medium', '', NULL, $language_code);
-          break;
-
-        case 'changed':
-          $replacements[$original] = format_date($comment->changed, 'medium', '', NULL, $language_code);
-          break;
-
-        case 'node':
-          $node = node_load($comment->nid);
-          $title = $node->title;
-          $replacements[$original] = $sanitize ? filter_xss($title) : $title;
-          break;
-      }
-    }
-
-    // Chained token relationships.
-    if ($node_tokens = token_find_with_prefix($tokens, 'node')) {
-      $node = node_load($comment->nid);
-      $replacements += token_generate('node', $node_tokens, array('node' => $node), $options);
-    }
-
-    if ($date_tokens = token_find_with_prefix($tokens, 'created')) {
-      $replacements += token_generate('date', $date_tokens, array('date' => $comment->created), $options);
-    }
-
-    if ($date_tokens = token_find_with_prefix($tokens, 'changed')) {
-      $replacements += token_generate('date', $date_tokens, array('date' => $comment->changed), $options);
-    }
-
-    if (($parent_tokens = token_find_with_prefix($tokens, 'parent')) && $parent = comment_load($comment->pid)) {
-      $replacements += token_generate('comment', $parent_tokens, array('comment' => $parent), $options);
-    }
-
-    if (($author_tokens = token_find_with_prefix($tokens, 'author')) && $account = user_load($comment->uid)) {
-      $replacements += token_generate('user', $author_tokens, array('user' => $account), $options);
-    }
-  }
-  elseif ($type == 'node' & !empty($data['node'])) {
-    $node = $data['node'];
-
-    foreach ($tokens as $name => $original) {
-      switch($name) {
-        case 'comment-count':
-          $replacements[$original] = $node->comment_count;
-          break;
-
-        case 'comment-count-new':
-          $replacements[$original] = comment_num_new($node->nid);
-          break;
-      }
-    }
-  }
-
-  return $replacements;
-}
diff --git a/modules/comment/comment.tpl.php b/modules/comment/comment.tpl.php
deleted file mode 100644
index 8298473..0000000
--- a/modules/comment/comment.tpl.php
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation for comments.
- *
- * Available variables:
- * - $author: Comment author. Can be link or plain text.
- * - $content: An array of comment items. Use render($content) to print them all, or
- *   print a subset such as render($content['field_example']). Use
- *   hide($content['field_example']) to temporarily suppress the printing of a
- *   given element.
- * - $created: Formatted date and time for when the comment was created.
- *   Preprocess functions can reformat it by calling format_date() with the
- *   desired parameters on the $comment->created variable.
- * - $changed: Formatted date and time for when the comment was last changed.
- *   Preprocess functions can reformat it by calling format_date() with the
- *   desired parameters on the $comment->changed variable.
- * - $new: New comment marker.
- * - $permalink: Comment permalink.
- * - $submitted: Submission information created from $author and $created during
- *   template_preprocess_comment().
- * - $picture: Authors picture.
- * - $signature: Authors signature.
- * - $status: Comment status. Possible values are:
- *   comment-unpublished, comment-published or comment-preview.
- * - $title: Linked title.
- * - $classes: String of classes that can be used to style contextually through
- *   CSS. It can be manipulated through the variable $classes_array from
- *   preprocess functions. The default values can be one or more of the following:
- *   - comment: The current template type, i.e., "theming hook".
- *   - comment-by-anonymous: Comment by an unregistered user.
- *   - comment-by-node-author: Comment by the author of the parent node.
- *   - comment-preview: When previewing a new or edited comment.
- *   The following applies only to viewers who are registered users:
- *   - comment-unpublished: An unpublished comment visible only to administrators.
- *   - comment-by-viewer: Comment by the user currently viewing the page.
- *   - comment-new: New comment since last the visit.
- * - $title_prefix (array): An array containing additional output populated by
- *   modules, intended to be displayed in front of the main title tag that
- *   appears in the template.
- * - $title_suffix (array): An array containing additional output populated by
- *   modules, intended to be displayed after the main title tag that appears in
- *   the template.
- *
- * These two variables are provided for context:
- * - $comment: Full comment object.
- * - $node: Node object the comments are attached to.
- *
- * Other variables:
- * - $classes_array: Array of html class attribute values. It is flattened
- *   into a string within the variable $classes.
- *
- * @see template_preprocess()
- * @see template_preprocess_comment()
- * @see template_process()
- * @see theme_comment()
- *
- * @ingroup themeable
- */
-?>
-<div class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>>
-  <?php print $picture ?>
-
-  <?php if ($new): ?>
-    <span class="new"><?php print $new ?></span>
-  <?php endif; ?>
-
-  <?php print render($title_prefix); ?>
-  <h3<?php print $title_attributes; ?>><?php print $title ?></h3>
-  <?php print render($title_suffix); ?>
-
-  <div class="submitted">
-    <?php print $permalink; ?>
-    <?php print $submitted; ?>
-  </div>
-
-  <div class="content"<?php print $content_attributes; ?>>
-    <?php
-      // We hide the comments and links now so that we can render them later.
-      hide($content['links']);
-      print render($content);
-    ?>
-    <?php if ($signature): ?>
-    <div class="user-signature clearfix">
-      <?php print $signature ?>
-    </div>
-    <?php endif; ?>
-  </div>
-
-  <?php print render($content['links']) ?>
-</div>
diff --git a/modules/contact/contact.admin.inc b/modules/contact/contact.admin.inc
deleted file mode 100644
index 4648fd3..0000000
--- a/modules/contact/contact.admin.inc
+++ /dev/null
@@ -1,228 +0,0 @@
-<?php
-
-/**
- * @file
- * Admin page callbacks for the Contact module.
- */
-
-/**
- * Categories/list tab.
- */
-function contact_category_list() {
-  $header = array(
-    t('Category'),
-    t('Recipients'),
-    t('Selected'),
-    array('data' => t('Operations'), 'colspan' => 2),
-  );
-  $rows = array();
-
-  // Get all the contact categories from the database.
-  $categories = db_select('contact', 'c')
-    ->addTag('translatable')
-    ->fields('c', array('cid', 'category', 'recipients', 'selected'))
-    ->orderBy('weight')
-    ->orderBy('category')
-    ->execute()
-    ->fetchAll();
-
-  // Loop through the categories and add them to the table.
-  foreach ($categories as $category) {
-    $rows[] = array(
-      check_plain($category->category),
-      check_plain($category->recipients),
-      ($category->selected ? t('Yes') : t('No')),
-      l(t('Edit'), 'admin/structure/contact/edit/' . $category->cid),
-      l(t('Delete'), 'admin/structure/contact/delete/' . $category->cid),
-    );
-  }
-
-  if (!$rows) {
-    $rows[] = array(array(
-      'data' => t('No categories available.'),
-      'colspan' => 5,
-    ));
-  }
-
-  $build['category_table'] = array(
-    '#theme' => 'table',
-    '#header' => $header,
-    '#rows' => $rows,
-  );
-  return $build;
-}
-
-/**
- * Form constructor for the category edit form.
- *
- * @param $category
- *   An array describing the category to be edited. May be empty for new
- *   categories. Recognized array keys are:
- *   - category: The name of the category.
- *   - recipients: A comma-separated list of recipients.
- *   - reply: (optional) The body of the auto-reply message.
- *   - weight: The weight of the category.
- *   - selected: Boolean indicating whether the category should be selected by
- *     default.
- *   - cid: The category ID for which the form is to be displayed.
- *
- * @see contact_category_edit_form_validate()
- * @see contact_category_edit_form_submit()
- * @ingroup forms
- */
-function contact_category_edit_form($form, &$form_state, array $category = array()) {
-  // If this is a new category, add the default values.
-  $category += array(
-    'category' => '',
-    'recipients' => '',
-    'reply' => '',
-    'weight' => 0,
-    'selected' => 0,
-    'cid' => NULL,
-  );
-
-  $form['category'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Category'),
-    '#maxlength' => 255,
-    '#default_value' => $category['category'],
-    '#description' => t("Example: 'website feedback' or 'product information'."),
-    '#required' => TRUE,
-  );
-  $form['recipients'] = array(
-    '#type' => 'textarea',
-    '#title' => t('Recipients'),
-    '#default_value' => $category['recipients'],
-    '#description' => t("Example: 'webmaster@example.com' or 'sales@example.com,support@example.com' . To specify multiple recipients, separate each e-mail address with a comma."),
-    '#required' => TRUE,
-  );
-  $form['reply'] = array(
-    '#type' => 'textarea',
-    '#title' => t('Auto-reply'),
-    '#default_value' => $category['reply'],
-    '#description' => t('Optional auto-reply. Leave empty if you do not want to send the user an auto-reply message.'),
-  );
-  $form['weight'] = array(
-    '#type' => 'weight',
-    '#title' => t('Weight'),
-    '#default_value' => $category['weight'],
-    '#description' => t('When listing categories, those with lighter (smaller) weights get listed before categories with heavier (larger) weights. Categories with equal weights are sorted alphabetically.'),
-  );
-  $form['selected'] = array(
-    '#type' => 'select',
-    '#title' => t('Selected'),
-    '#options' => array(
-      0 => t('No'),
-      1 => t('Yes'),
-    ),
-    '#default_value' => $category['selected'],
-    '#description' => t('Set this to <em>Yes</em> if you would like this category to be selected by default.'),
-  );
-  $form['cid'] = array(
-    '#type' => 'value',
-    '#value' => $category['cid'],
-  );
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Save'),
-  );
-
-  return $form;
-}
-
-/**
- * Form validation handler for contact_category_edit_form().
- *
- * @see contact_category_edit_form_submit()
- */
-function contact_category_edit_form_validate($form, &$form_state) {
-  // Validate and each e-mail recipient.
-  $recipients = explode(',', $form_state['values']['recipients']);
-
-  // When creating a new contact form, or renaming the category on an existing
-  // contact form, make sure that the given category is unique.
-  $category = $form_state['values']['category'];
-  $query = db_select('contact', 'c')->condition('c.category', $category, '=');
-  if (!empty($form_state['values']['cid'])) {
-    $query->condition('c.cid', $form_state['values']['cid'], '<>');
-  }
-  if ($query->countQuery()->execute()->fetchField()) {
-    form_set_error('category', t('A contact form with category %category already exists.', array('%category' => $category)));
-  }
-
-  foreach ($recipients as &$recipient) {
-    $recipient = trim($recipient);
-    if (!valid_email_address($recipient)) {
-      form_set_error('recipients', t('%recipient is an invalid e-mail address.', array('%recipient' => $recipient)));
-    }
-  }
-  $form_state['values']['recipients'] = implode(',', $recipients);
-}
-
-/**
- * Form submission handler for contact_category_edit_form().
- *
- * @see contact_category_edit_form_validate()
- */
-function contact_category_edit_form_submit($form, &$form_state) {
-  if ($form_state['values']['selected']) {
-    // Unselect all other contact categories.
-    db_update('contact')
-      ->fields(array('selected' => '0'))
-      ->execute();
-  }
-
-  if (empty($form_state['values']['cid'])) {
-    drupal_write_record('contact', $form_state['values']);
-  }
-  else {
-    drupal_write_record('contact', $form_state['values'], array('cid'));
-  }
-
-  drupal_set_message(t('Category %category has been saved.', array('%category' => $form_state['values']['category'])));
-  watchdog('contact', 'Category %category has been saved.', array('%category' => $form_state['values']['category']), WATCHDOG_NOTICE, l(t('Edit'), 'admin/structure/contact/edit/' . $form_state['values']['cid']));
-  $form_state['redirect'] = 'admin/structure/contact';
-}
-
-/**
- * Form constructor for the contact category deletion form.
- *
- * @param $contact
- *   Array describing the contact category to be deleted. See the documentation
- *   of contact_category_edit_form() for the recognized keys.
- *
- * @see contact_menu()
- * @see contact_category_delete_form_submit()
- */
-function contact_category_delete_form($form, &$form_state, array $contact) {
-  $form['contact'] = array(
-    '#type' => 'value',
-    '#value' => $contact,
-  );
-
-  return confirm_form(
-    $form,
-    t('Are you sure you want to delete %category?', array('%category' => $contact['category'])),
-    'admin/structure/contact',
-    t('This action cannot be undone.'),
-    t('Delete'),
-    t('Cancel')
-  );
-}
-
-/**
- * Form submission handler for contact_category_delete_form().
- */
-function contact_category_delete_form_submit($form, &$form_state) {
-  $contact = $form['contact']['#value'];
-
-  db_delete('contact')
-    ->condition('cid', $contact['cid'])
-    ->execute();
-
-  drupal_set_message(t('Category %category has been deleted.', array('%category' => $contact['category'])));
-  watchdog('contact', 'Category %category has been deleted.', array('%category' => $contact['category']), WATCHDOG_NOTICE);
-
-  $form_state['redirect'] = 'admin/structure/contact';
-}
diff --git a/modules/contact/contact.info b/modules/contact/contact.info
deleted file mode 100644
index 9430045..0000000
--- a/modules/contact/contact.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Contact
-description = Enables the use of both personal and site-wide contact forms.
-package = Core
-version = VERSION
-core = 7.x
-files[] = contact.test
-configure = admin/structure/contact
diff --git a/modules/contact/contact.install b/modules/contact/contact.install
deleted file mode 100644
index fba5cfd..0000000
--- a/modules/contact/contact.install
+++ /dev/null
@@ -1,168 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the contact module.
- */
-
-/**
- * Implements hook_schema().
- */
-function contact_schema() {
-  $schema['contact'] = array(
-    'description' => 'Contact form category settings.',
-    'fields' => array(
-      'cid' => array(
-        'type' => 'serial',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'description' => 'Primary Key: Unique category ID.',
-      ),
-      'category' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Category name.',
-        'translatable' => TRUE,
-      ),
-      'recipients' => array(
-        'type' => 'text',
-        'not null' => TRUE,
-        'size' => 'big',
-        'description' => 'Comma-separated list of recipient e-mail addresses.',
-      ),
-      'reply' => array(
-        'type' => 'text',
-        'not null' => TRUE,
-        'size' => 'big',
-        'description' => 'Text of the auto-reply message.',
-      ),
-      'weight' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => "The category's weight.",
-      ),
-      'selected' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'size' => 'tiny',
-        'description' => 'Flag to indicate whether or not category is selected by default. (1 = Yes, 0 = No)',
-      ),
-    ),
-    'primary key' => array('cid'),
-    'unique keys' => array(
-      'category' => array('category'),
-    ),
-    'indexes' => array(
-      'list' => array('weight', 'category'),
-    ),
-  );
-
-  return $schema;
-}
-
-/**
- * Implements hook_install().
- */
-function contact_install() {
-  // Insert a default contact category.
-  db_insert('contact')
-    ->fields(array(
-      'category' => 'Website feedback',
-      'recipients' => variable_get('site_mail', ini_get('sendmail_from')),
-      'selected' => 1,
-      'reply' => '',
-    ))
-    ->execute();
-}
-
-/**
- * Implements hook_uninstall().
- */
-function contact_uninstall() {
-  variable_del('contact_default_status');
-  variable_del('contact_threshold_limit');
-  variable_del('contact_threshold_window');
-}
-
-/**
- * Implements hook_update_dependencies().
- */
-function contact_update_dependencies() {
-  // contact_update_7001() relies on the {role_permission} table being updated
-  // to the new format and filled with data.
-  $dependencies['contact'][7001] = array(
-    'system' => 7007,
-  );
-
-  // contact_update_7002() relies on the {role_permission} table having the
-  // module field, which is created in user_update_7006().
-  $dependencies['contact'][7002] = array(
-    'user' => 7006,
-  );
-
-  return $dependencies;
-}
-
-/**
- * @addtogroup updates-6.x-to-7.x
- * @{
- */
-
-/**
- * Rename the threshold limit variable.
- */
-function contact_update_7000() {
-  variable_set('contact_threshold_limit', variable_get('contact_hourly_threshold', 5));
-  variable_del('contact_hourly_threshold');
-}
-
-/**
- * Rename the administer contact forms permission.
- */
-function contact_update_7001() {
-  db_update('role_permission')
-    ->fields(array('permission' => 'administer contact forms'))
-    ->condition('permission', 'administer site-wide contact form')
-    ->execute();
-}
-
-/**
- * Enable the 'access user contact forms' for registered users by default.
- */
-function contact_update_7002() {
-  // Do not use user_role_grant_permission() since it relies on
-  // hook_permission(), which will not run for contact module if it is
-  // disabled.
-  db_merge('role_permission')
-    ->key(array(
-      'rid' => DRUPAL_AUTHENTICATED_RID,
-      'permission' => 'access user contact forms',
-      'module' => 'contact',
-    ))
-    ->execute();
-}
-
-/**
- * Change the weight column to normal int.
- */
-function contact_update_7003() {
-  db_drop_index('contact', 'list');
-  db_change_field('contact', 'weight', 'weight', array(
-    'type' => 'int',
-    'not null' => TRUE,
-    'default' => 0,
-    'description' => "The category's weight.",
-  ), array(
-    'indexes' => array(
-      'list' => array('weight', 'category'),
-    ),
-  ));
-}
-
-/**
- * @} End of "addtogroup updates-6.x-to-7.x".
- */
diff --git a/modules/contact/contact.module b/modules/contact/contact.module
deleted file mode 100644
index 9a48f23..0000000
--- a/modules/contact/contact.module
+++ /dev/null
@@ -1,259 +0,0 @@
-<?php
-
-/**
- * @file
- * Enables the use of personal and site-wide contact forms.
- */
-
-/**
- * Implements hook_help().
- */
-function contact_help($path, $arg) {
-  switch ($path) {
-    case 'admin/help#contact':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Contact module allows visitors to contact site administrators and other users. Users specify a subject, write their message, and can have a copy of their message sent to their own e-mail address. For more information, see the online handbook entry for <a href="@contact">Contact module</a>.', array('@contact' => 'http://drupal.org/documentation/modules/contact/')) . '</p>';
-      $output .= '<h3>' . t('Uses') . '</h3>';
-      $output .= '<dl>';
-      $output .= '<dt>' . t('User contact forms') . '</dt>';
-      $output .= '<dd>' . t('Site users can be contacted with a user contact form that keeps their e-mail address private. Users may enable or disable their personal contact forms by editing their <em>My account</em> page. If enabled, a <em>Contact</em> tab leads to a personal contact form displayed on their user profile. Site administrators are still able to use the contact form, even if has been disabled. The <em>Contact</em> tab is not shown when you view your own profile.') . '</dd>';
-      $output .= '<dt>' . t('Site-wide contact forms') . '</dt>';
-      $output .= '<dd>' . t('The <a href="@contact">Contact page</a> provides a simple form for users with the <em>Use the site-wide contact form</em> permission to send comments, feedback, or other requests. You can create categories for directing the contact form messages to a set of defined recipients. Common categories for a business site, for example, might include "Website feedback" (messages are forwarded to website administrators) and "Product information" (messages are forwarded to members of the sales department). E-mail addresses defined within a category are not displayed publicly.', array('@contact' => url('contact'))) . '</p>';
-      $output .= '<dt>' . t('Navigation') . '</dt>';
-      $output .= '<dd>' . t("When the site-wide contact form is enabled, a link in the main <em>Navigation</em> menu is created, but the link is disabled by default. This menu link can be enabled on the <a href='@menu'>Menus administration page</a>.", array('@contact' => url('contact'), '@menu' => url('admin/structure/menu'))) . '</dd>';
-      $output .= '<dt>' . t('Customization') . '</dt>';
-      $output .= '<dd>' . t('If you would like additional text to appear on the site-wide or personal contact page, use a block. You can create and edit blocks on the <a href="@blocks">Blocks administration page</a>.', array('@blocks' => url('admin/structure/block'))) . '</dd>';
-      $output .= '</dl>';
-      return $output;
-    case 'admin/structure/contact':
-      $output = '<p>' . t('Add one or more categories on this page to set up your site-wide <a href="@form">contact form</a>.', array('@form' => url('contact'))) . '</p>';
-      $output .= '<p>' . t('A <em>Contact</em> menu item (disabled by default) is added to the Navigation menu, which you can modify on the <a href="@menu-settings">Menus administration page</a>.', array('@menu-settings' => url('admin/structure/menu'))) . '</p>';
-      $output .= '<p>' . t('If you would like additional text to appear on the site-wide contact page, use a block. You can create and edit blocks on the <a href="@blocks">Blocks administration page</a>.', array('@blocks' => url('admin/structure/block'))) . '</p>';
-      return $output;
-  }
-}
-
-/**
- * Implements hook_permission().
- */
-function contact_permission() {
-  return array(
-    'administer contact forms' => array(
-      'title' => t('Administer contact forms and contact form settings'),
-    ),
-    'access site-wide contact form' => array(
-      'title' => t('Use the site-wide contact form'),
-    ),
-    'access user contact forms' => array(
-      'title' => t("Use users' personal contact forms"),
-    ),
-  );
-}
-
-/**
- * Implements hook_menu().
- */
-function contact_menu() {
-  $items['admin/structure/contact'] = array(
-    'title' => 'Contact form',
-    'description' => 'Create a system contact form and set up categories for the form to use.',
-    'page callback' => 'contact_category_list',
-    'access arguments' => array('administer contact forms'),
-    'file' => 'contact.admin.inc',
-  );
-  $items['admin/structure/contact/add'] = array(
-    'title' => 'Add category',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('contact_category_edit_form'),
-    'access arguments' => array('administer contact forms'),
-    'type' => MENU_LOCAL_ACTION,
-    'weight' => 1,
-    'file' => 'contact.admin.inc',
-  );
-  $items['admin/structure/contact/edit/%contact'] = array(
-    'title' => 'Edit contact category',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('contact_category_edit_form', 4),
-    'access arguments' => array('administer contact forms'),
-    'file' => 'contact.admin.inc',
-  );
-  $items['admin/structure/contact/delete/%contact'] = array(
-    'title' => 'Delete contact',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('contact_category_delete_form', 4),
-    'access arguments' => array('administer contact forms'),
-    'file' => 'contact.admin.inc',
-  );
-  $items['contact'] = array(
-    'title' => 'Contact',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('contact_site_form'),
-    'access arguments' => array('access site-wide contact form'),
-    'type' => MENU_SUGGESTED_ITEM,
-    'file' => 'contact.pages.inc',
-  );
-  $items['user/%user/contact'] = array(
-    'title' => 'Contact',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('contact_personal_form', 1),
-    'type' => MENU_LOCAL_TASK,
-    'access callback' => '_contact_personal_tab_access',
-    'access arguments' => array(1),
-    'weight' => 2,
-    'file' => 'contact.pages.inc',
-  );
-  return $items;
-}
-
-/**
- * Menu access callback for a user's personal contact form.
- *
- * @param $account
- *   The user object of the user whose contact form is being requested.
- */
-function _contact_personal_tab_access($account) {
-  global $user;
-
-  // Anonymous users cannot have contact forms.
-  if (!$account->uid) {
-    return FALSE;
-  }
-
-  // User administrators should always have access to personal contact forms.
-  if (user_access('administer users')) {
-    return TRUE;
-  }
-
-  // Users may not contact themselves.
-  if ($user->uid == $account->uid) {
-    return FALSE;
-  }
-
-  // If the requested user has disabled their contact form, or this preference
-  // has not yet been saved, do not allow users to contact them.
-  if (empty($account->data['contact'])) {
-    return FALSE;
-  }
-
-  // If requested user has been blocked, do not allow users to contact them.
-  if (empty($account->status)) {
-    return FALSE;
-  }
-
-  return user_access('access user contact forms');
-}
-
-/**
- * Loads a contact category.
- *
- * @param $cid
- *   The contact category ID.
- *
- * @return
- *   An array with the contact category's data.
- */
-function contact_load($cid) {
-  return db_select('contact', 'c')
-    ->addTag('translatable')
-    ->fields('c')
-    ->condition('cid', $cid)
-    ->execute()
-    ->fetchAssoc();
-}
-
-/**
- * Implements hook_mail().
- */
-function contact_mail($key, &$message, $params) {
-  $language = $message['language'];
-  $variables = array(
-    '!site-name' => variable_get('site_name', 'Drupal'),
-    '!subject' => $params['subject'],
-    '!category' => isset($params['category']['category']) ? $params['category']['category'] : '',
-    '!form-url' => url($_GET['q'], array('absolute' => TRUE, 'language' => $language)),
-    '!sender-name' => format_username($params['sender']),
-    '!sender-url' => $params['sender']->uid ? url('user/' . $params['sender']->uid, array('absolute' => TRUE, 'language' => $language)) : $params['sender']->mail,
-  );
-
-  switch ($key) {
-    case 'page_mail':
-    case 'page_copy':
-      $message['subject'] .= t('[!category] !subject', $variables, array('langcode' => $language->language));
-      $message['body'][] = t("!sender-name (!sender-url) sent a message using the contact form at !form-url.", $variables, array('langcode' => $language->language));
-      $message['body'][] = $params['message'];
-      break;
-
-    case 'page_autoreply':
-      $message['subject'] .= t('[!category] !subject', $variables, array('langcode' => $language->language));
-      $message['body'][] = $params['category']['reply'];
-      break;
-
-    case 'user_mail':
-    case 'user_copy':
-      $variables += array(
-        '!recipient-name' => format_username($params['recipient']),
-        '!recipient-edit-url' => url('user/' . $params['recipient']->uid . '/edit', array('absolute' => TRUE, 'language' => $language)),
-      );
-      $message['subject'] .= t('[!site-name] !subject', $variables, array('langcode' => $language->language));
-      $message['body'][] = t('Hello !recipient-name,', $variables, array('langcode' => $language->language));
-      $message['body'][] = t("!sender-name (!sender-url) has sent you a message via your contact form (!form-url) at !site-name.", $variables, array('langcode' => $language->language));
-      $message['body'][] = t("If you don't want to receive such e-mails, you can change your settings at !recipient-edit-url.", $variables, array('langcode' => $language->language));
-      $message['body'][] = t('Message:', array(), array('langcode' => $language->language));
-      $message['body'][] = $params['message'];
-      break;
-  }
-}
-
-/**
- * Implements hook_form_FORM_ID_alter().
- *
- * Add the enable personal contact form to an individual user's account page.
- *
- * @see user_profile_form()
- */
-function contact_form_user_profile_form_alter(&$form, &$form_state) {
-  if ($form['#user_category'] == 'account') {
-    $account = $form['#user'];
-    $form['contact'] = array(
-      '#type' => 'fieldset',
-      '#title' => t('Contact settings'),
-      '#weight' => 5,
-      '#collapsible' => TRUE,
-    );
-    $form['contact']['contact'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Personal contact form'),
-      '#default_value' => !empty($account->data['contact']) ? $account->data['contact'] : FALSE,
-      '#description' => t('Allow other users to contact you via a <a href="@url">personal contact form</a> which keeps your e-mail address hidden. Note that some privileged users such as site administrators are still able to contact you even if you choose to disable this feature.', array('@url' => url("user/$account->uid/contact"))),
-    );
-  }
-}
-
-/**
- * Implements hook_user_presave().
- */
-function contact_user_presave(&$edit, $account, $category) {
-  $edit['data']['contact'] = isset($edit['contact']) ? $edit['contact'] : variable_get('contact_default_status', 1);
-}
-
-/**
- * Implements hook_form_FORM_ID_alter().
- *
- * Add the default personal contact setting on the user settings page.
- *
- * @see user_admin_settings()
- */
-function contact_form_user_admin_settings_alter(&$form, &$form_state) {
-  $form['contact'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Contact settings'),
-    '#weight' => 0,
-  );
-  $form['contact']['contact_default_status'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Enable the personal contact form by default for new users.'),
-    '#description' => t('Changing this setting will not affect existing users.'),
-    '#default_value' => variable_get('contact_default_status', 1),
-  );
-}
diff --git a/modules/contact/contact.pages.inc b/modules/contact/contact.pages.inc
deleted file mode 100644
index ba8918b..0000000
--- a/modules/contact/contact.pages.inc
+++ /dev/null
@@ -1,300 +0,0 @@
-<?php
-
-/**
- * @file
- * Page callbacks for the Contact module.
- */
-
-/**
- * Form constructor for the site-wide contact form.
- *
- * @see contact_site_form_validate()
- * @see contact_site_form_submit()
- * @ingroup forms
- */
-function contact_site_form($form, &$form_state) {
-  global $user;
-
-  // Check if flood control has been activated for sending e-mails.
-  $limit = variable_get('contact_threshold_limit', 5);
-  $window = variable_get('contact_threshold_window', 3600);
-  if (!flood_is_allowed('contact', $limit, $window) && !user_access('administer contact forms')) {
-    drupal_set_message(t("You cannot send more than %limit messages in @interval. Try again later.", array('%limit' => $limit, '@interval' => format_interval($window))), 'error');
-    drupal_access_denied();
-    drupal_exit();
-  }
-
-  // Get an array of the categories and the current default category.
-  $categories = db_select('contact', 'c')
-    ->addTag('translatable')
-    ->fields('c', array('cid', 'category'))
-    ->orderBy('weight')
-    ->orderBy('category')
-    ->execute()
-    ->fetchAllKeyed();
-  $default_category = db_query("SELECT cid FROM {contact} WHERE selected = 1")->fetchField();
-
-  // If there are no categories, do not display the form.
-  if (!$categories) {
-    if (user_access('administer contact forms')) {
-      drupal_set_message(t('The contact form has not been configured. <a href="@add">Add one or more categories</a> to the form.', array('@add' => url('admin/structure/contact/add'))), 'error');
-    }
-    else {
-      drupal_not_found();
-      drupal_exit();
-    }
-  }
-
-  // If there is more than one category available and no default category has
-  // been selected, prepend a default placeholder value.
-  if (!$default_category) {
-    if (count($categories) > 1) {
-      $categories = array(0 => t('- Please choose -')) + $categories;
-    }
-    else {
-      $default_category = key($categories);
-    }
-  }
-
-  if (!$user->uid) {
-    $form['#attached']['library'][] = array('system', 'jquery.cookie');
-    $form['#attributes']['class'][] = 'user-info-from-cookie';
-  }
-
-  $form['#attributes']['class'][] = 'contact-form';
-  $form['name'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Your name'),
-    '#maxlength' => 255,
-    '#default_value' => $user->uid ? format_username($user) : '',
-    '#required' => TRUE,
-  );
-  $form['mail'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Your e-mail address'),
-    '#maxlength' => 255,
-    '#default_value' => $user->uid ? $user->mail : '',
-    '#required' => TRUE,
-  );
-  $form['subject'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Subject'),
-    '#maxlength' => 255,
-    '#required' => TRUE,
-  );
-  $form['cid'] = array(
-    '#type' => 'select',
-    '#title' => t('Category'),
-    '#default_value' => $default_category,
-    '#options' => $categories,
-    '#required' => TRUE,
-    '#access' => count($categories) > 1,
-  );
-  $form['message'] = array(
-    '#type' => 'textarea',
-    '#title' => t('Message'),
-    '#required' => TRUE,
-  );
-  // We do not allow anonymous users to send themselves a copy
-  // because it can be abused to spam people.
-  $form['copy'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Send yourself a copy.'),
-    '#access' => $user->uid,
-  );
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Send message'),
-  );
-
-  return $form;
-}
-
-/**
- * Form validation handler for contact_site_form().
- *
- * @see contact_site_form_submit()
- */
-function contact_site_form_validate($form, &$form_state) {
-  if (!$form_state['values']['cid']) {
-    form_set_error('cid', t('You must select a valid category.'));
-  }
-  if (!valid_email_address($form_state['values']['mail'])) {
-    form_set_error('mail', t('You must enter a valid e-mail address.'));
-  }
-}
-
-/**
- * Form submission handler for contact_site_form().
- *
- * @see contact_site_form_validate()
- */
-function contact_site_form_submit($form, &$form_state) {
-  global $user, $language;
-
-  $values = $form_state['values'];
-  $values['sender'] = $user;
-  $values['sender']->name = $values['name'];
-  $values['sender']->mail = $values['mail'];
-  $values['category'] = contact_load($values['cid']);
-
-  // Save the anonymous user information to a cookie for reuse.
-  if (!$user->uid) {
-    user_cookie_save(array_intersect_key($values, array_flip(array('name', 'mail'))));
-  }
-
-  // Get the to and from e-mail addresses.
-  $to = $values['category']['recipients'];
-  $from = $values['sender']->mail;
-
-  // Send the e-mail to the recipients using the site default language.
-  drupal_mail('contact', 'page_mail', $to, language_default(), $values, $from);
-
-  // If the user requests it, send a copy using the current language.
-  if ($values['copy']) {
-    drupal_mail('contact', 'page_copy', $from, $language, $values, $from);
-  }
-
-  // Send an auto-reply if necessary using the current language.
-  if ($values['category']['reply']) {
-    drupal_mail('contact', 'page_autoreply', $from, $language, $values, $to);
-  }
-
-  flood_register_event('contact', variable_get('contact_threshold_window', 3600));
-  watchdog('mail', '%sender-name (@sender-from) sent an e-mail regarding %category.', array('%sender-name' => $values['name'], '@sender-from' => $from, '%category' => $values['category']['category']));
-
-  // Jump to home page rather than back to contact page to avoid
-  // contradictory messages if flood control has been activated.
-  drupal_set_message(t('Your message has been sent.'));
-  $form_state['redirect'] = '';
-}
-
-/**
- * Form constructor for the personal contact form.
- *
- * Path: user/%user/contact
- *
- * @see contact_menu()
- * @see contact_personal_form_validate()
- * @see contact_personal_form_submit()
- * @ingroup forms
- */
-function contact_personal_form($form, &$form_state, $recipient) {
-  global $user;
-
-  // Check if flood control has been activated for sending e-mails.
-  $limit = variable_get('contact_threshold_limit', 5);
-  $window = variable_get('contact_threshold_window', 3600);
-  if (!flood_is_allowed('contact', $limit, $window) && !user_access('administer contact forms') && !user_access('administer users')) {
-    drupal_set_message(t("You cannot send more than %limit messages in @interval. Try again later.", array('%limit' => $limit, '@interval' => format_interval($window))), 'error');
-    drupal_access_denied();
-    drupal_exit();
-  }
-
-  drupal_set_title(t('Contact @username', array('@username' => format_username($recipient))), PASS_THROUGH);
-
-  if (!$user->uid) {
-    $form['#attached']['library'][] = array('system', 'jquery.cookie');
-    $form['#attributes']['class'][] = 'user-info-from-cookie';
-  }
-
-  $form['#attributes']['class'][] = 'contact-form';
-  $form['recipient'] = array(
-    '#type' => 'value',
-    '#value' => $recipient,
-  );
-  $form['name'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Your name'),
-    '#maxlength' => 255,
-    '#default_value' => $user->uid ? format_username($user) : '',
-    '#required' => TRUE,
-  );
-  $form['mail'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Your e-mail address'),
-    '#maxlength' => 255,
-    '#default_value' => $user->uid ? $user->mail : '',
-    '#required' => TRUE,
-  );
-  $form['to'] = array(
-    '#type' => 'item',
-    '#title' => t('To'),
-    '#markup' => theme('username', array('account' => $recipient)),
-  );
-  $form['subject'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Subject'),
-    '#maxlength' => 50,
-    '#required' => TRUE,
-  );
-  $form['message'] = array(
-    '#type' => 'textarea',
-    '#title' => t('Message'),
-    '#rows' => 15,
-    '#required' => TRUE,
-  );
-  // We do not allow anonymous users to send themselves a copy
-  // because it can be abused to spam people.
-  $form['copy'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Send yourself a copy.'),
-    '#access' => $user->uid,
-  );
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Send message'),
-  );
-  return $form;
-}
-
-/**
- * Form validation handler for contact_personal_form().
- *
- * @see contact_personal_form_submit()
- */
-function contact_personal_form_validate($form, &$form_state) {
-  if (!valid_email_address($form_state['values']['mail'])) {
-    form_set_error('mail', t('You must enter a valid e-mail address.'));
-  }
-}
-
-/**
- * Form submission handler for contact_personal_form().
- *
- * @see contact_personal_form_validate()
- */
-function contact_personal_form_submit($form, &$form_state) {
-  global $user, $language;
-
-  $values = $form_state['values'];
-  $values['sender'] = $user;
-  $values['sender']->name = $values['name'];
-  $values['sender']->mail = $values['mail'];
-
-  // Save the anonymous user information to a cookie for reuse.
-  if (!$user->uid) {
-    user_cookie_save(array_intersect_key($values, array_flip(array('name', 'mail'))));
-  }
-
-  // Get the to and from e-mail addresses.
-  $to = $values['recipient']->mail;
-  $from = $values['sender']->mail;
-
-  // Send the e-mail in the requested user language.
-  drupal_mail('contact', 'user_mail', $to, user_preferred_language($values['recipient']), $values, $from);
-
-  // Send a copy if requested, using current page language.
-  if ($values['copy']) {
-    drupal_mail('contact', 'user_copy', $from, $language, $values, $from);
-  }
-
-  flood_register_event('contact', variable_get('contact_threshold_window', 3600));
-  watchdog('mail', '%sender-name (@sender-from) sent %recipient-name an e-mail.', array('%sender-name' => $values['name'], '@sender-from' => $from, '%recipient-name' => $values['recipient']->name));
-
-  // Jump to the contacted user's profile page.
-  drupal_set_message(t('Your message has been sent.'));
-  $form_state['redirect'] = user_access('access user profiles') ? 'user/' . $values['recipient']->uid : '';
-}
diff --git a/modules/contact/contact.test b/modules/contact/contact.test
deleted file mode 100644
index 6693b57..0000000
--- a/modules/contact/contact.test
+++ /dev/null
@@ -1,434 +0,0 @@
-<?php
-/**
- * @file
- * Tests for the Contact module.
- */
-
-/**
- * Tests the site-wide contact form.
- */
-class ContactSitewideTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Site-wide contact form',
-      'description' => 'Tests site-wide contact form functionality.',
-      'group' => 'Contact',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('contact');
-  }
-
-  /**
-   * Tests configuration options and the site-wide contact form.
-   */
-  function testSiteWideContact() {
-    // Create and login administrative user.
-    $admin_user = $this->drupalCreateUser(array('access site-wide contact form', 'administer contact forms', 'administer users'));
-    $this->drupalLogin($admin_user);
-
-    $flood_limit = 3;
-    variable_set('contact_threshold_limit', $flood_limit);
-    variable_set('contact_threshold_window', 600);
-
-    // Set settings.
-    $edit = array();
-    $edit['contact_default_status'] = TRUE;
-    $this->drupalPost('admin/config/people/accounts', $edit, t('Save configuration'));
-    $this->assertText(t('The configuration options have been saved.'), 'Setting successfully saved.');
-
-    // Delete old categories to ensure that new categories are used.
-    $this->deleteCategories();
-
-    // Ensure that the contact form won't be shown without categories.
-    user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('access site-wide contact form'));
-    $this->drupalLogout();
-    $this->drupalGet('contact');
-    $this->assertResponse(404);
-    $this->drupalLogin($admin_user);
-    $this->drupalGet('contact');
-    $this->assertResponse(200);
-    $this->assertText(t('The contact form has not been configured.'));
-
-    // Add categories.
-    // Test invalid recipients.
-    $invalid_recipients = array('invalid', 'invalid@', 'invalid@site.', '@site.', '@site.com');
-    foreach ($invalid_recipients as $invalid_recipient) {
-      $this->addCategory($this->randomName(16), $invalid_recipient, '', FALSE);
-      $this->assertRaw(t('%recipient is an invalid e-mail address.', array('%recipient' => $invalid_recipient)), format_string('Caught invalid recipient (@invalid_recipient).', array('@invalid_recipient' => $invalid_recipient)));
-    }
-
-    // Test validation of empty category and recipients fields.
-    $this->addCategory($category = '', '', '', TRUE);
-    $this->assertText(t('Category field is required.'), 'Caught empty category field');
-    $this->assertText(t('Recipients field is required.'), 'Caught empty recipients field.');
-
-    // Create first valid category.
-    $recipients = array('simpletest@example.com', 'simpletest2@example.com', 'simpletest3@example.com');
-    $this->addCategory($category = $this->randomName(16), implode(',', array($recipients[0])), '', TRUE);
-    $this->assertRaw(t('Category %category has been saved.', array('%category' => $category)), 'Category successfully saved.');
-
-    // Make sure the newly created category is included in the list of categories.
-    $this->assertNoUniqueText($category, 'New category included in categories list.');
-
-    // Test update contact form category.
-    $categories = $this->getCategories();
-    $category_id = $this->updateCategory($categories, $category = $this->randomName(16), $recipients_str = implode(',', array($recipients[0], $recipients[1])), $reply = $this->randomName(30), FALSE);
-    $category_array = db_query("SELECT category, recipients, reply, selected FROM {contact} WHERE cid = :cid", array(':cid' => $category_id))->fetchAssoc();
-    $this->assertEqual($category_array['category'], $category);
-    $this->assertEqual($category_array['recipients'], $recipients_str);
-    $this->assertEqual($category_array['reply'], $reply);
-    $this->assertFalse($category_array['selected']);
-    $this->assertRaw(t('Category %category has been saved.', array('%category' => $category)), 'Category successfully saved.');
-
-    // Ensure that the contact form is shown without a category selection input.
-    user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('access site-wide contact form'));
-    $this->drupalLogout();
-    $this->drupalGet('contact');
-    $this->assertText(t('Your e-mail address'), 'Contact form is shown when there is one category.');
-    $this->assertNoText(t('Category'), 'When there is only one category, the category selection element is hidden.');
-    $this->drupalLogin($admin_user);
-
-    // Add more categories.
-    $this->addCategory($category = $this->randomName(16), implode(',', array($recipients[0], $recipients[1])), '', FALSE);
-    $this->assertRaw(t('Category %category has been saved.', array('%category' => $category)), 'Category successfully saved.');
-
-    $this->addCategory($category = $this->randomName(16), implode(',', array($recipients[0], $recipients[1], $recipients[2])), '', FALSE);
-    $this->assertRaw(t('Category %category has been saved.', array('%category' => $category)), 'Category successfully saved.');
-
-    // Try adding a category that already exists.
-    $this->addCategory($category, '', '', FALSE);
-    $this->assertNoRaw(t('Category %category has been saved.', array('%category' => $category)), 'Category not saved.');
-    $this->assertRaw(t('A contact form with category %category already exists.', array('%category' => $category)), 'Duplicate category error found.');
-
-    // Clear flood table in preparation for flood test and allow other checks to complete.
-    db_delete('flood')->execute();
-    $num_records_after = db_query("SELECT COUNT(*) FROM {flood}")->fetchField();
-    $this->assertIdentical($num_records_after, '0', 'Flood table emptied.');
-    $this->drupalLogout();
-
-    // Check to see that anonymous user cannot see contact page without permission.
-    user_role_revoke_permissions(DRUPAL_ANONYMOUS_RID, array('access site-wide contact form'));
-    $this->drupalGet('contact');
-    $this->assertResponse(403, 'Access denied to anonymous user without permission.');
-
-    // Give anonymous user permission and see that page is viewable.
-    user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('access site-wide contact form'));
-    $this->drupalGet('contact');
-    $this->assertResponse(200, 'Access granted to anonymous user with permission.');
-
-    // Submit contact form with invalid values.
-    $this->submitContact('', $recipients[0], $this->randomName(16), $categories[0], $this->randomName(64));
-    $this->assertText(t('Your name field is required.'), 'Name required.');
-
-    $this->submitContact($this->randomName(16), '', $this->randomName(16), $categories[0], $this->randomName(64));
-    $this->assertText(t('Your e-mail address field is required.'), 'E-mail required.');
-
-    $this->submitContact($this->randomName(16), $invalid_recipients[0], $this->randomName(16), $categories[0], $this->randomName(64));
-    $this->assertText(t('You must enter a valid e-mail address.'), 'Valid e-mail required.');
-
-    $this->submitContact($this->randomName(16), $recipients[0], '', $categories[0], $this->randomName(64));
-    $this->assertText(t('Subject field is required.'), 'Subject required.');
-
-    $this->submitContact($this->randomName(16), $recipients[0], $this->randomName(16), $categories[0], '');
-    $this->assertText(t('Message field is required.'), 'Message required.');
-
-    // Test contact form with no default category selected.
-    db_update('contact')
-      ->fields(array('selected' => 0))
-      ->execute();
-    $this->drupalGet('contact');
-    $this->assertRaw(t('- Please choose -'), 'Without selected categories the visitor is asked to chose a category.');
-
-    // Submit contact form with invalid category id (cid 0).
-    $this->submitContact($this->randomName(16), $recipients[0], $this->randomName(16), 0, '');
-    $this->assertText(t('You must select a valid category.'), 'Valid category required.');
-
-    // Submit contact form with correct values and check flood interval.
-    for ($i = 0; $i < $flood_limit; $i++) {
-      $this->submitContact($this->randomName(16), $recipients[0], $this->randomName(16), $categories[0], $this->randomName(64));
-      $this->assertText(t('Your message has been sent.'), 'Message sent.');
-    }
-    // Submit contact form one over limit.
-    $this->drupalGet('contact');
-    $this->assertResponse(403, 'Access denied to anonymous user after reaching message treshold.');
-    $this->assertRaw(t('You cannot send more than %number messages in @interval. Try again later.', array('%number' => variable_get('contact_threshold_limit', 3), '@interval' => format_interval(600))), 'Message threshold reached.');
-
-    // Delete created categories.
-    $this->drupalLogin($admin_user);
-    $this->deleteCategories();
-  }
-
-  /**
-  * Tests auto-reply on the site-wide contact form.
-  */
-  function testAutoReply() {
-    // Create and login administrative user.
-    $admin_user = $this->drupalCreateUser(array('access site-wide contact form', 'administer contact forms', 'administer permissions', 'administer users'));
-    $this->drupalLogin($admin_user);
-
-    // Set up three categories, 2 with an auto-reply and one without.
-    $foo_autoreply = $this->randomName(40);
-    $bar_autoreply = $this->randomName(40);
-    $this->addCategory('foo', 'foo@example.com', $foo_autoreply, FALSE);
-    $this->addCategory('bar', 'bar@example.com', $bar_autoreply, FALSE);
-    $this->addCategory('no_autoreply', 'bar@example.com', '', FALSE);
-
-    // Test the auto-reply for category 'foo'.
-    $email = $this->randomName(32) . '@example.com';
-    $subject = $this->randomName(64);
-    $this->submitContact($this->randomName(16), $email, $subject, 2, $this->randomString(128));
-
-    // We are testing the auto-reply, so there should be one e-mail going to the sender.
-    $captured_emails = $this->drupalGetMails(array('id' => 'contact_page_autoreply', 'to' => $email, 'from' => 'foo@example.com'));
-    $this->assertEqual(count($captured_emails), 1, 'Auto-reply e-mail was sent to the sender for category "foo".', 'Contact');
-    $this->assertEqual($captured_emails[0]['body'], drupal_html_to_text($foo_autoreply), 'Auto-reply e-mail body is correct for category "foo".', 'Contact');
-
-    // Test the auto-reply for category 'bar'.
-    $email = $this->randomName(32) . '@example.com';
-    $this->submitContact($this->randomName(16), $email, $this->randomString(64), 3, $this->randomString(128));
-
-    // Auto-reply for category 'bar' should result in one auto-reply e-mail to the sender.
-    $captured_emails = $this->drupalGetMails(array('id' => 'contact_page_autoreply', 'to' => $email, 'from' => 'bar@example.com'));
-    $this->assertEqual(count($captured_emails), 1, 'Auto-reply e-mail was sent to the sender for category "bar".', 'Contact');
-    $this->assertEqual($captured_emails[0]['body'], drupal_html_to_text($bar_autoreply), 'Auto-reply e-mail body is correct for category "bar".', 'Contact');
-
-    // Verify that no auto-reply is sent when the auto-reply field is left blank.
-    $email = $this->randomName(32) . '@example.com';
-    $this->submitContact($this->randomName(16), $email, $this->randomString(64), 4, $this->randomString(128));
-    $captured_emails = $this->drupalGetMails(array('id' => 'contact_page_autoreply', 'to' => $email, 'from' => 'no_autoreply@example.com'));
-    $this->assertEqual(count($captured_emails), 0, 'No auto-reply e-mail was sent to the sender for category "no-autoreply".', 'Contact');
-  }
-
-  /**
-   * Adds a category.
-   *
-   * @param string $category
-   *   The category name.
-   * @param string $recipients
-   *   The list of recipient e-mail addresses.
-   * @param string $reply
-   *   The auto-reply text that is sent to a user upon completing the contact
-   *   form.
-   * @param boolean $selected
-   *   Boolean indicating whether the category should be selected by default.
-   */
-  function addCategory($category, $recipients, $reply, $selected) {
-    $edit = array();
-    $edit['category'] = $category;
-    $edit['recipients'] = $recipients;
-    $edit['reply'] = $reply;
-    $edit['selected'] = ($selected ? '1' : '0');
-    $this->drupalPost('admin/structure/contact/add', $edit, t('Save'));
-  }
-
-  /**
-   * Updates a category.
-   *
-   * @param string $category
-   *   The category name.
-   * @param string $recipients
-   *   The list of recipient e-mail addresses.
-   * @param string $reply
-   *   The auto-reply text that is sent to a user upon completing the contact
-   *   form.
-   * @param boolean $selected
-   *   Boolean indicating whether the category should be selected by default.
-   */
-  function updateCategory($categories, $category, $recipients, $reply, $selected) {
-    $category_id = $categories[array_rand($categories)];
-    $edit = array();
-    $edit['category'] = $category;
-    $edit['recipients'] = $recipients;
-    $edit['reply'] = $reply;
-    $edit['selected'] = ($selected ? '1' : '0');
-    $this->drupalPost('admin/structure/contact/edit/' . $category_id, $edit, t('Save'));
-    return ($category_id);
-  }
-
-  /**
-   * Submits the contact form.
-   *
-   * @param string $name
-   *   The name of the sender.
-   * @param string $mail
-   *   The e-mail address of the sender.
-   * @param string $subject
-   *   The subject of the message.
-   * @param integer $cid
-   *   The category ID of the message.
-   * @param string $message
-   *   The message body.
-   */
-  function submitContact($name, $mail, $subject, $cid, $message) {
-    $edit = array();
-    $edit['name'] = $name;
-    $edit['mail'] = $mail;
-    $edit['subject'] = $subject;
-    $edit['cid'] = $cid;
-    $edit['message'] = $message;
-    $this->drupalPost('contact', $edit, t('Send message'));
-  }
-
-  /**
-   * Deletes all categories.
-   */
-  function deleteCategories() {
-    $categories = $this->getCategories();
-    foreach ($categories as $category) {
-      $category_name = db_query("SELECT category FROM {contact} WHERE cid = :cid", array(':cid' => $category))->fetchField();
-      $this->drupalPost('admin/structure/contact/delete/' . $category, array(), t('Delete'));
-      $this->assertRaw(t('Category %category has been deleted.', array('%category' => $category_name)), 'Category deleted successfully.');
-    }
-  }
-
-  /**
-   * Gets a list of all category IDs.
-   *
-   * @return array
-   *   A list of the category IDs.
-   */
-  function getCategories() {
-    $categories = db_query('SELECT cid FROM {contact}')->fetchCol();
-    return $categories;
-  }
-}
-
-/**
- * Tests the personal contact form.
- */
-class ContactPersonalTestCase extends DrupalWebTestCase {
-  private $admin_user;
-  private $web_user;
-  private $contact_user;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Personal contact form',
-      'description' => 'Tests personal contact form functionality.',
-      'group' => 'Contact',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('contact');
-
-    // Create an admin user.
-    $this->admin_user = $this->drupalCreateUser(array('administer contact forms', 'administer users'));
-
-    // Create some normal users with their contact forms enabled by default.
-    variable_set('contact_default_status', TRUE);
-    $this->web_user = $this->drupalCreateUser(array('access user contact forms'));
-    $this->contact_user = $this->drupalCreateUser();
-  }
-
-  /**
-   * Tests access to the personal contact form.
-   */
-  function testPersonalContactAccess() {
-    // Test allowed access to user with contact form enabled.
-    $this->drupalLogin($this->web_user);
-    $this->drupalGet('user/' . $this->contact_user->uid . '/contact');
-    $this->assertResponse(200);
-
-    // Test denied access to the user's own contact form.
-    $this->drupalGet('user/' . $this->web_user->uid . '/contact');
-    $this->assertResponse(403);
-
-    // Test always denied access to the anonymous user contact form.
-    $this->drupalGet('user/0/contact');
-    $this->assertResponse(403);
-
-    // Test that anonymous users can access the contact form.
-    $this->drupalLogout();
-    user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('access user contact forms'));
-    $this->drupalGet('user/' . $this->contact_user->uid . '/contact');
-    $this->assertResponse(200);
-
-    // Revoke the personal contact permission for the anonymous user.
-    user_role_revoke_permissions(DRUPAL_ANONYMOUS_RID, array('access user contact forms'));
-    $this->drupalGet('user/' . $this->contact_user->uid . '/contact');
-    $this->assertResponse(403);
-
-    // Disable the personal contact form.
-    $this->drupalLogin($this->admin_user);
-    $edit = array('contact_default_status' => FALSE);
-    $this->drupalPost('admin/config/people/accounts', $edit, t('Save configuration'));
-    $this->assertText(t('The configuration options have been saved.'), 'Setting successfully saved.');
-    $this->drupalLogout();
-
-    // Re-create our contacted user with personal contact forms disabled by
-    // default.
-    $this->contact_user = $this->drupalCreateUser();
-
-    // Test denied access to a user with contact form disabled.
-    $this->drupalLogin($this->web_user);
-    $this->drupalGet('user/' . $this->contact_user->uid . '/contact');
-    $this->assertResponse(403);
-
-    // Test allowed access for admin user to a user with contact form disabled.
-    $this->drupalLogin($this->admin_user);
-    $this->drupalGet('user/' . $this->contact_user->uid . '/contact');
-    $this->assertResponse(200);
-
-    // Re-create our contacted user as a blocked user.
-    $this->contact_user = $this->drupalCreateUser();
-    user_save($this->contact_user, array('status' => 0));
-
-    // Test that blocked users can still be contacted by admin.
-    $this->drupalGet('user/' . $this->contact_user->uid . '/contact');
-    $this->assertResponse(200);
-
-    // Test that blocked users cannot be contacted by non-admins.
-    $this->drupalLogin($this->web_user);
-    $this->drupalGet('user/' . $this->contact_user->uid . '/contact');
-    $this->assertResponse(403);
-  }
-
-  /**
-   * Tests the personal contact form flood protection.
-   */
-  function testPersonalContactFlood() {
-    $flood_limit = 3;
-    variable_set('contact_threshold_limit', $flood_limit);
-
-    // Clear flood table in preparation for flood test and allow other checks to complete.
-    db_delete('flood')->execute();
-    $num_records_flood = db_query("SELECT COUNT(*) FROM {flood}")->fetchField();
-    $this->assertIdentical($num_records_flood, '0', 'Flood table emptied.');
-
-    $this->drupalLogin($this->web_user);
-
-    // Submit contact form with correct values and check flood interval.
-    for ($i = 0; $i < $flood_limit; $i++) {
-      $this->submitPersonalContact($this->contact_user);
-      $this->assertText(t('Your message has been sent.'), 'Message sent.');
-    }
-
-    // Submit contact form one over limit.
-    $this->drupalGet('user/' . $this->contact_user->uid. '/contact');
-    $this->assertRaw(t('You cannot send more than %number messages in @interval. Try again later.', array('%number' => $flood_limit, '@interval' => format_interval(variable_get('contact_threshold_window', 3600)))), 'Normal user denied access to flooded contact form.');
-
-    // Test that the admin user can still access the contact form even though
-    // the flood limit was reached.
-    $this->drupalLogin($this->admin_user);
-    $this->assertNoText('Try again later.', 'Admin user not denied access to flooded contact form.');
-  }
-
-  /**
-   * Fills out a user's personal contact form and submits it.
-   *
-   * @param $account
-   *   A user object of the user being contacted.
-   * @param $message
-   *   An optional array with the form fields being used.
-   */
-  protected function submitPersonalContact($account, array $message = array()) {
-    $message += array(
-      'subject' => $this->randomName(16),
-      'message' => $this->randomName(64),
-    );
-    $this->drupalPost('user/' . $account->uid . '/contact', $message, t('Send message'));
-  }
-}
diff --git a/modules/contextual/contextual-rtl.css b/modules/contextual/contextual-rtl.css
deleted file mode 100644
index aecbee0..0000000
--- a/modules/contextual/contextual-rtl.css
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * @file
- * Stylesheet specific to right-to-left languages.
- */
-
-div.contextual-links-wrapper {
-  left: 5px;
-  right: auto;
-}
-div.contextual-links-wrapper ul.contextual-links {
-  -moz-border-radius: 0 4px 4px 4px;
-  -webkit-border-top-left-radius: 0;
-  -webkit-border-top-right-radius: 4px;
-  border-radius: 0 4px 4px 4px;
-  left: 0;
-  right: auto;
-}
-a.contextual-links-trigger {
-  text-indent: -90px;
-}
diff --git a/modules/contextual/contextual.api.php b/modules/contextual/contextual.api.php
deleted file mode 100644
index e8f33ee..0000000
--- a/modules/contextual/contextual.api.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-/**
- * @file
- * Hooks provided by Contextual module.
- */
-
-/**
- * @addtogroup hooks
- * @{
- */
-
-/**
- * Alter a contextual links element before it is rendered.
- *
- * This hook is invoked by contextual_pre_render_links(). The renderable array
- * of #type 'contextual_links', containing the entire contextual links data that
- * is passed in by reference. Further links may be added or existing links can
- * be altered.
- *
- * @param $element
- *   A renderable array representing the contextual links.
- * @param $items
- *   An associative array containing the original contextual link items, as
- *   generated by menu_contextual_links(), which were used to build
- *   $element['#links'].
- *
- * @see hook_menu_contextual_links_alter()
- * @see contextual_pre_render_links()
- * @see contextual_element_info()
- */
-function hook_contextual_links_view_alter(&$element, $items) {
-  // Add another class to all contextual link lists to facilitate custom
-  // styling.
-  $element['#attributes']['class'][] = 'custom-class';
-}
-
-/**
- * @} End of "addtogroup hooks".
- */
diff --git a/modules/contextual/contextual.css b/modules/contextual/contextual.css
deleted file mode 100644
index 93a1796..0000000
--- a/modules/contextual/contextual.css
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * @file
- * Stylesheet for the Contextual module.
- */
-
-/**
- * Contextual links regions.
- */
-.contextual-links-region {
-  outline: none;
-  position: relative;
-}
-.contextual-links-region-active {
-  outline: #999 dashed 1px;
-}
-
-/**
- * Contextual links.
- */
-div.contextual-links-wrapper {
-  display: none;
-  font-size: 90%;
-  position: absolute;
-  right: 5px; /* LTR */
-  top: 2px;
-  z-index: 999;
-}
-html.js div.contextual-links-wrapper {
-  display: block;
-}
-a.contextual-links-trigger {
-  background: transparent url(images/gear-select.png) no-repeat 2px 0;
-  border: 1px solid transparent;
-  display: none;
-  height: 18px;
-  margin: 0;
-  padding: 0 2px;
-  outline: none;
-  text-indent: 34px; /* LTR */
-  width: 28px;
-  overflow: hidden;
-  -khtml-border-radius: 4px;
-  -moz-border-radius: 4px;
-  -webkit-border-radius: 4px;
-  border-radius: 4px;
-}
-a.contextual-links-trigger:hover,
-div.contextual-links-active a.contextual-links-trigger {
-  background-position: 2px -18px;
-}
-div.contextual-links-active a.contextual-links-trigger {
-  background-color: #fff;
-  border-color: #ccc;
-  border-bottom: none;
-  position: relative;
-  z-index: 1;
-  -moz-border-radius: 4px 4px 0 0;
-  -webkit-border-bottom-left-radius: 0;
-  -webkit-border-bottom-right-radius: 0;
-  border-radius: 4px 4px 0 0;
-}
-div.contextual-links-wrapper ul.contextual-links {
-  background-color: #fff;
-  border: 1px solid #ccc;
-  display: none;
-  margin: 0;
-  padding: 0.25em 0;
-  position: absolute;
-  right: 0;
-  text-align: left;
-  top: 18px;
-  white-space: nowrap;
-  -moz-border-radius: 4px 0 4px 4px; /* LTR */
-  -webkit-border-bottom-left-radius: 4px;
-  -webkit-border-bottom-right-radius: 4px;
-  -webkit-border-top-right-radius: 0; /* LTR */
-  -webkit-border-top-left-radius: 4px; /* LTR */
-  border-radius: 4px 0 4px 4px; /* LTR */
-}
-a.contextual-links-trigger-active,
-div.contextual-links-active a.contextual-links-trigger,
-div.contextual-links-active ul.contextual-links {
-  display: block;
-}
-ul.contextual-links li {
-  line-height: 100%;
-  list-style: none;
-  list-style-image: none;
-  margin: 0;
-  padding: 0;
-}
-div.contextual-links-wrapper a {
-  text-decoration: none;
-}
-ul.contextual-links li a {
-  color: #333 !important;
-  display: block;
-  margin: 0.25em 0;
-  padding: 0.25em 1em 0.25em 0.5em;
-}
-ul.contextual-links li a:hover {
-  background-color: #bfdcee;
-}
diff --git a/modules/contextual/contextual.info b/modules/contextual/contextual.info
deleted file mode 100644
index 5ebc098..0000000
--- a/modules/contextual/contextual.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = Contextual links
-description = Provides contextual links to perform actions related to elements on a page.
-package = Core
-version = VERSION
-core = 7.x
-files[] = contextual.test
diff --git a/modules/contextual/contextual.js b/modules/contextual/contextual.js
deleted file mode 100644
index 4339780..0000000
--- a/modules/contextual/contextual.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * @file
- * Attaches behaviors for the Contextual module.
- */
-
-(function ($) {
-
-Drupal.contextualLinks = Drupal.contextualLinks || {};
-
-/**
- * Attaches outline behavior for regions associated with contextual links.
- */
-Drupal.behaviors.contextualLinks = {
-  attach: function (context) {
-    $('div.contextual-links-wrapper', context).once('contextual-links', function () {
-      var $wrapper = $(this);
-      var $region = $wrapper.closest('.contextual-links-region');
-      var $links = $wrapper.find('ul.contextual-links');
-      var $trigger = $('<a class="contextual-links-trigger" href="#" />').text(Drupal.t('Configure')).click(
-        function () {
-          $links.stop(true, true).slideToggle(100);
-          $wrapper.toggleClass('contextual-links-active');
-          return false;
-        }
-      );
-      // Attach hover behavior to trigger and ul.contextual-links.
-      $trigger.add($links).hover(
-        function () { $region.addClass('contextual-links-region-active'); },
-        function () { $region.removeClass('contextual-links-region-active'); }
-      );
-      // Hide the contextual links when user clicks a link or rolls out of the .contextual-links-region.
-      $region.bind('mouseleave click', Drupal.contextualLinks.mouseleave);
-      $region.hover(
-        function() { $trigger.addClass('contextual-links-trigger-active'); },
-        function() { $trigger.removeClass('contextual-links-trigger-active'); }
-      );
-      // Prepend the trigger.
-      $wrapper.prepend($trigger);
-    });
-  }
-};
-
-/**
- * Disables outline for the region contextual links are associated with.
- */
-Drupal.contextualLinks.mouseleave = function () {
-  $(this)
-    .find('.contextual-links-active').removeClass('contextual-links-active')
-    .find('ul.contextual-links').hide();
-};
-
-})(jQuery);
diff --git a/modules/contextual/contextual.module b/modules/contextual/contextual.module
deleted file mode 100644
index 0f371a5..0000000
--- a/modules/contextual/contextual.module
+++ /dev/null
@@ -1,169 +0,0 @@
-<?php
-
-/**
- * @file
- * Adds contextual links to perform actions related to elements on a page.
- */
-
-/**
- * Implements hook_help().
- */
-function contextual_help($path, $arg) {
-  switch ($path) {
-    case 'admin/help#contextual':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Contextual links module displays links related to regions of pages on your site to users with <em>access contextual links</em> permission. For more information, see the online handbook entry for <a href="@contextual">Contextual links module</a>.', array('@contextual' => 'http://drupal.org/documentation/modules/contextual')) . '</p>';
-      $output .= '<h3>' . t('Uses') . '</h3>';
-      $output .= '<dl>';
-      $output .= '<dt>' . t('Displaying contextual links') . '</dt>';
-      $output .= '<dd>' . t('Contextual links are supplied by modules, to give you quick access to tasks associated with regions of pages on your site. For instance, if you have a custom menu block displayed in a sidebar of your site, the Blocks and Menus modules will supply links to configure the block and edit the menu. The Contextual links module collects these links into a list for display by your theme, and also adds JavaScript code to the page to hide the links initially, and display them when your mouse hovers over the block.') . '</dd>';
-      $output .= '</dl>';
-      return $output;
-  }
-}
-
-/**
- * Implements hook_permission().
- */
-function contextual_permission() {
-  return array(
-    'access contextual links' => array(
-      'title' => t('Use contextual links'),
-      'description' => t('Use contextual links to perform actions related to elements on a page.'),
-    ),
-  );
-}
-
-/**
- * Implements hook_library().
- */
-function contextual_library() {
-  $path = drupal_get_path('module', 'contextual');
-  $libraries['contextual-links'] = array(
-    'title' => 'Contextual links',
-    'website' => 'http://drupal.org/node/473268',
-    'version' => '1.0',
-    'js' => array(
-      $path . '/contextual.js' => array(),
-    ),
-    'css' => array(
-      $path . '/contextual.css' => array(),
-    ),
-  );
-  return $libraries;
-}
-
-/**
- * Implements hook_element_info().
- */
-function contextual_element_info() {
-  $types['contextual_links'] = array(
-    '#pre_render' => array('contextual_pre_render_links'),
-    '#theme' => 'links__contextual',
-    '#links' => array(),
-    '#prefix' => '<div class="contextual-links-wrapper">',
-    '#suffix' => '</div>',
-    '#attributes' => array(
-      'class' => array('contextual-links'),
-    ),
-    '#attached' => array(
-      'library' => array(
-        array('contextual', 'contextual-links'),
-      ),
-    ),
-  );
-  return $types;
-}
-
-/**
- * Implements hook_preprocess().
- *
- * @see contextual_pre_render_links()
- */
-function contextual_preprocess(&$variables, $hook) {
-  // Nothing to do here if the user is not permitted to access contextual links.
-  if (!user_access('access contextual links')) {
-    return;
-  }
-
-  $hooks = theme_get_registry(FALSE);
-
-  // Determine the primary theme function argument.
-  if (!empty($hooks[$hook]['variables'])) {
-    $keys = array_keys($hooks[$hook]['variables']);
-    $key = $keys[0];
-  }
-  elseif (!empty($hooks[$hook]['render element'])) {
-    $key = $hooks[$hook]['render element'];
-  }
-  if (!empty($key) && isset($variables[$key])) {
-    $element = $variables[$key];
-  }
-
-  if (isset($element) && is_array($element) && !empty($element['#contextual_links'])) {
-    // Initialize the template variable as a renderable array.
-    $variables['title_suffix']['contextual_links'] = array(
-      '#type' => 'contextual_links',
-      '#contextual_links' => $element['#contextual_links'],
-      '#element' => $element,
-    );
-    // Mark this element as potentially having contextual links attached to it.
-    $variables['classes_array'][] = 'contextual-links-region';
-  }
-}
-
-/**
- * Build a renderable array for contextual links.
- *
- * @param $element
- *   A renderable array containing a #contextual_links property, which is a
- *   keyed array. Each key is the name of the implementing module, and each
- *   value is an array that forms the function arguments for
- *   menu_contextual_links(). For example:
- *   @code
- *     array('#contextual_links' => array(
- *       'block' => array('admin/structure/block/manage', array('system', 'navigation')),
- *       'menu' => array('admin/structure/menu/manage', array('navigation')),
- *     ))
- *   @endcode
- *
- * @return
- *   A renderable array representing contextual links.
- *
- * @see menu_contextual_links()
- * @see contextual_element_info()
- */
-function contextual_pre_render_links($element) {
-  // Retrieve contextual menu links.
-  $items = array();
-  foreach ($element['#contextual_links'] as $module => $args) {
-    $items += menu_contextual_links($module, $args[0], $args[1]);
-  }
-
-  // Transform contextual links into parameters suitable for theme_link().
-  $links = array();
-  foreach ($items as $class => $item) {
-    $class = drupal_html_class($class);
-    $links[$class] = array(
-      'title' => $item['title'],
-      'href' => $item['href'],
-    );
-    // @todo theme_links() should *really* use the same parameters as l().
-    $item['localized_options'] += array('query' => array());
-    $item['localized_options']['query'] += drupal_get_destination();
-    $links[$class] += $item['localized_options'];
-  }
-  $element['#links'] = $links;
-
-  // Allow modules to alter the renderable contextual links element.
-  drupal_alter('contextual_links_view', $element, $items);
-
-  // If there are no links, tell drupal_render() to abort rendering.
-  if (empty($element['#links'])) {
-    $element['#printed'] = TRUE;
-  }
-
-  return $element;
-}
-
diff --git a/modules/contextual/contextual.test b/modules/contextual/contextual.test
deleted file mode 100644
index 79eedb8..0000000
--- a/modules/contextual/contextual.test
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for contextual.module.
- */
-
-/**
- * Tests accessible links after inaccessible links on dynamic context.
- */
-class ContextualDynamicContextTestCase extends DrupalWebTestCase {
-  protected $profile = 'testing';
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Contextual links on node lists',
-      'description' => 'Tests if contextual links are showing on the front page depending on permissions.',
-      'group' => 'Contextual',
-    );
-  }
-
-  function setUp() {
-    parent::setUp(array('contextual', 'node'));
-    $this->drupalCreateContentType(array('type' => 'page', 'name' => 'Basic page'));
-    $this->drupalCreateContentType(array('type' => 'article', 'name' => 'Article'));
-    $web_user = $this->drupalCreateUser(array('access content', 'access contextual links', 'edit any article content'));
-    $this->drupalLogin($web_user);
-  }
-
-  /**
-   * Tests contextual links on node lists with different permissions.
-   */
-  function testNodeLinks() {
-    // Create three nodes in the following order:
-    // - An article, which should be user-editable.
-    // - A page, which should not be user-editable.
-    // - A second article, which should also be user-editable.
-    $node1 = $this->drupalCreateNode(array('type' => 'article', 'promote' => 1));
-    $node2 = $this->drupalCreateNode(array('type' => 'page', 'promote' => 1));
-    $node3 = $this->drupalCreateNode(array('type' => 'article', 'promote' => 1));
-
-    // Now, on the front page, all article nodes should have contextual edit
-    // links. The page node in between should not.
-    $this->drupalGet('node');
-    $this->assertRaw('node/' . $node1->nid . '/edit', 'Edit link for oldest article node showing.');
-    $this->assertNoRaw('node/' . $node2->nid . '/edit', 'No edit link for page nodes.');
-    $this->assertRaw('node/' . $node3->nid . '/edit', 'Edit link for most recent article node showing.');
-  }
-}
diff --git a/modules/contextual/images/gear-select.png b/modules/contextual/images/gear-select.png
deleted file mode 100644
index adf6582..0000000
Binary files a/modules/contextual/images/gear-select.png and /dev/null differ
diff --git a/modules/dashboard/dashboard-rtl.css b/modules/dashboard/dashboard-rtl.css
deleted file mode 100644
index 8d3d0ed..0000000
--- a/modules/dashboard/dashboard-rtl.css
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * @file
- * Right-to-left specific stylesheet for the Dashboard module.
- */
-
-#dashboard div.dashboard-region {
-  float: right;
-}
-#dashboard #disabled-blocks .block, #dashboard .block-placeholder {
-  float: right;
-  margin: 3px 0 3px 3px;
-  padding: 6px 8px 6px 4px;
-}
-#dashboard .canvas-content a.button {
-  margin: 0 10px 0 0;
-}
-#dashboard .ui-sortable .block h2 {
-  background-position: right -39px;
-  padding: 0 19px;
-}
-#dashboard.customize-inactive #disabled-blocks .block:hover h2 {
-  background-position: right -39px;
-}
-#dashboard.customize-inactive .dashboard-region .ui-sortable .block:hover h2 {
-  background-position: right -36px;
-}
-#dashboard div#dashboard_main {
-  margin-left: 1%;
-  margin-right: 0;
-}
diff --git a/modules/dashboard/dashboard.api.php b/modules/dashboard/dashboard.api.php
deleted file mode 100644
index a36a8ea..0000000
--- a/modules/dashboard/dashboard.api.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/**
- * @file
- * Hooks provided by the Dashboard module.
- */
-
-/**
- * @addtogroup hooks
- * @{
- */
-
-/**
- * Add regions to the dashboard.
- *
- * @return
- *   An array whose keys are the names of the dashboard regions and whose
- *   values are the titles that will be displayed in the blocks administration
- *   interface. The keys are also used as theme wrapper functions.
- */
-function hook_dashboard_regions() {
-  // Define a new dashboard region. Your module can also then define
-  // theme_mymodule_dashboard_region() as a theme wrapper function to control
-  // the region's appearance.
-  return array('mymodule_dashboard_region' => "My module's dashboard region");
-}
-
-/**
- * Alter dashboard regions provided by modules.
- *
- * @param $regions
- *   An array containing all dashboard regions, in the format provided by
- *   hook_dashboard_regions().
- */
-function hook_dashboard_regions_alter(&$regions) {
-  // Remove the sidebar region defined by the core dashboard module.
-  unset($regions['dashboard_sidebar']);
-}
-
-/**
- * @} End of "addtogroup hooks".
- */
diff --git a/modules/dashboard/dashboard.css b/modules/dashboard/dashboard.css
deleted file mode 100644
index 83e9ee4..0000000
--- a/modules/dashboard/dashboard.css
+++ /dev/null
@@ -1,134 +0,0 @@
-/**
- * @file
- * Stylesheet for the Dashboard module.
- */
-
-#dashboard div.dashboard-region {
-  float: left;
-  min-height: 1px;
-}
-
-#dashboard div#dashboard_main {
-  width: 65%;
-  margin-right: 1%; /* LTR */
-}
-
-#dashboard div#dashboard_sidebar {
-  width: 33%;
-}
-
-#dashboard div.block {
-  margin-bottom: 20px;
-}
-
-#dashboard .dashboard-region .block {
-  clear: both;
-}
-
-#dashboard div.block h2 {
-  float: none;
-}
-
-#dashboard #disabled-blocks .block,
-#dashboard .block-placeholder {
-  background: #e2e1dc;
-  padding: 6px 4px 6px 8px; /* LTR */
-  margin: 3px 3px 3px 0; /* LTR */
-  float: left; /* LTR */
-  -moz-border-radius: 4px;
-  -webkit-border-radius: 4px;
-  border-radius: 4px;
-}
-
-#dashboard .dashboard-add-other-blocks {
-  margin: 10px 0 0 0;
-}
-
-#dashboard .ui-sortable {
-  border: 2px dashed #ccc;
-  padding: 10px;
-}
-
-#dashboard .canvas-content {
-  padding: 10px;
-}
-
-#dashboard #disabled-blocks .ui-sortable {
-  padding: 0;
-  background-color: #777;
-  border: 0;
-}
-
-#dashboard .canvas-content a.button {
-  margin: 0 0 0 10px; /* LTR */
-  color: #5a5a5a;
-  text-decoration: none;
-}
-
-#dashboard .region {
-  margin: 5px;
-}
-
-#dashboard #disabled-blocks .region {
-  background-color: #E0E0D8;
-  border: #ccc 1px solid;
-  padding: 10px;
-}
-
-#dashboard #disabled-blocks {
-  padding: 5px 0;
-}
-
-#dashboard #disabled-blocks h2 {
-  display: inline;
-  font-weight: normal;
-  white-space: nowrap;
-}
-
-#dashboard #disabled-blocks .block {
-  background: #444;
-  color: #fff;
-}
-
-#dashboard.customize-inactive #disabled-blocks .block:hover {
-  background: #0074BD;
-}
-
-#dashboard #disabled-blocks .block .content,
-#dashboard .ui-sortable-helper .content {
-  display: none;
-}
-
-#dashboard .ui-sortable .block {
-  cursor: move;
-  min-height: 1px;
-}
-
-#dashboard .ui-sortable .block h2 {
-  background: transparent url(../../misc/draggable.png) no-repeat 0px -39px;
-  padding: 0 17px;
-}
-
-#dashboard.customize-inactive #disabled-blocks .block:hover h2 {
-  background: #0074BD url(../../misc/draggable.png) no-repeat 0px -39px;
-  color: #fff;
-}
-
-#dashboard.customize-inactive .dashboard-region .ui-sortable .block:hover h2 {
-  background: #0074BD url(../../misc/draggable.png) no-repeat;
-  background-position: 3px -36px;
-  color: #fff;
-}
-
-#dashboard .dashboard-region .block-placeholder {
-  margin: 0 0 20px 0;
-  padding: 0;
-  display: block;
-  height: 1.6em;
-  width: 100%;
-}
-
-#dashboard #disabled-blocks .block-placeholder {
-  width: 30px;
-  height: 1.6em;
-}
diff --git a/modules/dashboard/dashboard.info b/modules/dashboard/dashboard.info
deleted file mode 100644
index 41f4c9d..0000000
--- a/modules/dashboard/dashboard.info
+++ /dev/null
@@ -1,8 +0,0 @@
-name = Dashboard
-description = Provides a dashboard page in the administrative interface for organizing administrative tasks and tracking information within your site.
-core = 7.x
-package = Core
-version = VERSION
-files[] = dashboard.test
-dependencies[] = block
-configure = admin/dashboard/customize
diff --git a/modules/dashboard/dashboard.install b/modules/dashboard/dashboard.install
deleted file mode 100644
index 5021826..0000000
--- a/modules/dashboard/dashboard.install
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the dashboard module.
- */
-
-/**
- * Implements hook_disable().
- *
- * Stash a list of blocks enabled on the dashboard, so they can be re-enabled
- * if the dashboard is re-enabled. Then disable those blocks, since the
- * dashboard regions will no longer be defined.
- */
-function dashboard_disable() {
-  // Stash a list of currently enabled blocks.
-  $stashed_blocks = array();
-
-  $result = db_select('block', 'b')
-    ->fields('b', array('module', 'delta', 'region'))
-    ->condition('b.region', dashboard_regions(), 'IN')
-    ->execute();
-
-  foreach ($result as $block) {
-    $stashed_blocks[] = array(
-      'module' => $block->module,
-      'delta' => $block->delta,
-      'region' => $block->region,
-    );
-  }
-  variable_set('dashboard_stashed_blocks', $stashed_blocks);
-
-  // Disable the dashboard blocks.
-  db_update('block')
-    ->fields(array(
-      'status' => 0,
-      'region' => BLOCK_REGION_NONE,
-    ))
-    ->condition('region', dashboard_regions(), 'IN')
-    ->execute();
-}
-
-/**
- * Implements hook_enable().
- *
- * Restores blocks to the dashboard that were there when the dashboard module
- * was disabled.
- */
-function dashboard_enable() {
-  global $theme_key;
-  if (!$stashed_blocks = variable_get('dashboard_stashed_blocks')) {
-    return;
-  }
-  if (!$admin_theme = variable_get('admin_theme')) {
-    drupal_theme_initialize();
-    $admin_theme = $theme_key;
-  }
-  foreach ($stashed_blocks as $block) {
-    db_update('block')
-      ->fields(array(
-        'status' => 1,
-        'region' => $block['region']
-      ))
-      ->condition('module', $block['module'])
-      ->condition('delta', $block['delta'])
-      ->condition('theme', $admin_theme)
-      ->condition('status', 0)
-      ->execute();
-  }
-  variable_del('dashboard_stashed_blocks');
-}
-
-/**
- * Implements hook_uninstall().
- */
-function dashboard_uninstall() {
-  variable_del('dashboard_stashed_blocks');
-}
diff --git a/modules/dashboard/dashboard.js b/modules/dashboard/dashboard.js
deleted file mode 100644
index 62f13a4..0000000
--- a/modules/dashboard/dashboard.js
+++ /dev/null
@@ -1,223 +0,0 @@
-/**
- * @file
- * Attaches behaviors for the Dashboard module.
- */
-
-(function ($) {
-
-/**
- * Implements Drupal.behaviors for the Dashboard module.
- */
-Drupal.behaviors.dashboard = {
-  attach: function (context, settings) {
-    $('#dashboard', context).once(function () {
-      $(this).prepend('<div class="customize clearfix"><ul class="action-links"><li><a href="#">' + Drupal.t('Customize dashboard') + '</a></li></ul><div class="canvas"></div></div>');
-      $('.customize .action-links a', this).click(Drupal.behaviors.dashboard.enterCustomizeMode);
-    });
-    Drupal.behaviors.dashboard.addPlaceholders();
-    if (Drupal.settings.dashboard.launchCustomize) {
-      Drupal.behaviors.dashboard.enterCustomizeMode();
-    }
-  },
-
-  addPlaceholders: function() {
-    $('#dashboard .dashboard-region .region').each(function () {
-      var empty_text = "";
-      // If the region is empty
-      if ($('.block', this).length == 0) {
-        // Check if we are in customize mode and grab the correct empty text
-        if ($('#dashboard').hasClass('customize-mode')) {
-          empty_text = Drupal.settings.dashboard.emptyRegionTextActive;
-        } else {
-          empty_text = Drupal.settings.dashboard.emptyRegionTextInactive;
-        }
-        // We need a placeholder.
-        if ($('.placeholder', this).length == 0) {
-          $(this).append('<div class="placeholder"></div>');
-        }
-        $('.placeholder', this).html(empty_text);
-      }
-      else {
-        $('.placeholder', this).remove();
-      }
-    });
-  },
-
-  /**
-   * Enters "customize" mode by displaying disabled blocks.
-   */
-  enterCustomizeMode: function () {
-    $('#dashboard').addClass('customize-mode customize-inactive');
-    Drupal.behaviors.dashboard.addPlaceholders();
-    // Hide the customize link
-    $('#dashboard .customize .action-links').hide();
-    // Load up the disabled blocks
-    $('div.customize .canvas').load(Drupal.settings.dashboard.drawer, Drupal.behaviors.dashboard.setupDrawer);
-  },
-
-  /**
-   * Exits "customize" mode by simply forcing a page refresh.
-   */
-  exitCustomizeMode: function () {
-    $('#dashboard').removeClass('customize-mode customize-inactive');
-    Drupal.behaviors.dashboard.addPlaceholders();
-    location.href = Drupal.settings.dashboard.dashboard;
-  },
-
-  /**
-   * Sets up the drag-and-drop behavior and the 'close' button.
-   */
-  setupDrawer: function () {
-    $('div.customize .canvas-content input').click(Drupal.behaviors.dashboard.exitCustomizeMode);
-    $('div.customize .canvas-content').append('<a class="button" href="' + Drupal.settings.dashboard.dashboard + '">' + Drupal.t('Done') + '</a>');
-
-    // Initialize drag-and-drop.
-    var regions = $('#dashboard div.region');
-    regions.sortable({
-      connectWith: regions,
-      cursor: 'move',
-      cursorAt: {top:0},
-      dropOnEmpty: true,
-      items: '> div.block, > div.disabled-block',
-      placeholder: 'block-placeholder clearfix',
-      tolerance: 'pointer',
-      start: Drupal.behaviors.dashboard.start,
-      over: Drupal.behaviors.dashboard.over,
-      sort: Drupal.behaviors.dashboard.sort,
-      update: Drupal.behaviors.dashboard.update
-    });
-  },
-
-  /**
-   * Makes the block appear as a disabled block while dragging.
-   *
-   * This function is called on the jQuery UI Sortable "start" event.
-   *
-   * @param event
-   *  The event that triggered this callback.
-   * @param ui
-   *  An object containing information about the item that is being dragged.
-   */
-  start: function (event, ui) {
-    $('#dashboard').removeClass('customize-inactive');
-    var item = $(ui.item);
-
-    // If the block is already in disabled state, don't do anything.
-    if (!item.hasClass('disabled-block')) {
-      item.css({height: 'auto'});
-    }
-  },
-
-  /**
-   * Adapts block's width to the region it is moved into while dragging.
-   *
-   * This function is called on the jQuery UI Sortable "over" event.
-   *
-   * @param event
-   *  The event that triggered this callback.
-   * @param ui
-   *  An object containing information about the item that is being dragged.
-   */
-  over: function (event, ui) {
-    var item = $(ui.item);
-
-    // If the block is in disabled state, remove width.
-    if ($(this).closest('#disabled-blocks').length) {
-      item.css('width', '');
-    }
-    else {
-      item.css('width', $(this).width());
-    }
-  },
-
-  /**
-   * Adapts a block's position to stay connected with the mouse pointer.
-   *
-   * This function is called on the jQuery UI Sortable "sort" event.
-   *
-   * @param event
-   *  The event that triggered this callback.
-   * @param ui
-   *  An object containing information about the item that is being dragged.
-   */
-  sort: function (event, ui) {
-    var item = $(ui.item);
-
-    if (event.pageX > ui.offset.left + item.width()) {
-      item.css('left', event.pageX);
-    }
-  },
-
-  /**
-   * Sends block order to the server, and expand previously disabled blocks.
-   *
-   * This function is called on the jQuery UI Sortable "update" event.
-   *
-   * @param event
-   *   The event that triggered this callback.
-   * @param ui
-   *   An object containing information about the item that was just dropped.
-   */
-  update: function (event, ui) {
-    $('#dashboard').addClass('customize-inactive');
-    var item = $(ui.item);
-
-    // If the user dragged a disabled block, load the block contents.
-    if (item.hasClass('disabled-block')) {
-      var module, delta, itemClass;
-      itemClass = item.attr('class');
-      // Determine the block module and delta.
-      module = itemClass.match(/\bmodule-(\S+)\b/)[1];
-      delta = itemClass.match(/\bdelta-(\S+)\b/)[1];
-
-      // Load the newly enabled block's content.
-      $.get(Drupal.settings.dashboard.blockContent + '/' + module + '/' + delta, {},
-        function (block) {
-          if (block) {
-            item.html(block);
-          }
-
-          if (item.find('div.content').is(':empty')) {
-            item.find('div.content').html(Drupal.settings.dashboard.emptyBlockText);
-          }
-
-          Drupal.attachBehaviors(item);
-        },
-        'html'
-      );
-      // Remove the "disabled-block" class, so we don't reload its content the
-      // next time it's dragged.
-      item.removeClass("disabled-block");
-    }
-
-    Drupal.behaviors.dashboard.addPlaceholders();
-
-    // Let the server know what the new block order is.
-    $.post(Drupal.settings.dashboard.updatePath, {
-        'form_token': Drupal.settings.dashboard.formToken,
-        'regions': Drupal.behaviors.dashboard.getOrder
-      }
-    );
-  },
-
-  /**
-   * Returns the current order of the blocks in each of the sortable regions.
-   *
-   * @return
-   *   The current order of the blocks, in query string format.
-   */
-  getOrder: function () {
-    var order = [];
-    $('#dashboard div.region').each(function () {
-      var region = $(this).parent().attr('id').replace(/-/g, '_');
-      var blocks = $(this).sortable('toArray');
-      $.each(blocks, function() {
-        order.push(region + '[]=' + this);
-      });
-    });
-    order = order.join('&');
-    return order;
-  }
-};
-
-})(jQuery);
diff --git a/modules/dashboard/dashboard.module b/modules/dashboard/dashboard.module
deleted file mode 100644
index 4cf654f..0000000
--- a/modules/dashboard/dashboard.module
+++ /dev/null
@@ -1,681 +0,0 @@
-<?php
-/**
- * @file
- * Provides a dashboard page in the administrative interface.
- */
-
-/**
- * Implements hook_help().
- */
-function dashboard_help($path, $arg) {
-  switch ($path) {
-    case 'admin/help#dashboard':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Dashboard module provides a <a href="@dashboard">Dashboard page</a> in the administrative interface for organizing administrative tasks and navigation, and tracking information within your site. The Dashboard page contains blocks, which you can add to and arrange using the drag-and-drop interface that appears when you click on the <em>Customize dashboard</em> link. Within this interface, blocks that are not primarily used for site administration do not appear by default, but can be added via the <em>Add other blocks</em> link. For more information, see the online handbook entry for <a href="@handbook">Dashboard module</a>.', array('@handbook' => 'http://drupal.org/documentation/modules/dashboard', '@dashboard' => url('admin/dashboard'))) . '</p>';
-      $output .= '<h3>' . t('Uses') . '</h3>';
-      $output .= '<dl>';
-      $output .= '<dt>' . t('Tracking user activity') . '</dt>';
-      $output .= '<dd>' . t("By enabling blocks such as <em>Who's online</em> and <em>Who's new</em>, site users can track who is logged in and new user signups at a centralized location.") . '</dd>';
-      $output .= '<dt>' . t('Tracking content activity') . '</dt>';
-      $output .= '<dd>' . t('By enabling blocks such as <em>Recent blog posts</em>, <em>New forum topics</em> and <em>Recent comments</em>, site users can view newly added site content at a glance.') . '</dd>';
-      $output .= '</dl>';
-      return $output;
-
-    case 'admin/dashboard/configure':
-      // @todo This assumes the current page is being displayed using the same
-      //   theme that the dashboard is displayed in.
-      $output = '<p>' . t('Rearrange blocks for display on the <a href="@dashboard-url">Dashboard page</a>. Blocks placed in the <em>Dashboard (inactive)</em> region are not displayed when viewing the Dashboard page, but are available within its <em>Customize dashboard</em> interface. Removing a block from active dashboard display makes it available on the main <a href="@blocks-url">blocks administration page</a>.', array('@dashboard-url' => url('admin/dashboard'), '@blocks-url' => url("admin/structure/block/list/{$GLOBALS['theme_key']}"))) . '</p>';
-      return $output;
-  }
-}
-
-/**
- * Implements hook_menu().
- */
-function dashboard_menu() {
-  $items['admin/dashboard'] = array(
-    'title' => 'Dashboard',
-    'description' => 'View and customize your dashboard.',
-    'page callback' => 'dashboard_admin',
-    'access arguments' => array('access dashboard'),
-    // Make this appear first, so for example, in admin menus, it shows up on
-    // the top corner of the window as a convenient "home link".
-    'weight' => -15,
-  );
-  $items['admin/dashboard/configure'] = array(
-    'title' => 'Configure available dashboard blocks',
-    'description' => 'Configure which blocks can be shown on the dashboard.',
-    'page callback' => 'dashboard_admin_blocks',
-    'access arguments' => array('administer blocks'),
-    'type' => MENU_VISIBLE_IN_BREADCRUMB,
-  );
-  $items['admin/dashboard/customize'] = array(
-    'title' => 'Customize dashboard',
-    'description' => 'Customize your dashboard.',
-    'page callback' => 'dashboard_admin',
-    'page arguments' => array(TRUE),
-    'access arguments' => array('access dashboard'),
-    'type' => MENU_VISIBLE_IN_BREADCRUMB,
-  );
-  $items['admin/dashboard/drawer'] = array(
-    'page callback' => 'dashboard_show_disabled',
-    'access arguments' => array('administer blocks'),
-    'type' => MENU_CALLBACK,
-  );
-  $items['admin/dashboard/block-content/%/%'] = array(
-    'page callback' => 'dashboard_show_block_content',
-    'page arguments' => array(3, 4),
-    'access arguments' => array('administer blocks'),
-    'type' => MENU_CALLBACK,
-  );
-  $items['admin/dashboard/update'] = array(
-    'page callback' => 'dashboard_update',
-    'access arguments' => array('administer blocks'),
-    'type' => MENU_CALLBACK,
-  );
-
-  return $items;
-}
-
-/**
- * Implements hook_permission().
- */
-function dashboard_permission() {
-  return array(
-    'access dashboard' => array(
-      'title' => t('View the administrative dashboard'),
-      // Note: We translate the 'Administer blocks' permission string here with
-      // a separate t() call, to make sure it gets the same translation as when
-      // it's in block_permission().
-      'description' => t('Customizing the dashboard requires the !permission-name permission.', array(
-        '!permission-name' => l(t('Administer blocks'), 'admin/people/permissions', array('fragment' => 'module-block')),
-      )),
-    ),
-  );
-}
-
-/**
- * Implements hook_block_info_alter().
- */
-function dashboard_block_info_alter(&$blocks, $theme, $code_blocks) {
-  $admin_theme = variable_get('admin_theme');
-  if (($admin_theme && $theme == $admin_theme) || (!$admin_theme && $theme == variable_get('theme_default', 'bartik'))) {
-    foreach ($blocks as $module => &$module_blocks) {
-      foreach ($module_blocks as $delta => &$block) {
-        // Make administrative blocks that are not already in use elsewhere
-        // available for the dashboard.
-        if (empty($block['status']) && (empty($block['region']) || $block['region'] == BLOCK_REGION_NONE) && !empty($code_blocks[$module][$delta]['properties']['administrative'])) {
-          $block['status'] = 1;
-          $block['region'] = 'dashboard_inactive';
-        }
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_block_list_alter().
- *
- * Skip rendering dashboard blocks when not on the dashboard page itself. This
- * prevents expensive dashboard blocks from causing performance issues on pages
- * where they will never be displayed.
- */
-function dashboard_block_list_alter(&$blocks) {
-  if (!dashboard_is_visible()) {
-    foreach ($blocks as $key => $block) {
-      if (in_array($block->region, dashboard_regions())) {
-        unset($blocks[$key]);
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_page_build().
- *
- * Display dashboard blocks in the main content region.
- */
-function dashboard_page_build(&$page) {
-  global $theme_key;
-
-  if (dashboard_is_visible()) {
-    $block_info = array();
-
-    // Create a wrapper for the dashboard itself, then insert each dashboard
-    // region into it.
-    $page['content']['dashboard'] = array('#theme_wrappers' => array('dashboard'));
-    foreach (dashboard_regions() as $region) {
-      // Do not show dashboard blocks that are disabled.
-      if ($region == 'dashboard_inactive') {
-        continue;
-      }
-      // Insert regions even when they are empty, so that they will be
-      // displayed when the dashboard is being configured.
-      $page['content']['dashboard'][$region] = !empty($page[$region]) ? $page[$region] : array();
-      $page['content']['dashboard'][$region]['#dashboard_region'] = $region;
-      // Allow each dashboard region to be themed differently, or fall back on
-      // the generic theme wrapper function for dashboard regions.
-      $page['content']['dashboard'][$region]['#theme_wrappers'][] = array($region, 'dashboard_region');
-      unset($page[$region]);
-      $blocks_found = array();
-      foreach ($page['content']['dashboard'][$region] as $item) {
-        if (isset($item['#theme_wrappers']) && is_array($item['#theme_wrappers']) && in_array('block', $item['#theme_wrappers'])) {
-          // If this item is a block, ensure it has a subject.
-          if (empty($item['#block']->subject)) {
-            // Locally cache info data for the object for all blocks, in case
-            // we find a block similarly missing title from the same module.
-            if (!isset($block_info[$item['#block']->module])) {
-              $block_info[$item['#block']->module] = module_invoke($item['#block']->module, 'block_info');
-            }
-            $item['#block']->subject = $block_info[$item['#block']->module][$item['#block']->delta]['info'];
-          }
-          $blocks_found[$item['#block']->module . '_' . $item['#block']->delta] = TRUE;
-        }
-      }
-
-      // Find blocks which were not yet displayed on the page (were empty), and
-      // add placeholder items in their place for rendering.
-      $block_list = db_select('block')
-        ->condition('theme', $theme_key)
-        ->condition('status', 1)
-        ->condition('region', $region)
-        ->fields('block')
-        ->execute();
-      foreach ($block_list as $block) {
-        if (!isset($blocks_found[$block->module . '_' . $block->delta])) {
-          $block->enabled = $block->page_match = TRUE;
-          $block->content = array('#markup' => '<div class="dashboard-block-empty">(empty)</div>');
-          if (!isset($block_info[$block->module])) {
-            $block_info[$block->module] = module_invoke($block->module, 'block_info');
-          }
-          $block->subject = t('@title', array('@title' => $block_info[$block->module][$block->delta]['info']));
-          $block_render = array($block->module . '_' . $block->delta => $block);
-          $build = _block_get_renderable_array($block_render);
-          $page['content']['dashboard'][$block->region][] = $build;
-        }
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_system_info_alter().
- *
- * Add regions to each theme to store the dashboard blocks.
- */
-function dashboard_system_info_alter(&$info, $file, $type) {
-  if ($type == 'theme') {
-    // Add the dashboard regions (the "inactive" region should always appear
-    // last in the list, for usability reasons).
-    $dashboard_regions = dashboard_region_descriptions();
-    if (isset($dashboard_regions['dashboard_inactive'])) {
-      $inactive_region = $dashboard_regions['dashboard_inactive'];
-      unset($dashboard_regions['dashboard_inactive']);
-      $dashboard_regions['dashboard_inactive'] = $inactive_region;
-    }
-    $info['regions'] += $dashboard_regions;
-    // Indicate that these regions are intended to be displayed whenever the
-    // dashboard is displayed in an overlay. This information is provided for
-    // any module that might need to use it, not just the core Overlay module.
-    $info['overlay_regions'] = !empty($info['overlay_regions']) ? array_merge($info['overlay_regions'], dashboard_regions()) : dashboard_regions();
-  }
-}
-
-/**
- * Implements hook_theme().
- */
-function dashboard_theme() {
-  return array(
-    'dashboard' => array(
-      'render element' => 'element',
-    ),
-    'dashboard_admin' => array(
-      'render element' => 'element',
-    ),
-    'dashboard_region' => array(
-      'render element' => 'element',
-    ),
-    'dashboard_disabled_blocks' => array(
-      'variables' => array('blocks' => NULL),
-    ),
-    'dashboard_disabled_block' => array(
-      'variables' => array('block' => NULL),
-    ),
-    'dashboard_admin_display_form' => array(
-      // When building the form for configuring dashboard blocks, reuse the
-      // Block module's template for the main block configuration form.
-      'template' => 'block-admin-display-form',
-      'path' => drupal_get_path('module', 'block'),
-      'file' => 'block.admin.inc',
-      'render element' => 'form',
-    ),
-  );
-}
-
-/**
- * Implements hook_forms().
- */
-function dashboard_forms() {
-  // Reroute the dashboard configuration form to the main blocks administration
-  // form. This allows us to distinguish them by form ID in hook_form_alter().
-  $forms['dashboard_admin_display_form'] = array(
-    'callback' => 'block_admin_display_form',
-  );
-
-  return $forms;
-}
-
-/**
- * Page callback: Displays the dashboard.
- *
- * @param $launch_customize
- *   Whether to launch in customization mode right away. TRUE or FALSE.
- */
-function dashboard_admin($launch_customize = FALSE) {
-  $js_settings = array(
-    'dashboard' => array(
-      'drawer' => url('admin/dashboard/drawer'),
-      'blockContent' => url('admin/dashboard/block-content'),
-      'updatePath' => url('admin/dashboard/update'),
-      'formToken' => drupal_get_token('dashboard-update'),
-      'launchCustomize' => $launch_customize,
-      'dashboard' => url('admin/dashboard'),
-      'emptyBlockText' => t('(empty)'),
-      'emptyRegionTextInactive' => t('This dashboard region is empty. Click <em>Customize dashboard</em> to add blocks to it.'),
-      'emptyRegionTextActive' => t('DRAG HERE'),
-    ),
-  );
-  $build = array(
-    '#theme' => 'dashboard_admin',
-    '#message' => t('To customize the dashboard page, move blocks to the dashboard regions on the <a href="@dashboard">Dashboard administration page</a>, or enable JavaScript on this page to use the drag-and-drop interface.', array('@dashboard' => url('admin/dashboard/configure'))),
-    '#access' => user_access('administer blocks'),
-    '#attached' => array(
-      'js' => array(
-        drupal_get_path('module', 'dashboard') . '/dashboard.js',
-        array('data' => $js_settings, 'type' => 'setting'),
-      ),
-      'library' => array(array('system', 'ui.sortable')),
-    ),
-  );
-  return $build;
-}
-
-/**
- * Page callback: Builds the page for administering dashboard blocks.
- *
- * This page reuses the Block module's administration form but limits editing
- * to blocks that are available to appear on the dashboard.
- *
- * @see block_admin_display()
- * @see block_admin_display_form()
- * @see dashboard_form_dashboard_admin_display_form_alter()
- * @see template_preprocess_dashboard_admin_display_form()
- */
-function dashboard_admin_blocks() {
-  global $theme_key;
-  drupal_theme_initialize();
-  module_load_include('inc', 'block', 'block.admin');
-
-  // Prepare the blocks for the current theme, and remove those that are
-  // currently displayed in non-dashboard regions.
-  // @todo This assumes the current page is being displayed using the same
-  //   theme that the dashboard is displayed in.
-  $blocks = block_admin_display_prepare_blocks($theme_key);
-  $dashboard_regions = dashboard_region_descriptions();
-  $regions_to_remove = array_diff_key(system_region_list($theme_key, REGIONS_VISIBLE), $dashboard_regions);
-  foreach ($blocks as $id => $block) {
-    if (isset($regions_to_remove[$block['region']])) {
-      unset($blocks[$id]);
-    }
-  }
-
-  // Pass in the above blocks and dashboard regions to the form, so that only
-  // dashboard-related regions will be displayed.
-  return drupal_get_form('dashboard_admin_display_form', $blocks, $theme_key, $dashboard_regions);
-}
-
-/**
- * Implements hook_form_FORM_ID_alter().
- */
-function dashboard_form_block_admin_display_form_alter(&$form, &$form_state, $form_id) {
-  // Hide dashboard regions (and any blocks placed within them) from the block
-  // administration form and from the options list on that form. This
-  // function is called for both the dashboard block configuration form and the
-  // standard block configuration form so that both forms can share the same
-  // constructor. As a result the form_id must be checked.
-  if ($form_id != 'dashboard_admin_display_form') {
-    $dashboard_regions = dashboard_region_descriptions();
-    $form['block_regions']['#value'] = array_diff_key($form['block_regions']['#value'], $dashboard_regions);
-    foreach (element_children($form['blocks']) as $i) {
-      $block = &$form['blocks'][$i];
-      if (isset($block['region']['#default_value']) && isset($dashboard_regions[$block['region']['#default_value']]) && $block['region']['#default_value'] != 'dashboard_inactive') {
-        $block['#access'] = FALSE;
-      }
-      elseif (isset($block['region']['#options'])) {
-        $block['region']['#options'] = array_diff_key($block['region']['#options'], $dashboard_regions);
-      }
-      // Show inactive dashboard blocks as disabled on the main block
-      // administration form, so that they are available to place in other
-      // regions of the theme. Note that when the form is submitted, any such
-      // blocks which still remain disabled will immediately be put back in the
-      // 'dashboard_inactive' region, because dashboard_block_info_alter() is
-      // called when the blocks are rehashed. Fortunately, this is the exact
-      // behavior we want.
-      if ($block['region']['#default_value'] == 'dashboard_inactive') {
-        // @todo These do not wind up in correct alphabetical order.
-        $block['region']['#default_value'] = NULL;
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_form_FORM_ID_alter().
- */
-function dashboard_form_dashboard_admin_display_form_alter(&$form, &$form_state) {
-  // Redirect the 'configure' and 'delete' links on each block back to the
-  // dashboard blocks administration page.
-  foreach ($form['blocks'] as &$block) {
-    if (isset($block['configure']['#href'])) {
-      $block['configure']['#options']['query']['destination'] = 'admin/dashboard/configure';
-    }
-    if (isset($block['delete']['#href'])) {
-      $block['delete']['#options']['query']['destination'] = 'admin/dashboard/configure';
-    }
-  }
-}
-
-/**
- * Implements hook_form_FORM_ID_alter().
- */
-function dashboard_form_block_admin_configure_alter(&$form, &$form_state) {
-  global $theme_key;
-  drupal_theme_initialize();
-  // Hide the dashboard regions from the region select list on the block
-  // configuration form, for all themes except the current theme (since the
-  // other themes do not display the dashboard).
-  // @todo This assumes the current page is being displayed using the same
-  //   theme that the dashboard is displayed in.
-  $dashboard_regions = dashboard_region_descriptions();
-  foreach (element_children($form['regions']) as $region_name) {
-    $region = &$form['regions'][$region_name];
-    if ($region_name != $theme_key && isset($region['#options'])) {
-      $region['#options'] = array_diff_key($region['#options'], $dashboard_regions);
-    }
-  }
-}
-
-/**
- * Implements hook_form_FORM_ID_alter().
- */
-function dashboard_form_block_add_block_form_alter(&$form, &$form_state) {
-  dashboard_form_block_admin_configure_alter($form, $form_state);
-}
-
-/**
- * Preprocesses variables for block-admin-display-form.tpl.php.
- */
-function template_preprocess_dashboard_admin_display_form(&$variables) {
-  template_preprocess_block_admin_display_form($variables);
-  if (isset($variables['block_regions'][BLOCK_REGION_NONE])) {
-    $variables['block_regions'][BLOCK_REGION_NONE] = t('Other blocks');
-  }
-}
-
-/**
- * Determines if the dashboard should be displayed on the current page.
- *
- * This function checks if the user is currently viewing the dashboard and has
- * access to see it. It is used by other functions in the dashboard module to
- * decide whether or not the dashboard content should be displayed to the
- * current user.
- *
- * Although the menu system normally handles the above tasks, it only does so
- * for the main page content. However, the dashboard is not part of the main
- * page content, but rather is displayed in special regions of the page (so it
- * can interface with the Block module's method of managing page regions). We
- * therefore need to maintain this separate function to check the menu item for
- * us.
- *
- * @return
- *   TRUE if the dashboard should be visible on the current page, FALSE
- *   otherwise.
- *
- * @see dashboard_block_list_alter()
- * @see dashboard_page_build()
- */
-function dashboard_is_visible() {
-  static $is_visible;
-  if (!isset($is_visible)) {
-    // If the current menu item represents the page on which we want to display
-    // the dashboard, and if the current user has access to see it, return
-    // TRUE.
-    $menu_item = menu_get_item();
-    $is_visible = isset($menu_item['page_callback']) && $menu_item['page_callback'] == 'dashboard_admin' && !empty($menu_item['access']);
-  }
-  return $is_visible;
-}
-
-/**
- * Returns an array of dashboard region descriptions, keyed by region name.
- */
-function dashboard_region_descriptions() {
-  $regions = module_invoke_all('dashboard_regions');
-  drupal_alter('dashboard_regions', $regions);
-  return $regions;
-}
-
-/**
- * Returns an array of dashboard region names.
- */
-function dashboard_regions() {
-  $regions = &drupal_static(__FUNCTION__);
-  if (!isset($regions)) {
-    $regions = array_keys(dashboard_region_descriptions());
-  }
-  return $regions;
-}
-
-/**
- * Implements hook_dashboard_regions().
- */
-function dashboard_dashboard_regions() {
-  return array(
-    'dashboard_main' => 'Dashboard (main)',
-    'dashboard_sidebar' => 'Dashboard (sidebar)',
-    'dashboard_inactive' => 'Dashboard (inactive)',
-  );
-}
-
-/**
- * Ajax callback: Shows disabled blocks in the dashboard customization mode.
- */
-function dashboard_show_disabled() {
-  global $theme_key;
-
-  // Blocks are not necessarily initialized at this point.
-  $blocks = _block_rehash();
-
-  // Limit the list to blocks that are marked as disabled for the dashboard.
-  foreach ($blocks as $key => $block) {
-    if ($block['theme'] != $theme_key || $block['region'] != 'dashboard_inactive') {
-      unset($blocks[$key]);
-    }
-  }
-
-  // Theme the output and end the page request.
-  print theme('dashboard_disabled_blocks', array('blocks' => $blocks));
-  drupal_exit();
-}
-
-/**
- * Ajax callback: Displays the rendered contents of a specific block.
- *
- * @param $module
- *   The block's module name.
- * @param $delta
- *   The block's delta.
- */
-function dashboard_show_block_content($module, $delta) {
-  drupal_theme_initialize();
-  global $theme_key;
-
-  $blocks = array();
-  $block_object = db_query("SELECT * FROM {block} WHERE theme = :theme AND module = :module AND delta = :delta", array(
-    ":theme" => $theme_key,
-    ":module" => $module,
-    ":delta" => $delta,
-    ))
-    ->fetchObject();
-  $block_object->enabled = $block_object->page_match = TRUE;
-  $blocks[$module . "_" . $delta] = $block_object;
-  $block_content = _block_render_blocks($blocks);
-  $build = _block_get_renderable_array($block_content);
-  $rendered_block = drupal_render($build);
-  print $rendered_block;
-  drupal_exit();
-}
-
-/**
- * Sets the new weight of each region according to the drag-and-drop order.
- */
-function dashboard_update() {
-  drupal_theme_initialize();
-  global $theme_key;
-  // Check the form token to make sure we have a valid request.
-  if (!empty($_REQUEST['form_token']) && drupal_valid_token($_REQUEST['form_token'], 'dashboard-update')) {
-    parse_str($_REQUEST['regions'], $regions);
-    foreach ($regions as $region_name => $blocks) {
-      if ($region_name == 'disabled_blocks') {
-        $region_name = 'dashboard_inactive';
-      }
-      foreach ($blocks as $weight => $block_string) {
-        // Parse the query string to determine the block's module and delta.
-        preg_match('/block-([^-]+)-(.+)/', $block_string, $matches);
-        $block = new stdClass();
-        $block->module = $matches[1];
-        $block->delta = $matches[2];
-
-        $block->region = $region_name;
-        $block->weight = $weight;
-        $block->status = 1;
-
-        db_merge('block')
-          ->key(array(
-            'module' => $block->module,
-            'delta' => $block->delta,
-            'theme' => $theme_key,
-          ))
-          ->fields(array(
-            'status' => $block->status,
-            'weight' => $block->weight,
-            'region' => $block->region,
-            'pages' => '',
-          ))
-          ->execute();
-      }
-    }
-    drupal_set_message(t('The configuration options have been saved.'), 'status', FALSE);
-  }
-  drupal_exit();
-}
-
-/**
- * Returns HTML for the entire dashboard.
- *
- * @param $variables
- *   An associative array containing:
- *   - element: A render element containing the properties of the dashboard
- *     region element, #dashboard_region and #children.
- *
- * @ingroup themeable
- */
-function theme_dashboard($variables) {
-  extract($variables);
-  drupal_add_css(drupal_get_path('module', 'dashboard') . '/dashboard.css');
-  return '<div id="dashboard" class="clearfix">' . $element['#children'] . '</div>';
-}
-
-/**
- * Returns HTML for the non-customizable part of the dashboard page.
- *
- * @param $variables
- *   An associative array containing:
- *   - element: A render element containing a #message.
- *
- * @ingroup themeable
- */
-function theme_dashboard_admin($variables) {
-  // We only return a simple help message, since the actual content of the page
-  // will be populated via the dashboard regions in dashboard_page_build().
-  return '<div class="customize-dashboard js-hide">' . $variables['element']['#message'] . '</div>';
-}
-
-/**
- * Returns HTML for a generic dashboard region.
- *
- * @param $variables
- *   An associative array containing:
- *   - element: A render element containing the properties of the dashboard
- *     region element, #dashboard_region and #children.
- *
- * @ingroup themeable
- */
-function theme_dashboard_region($variables) {
-  extract($variables);
-  $output = '<div id="' . $element['#dashboard_region'] . '" class="dashboard-region">';
-  $output .= '<div class="region clearfix">';
-  $output .= $element['#children'];
-  // Closing div.region
-  $output .= '</div>';
-  // Closing div.dashboard-region
-  $output .= '</div>';
-  return $output;
-}
-
-/**
- * Returns HTML for disabled blocks, for use in dashboard customization mode.
- *
- * @param $variables
- *   An associative array containing:
- *   - blocks: An array of block objects from _block_rehash().
- *
- * @ingroup themeable
- */
-function theme_dashboard_disabled_blocks($variables) {
-  extract($variables);
-  $output = '<div class="canvas-content"><p>' . t('Drag and drop these blocks to the columns below. Changes are automatically saved. More options are available on the <a href="@dashboard-url">configuration page</a>.', array('@dashboard-url' => url('admin/dashboard/configure'))) . '</p>';
-  $output .= '<div id="disabled-blocks"><div class="region disabled-blocks clearfix">';
-  foreach ($blocks as $block) {
-    $output .= theme('dashboard_disabled_block', array('block' => $block));
-  }
-  $output .= '<div class="clearfix"></div>';
-  $output .= '<p class="dashboard-add-other-blocks">' . l(t('Add other blocks'), 'admin/dashboard/configure') . '</p>';
-  $output .= '</div></div></div>';
-  return $output;
-}
-
-/**
- * Returns HTML for disabled blocks, for use in dashboard customization mode.
- *
- * @param $variables
- *   An associative array containing:
- *   - block: A block object from _block_rehash().
- *
- * @ingroup themeable
- */
-function theme_dashboard_disabled_block($variables) {
-  extract($variables);
-  $output = "";
-  if (isset($block)) {
-    $output .= '<div id="block-' . $block['module'] . '-' . $block['delta']
-    . '" class="disabled-block block block-' . $block['module'] . '-' . $block['delta']
-    . ' module-' . $block['module'] . ' delta-' . $block['delta'] . '">'
-    . '<h2>' . (!empty($block['title']) && $block['title'] != '<none>' ? check_plain($block['title']) : check_plain($block['info'])) . '</h2>'
-    . '<div class="content"></div>'
-    . '</div>';
-  }
-  return $output;
-}
-
diff --git a/modules/dashboard/dashboard.test b/modules/dashboard/dashboard.test
deleted file mode 100644
index 06344fc..0000000
--- a/modules/dashboard/dashboard.test
+++ /dev/null
@@ -1,141 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for dashboard.module.
- */
-
-/**
- * Tests the Dashboard module blocks.
- */
-class DashboardBlocksTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Dashboard blocks',
-      'description' => 'Test blocks as used by the dashboard.',
-      'group' => 'Dashboard',
-    );
-  }
-
-  function setUp() {
-    parent::setUp();
-
-    // Create and log in an administrative user having access to the dashboard.
-    $admin_user = $this->drupalCreateUser(array('access dashboard', 'administer blocks', 'access administration pages', 'administer modules'));
-    $this->drupalLogin($admin_user);
-
-    // Make sure that the dashboard is using the same theme as the rest of the
-    // site (and in particular, the same theme used on 403 pages). This forces
-    // the dashboard blocks to be the same for an administrator as for a
-    // regular user, and therefore lets us test that the dashboard blocks
-    // themselves are specifically removed for a user who does not have access
-    // to the dashboard page.
-    theme_enable(array('stark'));
-    variable_set('theme_default', 'stark');
-    variable_set('admin_theme', 'stark');
-  }
-
-  /**
-   * Tests adding a block to the dashboard and checking access to it.
-   */
-  function testDashboardAccess() {
-    // Add a new custom block to a dashboard region.
-    $custom_block = array();
-    $custom_block['info'] = $this->randomName(8);
-    $custom_block['title'] = $this->randomName(8);
-    $custom_block['body[value]'] = $this->randomName(32);
-    $custom_block['regions[stark]'] = 'dashboard_main';
-    $this->drupalPost('admin/structure/block/add', $custom_block, t('Save block'));
-
-    // Ensure admin access.
-    $this->drupalGet('admin/dashboard');
-    $this->assertResponse(200, 'Admin has access to the dashboard.');
-    $this->assertRaw($custom_block['title'], 'Admin has access to a dashboard block.');
-
-    // Ensure non-admin access is denied.
-    $normal_user = $this->drupalCreateUser();
-    $this->drupalLogin($normal_user);
-    $this->drupalGet('admin/dashboard');
-    $this->assertResponse(403, 'Non-admin has no access to the dashboard.');
-    $this->assertNoText($custom_block['title'], 'Non-admin has no access to a dashboard block.');
-  }
-
-  /**
-   * Tests that dashboard regions are displayed or hidden properly.
-   */
-  function testDashboardRegions() {
-    $dashboard_regions = dashboard_region_descriptions();
-
-    // Ensure blocks can be placed in dashboard regions.
-    $this->drupalGet('admin/dashboard/configure');
-    foreach ($dashboard_regions as $region => $description) {
-      $elements = $this->xpath('//option[@value=:region]', array(':region' => $region));
-      $this->assertTrue(!empty($elements), format_string('%region is an available choice on the dashboard block configuration page.', array('%region' => $region)));
-    }
-
-    // Ensure blocks cannot be placed in dashboard regions on the standard
-    // blocks configuration page.
-    $this->drupalGet('admin/structure/block');
-    foreach ($dashboard_regions as $region => $description) {
-      $elements = $this->xpath('//option[@value=:region]', array(':region' => $region));
-      $this->assertTrue(empty($elements), format_string('%region is not an available choice on the block configuration page.', array('%region' => $region)));
-    }
-  }
-
-  /**
-   * Tests that the dashboard module can be re-enabled, retaining its blocks.
-   */
-  function testDisableEnable() {
-    // Add a new custom block to a dashboard region.
-    $custom_block = array();
-    $custom_block['info'] = $this->randomName(8);
-    $custom_block['title'] = $this->randomName(8);
-    $custom_block['body[value]'] = $this->randomName(32);
-    $custom_block['regions[stark]'] = 'dashboard_main';
-    $this->drupalPost('admin/structure/block/add', $custom_block, t('Save block'));
-    $this->drupalGet('admin/dashboard');
-    $this->assertRaw($custom_block['title'], 'Block appears on the dashboard.');
-
-    $edit = array();
-    $edit['modules[Core][dashboard][enable]'] = FALSE;
-    $this->drupalPost('admin/modules', $edit, t('Save configuration'));
-    $this->assertText(t('The configuration options have been saved.'), 'Modules status has been updated.');
-    $this->assertNoRaw('assigned to the invalid region', 'Dashboard blocks gracefully disabled.');
-    module_list(TRUE);
-    $this->assertFalse(module_exists('dashboard'), 'Dashboard disabled.');
-
-    $edit['modules[Core][dashboard][enable]'] = 'dashboard';
-    $this->drupalPost('admin/modules', $edit, t('Save configuration'));
-    $this->assertText(t('The configuration options have been saved.'), 'Modules status has been updated.');
-    module_list(TRUE);
-    $this->assertTrue(module_exists('dashboard'), 'Dashboard enabled.');
-
-    $this->drupalGet('admin/dashboard');
-    $this->assertRaw($custom_block['title'], 'Block still appears on the dashboard.');
-  }
-
-  /**
-   * Tests that administrative blocks are available for the dashboard.
-   */
-  function testBlockAvailability() {
-    // Test "Recent comments", which should be available (defined as
-    // "administrative") but not enabled.
-    $this->drupalGet('admin/dashboard');
-    $this->assertNoText(t('Recent comments'), '"Recent comments" not on dashboard.');
-    $this->drupalGet('admin/dashboard/drawer');
-    $this->assertText(t('Recent comments'), 'Drawer of disabled blocks includes a block defined as "administrative".');
-    $this->assertNoText(t('Syndicate'), 'Drawer of disabled blocks excludes a block not defined as "administrative".');
-    $this->drupalGet('admin/dashboard/configure');
-    $elements = $this->xpath('//select[@id=:id]//option[@selected="selected"]', array(':id' => 'edit-blocks-comment-recent-region'));
-    $this->assertTrue($elements[0]['value'] == 'dashboard_inactive', 'A block defined as "administrative" defaults to dashboard_inactive.');
-
-    // Now enable the block on the dashboard.
-    $values = array();
-    $values['blocks[comment_recent][region]'] = 'dashboard_main';
-    $this->drupalPost('admin/dashboard/configure', $values, t('Save blocks'));
-    $this->drupalGet('admin/dashboard');
-    $this->assertText(t('Recent comments'), '"Recent comments" was placed on dashboard.');
-    $this->drupalGet('admin/dashboard/drawer');
-    $this->assertNoText(t('Recent comments'), 'Drawer of disabled blocks excludes enabled blocks.');
-  }
-}
diff --git a/modules/dblog/dblog-rtl.css b/modules/dblog/dblog-rtl.css
deleted file mode 100644
index 0fab8d0..0000000
--- a/modules/dblog/dblog-rtl.css
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * @file
- * Right-to-Left styling for the Database Logging module.
- */
-
-.form-item-type,
-.form-item-severity {
-  float: right;
-  padding-right: 0;
-  padding-left: .8em;
-}
diff --git a/modules/dblog/dblog.admin.inc b/modules/dblog/dblog.admin.inc
deleted file mode 100644
index 7c1c0e2..0000000
--- a/modules/dblog/dblog.admin.inc
+++ /dev/null
@@ -1,418 +0,0 @@
-<?php
-
-/**
- * @file
- * Administrative page callbacks for the Database Logging module.
- */
-
-/**
- * Page callback: Displays a listing of database log messages.
- *
- * Messages are truncated at 56 chars. Full-length messages can be viewed on the
- * message details page.
- *
- * @see dblog_clear_log_form()
- * @see dblog_event()
- * @see dblog_filter_form()
- * @see dblog_menu()
- *
- * @ingroup logging_severity_levels
- */
-function dblog_overview() {
-  $filter = dblog_build_filter_query();
-  $rows = array();
-  $classes = array(
-    WATCHDOG_DEBUG     => 'dblog-debug',
-    WATCHDOG_INFO      => 'dblog-info',
-    WATCHDOG_NOTICE    => 'dblog-notice',
-    WATCHDOG_WARNING   => 'dblog-warning',
-    WATCHDOG_ERROR     => 'dblog-error',
-    WATCHDOG_CRITICAL  => 'dblog-critical',
-    WATCHDOG_ALERT     => 'dblog-alert',
-    WATCHDOG_EMERGENCY => 'dblog-emerg',
-  );
-
-  $build['dblog_filter_form'] = drupal_get_form('dblog_filter_form');
-  $build['dblog_clear_log_form'] = drupal_get_form('dblog_clear_log_form');
-
-  $header = array(
-    '', // Icon column.
-    array('data' => t('Type'), 'field' => 'w.type'),
-    array('data' => t('Date'), 'field' => 'w.wid', 'sort' => 'desc'),
-    t('Message'),
-    array('data' => t('User'), 'field' => 'u.name'),
-    array('data' => t('Operations')),
-  );
-
-  $query = db_select('watchdog', 'w')->extend('PagerDefault')->extend('TableSort');
-  $query->leftJoin('users', 'u', 'w.uid = u.uid');
-  $query
-    ->fields('w', array('wid', 'uid', 'severity', 'type', 'timestamp', 'message', 'variables', 'link'))
-    ->addField('u', 'name');
-  if (!empty($filter['where'])) {
-    $query->where($filter['where'], $filter['args']);
-  }
-  $result = $query
-    ->limit(50)
-    ->orderByHeader($header)
-    ->execute();
-
-  foreach ($result as $dblog) {
-    $rows[] = array('data' =>
-      array(
-        // Cells
-        array('class' => 'icon'),
-        t($dblog->type),
-        format_date($dblog->timestamp, 'short'),
-        theme('dblog_message', array('event' => $dblog, 'link' => TRUE)),
-        theme('username', array('account' => $dblog)),
-        filter_xss($dblog->link),
-      ),
-      // Attributes for tr
-      'class' => array(drupal_html_class('dblog-' . $dblog->type), $classes[$dblog->severity]),
-    );
-  }
-
-  $build['dblog_table'] = array(
-    '#theme' => 'table',
-    '#header' => $header,
-    '#rows' => $rows,
-    '#attributes' => array('id' => 'admin-dblog'),
-    '#empty' => t('No log messages available.'),
-  );
-  $build['dblog_pager'] = array('#theme' => 'pager');
-
-  return $build;
-}
-
-/**
- * Page callback: Shows the most frequent log messages of a given event type.
- *
- * Messages are not truncated on this page because events detailed herein do not
- * have links to a detailed view.
- *
- * @param string $type
- *   Type of database log events to display (e.g., 'search').
- *
- * @return array
- *   A build array in the format expected by drupal_render().
- *
- * @see dblog_menu()
- */
-function dblog_top($type) {
-
-  $header = array(
-    array('data' => t('Count'), 'field' => 'count', 'sort' => 'desc'),
-    array('data' => t('Message'), 'field' => 'message')
-  );
-  $count_query = db_select('watchdog');
-  $count_query->addExpression('COUNT(DISTINCT(message))');
-  $count_query->condition('type', $type);
-
-  $query = db_select('watchdog', 'w')->extend('PagerDefault')->extend('TableSort');
-  $query->addExpression('COUNT(wid)', 'count');
-  $query = $query
-    ->fields('w', array('message', 'variables'))
-    ->condition('w.type', $type)
-    ->groupBy('message')
-    ->groupBy('variables')
-    ->limit(30)
-    ->orderByHeader($header);
-  $query->setCountQuery($count_query);
-  $result = $query->execute();
-
-  $rows = array();
-  foreach ($result as $dblog) {
-    $rows[] = array($dblog->count, theme('dblog_message', array('event' => $dblog)));
-  }
-
-  $build['dblog_top_table']  = array(
-    '#theme' => 'table',
-    '#header' => $header,
-    '#rows' => $rows,
-    '#empty' => t('No log messages available.'),
-  );
-  $build['dblog_top_pager'] = array('#theme' => 'pager');
-
-  return $build;
-}
-
-/**
- * Page callback: Displays details about a specific database log message.
- *
- * @param int $id
- *   Unique ID of the database log message.
- *
- * @return array|string
- *   If the ID is located in the Database Logging table, a build array in the
- *   format expected by drupal_render(); otherwise, an empty string.
- *
- * @see dblog_menu()
- */
-function dblog_event($id) {
-  $severity = watchdog_severity_levels();
-  $result = db_query('SELECT w.*, u.name, u.uid FROM {watchdog} w INNER JOIN {users} u ON w.uid = u.uid WHERE w.wid = :id', array(':id' => $id))->fetchObject();
-  if ($dblog = $result) {
-    $rows = array(
-      array(
-        array('data' => t('Type'), 'header' => TRUE),
-        t($dblog->type),
-      ),
-      array(
-        array('data' => t('Date'), 'header' => TRUE),
-        format_date($dblog->timestamp, 'long'),
-      ),
-      array(
-        array('data' => t('User'), 'header' => TRUE),
-        theme('username', array('account' => $dblog)),
-      ),
-      array(
-        array('data' => t('Location'), 'header' => TRUE),
-        l($dblog->location, $dblog->location),
-      ),
-      array(
-        array('data' => t('Referrer'), 'header' => TRUE),
-        l($dblog->referer, $dblog->referer),
-      ),
-      array(
-        array('data' => t('Message'), 'header' => TRUE),
-        theme('dblog_message', array('event' => $dblog)),
-      ),
-      array(
-        array('data' => t('Severity'), 'header' => TRUE),
-        $severity[$dblog->severity],
-      ),
-      array(
-        array('data' => t('Hostname'), 'header' => TRUE),
-        check_plain($dblog->hostname),
-      ),
-      array(
-        array('data' => t('Operations'), 'header' => TRUE),
-        $dblog->link,
-      ),
-    );
-    $build['dblog_table'] = array(
-      '#theme' => 'table',
-      '#rows' => $rows,
-      '#attributes' => array('class' => array('dblog-event')),
-    );
-    return $build;
-  }
-  else {
-    return '';
-  }
-}
-
-/**
- * Builds a query for database log administration filters based on session.
- *
- * @return array
- *   An associative array with keys 'where' and 'args'.
- */
-function dblog_build_filter_query() {
-  if (empty($_SESSION['dblog_overview_filter'])) {
-    return;
-  }
-
-  $filters = dblog_filters();
-
-  // Build query
-  $where = $args = array();
-  foreach ($_SESSION['dblog_overview_filter'] as $key => $filter) {
-    $filter_where = array();
-    foreach ($filter as $value) {
-      $filter_where[] = $filters[$key]['where'];
-      $args[] = $value;
-    }
-    if (!empty($filter_where)) {
-      $where[] = '(' . implode(' OR ', $filter_where) . ')';
-    }
-  }
-  $where = !empty($where) ? implode(' AND ', $where) : '';
-
-  return array(
-    'where' => $where,
-    'args' => $args,
-  );
-}
-
-/**
- * Creates a list of database log administration filters that can be applied.
- *
- * @return array
- *   Associative array of filters. The top-level keys are used as the form
- *   element names for the filters, and the values are arrays with the following
- *   elements:
- *   - title: Title of the filter.
- *   - where: The filter condition.
- *   - options: Array of options for the select list for the filter.
- */
-function dblog_filters() {
-  $filters = array();
-
-  foreach (_dblog_get_message_types() as $type) {
-    $types[$type] = t($type);
-  }
-
-  if (!empty($types)) {
-    $filters['type'] = array(
-      'title' => t('Type'),
-      'where' => "w.type = ?",
-      'options' => $types,
-    );
-  }
-
-  $filters['severity'] = array(
-    'title' => t('Severity'),
-    'where' => 'w.severity = ?',
-    'options' => watchdog_severity_levels(),
-  );
-
-  return $filters;
-}
-
-/**
- * Returns HTML for a log message.
- *
- * @param array $variables
- *   An associative array containing:
- *   - event: An object with at least the message and variables properties.
- *   - link: (optional) Format message as link, event->wid is required.
- *
- * @ingroup themeable
- */
-function theme_dblog_message($variables) {
-  $output = '';
-  $event = $variables['event'];
-  // Check for required properties.
-  if (isset($event->message) && isset($event->variables)) {
-    // Messages without variables or user specified text.
-    if ($event->variables === 'N;') {
-      $output = $event->message;
-    }
-    // Message to translate with injected variables.
-    else {
-      $output = t($event->message, unserialize($event->variables));
-    }
-    if ($variables['link'] && isset($event->wid)) {
-      // Truncate message to 56 chars.
-      $output = truncate_utf8(filter_xss($output, array()), 56, TRUE, TRUE);
-      $output = l($output, 'admin/reports/event/' . $event->wid, array('html' => TRUE));
-    }
-  }
-  return $output;
-}
-
-/**
- * Form constructor for the database logging filter form.
- *
- * @see dblog_filter_form_validate()
- * @see dblog_filter_form_submit()
- * @see dblog_overview()
- *
- * @ingroup forms
- */
-function dblog_filter_form($form) {
-  $filters = dblog_filters();
-
-  $form['filters'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Filter log messages'),
-    '#collapsible' => TRUE,
-    '#collapsed' => empty($_SESSION['dblog_overview_filter']),
-  );
-  foreach ($filters as $key => $filter) {
-    $form['filters']['status'][$key] = array(
-      '#title' => $filter['title'],
-      '#type' => 'select',
-      '#multiple' => TRUE,
-      '#size' => 8,
-      '#options' => $filter['options'],
-    );
-    if (!empty($_SESSION['dblog_overview_filter'][$key])) {
-      $form['filters']['status'][$key]['#default_value'] = $_SESSION['dblog_overview_filter'][$key];
-    }
-  }
-
-  $form['filters']['actions'] = array(
-    '#type' => 'actions',
-    '#attributes' => array('class' => array('container-inline')),
-  );
-  $form['filters']['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Filter'),
-  );
-  if (!empty($_SESSION['dblog_overview_filter'])) {
-    $form['filters']['actions']['reset'] = array(
-      '#type' => 'submit',
-      '#value' => t('Reset')
-    );
-  }
-  return $form;
-}
-
-/**
- * Form validation handler for dblog_filter_form().
- *
- * @see dblog_filter_form_submit()
- */
-function dblog_filter_form_validate($form, &$form_state) {
-  if ($form_state['values']['op'] == t('Filter') && empty($form_state['values']['type']) && empty($form_state['values']['severity'])) {
-    form_set_error('type', t('You must select something to filter by.'));
-  }
-}
-
-/**
- * Form submission handler for dblog_filter_form().
- *
- * @see dblog_filter_form_validate()
- */
-function dblog_filter_form_submit($form, &$form_state) {
-  $op = $form_state['values']['op'];
-  $filters = dblog_filters();
-  switch ($op) {
-    case t('Filter'):
-      foreach ($filters as $name => $filter) {
-        if (isset($form_state['values'][$name])) {
-          $_SESSION['dblog_overview_filter'][$name] = $form_state['values'][$name];
-        }
-      }
-      break;
-    case t('Reset'):
-      $_SESSION['dblog_overview_filter'] = array();
-      break;
-  }
-  return 'admin/reports/dblog';
-}
-
-/**
- * Form constructor for the form that clears out the log.
- *
- * @see dblog_clear_log_submit()
- * @ingroup forms
- */
-function dblog_clear_log_form($form) {
-  $form['dblog_clear'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Clear log messages'),
-    '#description' => t('This will permanently remove the log messages from the database.'),
-    '#collapsible' => TRUE,
-    '#collapsed' => TRUE,
-  );
-  $form['dblog_clear']['clear'] = array(
-    '#type' => 'submit',
-    '#value' => t('Clear log messages'),
-    '#submit' => array('dblog_clear_log_submit'),
-  );
-
-  return $form;
-}
-
-/**
- * Form submission handler for dblog_clear_log_form().
- */
-function dblog_clear_log_submit() {
-  $_SESSION['dblog_overview_filter'] = array();
-  db_delete('watchdog')->execute();
-  drupal_set_message(t('Database log cleared.'));
-}
diff --git a/modules/dblog/dblog.css b/modules/dblog/dblog.css
deleted file mode 100644
index b127886..0000000
--- a/modules/dblog/dblog.css
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * @file
- * Admin styles for the Database Logging module.
- */
-
-.form-item-type,
-.form-item-severity {
-  float: left; /* LTR */
-  padding-right: .8em; /* LTR */
-  margin: 0.1em;
-  /**
-   * In Opera 9, DOM elements with the property of "overflow: auto"
-   * will partially hide its contents with unnecessary scrollbars when
-   * its immediate child is floated without an explicit width set.
-   */
-  width: 15em;
-}
-#dblog-filter-form .form-type-select select {
-  width: 100%;
-}
-#dblog-filter-form .form-actions {
-  float: left;
-  padding: 3ex 0 0 1em;
-}
-
-tr.dblog-user {
-  background: #ffd;
-}
-tr.dblog-user .active {
-  background: #eed;
-}
-tr.dblog-content {
-  background: #ddf;
-}
-tr.dblog-content .active {
-  background: #cce;
-}
-tr.dblog-page-not-found,
-tr.dblog-access-denied {
-  background: #dfd;
-}
-tr.dblog-page-not-found .active,
-tr.dblog-access-denied .active {
-  background: #cec;
-}
-tr.dblog-error {
-  background: #ffc9c9;
-}
-tr.dblog-error .active {
-  background: #eeb9b9;
-}
-table#admin-dblog td.icon {
-  background: no-repeat center;
-  width: 16px;
-}
-table#admin-dblog tr.dblog-warning td.icon {
-  background-image: url(../../misc/message-16-warning.png);
-}
-table#admin-dblog tr.dblog-error td.icon,
-table#admin-dblog tr.dblog-critical td.icon,
-table#admin-dblog tr.dblog-alert td.icon,
-table#admin-dblog tr.dblog-emerg td.icon {
-  background-image: url(../../misc/message-16-error.png);
-}
diff --git a/modules/dblog/dblog.info b/modules/dblog/dblog.info
deleted file mode 100644
index 608bdd7..0000000
--- a/modules/dblog/dblog.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = Database logging
-description = Logs and records system events to the database.
-package = Core
-version = VERSION
-core = 7.x
-files[] = dblog.test
diff --git a/modules/dblog/dblog.install b/modules/dblog/dblog.install
deleted file mode 100644
index abfd9a2..0000000
--- a/modules/dblog/dblog.install
+++ /dev/null
@@ -1,159 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the dblog module.
- */
-
-/**
- * Implements hook_schema().
- */
-function dblog_schema() {
-  $schema['watchdog'] = array(
-    'description' => 'Table that contains logs of all system events.',
-    'fields' => array(
-      'wid' => array(
-        'type' => 'serial',
-        'not null' => TRUE,
-        'description' => 'Primary Key: Unique watchdog event ID.',
-      ),
-      'uid' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The {users}.uid of the user who triggered the event.',
-      ),
-      'type' => array(
-        'type' => 'varchar',
-        'length' => 64,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Type of log message, for example "user" or "page not found."',
-      ),
-      'message' => array(
-        'type' => 'text',
-        'not null' => TRUE,
-        'size' => 'big',
-        'description' => 'Text of log message to be passed into the t() function.',
-      ),
-      'variables' => array(
-        'type' => 'blob',
-        'not null' => TRUE,
-        'size' => 'big',
-        'description' => 'Serialized array of variables that match the message string and that is passed into the t() function.',
-      ),
-      'severity' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'size' => 'tiny',
-        'description' => 'The severity level of the event; ranges from 0 (Emergency) to 7 (Debug)',
-      ),
-      'link' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => FALSE,
-        'default' => '',
-        'description' => 'Link to view the result of the event.',
-      ),
-      'location'  => array(
-        'type' => 'text',
-        'not null' => TRUE,
-        'description' => 'URL of the origin of the event.',
-      ),
-      'referer' => array(
-        'type' => 'text',
-        'not null' => FALSE,
-        'description' => 'URL of referring page.',
-      ),
-      'hostname' => array(
-        'type' => 'varchar',
-        'length' => 128,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Hostname of the user who triggered the event.',
-      ),
-      'timestamp' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Unix timestamp of when event occurred.',
-      ),
-    ),
-    'primary key' => array('wid'),
-    'indexes' => array(
-      'type' => array('type'),
-      'uid' => array('uid'),
-      'severity' => array('severity'),
-    ),
-  );
-
-  return $schema;
-}
-
-/**
- * Implements hook_uninstall().
- */
-function dblog_uninstall() {
-  variable_del('dblog_row_limit');
-}
-
-/**
- * @addtogroup updates-6.x-to-7.x
- * @{
- */
-
-/**
- * Update the {watchdog} table.
- */
-function dblog_update_7001() {
-  // Allow NULL values for links.
-  db_change_field('watchdog', 'link', 'link', array(
-    'type' => 'varchar',
-    'length' => 255,
-    'not null' => FALSE,
-    'default' => '',
-    'description' => 'Link to view the result of the event.',
-  ));
-
-  // Add an index on uid.
-  db_add_index('watchdog', 'uid', array('uid'));
-
-  // Allow longer type values.
-  db_change_field('watchdog', 'type', 'type', array(
-    'type' => 'varchar',
-    'length' => 64,
-    'not null' => TRUE,
-    'default' => '',
-    'description' => 'Type of log message, for example "user" or "page not found."',
-  ));
-
-  // Convert the variables field (that stores serialized variables) from text to blob.
-  db_change_field('watchdog', 'variables', 'variables', array(
-    'type' => 'blob',
-    'not null' => TRUE,
-    'size' => 'big',
-    'description' => 'Serialized array of variables that match the message string and that is passed into the t() function.',
-  ));
-}
-
-/**
- * @} End of "addtogroup updates-6.x-to-7.x".
- */
-
-/**
- * @addtogroup updates-7.x-extra
- * @{
- */
-
-/**
- * Add an index to the severity column in the watchdog database table.
- */
-function dblog_update_7002() {
-  db_add_index('watchdog', 'severity', array('severity'));
-}
-
-/**
- * @} End of "addtogroup updates-7.x-extra".
- */
diff --git a/modules/dblog/dblog.module b/modules/dblog/dblog.module
deleted file mode 100644
index 9183eed..0000000
--- a/modules/dblog/dblog.module
+++ /dev/null
@@ -1,187 +0,0 @@
-<?php
-
-/**
- * @file
- * System monitoring and logging for administrators.
- *
- * The Database Logging module monitors your site and keeps a list of recorded
- * events containing usage and performance data, errors, warnings, and similar
- * operational information.
- *
- * @see watchdog()
- */
-
-/**
- * Implements hook_help().
- */
-function dblog_help($path, $arg) {
-  switch ($path) {
-    case 'admin/help#dblog':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Database logging module logs system events in the Drupal database. For more information, see the online handbook entry for the <a href="@dblog">Database logging module</a>.', array('@dblog' => 'http://drupal.org/documentation/modules/dblog')) . '</p>';
-      $output .= '<h3>' . t('Uses') . '</h3>';
-      $output .= '<dl>';
-      $output .= '<dt>' . t('Monitoring your site') . '</dt>';
-      $output .= '<dd>' . t('The Database logging module allows you to view an event log on the <a href="@dblog">Recent log messages</a> page. The log is a chronological list of recorded events containing usage data, performance data, errors, warnings and operational information. Administrators should check the log on a regular basis to ensure their site is working properly.', array('@dblog' => url('admin/reports/dblog'))) . '</dd>';
-      $output .= '<dt>' . t('Debugging site problems') . '</dt>';
-      $output .= '<dd>' . t('In case of errors or problems with the site, the <a href="@dblog">Recent log messages</a> page can be useful for debugging, since it shows the sequence of events. The log messages include usage information, warnings, and errors.', array('@dblog' => url('admin/reports/dblog'))) . '</dd>';
-      $output .= '</dl>';
-      return $output;
-    case 'admin/reports/dblog':
-      return '<p>' . t('The Database logging module monitors your website, capturing system events in a log (shown here) to be reviewed by an authorized individual at a later time. This log is a list of recorded events containing usage data, performance data, errors, warnings and operational information. It is vital to check the Recent log messages report on a regular basis, as it is often the only way to tell what is going on.') . '</p>';
-  }
-}
-
-/**
- * Implements hook_menu().
- */
-function dblog_menu() {
-  $items['admin/reports/dblog'] = array(
-    'title' => 'Recent log messages',
-    'description' => 'View events that have recently been logged.',
-    'page callback' => 'dblog_overview',
-    'access arguments' => array('access site reports'),
-    'weight' => -1,
-    'file' => 'dblog.admin.inc',
-  );
-  $items['admin/reports/page-not-found'] = array(
-    'title' => "Top 'page not found' errors",
-    'description' => "View 'page not found' errors (404s).",
-    'page callback' => 'dblog_top',
-    'page arguments' => array('page not found'),
-    'access arguments' => array('access site reports'),
-    'file' => 'dblog.admin.inc',
-  );
-  $items['admin/reports/access-denied'] = array(
-    'title' => "Top 'access denied' errors",
-    'description' => "View 'access denied' errors (403s).",
-    'page callback' => 'dblog_top',
-    'page arguments' => array('access denied'),
-    'access arguments' => array('access site reports'),
-    'file' => 'dblog.admin.inc',
-  );
-  $items['admin/reports/event/%'] = array(
-    'title' => 'Details',
-    'page callback' => 'dblog_event',
-    'page arguments' => array(3),
-    'access arguments' => array('access site reports'),
-    'file' => 'dblog.admin.inc',
-  );
-
-  if (module_exists('search')) {
-    $items['admin/reports/search'] = array(
-      'title' => 'Top search phrases',
-      'description' => 'View most popular search phrases.',
-      'page callback' => 'dblog_top',
-      'page arguments' => array('search'),
-      'access arguments' => array('access site reports'),
-      'file' => 'dblog.admin.inc',
-    );
-  }
-
-  return $items;
-}
-
-/**
- * Implements hook_init().
- */
-function dblog_init() {
-  if (arg(0) == 'admin' && arg(1) == 'reports') {
-    // Add the CSS for this module
-    drupal_add_css(drupal_get_path('module', 'dblog') . '/dblog.css');
-  }
-}
-
-/**
- * Implements hook_cron().
- *
- * Controls the size of the log table, paring it to 'dblog_row_limit' messages.
- */
-function dblog_cron() {
-  // Cleanup the watchdog table.
-  $row_limit = variable_get('dblog_row_limit', 1000);
-
-  // For row limit n, get the wid of the nth row in descending wid order.
-  // Counting the most recent n rows avoids issues with wid number sequences,
-  // e.g. auto_increment value > 1 or rows deleted directly from the table.
-  if ($row_limit > 0) {
-    $min_row = db_select('watchdog', 'w')
-      ->fields('w', array('wid'))
-      ->orderBy('wid', 'DESC')
-      ->range($row_limit - 1, 1)
-      ->execute()->fetchField();
-
-    // Delete all table entries older than the nth row, if nth row was found.
-    if ($min_row) {
-      db_delete('watchdog')
-        ->condition('wid', $min_row, '<')
-        ->execute();
-    }
-  }
-}
-
-/**
- * Gathers a list of uniquely defined database log message types.
- *
- * @return array
- *   List of uniquely defined database log message types.
- */
-function _dblog_get_message_types() {
-  $types = array();
-
-  $result = db_query('SELECT DISTINCT(type) FROM {watchdog} ORDER BY type');
-  foreach ($result as $object) {
-    $types[] = $object->type;
-  }
-
-  return $types;
-}
-
-/**
- * Implements hook_watchdog().
- *
- * Note: Some values may be truncated to meet database column size restrictions.
- */
-function dblog_watchdog(array $log_entry) {
-  Database::getConnection('default', 'default')->insert('watchdog')
-    ->fields(array(
-      'uid' => $log_entry['uid'],
-      'type' => substr($log_entry['type'], 0, 64),
-      'message' => $log_entry['message'],
-      'variables' => serialize($log_entry['variables']),
-      'severity' => $log_entry['severity'],
-      'link' => substr($log_entry['link'], 0, 255),
-      'location' => $log_entry['request_uri'],
-      'referer' => $log_entry['referer'],
-      'hostname' => substr($log_entry['ip'], 0, 128),
-      'timestamp' => $log_entry['timestamp'],
-    ))
-    ->execute();
-}
-
-/**
- * Implements hook_form_FORM_ID_alter() for system_logging_settings().
- */
-function dblog_form_system_logging_settings_alter(&$form, $form_state) {
-  $form['dblog_row_limit'] = array(
-    '#type' => 'select',
-    '#title' => t('Database log messages to keep'),
-    '#default_value' => variable_get('dblog_row_limit', 1000),
-    '#options' => array(0 => t('All')) + drupal_map_assoc(array(100, 1000, 10000, 100000, 1000000)),
-    '#description' => t('The maximum number of messages to keep in the database log. Requires a <a href="@cron">cron maintenance task</a>.', array('@cron' => url('admin/reports/status')))
-  );
-  $form['actions']['#weight'] = 1;
-}
-
-/**
- * Implements hook_theme().
- */
-function dblog_theme() {
-  return array(
-    'dblog_message' => array(
-      'variables' => array('event' => NULL, 'link' => FALSE),
-      'file' => 'dblog.admin.inc',
-    ),
-  );
-}
diff --git a/modules/field/field.default.inc b/modules/field/field.default.inc
deleted file mode 100644
index cb49bdb..0000000
--- a/modules/field/field.default.inc
+++ /dev/null
@@ -1,268 +0,0 @@
-<?php
-
-/**
- * @file
- * Default 'implementations' of hook_field_*(): common field housekeeping.
- *
- * Those implementations are special, as field.module does not define any field
- * types. Those functions take care of default stuff common to all field types.
- * They are called through the _field_invoke_default() iterator, generally in
- * the corresponding field_attach_[operation]() function.
- */
-
-/**
- * Extracts field values from submitted form values.
- *
- * @param $entity_type
- *   The type of $entity.
- * @param $entity
- *   The entity for the operation.
- * @param $field
- *   The field structure for the operation.
- * @param $instance
- *   The instance structure for $field on $entity's bundle.
- * @param $langcode
- *   The language associated to $items.
- * @param $items
- *   The field values. This parameter is altered by reference to receive the
- *   incoming form values.
- * @param $form
- *   The form structure where field elements are attached to. This might be a
- *   full form structure, or a sub-element of a larger form.
- * @param $form_state
- *   The form state.
- */
-function field_default_extract_form_values($entity_type, $entity, $field, $instance, $langcode, &$items, $form, &$form_state) {
-  $path = array_merge($form['#parents'], array($field['field_name'], $langcode));
-  $key_exists = NULL;
-  $values = drupal_array_get_nested_value($form_state['values'], $path, $key_exists);
-  if ($key_exists) {
-    // Remove the 'value' of the 'add more' button.
-    unset($values['add_more']);
-    $items = $values;
-  }
-}
-
-/**
- * Generic field validation handler.
- *
- * Possible error codes:
- * - 'field_cardinality': The number of values exceeds the field cardinality.
- *
- * @see _hook_field_validate()
- *
- * @param $entity_type
- *   The type of $entity.
- * @param $entity
- *   The entity for the operation.
- * @param $field
- *   The field structure for the operation.
- * @param $instance
- *   The instance structure for $field on $entity's bundle.
- * @param $langcode
- *   The language associated to $items.
- * @param $items
- *   $entity->{$field['field_name']}[$langcode], or an empty array if unset.
- * @param $errors
- *   The array of errors, keyed by field name and by value delta, that have
- *   already been reported for the entity. The function should add its errors
- *   to this array. Each error is an associative array, with the following
- *   keys and values:
- *   - 'error': an error code (should be a string, prefixed with the module name)
- *   - 'message': the human readable message to be displayed.
- */
-function field_default_validate($entity_type, $entity, $field, $instance, $langcode, $items, &$errors) {
-  // Filter out empty values.
-  $items = _field_filter_items($field, $items);
-
-  // Check that the number of values doesn't exceed the field cardinality.
-  // For form submitted values, this can only happen with 'multiple value'
-  // widgets.
-  if ($field['cardinality'] != FIELD_CARDINALITY_UNLIMITED && count($items) > $field['cardinality']) {
-    $errors[$field['field_name']][$langcode][0][] = array(
-      'error' => 'field_cardinality',
-      'message' => t('%name: this field cannot hold more than @count values.', array('%name' => $instance['label'], '@count' => $field['cardinality'])),
-    );
-  }
-}
-
-function field_default_submit($entity_type, $entity, $field, $instance, $langcode, &$items, $form, &$form_state) {
-  // Filter out empty values.
-  $items = _field_filter_items($field, $items);
-  // Reorder items to account for drag-n-drop reordering.
-  $items = _field_sort_items($field, $items);
-}
-
-/**
- * Default field 'insert' operation.
- *
- * Insert default value if no $entity->$field_name entry was provided.
- * This can happen with programmatic saves, or on form-based creation where
- * the current user doesn't have 'edit' permission for the field.
- */
-function field_default_insert($entity_type, $entity, $field, $instance, $langcode, &$items) {
-  // _field_invoke() populates $items with an empty array if the $entity has no
-  // entry for the field, so we check on the $entity itself.
-  // We also check that the current field translation is actually defined before
-  // assigning it a default value. This way we ensure that only the intended
-  // languages get a default value. Otherwise we could have default values for
-  // not yet open languages.
-  if (empty($entity) || !property_exists($entity, $field['field_name']) ||
-    (isset($entity->{$field['field_name']}[$langcode]) && count($entity->{$field['field_name']}[$langcode]) == 0)) {
-    $items = field_get_default_value($entity_type, $entity, $field, $instance, $langcode);
-  }
-}
-
-/**
- * Invokes hook_field_formatter_prepare_view() on the relevant formatters.
- *
- * @param $entity_type
- *   The type of $entity; e.g. 'node' or 'user'.
- * @param $entities
- *   An array of entities being displayed, keyed by entity id.
- * @param $field
- *   The field structure for the operation.
- * @param $instances
- *   Array of instance structures for $field for each entity, keyed by entity
- *   id.
- * @param $langcode
- *   The language associated to $items.
- * @param $items
- *   Array of field values already loaded for the entities, keyed by entity id.
- * @param $display
- *   Can be either:
- *   - the name of a view mode
- *   - or an array of display settings to use for display, as found in the
- *     'display' entry of $instance definitions.
- */
-function field_default_prepare_view($entity_type, $entities, $field, $instances, $langcode, &$items, $display) {
-  // Group entities, instances and items by formatter module.
-  $modules = array();
-  foreach ($instances as $id => $instance) {
-    if (is_string($display)) {
-      $view_mode = $display;
-      $instance_display = field_get_display($instance, $view_mode, $entities[$id]);
-    }
-    else {
-      $instance_display = $display;
-    }
-
-    if ($instance_display['type'] !== 'hidden') {
-      $module = $instance_display['module'];
-      $modules[$module] = $module;
-      $grouped_entities[$module][$id] = $entities[$id];
-      $grouped_instances[$module][$id] = $instance;
-      $grouped_displays[$module][$id] = $instance_display;
-      // hook_field_formatter_prepare_view() alters $items by reference.
-      $grouped_items[$module][$id] = &$items[$id];
-    }
-  }
-
-  foreach ($modules as $module) {
-    // Invoke hook_field_formatter_prepare_view().
-    $function = $module . '_field_formatter_prepare_view';
-    if (function_exists($function)) {
-      $function($entity_type, $grouped_entities[$module], $field, $grouped_instances[$module], $langcode, $grouped_items[$module], $grouped_displays[$module]);
-    }
-  }
-}
-
-/**
- * Builds a renderable array for one field on one entity instance.
- *
- * @param $entity_type
- *   The type of $entity; e.g. 'node' or 'user'.
- * @param $entity
- *   A single object of type $entity_type.
- * @param $field
- *   The field structure for the operation.
- * @param $instance
- *   An array containing each field on $entity's bundle.
- * @param $langcode
- *   The language associated to $items.
- * @param $items
- *   Array of field values already loaded for the entities, keyed by entity id.
- * @param $display
- *   Can be either:
- *   - the name of a view mode;
- *   - or an array of custom display settings, as found in the 'display' entry
- *     of $instance definitions.
- */
-function field_default_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
-  list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
-
-  $addition = array();
-
-  // Prepare incoming display specifications.
-  if (is_string($display)) {
-    $view_mode = $display;
-    $display = field_get_display($instance, $view_mode, $entity);
-  }
-  else {
-    $view_mode = '_custom_display';
-  }
-
-  if ($display['type'] !== 'hidden') {
-    // Calling the formatter function through module_invoke() can have a
-    // performance impact on pages with many fields and values.
-    $function = $display['module'] . '_field_formatter_view';
-    if (function_exists($function)) {
-      $elements = $function($entity_type, $entity, $field, $instance, $langcode, $items, $display);
-
-      if ($elements) {
-        $info = array(
-          '#theme' => 'field',
-          '#weight' => $display['weight'],
-          '#title' => $instance['label'],
-          '#access' => field_access('view', $field, $entity_type, $entity),
-          '#label_display' => $display['label'],
-          '#view_mode' => $view_mode,
-          '#language' => $langcode,
-          '#field_name' => $field['field_name'],
-          '#field_type' => $field['type'],
-          '#field_translatable' => $field['translatable'],
-          '#entity_type' => $entity_type,
-          '#bundle' => $bundle,
-          '#object' => $entity,
-          '#items' => $items,
-          '#formatter' => $display['type']
-        );
-
-        $addition[$field['field_name']] = array_merge($info, $elements);
-      }
-    }
-  }
-
-  return $addition;
-}
-
-/**
- * Copies source field values into the entity to be prepared.
- *
- * @param $entity_type
- *   The type of $entity; e.g. 'node' or 'user'.
- * @param $entity
- *   The entity to be prepared for translation.
- * @param $field
- *   The field structure for the operation.
- * @param $instance
- *   The instance structure for $field on $entity's bundle.
- * @param $langcode
- *   The language the entity has to be translated in.
- * @param $items
- *   $entity->{$field['field_name']}[$langcode], or an empty array if unset.
- * @param $source_entity
- *   The source entity holding the field values to be translated.
- * @param $source_langcode
- *   The source language from which translate.
- */
-function field_default_prepare_translation($entity_type, $entity, $field, $instance, $langcode, &$items, $source_entity, $source_langcode) {
-  $field_name = $field['field_name'];
-  // If the field is untranslatable keep using LANGUAGE_NONE.
-  if ($langcode == LANGUAGE_NONE) {
-    $source_langcode = LANGUAGE_NONE;
-  }
-  if (isset($source_entity->{$field_name}[$source_langcode])) {
-    $items = $source_entity->{$field_name}[$source_langcode];
-  }
-}
diff --git a/modules/field/field.form.inc b/modules/field/field.form.inc
deleted file mode 100644
index 280f778..0000000
--- a/modules/field/field.form.inc
+++ /dev/null
@@ -1,604 +0,0 @@
-<?php
-
-/**
- * @file
- * Field forms management.
- */
-
-/**
- * Creates a form element for a field and can populate it with a default value.
- *
- * If the form element is not associated with an entity (i.e., $entity is NULL)
- * field_get_default_value will be called to supply the default value for the
- * field. Also allows other modules to alter the form element by implementing
- * their own hooks.
- *
- * @param $entity_type
- *   The type of entity (for example 'node' or 'user') that the field belongs
- *   to.
- * @param $entity
- *   The entity object that the field belongs to. This may be NULL if creating a
- *   form element with a default value.
- * @param $field
- *   An array representing the field whose editing element is being created.
- * @param $instance
- *   An array representing the structure for $field in its current context.
- * @param $langcode
- *   The language associated with the field.
- * @param $items
- *   An array of the field values. When creating a new entity this may be NULL
- *   or an empty array to use default values.
- * @param $form
- *   An array representing the form that the editing element will be attached
- *   to. 
- * @param $form_state
- *   An array containing the current state of the form.
- * @param $get_delta
- *   Used to get only a specific delta value of a multiple value field.
- *
- * @return
- *  The form element array created for this field.
- */
-function field_default_form($entity_type, $entity, $field, $instance, $langcode, $items, &$form, &$form_state, $get_delta = NULL) {
-  // This could be called with no entity, as when a UI module creates a
-  // dummy form to set default values.
-  if ($entity) {
-    list($id, , ) = entity_extract_ids($entity_type, $entity);
-  }
-
-  $parents = $form['#parents'];
-
-  $addition = array();
-  $field_name = $field['field_name'];
-  $addition[$field_name] = array();
-
-  // Populate widgets with default values when creating a new entity.
-  if (empty($items) && empty($id)) {
-    $items = field_get_default_value($entity_type, $entity, $field, $instance, $langcode);
-  }
-
-  // Let modules alter the widget properties.
-  $context = array(
-    'entity_type' => $entity_type,
-    'entity' => $entity,
-    'field' => $field,
-    'instance' => $instance,
-  );
-  drupal_alter(array('field_widget_properties', 'field_widget_properties_' . $entity_type), $instance['widget'], $context);
-
-  // Collect widget elements.
-  $elements = array();
-
-  // Store field information in $form_state.
-  if (!field_form_get_state($parents, $field_name, $langcode, $form_state)) {
-    $field_state = array(
-      'field' => $field,
-      'instance' => $instance,
-      'items_count' => count($items),
-      'array_parents' => array(),
-      'errors' => array(),
-    );
-    field_form_set_state($parents, $field_name, $langcode, $form_state, $field_state);
-  }
-
-  // If field module handles multiple values for this form element, and we are
-  // displaying an individual element, process the multiple value form.
-  if (!isset($get_delta) && field_behaviors_widget('multiple values', $instance) == FIELD_BEHAVIOR_DEFAULT) {
-    // Store the entity in the form.
-    $form['#entity'] = $entity;
-    $elements = field_multiple_value_form($field, $instance, $langcode, $items, $form, $form_state);
-  }
-  // If the widget is handling multiple values (e.g Options), or if we are
-  // displaying an individual element, just get a single form element and make
-  // it the $delta value.
-  else {
-    $delta = isset($get_delta) ? $get_delta : 0;
-    $function = $instance['widget']['module'] . '_field_widget_form';
-    if (function_exists($function)) {
-      $element = array(
-        '#entity' => $entity,
-        '#entity_type' => $instance['entity_type'],
-        '#bundle' => $instance['bundle'],
-        '#field_name' => $field_name,
-        '#language' => $langcode,
-        '#field_parents' => $parents,
-        '#columns' => array_keys($field['columns']),
-        '#title' => check_plain($instance['label']),
-        '#description' => field_filter_xss($instance['description']),
-        // Only the first widget should be required.
-        '#required' => $delta == 0 && $instance['required'],
-        '#delta' => $delta,
-      );
-      if ($element = $function($form, $form_state, $field, $instance, $langcode, $items, $delta, $element)) {
-        // Allow modules to alter the field widget form element.
-        $context = array(
-          'form' => $form,
-          'field' => $field,
-          'instance' => $instance,
-          'langcode' => $langcode,
-          'items' => $items,
-          'delta' => $delta,
-        );
-        drupal_alter(array('field_widget_form', 'field_widget_' . $instance['widget']['type'] . '_form'), $element, $form_state, $context);
-
-        // If we're processing a specific delta value for a field where the
-        // field module handles multiples, set the delta in the result.
-        // For fields that handle their own processing, we can't make
-        // assumptions about how the field is structured, just merge in the
-        // returned element.
-        if (field_behaviors_widget('multiple values', $instance) == FIELD_BEHAVIOR_DEFAULT) {
-          $elements[$delta] = $element;
-        }
-        else {
-          $elements = $element;
-        }
-      }
-    }
-  }
-
-  // Also aid in theming of field widgets by rendering a classified container.
-  $addition[$field_name] = array(
-    '#type' => 'container',
-    '#attributes' => array(
-      'class' => array(
-        'field-type-' . drupal_html_class($field['type']),
-        'field-name-' . drupal_html_class($field_name),
-        'field-widget-' . drupal_html_class($instance['widget']['type']),
-      ),
-    ),
-    '#weight' => $instance['widget']['weight'],
-  );
-
-  // Populate the 'array_parents' information in $form_state['field'] after
-  // the form is built, so that we catch changes in the form structure performed
-  // in alter() hooks.
-  $elements['#after_build'][] = 'field_form_element_after_build';
-  $elements['#field_name'] = $field_name;
-  $elements['#language'] = $langcode;
-  $elements['#field_parents'] = $parents;
-
-  $addition[$field_name] += array(
-    '#tree' => TRUE,
-    // The '#language' key can be used to access the field's form element
-    // when $langcode is unknown.
-    '#language' => $langcode,
-    $langcode => $elements,
-    '#access' => field_access('edit', $field, $entity_type, $entity),
-  );
-
-  return $addition;
-}
-
-/**
- * Special handling to create form elements for multiple values.
- *
- * Handles generic features for multiple fields:
- * - number of widgets
- * - AHAH-'add more' button
- * - drag-n-drop value reordering
- */
-function field_multiple_value_form($field, $instance, $langcode, $items, &$form, &$form_state) {
-  $field_name = $field['field_name'];
-  $parents = $form['#parents'];
-
-  // Determine the number of widgets to display.
-  switch ($field['cardinality']) {
-    case FIELD_CARDINALITY_UNLIMITED:
-      $field_state = field_form_get_state($parents, $field_name, $langcode, $form_state);
-      $max = $field_state['items_count'];
-      break;
-
-    default:
-      $max = $field['cardinality'] - 1;
-      break;
-  }
-
-  $title = check_plain($instance['label']);
-  $description = field_filter_xss($instance['description']);
-
-  $id_prefix = implode('-', array_merge($parents, array($field_name)));
-  $wrapper_id = drupal_html_id($id_prefix . '-add-more-wrapper');
-
-  $field_elements = array();
-
-  $function = $instance['widget']['module'] . '_field_widget_form';
-  if (function_exists($function)) {
-    for ($delta = 0; $delta <= $max; $delta++) {
-      $multiple = $field['cardinality'] > 1 || $field['cardinality'] == FIELD_CARDINALITY_UNLIMITED;
-      $element = array(
-        '#entity_type' => $instance['entity_type'],
-        '#entity' => $form['#entity'],
-        '#bundle' => $instance['bundle'],
-        '#field_name' => $field_name,
-        '#language' => $langcode,
-        '#field_parents' => $parents,
-        '#columns' => array_keys($field['columns']),
-        // For multiple fields, title and description are handled by the wrapping table.
-        '#title' => $multiple ? '' : $title,
-        '#description' => $multiple ? '' : $description,
-        // Only the first widget should be required.
-        '#required' => $delta == 0 && $instance['required'],
-        '#delta' => $delta,
-        '#weight' => $delta,
-      );
-      if ($element = $function($form, $form_state, $field, $instance, $langcode, $items, $delta, $element)) {
-        // Input field for the delta (drag-n-drop reordering).
-        if ($multiple) {
-          // We name the element '_weight' to avoid clashing with elements
-          // defined by widget.
-          $element['_weight'] = array(
-            '#type' => 'weight',
-            '#title' => t('Weight for row @number', array('@number' => $delta + 1)),
-            '#title_display' => 'invisible',
-             // Note: this 'delta' is the FAPI 'weight' element's property.
-            '#delta' => $max,
-            '#default_value' => isset($items[$delta]['_weight']) ? $items[$delta]['_weight'] : $delta,
-            '#weight' => 100,
-          );
-        }
-
-        // Allow modules to alter the field widget form element.
-        $context = array(
-          'form' => $form,
-          'field' => $field,
-          'instance' => $instance,
-          'langcode' => $langcode,
-          'items' => $items,
-          'delta' => $delta,
-        );
-        drupal_alter(array('field_widget_form', 'field_widget_' . $instance['widget']['type'] . '_form'), $element, $form_state, $context);
-
-        $field_elements[$delta] = $element;
-      }
-    }
-
-    if ($field_elements) {
-      $field_elements += array(
-        '#theme' => 'field_multiple_value_form',
-        '#field_name' => $field['field_name'],
-        '#cardinality' => $field['cardinality'],
-        '#title' => $title,
-        '#required' => $instance['required'],
-        '#description' => $description,
-        '#prefix' => '<div id="' . $wrapper_id . '">',
-        '#suffix' => '</div>',
-        '#max_delta' => $max,
-      );
-      // Add 'add more' button, if not working with a programmed form.
-      if ($field['cardinality'] == FIELD_CARDINALITY_UNLIMITED && empty($form_state['programmed'])) {
-        $field_elements['add_more'] = array(
-          '#type' => 'submit',
-          '#name' => strtr($id_prefix, '-', '_') . '_add_more',
-          '#value' => t('Add another item'),
-          '#attributes' => array('class' => array('field-add-more-submit')),
-          '#limit_validation_errors' => array(array_merge($parents, array($field_name, $langcode))),
-          '#submit' => array('field_add_more_submit'),
-          '#ajax' => array(
-            'callback' => 'field_add_more_js',
-            'wrapper' => $wrapper_id,
-            'effect' => 'fade',
-          ),
-        );
-      }
-    }
-  }
-
-  return $field_elements;
-}
-
-/**
- * Returns HTML for an individual form element.
- *
- * Combine multiple values into a table with drag-n-drop reordering.
- * TODO : convert to a template.
- *
- * @param $variables
- *   An associative array containing:
- *   - element: A render element representing the form element.
- *
- * @ingroup themeable
- */
-function theme_field_multiple_value_form($variables) {
-  $element = $variables['element'];
-  $output = '';
-
-  if ($element['#cardinality'] > 1 || $element['#cardinality'] == FIELD_CARDINALITY_UNLIMITED) {
-    $table_id = drupal_html_id($element['#field_name'] . '_values');
-    $order_class = $element['#field_name'] . '-delta-order';
-    $required = !empty($element['#required']) ? theme('form_required_marker', $variables) : '';
-
-    $header = array(
-      array(
-        'data' => '<label>' . t('!title !required', array('!title' => $element['#title'], '!required' => $required)) . "</label>",
-        'colspan' => 2,
-        'class' => array('field-label'),
-      ),
-      t('Order'),
-    );
-    $rows = array();
-
-    // Sort items according to '_weight' (needed when the form comes back after
-    // preview or failed validation)
-    $items = array();
-    foreach (element_children($element) as $key) {
-      if ($key === 'add_more') {
-        $add_more_button = &$element[$key];
-      }
-      else {
-        $items[] = &$element[$key];
-      }
-    }
-    usort($items, '_field_sort_items_value_helper');
-
-    // Add the items as table rows.
-    foreach ($items as $key => $item) {
-      $item['_weight']['#attributes']['class'] = array($order_class);
-      $delta_element = drupal_render($item['_weight']);
-      $cells = array(
-        array('data' => '', 'class' => array('field-multiple-drag')),
-        drupal_render($item),
-        array('data' => $delta_element, 'class' => array('delta-order')),
-      );
-      $rows[] = array(
-        'data' => $cells,
-        'class' => array('draggable'),
-      );
-    }
-
-    $output = '<div class="form-item">';
-    $output .= theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('id' => $table_id, 'class' => array('field-multiple-table'))));
-    $output .= $element['#description'] ? '<div class="description">' . $element['#description'] . '</div>' : '';
-    $output .= '<div class="clearfix">' . drupal_render($add_more_button) . '</div>';
-    $output .= '</div>';
-
-    drupal_add_tabledrag($table_id, 'order', 'sibling', $order_class);
-  }
-  else {
-    foreach (element_children($element) as $key) {
-      $output .= drupal_render($element[$key]);
-    }
-  }
-
-  return $output;
-}
-
-/**
- * #after_build callback for field elements in a form.
- *
- * This stores the final location of the field within the form structure so
- * that field_default_form_errors() can assign validation errors to the right
- * form element.
- *
- * @see field_default_form_errors()
- */
-function field_form_element_after_build($element, &$form_state) {
-  $parents = $element['#field_parents'];
-  $field_name = $element['#field_name'];
-  $langcode = $element['#language'];
-
-  $field_state = field_form_get_state($parents, $field_name, $langcode, $form_state);
-  $field_state['array_parents'] = $element['#array_parents'];
-  field_form_set_state($parents, $field_name, $langcode, $form_state, $field_state);
-
-  return $element;
-}
-
-/**
- * Transfer field-level validation errors to widgets.
- */
-function field_default_form_errors($entity_type, $entity, $field, $instance, $langcode, $items, $form, &$form_state) {
-  $field_state = field_form_get_state($form['#parents'], $field['field_name'], $langcode, $form_state);
-
-  if (!empty($field_state['errors'])) {
-    // Locate the correct element in the form.
-    $element = drupal_array_get_nested_value($form_state['complete form'], $field_state['array_parents']);
-    // Only set errors if the element is accessible.
-    if (!isset($element['#access']) || $element['#access']) {
-      $function = $instance['widget']['module'] . '_field_widget_error';
-      $function_exists = function_exists($function);
-
-      $multiple_widget = field_behaviors_widget('multiple values', $instance) != FIELD_BEHAVIOR_DEFAULT;
-      foreach ($field_state['errors'] as $delta => $delta_errors) {
-        // For multiple single-value widgets, pass errors by delta.
-        // For a multiple-value widget, pass all errors to the main widget.
-        $error_element = $multiple_widget ? $element : $element[$delta];
-        foreach ($delta_errors as $error) {
-          if ($function_exists) {
-            $function($error_element, $error, $form, $form_state);
-          }
-          else {
-            // Make sure that errors are reported (even incorrectly flagged) if
-            // the widget module fails to implement hook_field_widget_error().
-            form_error($error_element, $error['message']);
-          }
-        }
-      }
-      // Reinitialize the errors list for the next submit.
-      $field_state['errors'] = array();
-      field_form_set_state($form['#parents'], $field['field_name'], $langcode, $form_state, $field_state);
-    }
-  }
-}
-
-/**
- * Submit handler for the "Add another item" button of a field form.
- *
- * This handler is run regardless of whether JS is enabled or not. It makes
- * changes to the form state. If the button was clicked with JS disabled, then
- * the page is reloaded with the complete rebuilt form. If the button was
- * clicked with JS enabled, then ajax_form_callback() calls field_add_more_js()
- * to return just the changed part of the form.
- */
-function field_add_more_submit($form, &$form_state) {
-  $button = $form_state['triggering_element'];
-
-  // Go one level up in the form, to the widgets container.
-  $element = drupal_array_get_nested_value($form, array_slice($button['#array_parents'], 0, -1));
-  $field_name = $element['#field_name'];
-  $langcode = $element['#language'];
-  $parents = $element['#field_parents'];
-
-  // Increment the items count.
-  $field_state = field_form_get_state($parents, $field_name, $langcode, $form_state);
-  $field_state['items_count']++;
-  field_form_set_state($parents, $field_name, $langcode, $form_state, $field_state);
-
-  $form_state['rebuild'] = TRUE;
-}
-
-/**
- * Ajax callback in response to a new empty widget being added to the form.
- *
- * This returns the new page content to replace the page content made obsolete
- * by the form submission.
- *
- * @see field_add_more_submit()
- */
-function field_add_more_js($form, $form_state) {
-  $button = $form_state['triggering_element'];
-
-  // Go one level up in the form, to the widgets container.
-  $element = drupal_array_get_nested_value($form, array_slice($button['#array_parents'], 0, -1));
-  $field_name = $element['#field_name'];
-  $langcode = $element['#language'];
-  $parents = $element['#field_parents'];
-
-  $field_state = field_form_get_state($parents, $field_name, $langcode, $form_state);
-
-  $field = $field_state['field'];
-  if ($field['cardinality'] != FIELD_CARDINALITY_UNLIMITED) {
-    return;
-  }
-
-  // Add a DIV around the delta receiving the Ajax effect.
-  $delta = $element['#max_delta'];
-  $element[$delta]['#prefix'] = '<div class="ajax-new-content">' . (isset($element[$delta]['#prefix']) ? $element[$delta]['#prefix'] : '');
-  $element[$delta]['#suffix'] = (isset($element[$delta]['#suffix']) ? $element[$delta]['#suffix'] : '') . '</div>';
-
-  return $element;
-}
-
-/**
- * Retrieves processing information about a field from $form_state.
- *
- * @param $parents
- *   The array of #parents where the field lives in the form.
- * @param $field_name
- *   The field name.
- * @param $langcode
- *   The language in which the field values are entered.
- * @param $form_state
- *   The form state.
- *
- * @return
- *   An array with the following key/data pairs:
- *   - field: the field definition array,
- *   - instance: the field instance definition array,
- *   - items_count: the number of widgets to display for the field,
- *   - array_parents: the location of the field's widgets within the $form
- *     structure. This entry is populated at '#after_build' time.
- *   - errors: the array of field validation errors reported on the field. This
- *     entry is populated at field_attach_form_validate() time.
- *
- * @see field_form_set_state()
- */
-function field_form_get_state($parents, $field_name, $langcode, &$form_state) {
-  $form_state_parents = _field_form_state_parents($parents, $field_name, $langcode);
-  return drupal_array_get_nested_value($form_state, $form_state_parents);
-}
-
-/**
- * Stores processing information about a field in $form_state.
- *
- * @param $parents
- *   The array of #parents where the field lives in the form.
- * @param $field_name
- *   The field name.
- * @param $langcode
- *   The language in which the field values are entered.
- * @param $form_state
- *   The form state.
- * @param $field_state
- *   The array of data to store. See field_form_get_state() for the structure
- *   and content of the array.
- *
- * @see field_form_get_state()
- */
-function field_form_set_state($parents, $field_name, $langcode, &$form_state, $field_state) {
-  $form_state_parents = _field_form_state_parents($parents, $field_name, $langcode);
-  drupal_array_set_nested_value($form_state, $form_state_parents, $field_state);
-}
-
-/**
- * Returns the location of processing information within $form_state.
- */
-function _field_form_state_parents($parents, $field_name, $langcode) {
-  // To ensure backwards compatibility on regular entity forms for widgets that
-  // still access $form_state['field'][$field_name] directly,
-  // - top-level fields (empty $parents) are placed directly under
-  //   $form_state['fields'][$field_name].
-  // - Other fields are placed under
-  //   $form_state['field']['#parents'][...$parents...]['#fields'][$field_name]
-  //   to avoid clashes between field names and $parents parts.
-  // @todo Remove backwards compatibility in Drupal 8, and use a unique
-  // $form_state['field'][...$parents...]['#fields'][$field_name] structure.
-  if (!empty($parents)) {
-    $form_state_parents = array_merge(array('#parents'), $parents, array('#fields'));
-  }
-  else {
-    $form_state_parents = array();
-  }
-  $form_state_parents = array_merge(array('field'), $form_state_parents, array($field_name, $langcode));
-
-  return $form_state_parents;
-}
-
-/**
- * Retrieves the field definition for a widget's helper callbacks.
- *
- * Widgets helper element callbacks (such as #process, #element_validate,
- * #value_callback, ...) should use field_widget_field() and
- * field_widget_instance() instead of field_info_field() and
- * field_info_instance() when they need to access field or instance properties.
- * See hook_field_widget_form() for more details.
- *
- * @param $element
- *   The structured array for the widget.
- * @param $form_state
- *   The form state.
- *
- * @return
- *   The $field definition array for the current widget.
- *
- * @see field_widget_instance()
- * @see hook_field_widget_form()
- */
-function field_widget_field($element, $form_state) {
-  $field_state = field_form_get_state($element['#field_parents'], $element['#field_name'], $element['#language'], $form_state);
-  return $field_state['field'];
-}
-
-/**
- * Retrieves the instance definition array for a widget's helper callbacks.
- *
- * Widgets helper element callbacks (such as #process, #element_validate,
- * #value_callback, ...) should use field_widget_field() and
- * field_widget_instance() instead of field_info_field() and
- * field_info_instance() when they need to access field or instance properties.
- * See hook_field_widget_form() for more details.
- *
- * @param $element
- *   The structured array for the widget.
- * @param $form_state
- *   The form state.
- *
- * @return
- *   The $instance definition array for the current widget.
- *
- * @see field_widget_field()
- * @see hook_field_widget_form()
- */
-function field_widget_instance($element, $form_state) {
-  $field_state = field_form_get_state($element['#field_parents'], $element['#field_name'], $element['#language'], $form_state);
-  return $field_state['instance'];
-}
diff --git a/modules/field/field.info b/modules/field/field.info
deleted file mode 100644
index fcdca88..0000000
--- a/modules/field/field.info
+++ /dev/null
@@ -1,12 +0,0 @@
-name = Field
-description = Field API to add fields to entities like nodes and users.
-package = Core
-version = VERSION
-core = 7.x
-files[] = field.module
-files[] = field.attach.inc
-files[] = field.info.class.inc
-files[] = tests/field.test
-dependencies[] = field_sql_storage
-required = TRUE
-stylesheets[all][] = theme/field.css
diff --git a/modules/field/field.info.class.inc b/modules/field/field.info.class.inc
deleted file mode 100644
index 3b89898..0000000
--- a/modules/field/field.info.class.inc
+++ /dev/null
@@ -1,668 +0,0 @@
-<?php
-
-/*
- * @file
- * Definition of the FieldInfo class.
- */
-
-/**
- * Provides field and instance definitions for the current runtime environment.
- *
- * A FieldInfo object is created and statically persisted through the request
- * by the _field_info_field_cache() function. The object properties act as a
- * "static cache" of fields and instances definitions.
- *
- * The preferred way to access definitions is through the getBundleInstances()
- * method, which keeps cache entries per bundle, storing both fields and
- * instances for a given bundle. Fields used in multiple bundles are duplicated
- * in several cache entries, and are merged into a single list in the memory
- * cache. Cache entries are loaded for bundles as a whole, optimizing memory
- * and CPU usage for the most common pattern of iterating over all instances of
- * a bundle rather than accessing a single instance.
- *
- * The getFields() and getInstances() methods, which return all existing field
- * and instance definitions, are kept mainly for backwards compatibility, and
- * should be avoided when possible, since they load and persist in memory a
- * potentially large array of information. In many cases, the lightweight
- * getFieldMap() method should be preferred.
- */
-class FieldInfo {
-
-  /**
-   * Lightweight map of fields across entity types and bundles.
-   *
-   * @var array
-   */
-  protected $fieldMap;
-
-  /**
-   * List of $field structures keyed by ID. Includes deleted fields.
-   *
-   * @var array
-   */
-  protected $fieldsById = array();
-
-  /**
-   * Mapping of field names to the ID of the corresponding non-deleted field.
-   *
-   * @var array
-   */
-  protected $fieldIdsByName = array();
-
-  /**
-   * Whether $fieldsById contains all field definitions or a subset.
-   *
-   * @var bool
-   */
-  protected $loadedAllFields = FALSE;
-
-  /**
-   * Separately tracks requested field names or IDs that do not exist.
-   *
-   * @var array
-   */
-  protected $unknownFields = array();
-
-  /**
-   * Instance definitions by bundle.
-   *
-   * @var array
-   */
-  protected $bundleInstances = array();
-
-  /**
-   * Whether $bundleInstances contains all instances definitions or a subset.
-   *
-   * @var bool
-   */
-  protected $loadedAllInstances = FALSE;
-
-  /**
-   * Separately tracks requested bundles that are empty (or do not exist).
-   *
-   * @var array
-   */
-  protected $emptyBundles = array();
-
-  /**
-   * Extra fields by bundle.
-   *
-   * @var array
-   */
-  protected $bundleExtraFields = array();
-
-  /**
-   * Clears the "static" and persistent caches.
-   */
-  public function flush() {
-    $this->fieldMap = NULL;
-
-    $this->fieldsById = array();
-    $this->fieldIdsByName = array();
-    $this->loadedAllFields = FALSE;
-    $this->unknownFields = array();
-
-    $this->bundleInstances = array();
-    $this->loadedAllInstances = FALSE;
-    $this->emptyBundles = array();
-
-    $this->bundleExtraFields = array();
-
-    cache_clear_all('field_info:', 'cache_field', TRUE);
-  }
-
-  /**
-   * Collects a lightweight map of fields across bundles.
-   *
-   * @return
-   *   An array keyed by field name. Each value is an array with two entries:
-   *   - type: The field type.
-   *   - bundles: The bundles in which the field appears, as an array with
-   *     entity types as keys and the array of bundle names as values.
-   */
-  public function getFieldMap() {
-    // Read from the "static" cache.
-    if ($this->fieldMap !== NULL) {
-      return $this->fieldMap;
-    }
-
-    // Read from persistent cache.
-    if ($cached = cache_get('field_info:field_map', 'cache_field')) {
-      $map = $cached->data;
-
-      // Save in "static" cache.
-      $this->fieldMap = $map;
-
-      return $map;
-    }
-
-    $map = array();
-
-    $query = db_query('SELECT fc.type, fci.field_name, fci.entity_type, fci.bundle FROM {field_config_instance} fci INNER JOIN {field_config} fc ON fc.id = fci.field_id WHERE fc.active = 1 AND fc.storage_active = 1 AND fc.deleted = 0 AND fci.deleted = 0');
-    foreach ($query as $row) {
-      $map[$row->field_name]['bundles'][$row->entity_type][] = $row->bundle;
-      $map[$row->field_name]['type'] = $row->type;
-    }
-
-    // Save in "static" and persistent caches.
-    $this->fieldMap = $map;
-    cache_set('field_info:field_map', $map, 'cache_field');
-
-    return $map;
-  }
-
-  /**
-   * Returns all active fields, including deleted ones.
-   *
-   * @return
-   *   An array of field definitions, keyed by field ID.
-   */
-  public function getFields() {
-    // Read from the "static" cache.
-    if ($this->loadedAllFields) {
-      return $this->fieldsById;
-    }
-
-    // Read from persistent cache.
-    if ($cached = cache_get('field_info:fields', 'cache_field')) {
-      $this->fieldsById = $cached->data;
-    }
-    else {
-      // Collect and prepare fields.
-      foreach (field_read_fields(array(), array('include_deleted' => TRUE)) as $field) {
-        $this->fieldsById[$field['id']] = $this->prepareField($field);
-      }
-
-      // Store in persistent cache.
-      cache_set('field_info:fields', $this->fieldsById, 'cache_field');
-    }
-
-    // Fill the name/ID map.
-    foreach ($this->fieldsById as $field) {
-      if (!$field['deleted']) {
-        $this->fieldIdsByName[$field['field_name']] = $field['id'];
-      }
-    }
-
-    $this->loadedAllFields = TRUE;
-
-    return $this->fieldsById;
-  }
-
-  /**
-   * Retrieves all active, non-deleted instances definitions.
-   *
-   * @param $entity_type
-   *   (optional) The entity type.
-   *
-   * @return
-   *   If $entity_type is not set, all instances keyed by entity type and bundle
-   *   name. If $entity_type is set, all instances for that entity type, keyed
-   *   by bundle name.
-   */
-  public function getInstances($entity_type = NULL) {
-    // If the full list is not present in "static" cache yet.
-    if (!$this->loadedAllInstances) {
-
-      // Read from persistent cache.
-      if ($cached = cache_get('field_info:instances', 'cache_field')) {
-        $this->bundleInstances = $cached->data;
-      }
-      else {
-        // Collect and prepare instances.
-
-        // We also need to populate the static field cache, since it will not
-        // be set by subsequent getBundleInstances() calls.
-        $this->getFields();
-
-        // Initialize empty arrays for all existing entity types and bundles.
-        // This is not strictly needed, but is done to preserve the behavior of
-        // field_info_instances() before http://drupal.org/node/1915646.
-        foreach (field_info_bundles() as $existing_entity_type => $bundles) {
-          foreach ($bundles as $bundle => $bundle_info) {
-            $this->bundleInstances[$existing_entity_type][$bundle] = array();
-          }
-        }
-
-        foreach (field_read_instances() as $instance) {
-          $field = $this->getField($instance['field_name']);
-          $instance = $this->prepareInstance($instance, $field['type']);
-          $this->bundleInstances[$instance['entity_type']][$instance['bundle']][$instance['field_name']] = $instance;
-        }
-
-        // Store in persistent cache.
-        cache_set('field_info:instances', $this->bundleInstances, 'cache_field');
-      }
-
-      $this->loadedAllInstances = TRUE;
-    }
-
-    if (isset($entity_type)) {
-      return isset($this->bundleInstances[$entity_type]) ? $this->bundleInstances[$entity_type] : array();
-    }
-    else {
-      return $this->bundleInstances;
-    }
-  }
-
-  /**
-   * Returns a field definition from a field name.
-   *
-   * This method only retrieves active, non-deleted fields.
-   *
-   * @param $field_name
-   *   The field name.
-   *
-   * @return
-   *   The field definition, or NULL if no field was found.
-   */
-  public function getField($field_name) {
-    // Read from the "static" cache.
-    if (isset($this->fieldIdsByName[$field_name])) {
-      $field_id = $this->fieldIdsByName[$field_name];
-      return $this->fieldsById[$field_id];
-    }
-    if (isset($this->unknownFields[$field_name])) {
-      return;
-    }
-
-    // Do not check the (large) persistent cache, but read the definition.
-
-    // Cache miss: read from definition.
-    if ($field = field_read_field($field_name)) {
-      $field = $this->prepareField($field);
-
-      // Save in the "static" cache.
-      $this->fieldsById[$field['id']] = $field;
-      $this->fieldIdsByName[$field['field_name']] = $field['id'];
-
-      return $field;
-    }
-    else {
-      $this->unknownFields[$field_name] = TRUE;
-    }
-  }
-
-  /**
-   * Returns a field definition from a field ID.
-   *
-   * This method only retrieves active fields, deleted or not.
-   *
-   * @param $field_id
-   *   The field ID.
-   *
-   * @return
-   *   The field definition, or NULL if no field was found.
-   */
-  public function getFieldById($field_id) {
-    // Read from the "static" cache.
-    if (isset($this->fieldsById[$field_id])) {
-      return $this->fieldsById[$field_id];
-    }
-    if (isset($this->unknownFields[$field_id])) {
-      return;
-    }
-
-    // No persistent cache, fields are only persistently cached as part of a
-    // bundle.
-
-    // Cache miss: read from definition.
-    if ($fields = field_read_fields(array('id' => $field_id), array('include_deleted' => TRUE))) {
-      $field = current($fields);
-      $field = $this->prepareField($field);
-
-      // Store in the static cache.
-      $this->fieldsById[$field['id']] = $field;
-      if (!$field['deleted']) {
-        $this->fieldIdsByName[$field['field_name']] = $field['id'];
-      }
-
-      return $field;
-    }
-    else {
-      $this->unknownFields[$field_id] = TRUE;
-    }
-  }
-
-  /**
-   * Retrieves the instances for a bundle.
-   *
-   * The function also populates the corresponding field definitions in the
-   * "static" cache.
-   *
-   * @param $entity_type
-   *   The entity type.
-   * @param $bundle
-   *   The bundle name.
-   *
-   * @return
-   *   The array of instance definitions, keyed by field name.
-   */
-  public function getBundleInstances($entity_type, $bundle) {
-    // Read from the "static" cache.
-    if (isset($this->bundleInstances[$entity_type][$bundle])) {
-      return $this->bundleInstances[$entity_type][$bundle];
-    }
-    if (isset($this->emptyBundles[$entity_type][$bundle])) {
-      return array();
-    }
-
-    // Read from the persistent cache.
-    if ($cached = cache_get("field_info:bundle:$entity_type:$bundle", 'cache_field')) {
-      $info = $cached->data;
-
-      // Extract the field definitions and save them in the "static" cache.
-      foreach ($info['fields'] as $field) {
-        if (!isset($this->fieldsById[$field['id']])) {
-          $this->fieldsById[$field['id']] = $field;
-          if (!$field['deleted']) {
-            $this->fieldIdsByName[$field['field_name']] = $field['id'];
-          }
-        }
-      }
-      unset($info['fields']);
-
-      // Store the instance definitions in the "static" cache'. Empty (or
-      // non-existent) bundles are stored separately, so that they do not
-      // pollute the global list returned by getInstances().
-      if ($info['instances']) {
-        $this->bundleInstances[$entity_type][$bundle] = $info['instances'];
-      }
-      else {
-        $this->emptyBundles[$entity_type][$bundle] = TRUE;
-      }
-
-      return $info['instances'];
-    }
-
-    // Cache miss: collect from the definitions.
-
-    $instances = array();
-
-    // Collect the fields in the bundle.
-    $params = array('entity_type' => $entity_type, 'bundle' => $bundle);
-    $fields = field_read_fields($params);
-
-    // This iterates on non-deleted instances, so deleted fields are kept out of
-    // the persistent caches.
-    foreach (field_read_instances($params) as $instance) {
-      $field = $fields[$instance['field_name']];
-
-      $instance = $this->prepareInstance($instance, $field['type']);
-      $instances[$field['field_name']] = $instance;
-
-      // If the field is not in our global "static" list yet, add it.
-      if (!isset($this->fieldsById[$field['id']])) {
-        $field = $this->prepareField($field);
-
-        $this->fieldsById[$field['id']] = $field;
-        $this->fieldIdsByName[$field['field_name']] = $field['id'];
-      }
-    }
-
-    // Store in the 'static' cache'. Empty (or non-existent) bundles are stored
-    // separately, so that they do not pollute the global list returned by
-    // getInstances().
-    if ($instances) {
-      $this->bundleInstances[$entity_type][$bundle] = $instances;
-    }
-    else {
-      $this->emptyBundles[$entity_type][$bundle] = TRUE;
-    }
-
-    // The persistent cache additionally contains the definitions of the fields
-    // involved in the bundle.
-    $cache = array(
-      'instances' => $instances,
-      'fields' => array()
-    );
-    foreach ($instances as $instance) {
-      $cache['fields'][] = $this->fieldsById[$instance['field_id']];
-    }
-    cache_set("field_info:bundle:$entity_type:$bundle", $cache, 'cache_field');
-
-    return $instances;
-  }
-
-  /**
-   * Retrieves the "extra fields" for a bundle.
-   *
-   * @param $entity_type
-   *   The entity type.
-   * @param $bundle
-   *   The bundle name.
-   *
-   * @return
-   *   The array of extra fields.
-   */
-  public function getBundleExtraFields($entity_type, $bundle) {
-    // Read from the "static" cache.
-    if (isset($this->bundleExtraFields[$entity_type][$bundle])) {
-      return $this->bundleExtraFields[$entity_type][$bundle];
-    }
-
-    // Read from the persistent cache.
-    if ($cached = cache_get("field_info:bundle_extra:$entity_type:$bundle", 'cache_field')) {
-      $this->bundleExtraFields[$entity_type][$bundle] = $cached->data;
-      return $this->bundleExtraFields[$entity_type][$bundle];
-    }
-
-    // Cache miss: read from hook_field_extra_fields(). Note: given the current
-    // shape of the hook, we have no other way than collecting extra fields on
-    // all bundles.
-    $info = array();
-    $extra = module_invoke_all('field_extra_fields');
-    drupal_alter('field_extra_fields', $extra);
-    // Merge in saved settings.
-    if (isset($extra[$entity_type][$bundle])) {
-      $info = $this->prepareExtraFields($extra[$entity_type][$bundle], $entity_type, $bundle);
-    }
-
-    // Store in the 'static' and persistent caches.
-    $this->bundleExtraFields[$entity_type][$bundle] = $info;
-    cache_set("field_info:bundle_extra:$entity_type:$bundle", $info, 'cache_field');
-
-    return $this->bundleExtraFields[$entity_type][$bundle];
-  }
-
-  /**
-   * Prepares a field definition for the current run-time context.
-   *
-   * @param $field
-   *   The raw field structure as read from the database.
-   *
-   * @return
-   *   The field definition completed for the current runtime context.
-   */
-  public function prepareField($field) {
-    // Make sure all expected field settings are present.
-    $field['settings'] += field_info_field_settings($field['type']);
-    $field['storage']['settings'] += field_info_storage_settings($field['storage']['type']);
-
-    // Add storage details.
-    $details = (array) module_invoke($field['storage']['module'], 'field_storage_details', $field);
-    drupal_alter('field_storage_details', $details, $field);
-    $field['storage']['details'] = $details;
-
-    // Populate the list of bundles using the field.
-    $field['bundles'] = array();
-    if (!$field['deleted']) {
-      $map = $this->getFieldMap();
-      if (isset($map[$field['field_name']])) {
-        $field['bundles'] = $map[$field['field_name']]['bundles'];
-      }
-    }
-
-    return $field;
-  }
-
-  /**
-   * Prepares an instance definition for the current run-time context.
-   *
-   * @param $instance
-   *   The raw instance structure as read from the database.
-   * @param $field_type
-   *   The field type.
-   *
-   * @return
-   *   The field instance array completed for the current runtime context.
-   */
-  public function prepareInstance($instance, $field_type) {
-    // Make sure all expected instance settings are present.
-    $instance['settings'] += field_info_instance_settings($field_type);
-
-    // Set a default value for the instance.
-    if (field_behaviors_widget('default value', $instance) == FIELD_BEHAVIOR_DEFAULT && !isset($instance['default_value'])) {
-      $instance['default_value'] = NULL;
-    }
-
-    // Prepare widget settings.
-    $instance['widget'] = $this->prepareInstanceWidget($instance['widget'], $field_type);
-
-    // Prepare display settings.
-    foreach ($instance['display'] as $view_mode => $display) {
-      $instance['display'][$view_mode] = $this->prepareInstanceDisplay($display, $field_type);
-    }
-
-    // Fall back to 'hidden' for view modes configured to use custom display
-    // settings, and for which the instance has no explicit settings.
-    $entity_info = entity_get_info($instance['entity_type']);
-    $view_modes = array_merge(array('default'), array_keys($entity_info['view modes']));
-    $view_mode_settings = field_view_mode_settings($instance['entity_type'], $instance['bundle']);
-    foreach ($view_modes as $view_mode) {
-      if ($view_mode == 'default' || !empty($view_mode_settings[$view_mode]['custom_settings'])) {
-        if (!isset($instance['display'][$view_mode])) {
-          $instance['display'][$view_mode] = array(
-            'type' => 'hidden',
-            'label' => 'above',
-            'settings' => array(),
-            'weight' => 0,
-          );
-        }
-      }
-    }
-
-    return $instance;
-  }
-
-  /**
-   * Prepares widget properties for the current run-time context.
-   *
-   * @param $widget
-   *   Widget specifications as found in $instance['widget'].
-   * @param $field_type
-   *   The field type.
-   *
-   * @return
-   *   The widget properties completed for the current runtime context.
-   */
-  public function prepareInstanceWidget($widget, $field_type) {
-    $field_type_info = field_info_field_types($field_type);
-
-    // Fill in default values.
-    $widget += array(
-      'type' => $field_type_info['default_widget'],
-      'settings' => array(),
-      'weight' => 0,
-    );
-
-    $widget_type_info = field_info_widget_types($widget['type']);
-    // Fall back to default formatter if formatter type is not available.
-    if (!$widget_type_info) {
-      $widget['type'] = $field_type_info['default_widget'];
-      $widget_type_info = field_info_widget_types($widget['type']);
-    }
-    $widget['module'] = $widget_type_info['module'];
-    // Fill in default settings for the widget.
-    $widget['settings'] += field_info_widget_settings($widget['type']);
-
-    return $widget;
-  }
-
-  /**
-   * Adapts display specifications to the current run-time context.
-   *
-   * @param $display
-   *   Display specifications as found in $instance['display']['a_view_mode'].
-   * @param $field_type
-   *   The field type.
-   *
-   * @return
-   *   The display properties completed for the current runtime context.
-   */
-  public function prepareInstanceDisplay($display, $field_type) {
-    $field_type_info = field_info_field_types($field_type);
-
-    // Fill in default values.
-    $display += array(
-      'label' => 'above',
-      'type' => $field_type_info['default_formatter'],
-      'settings' => array(),
-      'weight' => 0,
-    );
-    if ($display['type'] != 'hidden') {
-      $formatter_type_info = field_info_formatter_types($display['type']);
-      // Fall back to default formatter if formatter type is not available.
-      if (!$formatter_type_info) {
-        $display['type'] = $field_type_info['default_formatter'];
-        $formatter_type_info = field_info_formatter_types($display['type']);
-      }
-      $display['module'] = $formatter_type_info['module'];
-      // Fill in default settings for the formatter.
-      $display['settings'] += field_info_formatter_settings($display['type']);
-    }
-
-    return $display;
-  }
-
-  /**
-   * Prepares 'extra fields' for the current run-time context.
-   *
-   * @param $extra_fields
-   *   The array of extra fields, as collected in hook_field_extra_fields().
-   * @param $entity_type
-   *   The entity type.
-   * @param $bundle
-   *   The bundle name.
-   *
-   * @return
-   *   The list of extra fields completed for the current runtime context.
-   */
-  public function prepareExtraFields($extra_fields, $entity_type, $bundle) {
-    $entity_type_info = entity_get_info($entity_type);
-    $bundle_settings = field_bundle_settings($entity_type, $bundle);
-    $extra_fields += array('form' => array(), 'display' => array());
-
-    $result = array();
-    // Extra fields in forms.
-    foreach ($extra_fields['form'] as $name => $field_data) {
-      $settings = isset($bundle_settings['extra_fields']['form'][$name]) ? $bundle_settings['extra_fields']['form'][$name] : array();
-      if (isset($settings['weight'])) {
-        $field_data['weight'] = $settings['weight'];
-      }
-      $result['form'][$name] = $field_data;
-    }
-
-    // Extra fields in displayed entities.
-    $data = $extra_fields['display'];
-    foreach ($extra_fields['display'] as $name => $field_data) {
-      $settings = isset($bundle_settings['extra_fields']['display'][$name]) ? $bundle_settings['extra_fields']['display'][$name] : array();
-      $view_modes = array_merge(array('default'), array_keys($entity_type_info['view modes']));
-      foreach ($view_modes as $view_mode) {
-        if (isset($settings[$view_mode])) {
-          $field_data['display'][$view_mode] = $settings[$view_mode];
-        }
-        else {
-          $field_data['display'][$view_mode] = array(
-            'weight' => $field_data['weight'],
-            'visible' => TRUE,
-          );
-        }
-      }
-      unset($field_data['weight']);
-      $result['display'][$name] = $field_data;
-    }
-
-    return $result;
-  }
-}
diff --git a/modules/field/field.info.inc b/modules/field/field.info.inc
deleted file mode 100644
index 02b3c9c..0000000
--- a/modules/field/field.info.inc
+++ /dev/null
@@ -1,812 +0,0 @@
-<?php
-
-/**
- * @file
- * Field Info API, providing information about available fields and field types.
- */
-
-/**
- * Retrieves the FieldInfo object for the current request.
- *
- * @return FieldInfo
- *   An instance of the FieldInfo class.
- */
-function _field_info_field_cache() {
-  // Use the advanced drupal_static() pattern, since this is called very often.
-  static $drupal_static_fast;
-
-  if (!isset($drupal_static_fast)) {
-    $drupal_static_fast['field_info_field_cache'] = &drupal_static(__FUNCTION__);
-  }
-  $field_info = &$drupal_static_fast['field_info_field_cache'];
-
-  if (!isset($field_info)) {
-    // @todo The registry should save the need for an explicit include, but not
-    // a couple upgrade tests (DisabledNodeTypeTestCase,
-    // FilterFormatUpgradePathTestCase...) break in a strange way without it.
-    include_once dirname(__FILE__) . '/field.info.class.inc';
-    $field_info = new FieldInfo();
-  }
-
-  return $field_info;
-}
-
-/**
- * @defgroup field_info Field Info API
- * @{
- * Obtain information about Field API configuration.
- *
- * The Field Info API exposes information about field types, fields,
- * instances, bundles, widget types, display formatters, behaviors,
- * and settings defined by or with the Field API.
- *
- * See @link field Field API @endlink for information about the other parts of
- * the Field API.
- */
-
-/**
- * Clears the field info cache without clearing the field data cache.
- *
- * This is useful when deleted fields or instances are purged.  We
- * need to remove the purged records, but no actual field data items
- * are affected.
- */
-function field_info_cache_clear() {
-  drupal_static_reset('field_view_mode_settings');
-  drupal_static_reset('field_available_languages');
-
-  // @todo: Remove this when field_attach_*_bundle() bundle management
-  // functions are moved to the entity API.
-  entity_info_cache_clear();
-
-  _field_info_collate_types(TRUE);
-  _field_info_field_cache()->flush();
-}
-
-/**
- * Collates all information on existing fields and instances.
- *
- * Deprecated. This function is kept to ensure backwards compatibility, but has
- * a serious performance impact, and should be absolutely avoided.
- * See http://drupal.org/node/1915646.
- *
- * Use the regular field_info_*() API functions to access the information, or
- * field_info_cache_clear() to clear the cached data.
- */
-function _field_info_collate_fields($reset = FALSE) {
-  if ($reset) {
-    _field_info_field_cache()->flush();
-    return;
-  }
-
-  $cache = _field_info_field_cache();
-
-  // Collect fields, and build the array of IDs keyed by field_name.
-  $fields = $cache->getFields();
-  $field_ids = array();
-  foreach ($fields as $id => $field) {
-    if (!$field['deleted']) {
-      $field_ids[$field['field_name']] = $id;
-    }
-  }
-
-  // Collect extra fields for all entity types.
-  $extra_fields = array();
-  foreach (field_info_bundles() as $entity_type => $bundles) {
-    foreach ($bundles as $bundle => $info) {
-      $extra_fields[$entity_type][$bundle] = $cache->getBundleExtraFields($entity_type, $bundle);
-    }
-  }
-
-  return array(
-    'fields' => $fields,
-    'field_ids' => $field_ids,
-    'instances' => $cache->getInstances(),
-    'extra_fields' => $extra_fields,
-  );
-}
-
-/**
- * Collates all information on field types, widget types and related structures.
- *
- * @param $reset
- *   If TRUE, clear the cache. The information will be rebuilt from the database
- *   next time it is needed. Defaults to FALSE.
- *
- * @return
- *   If $reset is TRUE, nothing.
- *   If $reset is FALSE, an array containing the following elements:
- *   - 'field types': Array of hook_field_info() results, keyed by field_type.
- *     Each element has the following components: label, description, settings,
- *     instance_settings, default_widget, default_formatter, and behaviors
- *     from hook_field_info(), as well as module, giving the module that exposes
- *     the field type.
- *   - 'widget types': Array of hook_field_widget_info() results, keyed by
- *     widget_type. Each element has the following components: label, field
- *     types, settings, weight, and behaviors from hook_field_widget_info(),
- *     as well as module, giving the module that exposes the widget type.
- *   - 'formatter types': Array of hook_field_formatter_info() results, keyed by
- *     formatter_type. Each element has the following components: label, field
- *     types, and behaviors from hook_field_formatter_info(), as well as
- *     module, giving the module that exposes the formatter type.
- *   - 'storage types': Array of hook_field_storage_info() results, keyed by
- *     storage type names. Each element has the following components: label,
- *     description, and settings from hook_field_storage_info(), as well as
- *     module, giving the module that exposes the storage type.
- *   - 'fieldable types': Array of hook_entity_info() results, keyed by
- *     entity_type. Each element has the following components: name, id key,
- *     revision key, bundle key, cacheable, and bundles from hook_entity_info(),
- *     as well as module, giving the module that exposes the entity type.
- */
-function _field_info_collate_types($reset = FALSE) {
-  global $language;
-  static $info;
-
-  // The _info() hooks invoked below include translated strings, so each
-  // language is cached separately.
-  $langcode = $language->language;
-
-  if ($reset) {
-    $info = NULL;
-    // Clear all languages.
-    cache_clear_all('field_info_types:', 'cache_field', TRUE);
-    return;
-  }
-
-  if (!isset($info)) {
-    if ($cached = cache_get("field_info_types:$langcode", 'cache_field')) {
-      $info = $cached->data;
-    }
-    else {
-      $info = array(
-        'field types' => array(),
-        'widget types' => array(),
-        'formatter types' => array(),
-        'storage types' => array(),
-      );
-
-      // Populate field types.
-      foreach (module_implements('field_info') as $module) {
-        $field_types = (array) module_invoke($module, 'field_info');
-        foreach ($field_types as $name => $field_info) {
-          // Provide defaults.
-          $field_info += array(
-            'settings' => array(),
-            'instance_settings' => array(),
-          );
-          $info['field types'][$name] = $field_info;
-          $info['field types'][$name]['module'] = $module;
-        }
-      }
-      drupal_alter('field_info', $info['field types']);
-
-      // Populate widget types.
-      foreach (module_implements('field_widget_info') as $module) {
-        $widget_types = (array) module_invoke($module, 'field_widget_info');
-        foreach ($widget_types as $name => $widget_info) {
-          // Provide defaults.
-          $widget_info += array(
-            'settings' => array(),
-          );
-          $info['widget types'][$name] = $widget_info;
-          $info['widget types'][$name]['module'] = $module;
-        }
-      }
-      drupal_alter('field_widget_info', $info['widget types']);
-      uasort($info['widget types'], 'drupal_sort_weight');
-
-      // Populate formatter types.
-      foreach (module_implements('field_formatter_info') as $module) {
-        $formatter_types = (array) module_invoke($module, 'field_formatter_info');
-        foreach ($formatter_types as $name => $formatter_info) {
-          // Provide defaults.
-          $formatter_info += array(
-            'settings' => array(),
-          );
-          $info['formatter types'][$name] = $formatter_info;
-          $info['formatter types'][$name]['module'] = $module;
-        }
-      }
-      drupal_alter('field_formatter_info', $info['formatter types']);
-
-      // Populate storage types.
-      foreach (module_implements('field_storage_info') as $module) {
-        $storage_types = (array) module_invoke($module, 'field_storage_info');
-        foreach ($storage_types as $name => $storage_info) {
-          // Provide defaults.
-          $storage_info += array(
-            'settings' => array(),
-          );
-          $info['storage types'][$name] = $storage_info;
-          $info['storage types'][$name]['module'] = $module;
-        }
-      }
-      drupal_alter('field_storage_info', $info['storage types']);
-
-      cache_set("field_info_types:$langcode", $info, 'cache_field');
-    }
-  }
-
-  return $info;
-}
-
-/**
- * Prepares a field definition for the current run-time context.
- *
- * The functionality has moved to the FieldInfo class. This function is kept as
- * a backwards-compatibility layer. See http://drupal.org/node/1915646.
- *
- * @see FieldInfo::prepareField()
- */
-function _field_info_prepare_field($field) {
-  $cache = _field_info_field_cache();
-  return $cache->prepareField($field);
-}
-
-/**
- * Prepares an instance definition for the current run-time context.
- *
- * The functionality has moved to the FieldInfo class. This function is kept as
- * a backwards-compatibility layer. See http://drupal.org/node/1915646.
- *
- * @see FieldInfo::prepareInstance()
- */
-function _field_info_prepare_instance($instance, $field) {
-  $cache = _field_info_field_cache();
-  return $cache->prepareInstance($instance, $field['type']);
-}
-
-/**
- * Adapts display specifications to the current run-time context.
- *
- * The functionality has moved to the FieldInfo class. This function is kept as
- * a backwards-compatibility layer. See http://drupal.org/node/1915646.
- *
- * @see FieldInfo::prepareInstanceDisplay()
- */
-function _field_info_prepare_instance_display($field, $display) {
-  $cache = _field_info_field_cache();
-  return $cache->prepareInstanceDisplay($display, $field['type']);
-}
-
-/**
- * Prepares widget specifications for the current run-time context.
- *
- * The functionality has moved to the FieldInfo class. This function is kept as
- * a backwards-compatibility layer. See http://drupal.org/node/1915646.
- *
- * @see FieldInfo::prepareInstanceWidget()
- */
-function _field_info_prepare_instance_widget($field, $widget) {
-  $cache = _field_info_field_cache();
-  return $cache->prepareInstanceWidget($widget, $field['type']);
-}
-
-/**
- * Prepares 'extra fields' for the current run-time context.
- *
- * The functionality has moved to the FieldInfo class. This function is kept as
- * a backwards-compatibility layer. See http://drupal.org/node/1915646.
- *
- * @see FieldInfo::prepareExtraFields()
- */
-function _field_info_prepare_extra_fields($extra_fields, $entity_type, $bundle) {
-  $cache = _field_info_field_cache();
-  return $cache->prepareExtraFields($extra_fields, $entity_type, $bundle);
-}
-
-/**
- * Determines the behavior of a widget with respect to an operation.
- *
- * @param $op
- *   The name of the operation. Currently supported: 'default value',
- *   'multiple values'.
- * @param $instance
- *   The field instance array.
- *
- * @return
- *   One of these values:
- *   - FIELD_BEHAVIOR_NONE: Do nothing for this operation.
- *   - FIELD_BEHAVIOR_CUSTOM: Use the widget's callback function.
- *   - FIELD_BEHAVIOR_DEFAULT: Use field.module default behavior.
- */
-function field_behaviors_widget($op, $instance) {
-  $info = field_info_widget_types($instance['widget']['type']);
-  return isset($info['behaviors'][$op]) ? $info['behaviors'][$op] : FIELD_BEHAVIOR_DEFAULT;
-}
-
-/**
- * Returns information about field types from hook_field_info().
- *
- * @param $field_type
- *   (optional) A field type name. If omitted, all field types will be
- *   returned.
- *
- * @return
- *   Either a field type description, as provided by hook_field_info(), or an
- *   array of all existing field types, keyed by field type name.
- */
-function field_info_field_types($field_type = NULL) {
-  $info = _field_info_collate_types();
-  $field_types = $info['field types'];
-  if ($field_type) {
-    if (isset($field_types[$field_type])) {
-      return $field_types[$field_type];
-    }
-  }
-  else {
-    return $field_types;
-  }
-}
-
-/**
- * Returns information about field widgets from hook_field_widget_info().
- *
- * @param $widget_type
- *   (optional) A widget type name. If omitted, all widget types will be
- *   returned.
- *
- * @return
- *   Either a single widget type description, as provided by
- *   hook_field_widget_info(), or an array of all existing widget types, keyed
- *   by widget type name.
- */
-function field_info_widget_types($widget_type = NULL) {
-  $info = _field_info_collate_types();
-  $widget_types = $info['widget types'];
-  if ($widget_type) {
-    if (isset($widget_types[$widget_type])) {
-      return $widget_types[$widget_type];
-    }
-  }
-  else {
-    return $widget_types;
-  }
-}
-
-/**
- * Returns information about field formatters from hook_field_formatter_info().
- *
- * @param $formatter_type
- *   (optional) A formatter type name. If omitted, all formatter types will be
- *   returned.
- *
- * @return
- *   Either a single formatter type description, as provided by
- *   hook_field_formatter_info(), or an array of all existing formatter types,
- *   keyed by formatter type name.
- */
-function field_info_formatter_types($formatter_type = NULL) {
-  $info = _field_info_collate_types();
-  $formatter_types = $info['formatter types'];
-  if ($formatter_type) {
-    if (isset($formatter_types[$formatter_type])) {
-      return $formatter_types[$formatter_type];
-    }
-  }
-  else {
-    return $formatter_types;
-  }
-}
-
-/**
- * Returns information about field storage from hook_field_storage_info().
- *
- * @param $storage_type
- *   (optional) A storage type name. If omitted, all storage types will be
- *   returned.
- *
- * @return
- *   Either a storage type description, as provided by
- *   hook_field_storage_info(), or an array of all existing storage types,
- *   keyed by storage type name.
- */
-function field_info_storage_types($storage_type = NULL) {
-  $info = _field_info_collate_types();
-  $storage_types = $info['storage types'];
-  if ($storage_type) {
-    if (isset($storage_types[$storage_type])) {
-      return $storage_types[$storage_type];
-    }
-  }
-  else {
-    return $storage_types;
-  }
-}
-
-/**
- * Returns information about existing bundles.
- *
- * @param $entity_type
- *   The type of entity; e.g. 'node' or 'user'.
- *
- * @return
- *   An array of bundles for the $entity_type keyed by bundle name,
- *   or, if no $entity_type was provided, the array of all existing bundles,
- *   keyed by entity type.
- */
-function field_info_bundles($entity_type = NULL) {
-  $info = entity_get_info();
-
-  if ($entity_type) {
-    return isset($info[$entity_type]['bundles']) ? $info[$entity_type]['bundles'] : array();
-  }
-
-  $bundles = array();
-  foreach ($info as $type => $entity_info) {
-    $bundles[$type] = $entity_info['bundles'];
-  }
-  return $bundles;
-}
-
-/**
- * Returns a lightweight map of fields across bundles.
- *
- * The function only returns active, non deleted fields.
- *
- * @return
- *   An array keyed by field name. Each value is an array with two entries:
- *   - type: The field type.
- *   - bundles: The bundles in which the field appears, as an array with entity
- *     types as keys and the array of bundle names as values.
- * Example:
- * @code
- * array(
- *   'body' => array(
- *     'bundles' => array(
- *       'node' => array('page', 'article'),
- *     ),
- *     'type' => 'text_with_summary',
- *   ),
- * );
- * @endcode
- */
-function field_info_field_map() {
-  $cache = _field_info_field_cache();
-  return $cache->getFieldMap();
-}
-
-/**
- * Returns all field definitions.
- *
- * Use of this function should be avoided when possible, since it loads and
- * statically caches a potentially large array of information. Use
- * field_info_field_map() instead.
- *
- * When iterating over the fields present in a given bundle after a call to
- * field_info_instances($entity_type, $bundle), it is recommended to use
- * field_info_field() on each individual field instead.
- *
- * @return
- *   An array of field definitions, keyed by field name. Each field has an
- *   additional property, 'bundles', which is an array of all the bundles to
- *   which this field belongs keyed by entity type.
- *
- * @see field_info_field_map()
- */
-function field_info_fields() {
-  $cache = _field_info_field_cache();
-  $info = $cache->getFields();
-
-  $fields = array();
-  foreach ($info as $key => $field) {
-    if (!$field['deleted']) {
-      $fields[$field['field_name']] = $field;
-    }
-  }
-
-  return $fields;
-}
-
-/**
- * Returns data about an individual field, given a field name.
- *
- * @param $field_name
- *   The name of the field to retrieve. $field_name can only refer to a
- *   non-deleted, active field. For deleted fields, use
- *   field_info_field_by_id(). To retrieve information about inactive fields,
- *   use field_read_fields().
- *
- * @return
- *   The field array, as returned by field_read_fields(), with an
- *   additional element 'bundles', whose value is an array of all the bundles
- *   this field belongs to keyed by entity type. NULL if the field was not
- *   found.
- *
- * @see field_info_field_by_id()
- */
-function field_info_field($field_name) {
-  $cache = _field_info_field_cache();
-  return $cache->getField($field_name);
-}
-
-/**
- * Returns data about an individual field, given a field ID.
- *
- * @param $field_id
- *   The id of the field to retrieve. $field_id can refer to a
- *   deleted field, but not an inactive one.
- *
- * @return
- *   The field array, as returned by field_read_fields(), with an
- *   additional element 'bundles', whose value is an array of all the bundles
- *   this field belongs to.
- *
- * @see field_info_field()
- */
-function field_info_field_by_id($field_id) {
-  $cache = _field_info_field_cache();
-  return $cache->getFieldById($field_id);
-}
-
-/**
- * Returns the same data as field_info_field_by_id() for every field.
- *
- * Use of this function should be avoided when possible, since it loads and
- * statically caches a potentially large array of information.
- *
- * When iterating over the fields present in a given bundle after a call to
- * field_info_instances($entity_type, $bundle), it is recommended to use
- * field_info_field() on each individual field instead.
- *
- * @return
- *   An array, each key is a field ID and the values are field arrays as
- *   returned by field_read_fields(), with an additional element 'bundles',
- *   whose value is an array of all the bundle this field belongs to.
- *
- * @see field_info_field()
- * @see field_info_field_by_id()
- */
-function field_info_field_by_ids() {
-  $cache = _field_info_field_cache();
-  return $cache->getFields();
-}
-
-/**
- * Retrieves information about field instances.
- *
- * Use of this function to retrieve instances across separate bundles (i.e.
- * when the $bundle parameter is NULL) should be avoided when possible, since
- * it loads and statically caches a potentially large array of information. Use
- * field_info_field_map() instead.
- *
- * When retrieving the instances of a specific bundle (i.e. when both
- * $entity_type and $bundle_name are provided), the function also populates a
- * static cache with the corresponding field definitions, allowing fast
- * retrieval of field_info_field() later in the request.
- *
- * @param $entity_type
- *   (optional) The entity type for which to return instances.
- * @param $bundle_name
- *   (optional) The bundle name for which to return instances. If $entity_type
- *   is NULL, the $bundle_name parameter is ignored.
- *
- * @return
- *   If $entity_type is not set, return all instances keyed by entity type and
- *   bundle name. If $entity_type is set, return all instances for that entity
- *   type, keyed by bundle name. If $entity_type and $bundle_name are set, return
- *   all instances for that bundle.
- *
- * @see field_info_field_map()
- */
-function field_info_instances($entity_type = NULL, $bundle_name = NULL) {
-  $cache = _field_info_field_cache();
-
-  if (!isset($entity_type)) {
-    return $cache->getInstances();
-  }
-  if (!isset($bundle_name)) {
-    return $cache->getInstances($entity_type);
-  }
-
-  return $cache->getBundleInstances($entity_type, $bundle_name);
-}
-
-/**
- * Returns an array of instance data for a specific field and bundle.
- *
- * The function populates a static cache with all fields and instances used in
- * the bundle, allowing fast retrieval of field_info_field() or
- * field_info_instance() later in the request.
- *
- * @param $entity_type
- *   The entity type for the instance.
- * @param $field_name
- *   The field name for the instance.
- * @param $bundle_name
- *   The bundle name for the instance.
- *
- * @return
- *   An associative array of instance data for the specific field and bundle;
- *   NULL if the instance does not exist.
- */
-function field_info_instance($entity_type, $field_name, $bundle_name) {
-  $cache = _field_info_field_cache();
-  $info = $cache->getBundleInstances($entity_type, $bundle_name);
-  if (isset($info[$field_name])) {
-    return $info[$field_name];
-  }
-}
-
-/**
- * Returns a list and settings of pseudo-field elements in a given bundle.
- *
- * If $context is 'form', an array with the following structure:
- * @code
- *   array(
- *     'name_of_pseudo_field_component' => array(
- *       'label' => The human readable name of the component,
- *       'description' => A short description of the component content,
- *       'weight' => The weight of the component in edit forms,
- *     ),
- *     'name_of_other_pseudo_field_component' => array(
- *       // ...
- *     ),
- *   );
- * @endcode
- *
- * If $context is 'display', an array with the following structure:
- * @code
- *   array(
- *     'name_of_pseudo_field_component' => array(
- *       'label' => The human readable name of the component,
- *       'description' => A short description of the component content,
- *       // One entry per view mode, including the 'default' mode:
- *       'display' => array(
- *         'default' => array(
- *           'weight' => The weight of the component in displayed entities in
- *             this view mode,
- *           'visible' => TRUE if the component is visible, FALSE if hidden, in
- *             displayed entities in this view mode,
- *         ),
- *         'teaser' => array(
- *           // ...
- *         ),
- *       ),
- *     ),
- *     'name_of_other_pseudo_field_component' => array(
- *       // ...
- *     ),
- *   );
- * @endcode
- *
- * @param $entity_type
- *   The type of entity; e.g. 'node' or 'user'.
- * @param $bundle
- *   The bundle name.
- * @param $context
- *   The context for which the list of pseudo-fields is requested. Either
- *   'form' or 'display'.
- *
- * @return
- *   The array of pseudo-field elements in the bundle.
- */
-function field_info_extra_fields($entity_type, $bundle, $context) {
-  $cache = _field_info_field_cache();
-  $info = $cache->getBundleExtraFields($entity_type, $bundle);
-
-  return isset($info[$context]) ? $info[$context] : array();
-}
-
-/**
- * Returns the maximum weight of all the components in an entity.
- *
- * This includes fields, 'extra_fields', and other components added by
- * third-party modules (e.g. field_group).
- *
- * @param $entity_type
- *   The type of entity; e.g. 'node' or 'user'.
- * @param $bundle
- *   The bundle name.
- * @param $context
- *   The context for which the maximum weight is requested. Either 'form', or
- *   the name of a view mode.
- * @return
- *   The maximum weight of the entity's components, or NULL if no components
- *   were found.
- */
-function field_info_max_weight($entity_type, $bundle, $context) {
-  $weights = array();
-
-  // Collect weights for fields.
-  foreach (field_info_instances($entity_type, $bundle) as $instance) {
-    if ($context == 'form') {
-      $weights[] = $instance['widget']['weight'];
-    }
-    elseif (isset($instance['display'][$context]['weight'])) {
-      $weights[] = $instance['display'][$context]['weight'];
-    }
-  }
-  // Collect weights for extra fields.
-  foreach (field_info_extra_fields($entity_type, $bundle, $context) as $extra) {
-    $weights[] = $extra['weight'];
-  }
-
-  // Let other modules feedback about their own additions.
-  $weights = array_merge($weights, module_invoke_all('field_info_max_weight', $entity_type, $bundle, $context));
-  $max_weight = $weights ? max($weights) : NULL;
-
-  return $max_weight;
-}
-
-/**
- * Returns a field type's default settings.
- *
- * @param $type
- *   A field type name.
- *
- * @return
- *   The field type's default settings, as provided by hook_field_info(), or an
- *   empty array if type or settings are not defined.
- */
-function field_info_field_settings($type) {
-  $info = field_info_field_types($type);
-  return isset($info['settings']) ? $info['settings'] : array();
-}
-
-/**
- * Returns a field type's default instance settings.
- *
- * @param $type
- *   A field type name.
- *
- * @return
- *   The field type's default instance settings, as provided by
- *   hook_field_info(), or an empty array if type or settings are not defined.
- */
-function field_info_instance_settings($type) {
-  $info = field_info_field_types($type);
-  return isset($info['instance_settings']) ? $info['instance_settings'] : array();
-}
-
-/**
- * Returns a field widget's default settings.
- *
- * @param $type
- *   A widget type name.
- *
- * @return
- *   The widget type's default settings, as provided by
- *   hook_field_widget_info(), or an empty array if type or settings are
- *   undefined.
- */
-function field_info_widget_settings($type) {
-  $info = field_info_widget_types($type);
-  return isset($info['settings']) ? $info['settings'] : array();
-}
-
-/**
- * Returns a field formatter's default settings.
- *
- * @param $type
- *   A field formatter type name.
- *
- * @return
- *   The formatter type's default settings, as provided by
- *   hook_field_formatter_info(), or an empty array if type or settings are
- *   undefined.
- */
-function field_info_formatter_settings($type) {
-  $info = field_info_formatter_types($type);
-  return isset($info['settings']) ? $info['settings'] : array();
-}
-
-/**
- * Returns a field storage type's default settings.
- *
- * @param $type
- *   A field storage type name.
- *
- * @return
- *   The storage type's default settings, as provided by
- *   hook_field_storage_info(), or an empty array if type or settings are
- *   undefined.
- */
-function field_info_storage_settings($type) {
-  $info = field_info_storage_types($type);
-  return isset($info['settings']) ? $info['settings'] : array();
-}
-
-/**
- * @} End of "defgroup field_info".
- */
diff --git a/modules/field/field.install b/modules/field/field.install
deleted file mode 100644
index c5c5005..0000000
--- a/modules/field/field.install
+++ /dev/null
@@ -1,471 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the field module.
- */
-
-/**
- * Implements hook_schema().
- */
-function field_schema() {
-  // Static (meta) tables.
-  $schema['field_config'] = array(
-    'fields' => array(
-      'id' => array(
-        'type' => 'serial',
-        'not null' => TRUE,
-        'description' => 'The primary identifier for a field',
-      ),
-      'field_name' => array(
-        'type' => 'varchar',
-        'length' => 32,
-        'not null' => TRUE,
-        'description' => 'The name of this field. Non-deleted field names are unique, but multiple deleted fields can have the same name.',
-      ),
-      'type' => array(
-        'type' => 'varchar',
-        'length' => 128,
-        'not null' => TRUE,
-        'description' => 'The type of this field.',
-      ),
-     'module' => array(
-        'type' => 'varchar',
-        'length' => 128,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'The module that implements the field type.',
-      ),
-      'active' => array(
-        'type' => 'int',
-        'size' => 'tiny',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Boolean indicating whether the module that implements the field type is enabled.',
-      ),
-      'storage_type' => array(
-        'type' => 'varchar',
-        'length' => 128,
-        'not null' => TRUE,
-        'description' => 'The storage backend for the field.',
-      ),
-      'storage_module' => array(
-        'type' => 'varchar',
-        'length' => 128,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'The module that implements the storage backend.',
-      ),
-      'storage_active' => array(
-        'type' => 'int',
-        'size' => 'tiny',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Boolean indicating whether the module that implements the storage backend is enabled.',
-      ),
-      'locked' => array(
-        'type' => 'int',
-        'size' => 'tiny',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => '@TODO',
-      ),
-      'data' => array(
-        'type' => 'blob',
-        'size' => 'big',
-        'not null' => TRUE,
-        'serialize' => TRUE,
-        'description' => 'Serialized data containing the field properties that do not warrant a dedicated column.',
-      ),
-      'cardinality' => array(
-        'type' => 'int',
-        'size' => 'tiny',
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-      'translatable' => array(
-        'type' => 'int',
-        'size' => 'tiny',
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-      'deleted' => array(
-        'type' => 'int',
-        'size' => 'tiny',
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-    ),
-    'primary key' => array('id'),
-    'indexes' => array(
-      'field_name' => array('field_name'),
-      // Used by field_sync_field_status().
-      'active' => array('active'),
-      'storage_active' => array('storage_active'),
-      'deleted' => array('deleted'),
-      // Used by field_modules_disabled().
-      'module' => array('module'),
-      'storage_module' => array('storage_module'),
-      'type' => array('type'),
-      'storage_type' => array('storage_type'),
-    ),
-  );
-  $schema['field_config_instance'] = array(
-    'fields' => array(
-      'id' => array(
-        'type' => 'serial',
-        'not null' => TRUE,
-        'description' => 'The primary identifier for a field instance',
-      ),
-      'field_id' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'description' => 'The identifier of the field attached by this instance',
-      ),
-      'field_name' => array(
-        'type' => 'varchar',
-        'length' => 32,
-        'not null' => TRUE,
-        'default' => ''
-      ),
-      'entity_type' => array(
-        'type' => 'varchar',
-        'length' => 32,
-        'not null' => TRUE,
-        'default' => ''
-      ),
-      'bundle' => array(
-        'type' => 'varchar',
-        'length' => 128,
-        'not null' => TRUE,
-        'default' => ''
-      ),
-      'data' => array(
-        'type' => 'blob',
-        'size' => 'big',
-        'not null' => TRUE,
-        'serialize' => TRUE,
-      ),
-      'deleted' => array(
-        'type' => 'int',
-        'size' => 'tiny',
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-    ),
-    'primary key' => array('id'),
-    'indexes' => array(
-      // Used by field_delete_instance().
-      'field_name_bundle' => array('field_name', 'entity_type', 'bundle'),
-      // Used by field_read_instances().
-      'deleted' => array('deleted'),
-    ),
-  );
-  $schema['cache_field'] = drupal_get_schema_unprocessed('system', 'cache');
-
-  return $schema;
-}
-
-/**
- * Utility function: create a field by writing directly to the database.
- *
- * This function can be used for databases whose schema is at field module
- * version 7000 or higher.
- *
- * @ingroup update_api
- */
-function _update_7000_field_create_field(&$field) {
-  // Merge in default values.`
-  $field += array(
-    'entity_types' => array(),
-    'cardinality' => 1,
-    'translatable' => FALSE,
-    'locked' => FALSE,
-    'settings' => array(),
-    'indexes' => array(),
-    'deleted' => 0,
-    'active' => 1,
-  );
-
-  // Set storage.
-  $field['storage'] = array(
-    'type' => 'field_sql_storage',
-    'settings' => array(),
-    'module' => 'field_sql_storage',
-    'active' => 1,
-  );
-
-  // Fetch the field schema to initialize columns and indexes. The field module
-  // is not guaranteed to be loaded at this point.
-  module_load_install($field['module']);
-  $schema = (array) module_invoke($field['module'], 'field_schema', $field);
-  $schema += array('columns' => array(), 'indexes' => array());
-  // 'columns' are hardcoded in the field type.
-  $field['columns'] = $schema['columns'];
-  // 'indexes' can be both hardcoded in the field type, and specified in the
-  // incoming $field definition.
-  $field['indexes'] += $schema['indexes'];
-
-  // The serialized 'data' column contains everything from $field that does not
-  // have its own column and is not automatically populated when the field is
-  // read.
-  $data = $field;
-  unset($data['columns'], $data['field_name'], $data['type'], $data['active'], $data['module'], $data['storage_type'], $data['storage_active'], $data['storage_module'], $data['locked'], $data['cardinality'], $data['deleted']);
-  // Additionally, do not save the 'bundles' property populated by
-  // field_info_field().
-  unset($data['bundles']);
-
-  // Write the field to the database.
-  $record = array(
-    'field_name' => $field['field_name'],
-    'type' => $field['type'],
-    'module' => $field['module'],
-    'active' => (int) $field['active'],
-    'storage_type' => $field['storage']['type'],
-    'storage_module' => $field['storage']['module'],
-    'storage_active' => (int) $field['storage']['active'],
-    'locked' => (int) $field['locked'],
-    'data' => serialize($data),
-    'cardinality' => $field['cardinality'],
-    'translatable' => (int) $field['translatable'],
-    'deleted' => (int) $field['deleted'],
-  );
-  // We don't use drupal_write_record() here because it depends on the schema.
-  $field['id'] = db_insert('field_config')
-    ->fields($record)
-    ->execute();
-
-  // Create storage for the field.
-  field_sql_storage_field_storage_create_field($field);
-}
-
-/**
- * Utility function: delete a field stored in SQL storage directly from the database.
- *
- * To protect user data, this function can only be used to delete fields once
- * all information it stored is gone. Delete all data from the
- * field_data_$field_name table before calling by either manually issuing
- * delete queries against it or using _update_7000_field_delete_instance().
- *
- * This function can be used for databases whose schema is at field module
- * version 7000 or higher.
- *
- * @param $field_name
- *   The field name to delete.
- *
- * @ingroup update_api
- */
-function _update_7000_field_delete_field($field_name) {
-  $table_name = 'field_data_' . $field_name;
-  if (db_select($table_name)->range(0, 1)->countQuery()->execute()->fetchField()) {
-    $t = get_t();
-    throw new Exception($t('This function can only be used to delete fields without data'));
-  }
-  // Delete all instances.
-  db_delete('field_config_instance')
-    ->condition('field_name', $field_name)
-    ->execute();
-
-  // Nuke field data and revision tables.
-  db_drop_table($table_name);
-  db_drop_table('field_revision_' . $field_name);
-
-  // Delete the field.
-  db_delete('field_config')
-    ->condition('field_name', $field_name)
-    ->execute();
-}
-
-
-/**
- * Utility function: delete an instance and all its data of a field stored in SQL Storage.
- *
- * BEWARE: this function deletes user data from the field storage tables.
- *
- * This function is valid for a database schema version 7000.
- *
- * @ingroup update_api
- */
-function _update_7000_field_delete_instance($field_name, $entity_type, $bundle) {
-  // Delete field instance configuration data.
-  db_delete('field_config_instance')
-    ->condition('field_name', $field_name)
-    ->condition('entity_type', $entity_type)
-    ->condition('bundle', $bundle)
-    ->execute();
-
-  // Nuke data.
-  db_delete('field_data_' . $field_name)
-    ->condition('entity_type', $entity_type)
-    ->condition('bundle', $bundle)
-    ->execute();
-  db_delete('field_revision_' . $field_name)
-    ->condition('entity_type', $entity_type)
-    ->condition('bundle', $bundle)
-    ->execute();
-}
-
-/**
- * Utility function: fetch all the field definitions from the database.
- *
- * Warning: unlike the field_read_fields() API function, this function returns
- * all fields by default, including deleted and inactive fields, unless
- * specified otherwise in the $conditions parameter.
- *
- * @param $conditions
- *   An array of conditions to limit the select query to.
- * @param $key
- *   The name of the field property the return array is indexed by. Using
- *   anything else than 'id' might cause incomplete results if the $conditions
- *   do not filter out deleted fields.
- *
- * @return
- *   An array of fields matching $conditions, keyed by the property specified
- *   by the $key parameter.
- *
- * @ingroup update_api
- */
-function _update_7000_field_read_fields(array $conditions = array(), $key = 'id') {
-  $fields = array();
-  $query = db_select('field_config', 'fc', array('fetch' => PDO::FETCH_ASSOC))
-    ->fields('fc');
-  foreach ($conditions as $column => $value) {
-    $query->condition($column, $value);
-  }
-  foreach ($query->execute() as $record) {
-    $field = unserialize($record['data']);
-    $field['id'] = $record['id'];
-    $field['field_name'] = $record['field_name'];
-    $field['type'] = $record['type'];
-    $field['module'] = $record['module'];
-    $field['active'] = $record['active'];
-    $field['storage']['type'] = $record['storage_type'];
-    $field['storage']['module'] = $record['storage_module'];
-    $field['storage']['active'] = $record['storage_active'];
-    $field['locked'] = $record['locked'];
-    $field['cardinality'] = $record['cardinality'];
-    $field['translatable'] = $record['translatable'];
-    $field['deleted'] = $record['deleted'];
-
-    $fields[$field[$key]] = $field;
-  }
-  return $fields;
-}
-
-/**
- * Utility function: write a field instance directly to the database.
- *
- * This function can be used for databases whose schema is at field module
- * version 7000 or higher.
- *
- * @ingroup update_api
- */
-function _update_7000_field_create_instance($field, &$instance) {
-  // Merge in defaults.
-  $instance += array(
-    'field_id' => $field['id'],
-    'field_name' => $field['field_name'],
-    'deleted' => 0,
-  );
-
-  // The serialized 'data' column contains everything from $instance that does
-  // not have its own column and is not automatically populated when the
-  // instance is read.
-  $data = $instance;
-  unset($data['id'], $data['field_id'], $data['field_name'], $data['entity_type'], $data['bundle'], $data['deleted']);
-
-  $record = array(
-    'field_id' => $instance['field_id'],
-    'field_name' => $instance['field_name'],
-    'entity_type' => $instance['entity_type'],
-    'bundle' => $instance['bundle'],
-    'data' => serialize($data),
-    'deleted' => (int) $instance['deleted'],
-  );
-  $instance['id'] = db_insert('field_config_instance')
-    ->fields($record)
-    ->execute();
-}
-
-/**
- * @addtogroup updates-6.x-to-7.x
- * @{
- */
-
-/**
- * Field update version placeholder.
- */
-function field_update_7000() {
-  // Some update helper functions (such as _update_7000_field_create_field())
-  // modify the database directly. They can be used safely only if the database
-  // schema matches the field module schema established for Drupal 7.0 (i.e.
-  // version 7000). This function exists solely to set the schema version to
-  // 7000, so that update functions calling those helpers can do so safely
-  // by declaring a dependency on field_update_7000().
-}
-
-/**
- * Fix fields definitions created during the d6 to d7 upgrade path.
- */
-function field_update_7001() {
-  $fields = _update_7000_field_read_fields();
-  foreach ($fields as $field) {
-    // _update_7000_field_create_field() was broken in d7 RC2, and the fields
-    // created during a d6 to d7 upgrade do not correcly store the 'index'
-    // entry. See http://drupal.org/node/996160.
-
-    module_load_install($field['module']);
-    $schema = (array) module_invoke($field['module'], 'field_schema', $field);
-    $schema += array('indexes' => array());
-    // 'indexes' can be both hardcoded in the field type, and specified in the
-    // incoming $field definition.
-    $field['indexes'] += $schema['indexes'];
-
-    // Place the updated entries in the existing serialized 'data' column.
-    $data = db_query("SELECT data FROM {field_config} WHERE id = :id", array(':id' => $field['id']))->fetchField();
-    $data = unserialize($data);
-    $data['columns'] = $field['columns'];
-    $data['indexes'] = $field['indexes'];
-
-    // Save the new data.
-    $query = db_update('field_config')
-      ->condition('id', $field['id'])
-      ->fields(array('data' => serialize($data)))
-      ->execute();
-  }
-}
-
-/**
- * @} End of "addtogroup updates-6.x-to-7.x".
- */
-
-/**
- * @addtogroup updates-7.x-extra
- * @{
- */
-
-/**
- * Split the all-inclusive field_bundle_settings variable per bundle.
- */
-function field_update_7002() {
-  $settings = variable_get('field_bundle_settings', array());
-  if ($settings) {
-    foreach ($settings as $entity_type => $entity_type_settings) {
-      foreach ($entity_type_settings as $bundle => $bundle_settings) {
-        variable_set('field_bundle_settings_' . $entity_type . '__' . $bundle, $bundle_settings);
-      }
-    }
-    variable_del('field_bundle_settings');
-  }
-}
-
-/**
- * Add the FieldInfo class to the class registry.
- */
-function field_update_7003() {
-  // Empty update to force a rebuild of the registry.
-}
-
-/**
- * @} End of "addtogroup updates-7.x-extra".
- */
diff --git a/modules/field/field.multilingual.inc b/modules/field/field.multilingual.inc
deleted file mode 100644
index 4b4f01d..0000000
--- a/modules/field/field.multilingual.inc
+++ /dev/null
@@ -1,301 +0,0 @@
-<?php
-
-/**
- * @file
- * Functions implementing Field API multilingual support.
- */
-
-/**
- * @defgroup field_language Field Language API
- * @{
- * Handling of multilingual fields.
- *
- * Fields natively implement multilingual support, and all fields use the
- * following structure:
- * @code
- * $entity->{$field_name}[$langcode][$delta][$column_name]
- * @endcode
- * Every field can hold a single or multiple value for each language belonging
- * to the available languages set:
- * - For untranslatable fields this set only contains LANGUAGE_NONE.
- * - For translatable fields this set can contain any language code. By default
- *   it is the list returned by field_content_languages(), which contains all
- *   installed languages with the addition of LANGUAGE_NONE. This default can be
- *   altered by modules implementing hook_field_available_languages_alter().
- *
- * The available languages for a particular field are returned by
- * field_available_languages(). Whether a field is translatable is determined by
- * calling field_is_translatable(), which checks the $field['translatable']
- * property returned by field_info_field(), and whether there is at least one
- * translation handler available for the field. A translation handler is a
- * module registering itself via hook_entity_info() to handle field
- * translations.
- *
- * By default, _field_invoke() and _field_invoke_multiple() are processing a
- * field in all available languages, unless they are given a language
- * suggestion. Based on that suggestion, _field_language_suggestion() determines
- * the languages to act on.
- *
- * Most field_attach_*() functions act on all available languages, except for
- * the following:
- * - field_attach_form() only takes a single language code, specifying which
- *   language the field values will be submitted in.
- * - field_attach_view() requires the language the entity will be displayed in.
- *   Since it is unknown whether a field translation exists for the requested
- *   language, the translation handler is responsible for performing one of the
- *   following actions:
- *   - Ignore missing translations, i.e. do not show any field values for the
- *     requested language. For example, see locale_field_language_alter().
- *   - Provide a value in a different language as fallback. By default, the
- *     fallback logic is applied separately to each field to ensure that there
- *     is a value for each field to display.
- *   The field language fallback logic relies on the global language fallback
- *   configuration. Therefore, the displayed field values can be in the
- *   requested language, but may be different if no values for the requested
- *   language are available. The default language fallback rules inspect all the
- *   enabled languages ordered by their weight. This behavior can be altered or
- *   even disabled by modules implementing hook_field_language_alter(), making
- *   it possible to choose the first approach. The display language for each
- *   field is returned by field_language().
- *
- * See @link field Field API @endlink for information about the other parts of
- * the Field API.
- */
-
-/**
- * Implements hook_multilingual_settings_changed().
- */
-function field_multilingual_settings_changed() {
-  field_info_cache_clear();
-}
-
-/**
- * Collects the available languages for the given entity type and field.
- *
- * If the given field has language support enabled, an array of available
- * languages will be returned, otherwise only LANGUAGE_NONE will be returned.
- * Since the default value for a 'translatable' entity property is FALSE, we
- * ensure that only entities that are able to handle translations actually get
- * translatable fields.
- *
- * @param $entity_type
- *   The type of the entity the field is attached to, e.g. 'node' or 'user'.
- * @param $field
- *   A field structure.
- *
- * @return
- *   An array of valid language codes.
- */
-function field_available_languages($entity_type, $field) {
-  static $drupal_static_fast;
-  if (!isset($drupal_static_fast)) {
-    $drupal_static_fast['field_languages'] = &drupal_static(__FUNCTION__);
-  }
-  $field_languages = &$drupal_static_fast['field_languages'];
-  $field_name = $field['field_name'];
-
-  if (!isset($field_languages[$entity_type][$field_name])) {
-    // If the field has language support enabled we retrieve an (alterable) list
-    // of enabled languages, otherwise we return just LANGUAGE_NONE.
-    if (field_is_translatable($entity_type, $field)) {
-      $languages = field_content_languages();
-      // Let other modules alter the available languages.
-      $context = array('entity_type' => $entity_type, 'field' => $field);
-      drupal_alter('field_available_languages', $languages, $context);
-      $field_languages[$entity_type][$field_name] = $languages;
-    }
-    else {
-      $field_languages[$entity_type][$field_name] = array(LANGUAGE_NONE);
-    }
-  }
-
-  return $field_languages[$entity_type][$field_name];
-}
-
-/**
- * Process the given language suggestion based on the available languages.
- *
- * If a non-empty language suggestion is provided it must appear among the
- * available languages, otherwise it will be ignored.
- *
- * @param $available_languages
- *   An array of valid language codes.
- * @param $language_suggestion
- *   A language code or an array of language codes keyed by field name.
- * @param $field_name
- *   The name of the field being processed.
- *
- * @return
- *   An array of valid language codes.
- */
-function _field_language_suggestion($available_languages, $language_suggestion, $field_name) {
-  // Handle possible language suggestions.
-  if (!empty($language_suggestion)) {
-    // We might have an array of language suggestions keyed by field name.
-    if (is_array($language_suggestion) && isset($language_suggestion[$field_name])) {
-      $language_suggestion = $language_suggestion[$field_name];
-    }
-
-    // If we have a language suggestion and the suggested language is available,
-    // we return only it.
-    if (in_array($language_suggestion, $available_languages)) {
-      $available_languages = array($language_suggestion);
-    }
-  }
-
-  return $available_languages;
-}
-
-/**
- * Returns available content languages.
- *
- * The languages that may be associated to fields include LANGUAGE_NONE.
- *
- * @return
- *   An array of language codes.
- */
-function field_content_languages() {
-  return array_keys(language_list() + array(LANGUAGE_NONE => NULL));
-}
-
-/**
- * Checks whether a field has language support.
- *
- * A field has language support enabled if its 'translatable' property is set to
- * TRUE, and its entity type has at least one translation handler registered.
- *
- * @param $entity_type
- *   The type of the entity the field is attached to.
- * @param $field
- *   A field data structure.
- *
- * @return
- *   TRUE if the field can be translated.
- */
-function field_is_translatable($entity_type, $field) {
-  return $field['translatable'] && field_has_translation_handler($entity_type);
-}
-
-/**
- * Checks if a module is registered as a translation handler for a given entity.
- *
- * If no handler is passed, simply check if there is any translation handler
- * enabled for the given entity type.
- *
- * @param $entity_type
- *   The type of the entity whose fields are to be translated.
- * @param $handler
- *   (optional) The name of the handler to be checked. Defaults to NULL.
- *
- * @return
- *   TRUE, if the given handler is allowed to manage field translations. If no
- *   handler is passed, TRUE means there is at least one registered translation
- *   handler.
- */
-function field_has_translation_handler($entity_type, $handler = NULL) {
-  $entity_info = entity_get_info($entity_type);
-
-  if (isset($handler)) {
-    return !empty($entity_info['translation'][$handler]);
-  }
-  elseif (isset($entity_info['translation'])) {
-    foreach ($entity_info['translation'] as $handler_info) {
-      // The translation handler must use a non-empty data structure.
-      if (!empty($handler_info)) {
-        return TRUE;
-      }
-    }
-  }
-
-  return FALSE;
-}
-
-/**
- * Ensures that a given language code is valid.
- *
- * Checks whether the given language is one of the enabled languages. Otherwise,
- * it returns the current, global language; or the site's default language, if
- * the additional parameter $default is TRUE.
- *
- * @param $langcode
- *   The language code to validate.
- * @param $default
- *   Whether to return the default language code or the current language code in
- *   case $langcode is invalid.
- * @return
- *   A valid language code.
- */
-function field_valid_language($langcode, $default = TRUE) {
-  $enabled_languages = field_content_languages();
-  if (in_array($langcode, $enabled_languages)) {
-    return $langcode;
-  }
-  global $language_content;
-  return $default ? language_default('language') : $language_content->language;
-}
-
-/**
- * Returns the display language for the fields attached to the given entity.
- *
- * The actual language for each given field is determined based on the requested
- * language and the actual data available in the fields themselves.
- * If there is no registered translation handler for the given entity type, the
- * display language to be used is just LANGUAGE_NONE, as no other language code
- * is allowed by field_available_languages().
- * If translation handlers are found, we let modules provide alternative display
- * languages for fields not having the requested language available.
- * Core language fallback rules are provided by locale_field_language_fallback()
- * which is called by locale_field_language_alter().
- *
- * @param $entity_type
- *   The type of $entity.
- * @param $entity
- *   The entity to be displayed.
- * @param $field_name
- *   (optional) The name of the field to be displayed. Defaults to NULL. If
- *   no value is specified, the display languages for every field attached to
- *   the given entity will be returned.
- * @param $langcode
- *   (optional) The language code $entity has to be displayed in. Defaults to
- *   NULL. If no value is given the current language will be used.
- *
- * @return
- *   A language code if a field name is specified, an array of language codes
- *   keyed by field name otherwise.
- */
-function field_language($entity_type, $entity, $field_name = NULL, $langcode = NULL) {
-  $display_languages = &drupal_static(__FUNCTION__, array());
-  list($id, , $bundle) = entity_extract_ids($entity_type, $entity);
-  $langcode = field_valid_language($langcode, FALSE);
-
-  if (!isset($display_languages[$entity_type][$id][$langcode])) {
-    $display_language = array();
-
-    // By default display language is set to LANGUAGE_NONE if the field
-    // translation is not available. It is up to translation handlers to
-    // implement language fallback rules.
-    foreach (field_info_instances($entity_type, $bundle) as $instance) {
-      $display_language[$instance['field_name']] = isset($entity->{$instance['field_name']}[$langcode]) ? $langcode : LANGUAGE_NONE;
-    }
-
-    if (field_has_translation_handler($entity_type)) {
-      $context = array(
-        'entity_type' => $entity_type,
-        'entity' => $entity,
-        'language' => $langcode,
-      );
-      drupal_alter('field_language', $display_language, $context);
-    }
-
-    $display_languages[$entity_type][$id][$langcode] = $display_language;
-  }
-
-  $display_language = $display_languages[$entity_type][$id][$langcode];
-
-  // Single-field mode.
-  if (isset($field_name)) {
-    return isset($display_language[$field_name]) ? $display_language[$field_name] : FALSE;
-  }
-
-  return $display_language;
-}
diff --git a/modules/field/modules/field_sql_storage/field_sql_storage.info b/modules/field/modules/field_sql_storage/field_sql_storage.info
deleted file mode 100644
index 9313850..0000000
--- a/modules/field/modules/field_sql_storage/field_sql_storage.info
+++ /dev/null
@@ -1,8 +0,0 @@
-name = Field SQL storage
-description = Stores field data in an SQL database.
-package = Core
-version = VERSION
-core = 7.x
-dependencies[] = field
-files[] = field_sql_storage.test
-required = TRUE
diff --git a/modules/field/modules/field_sql_storage/field_sql_storage.install b/modules/field/modules/field_sql_storage/field_sql_storage.install
deleted file mode 100644
index 24973ab..0000000
--- a/modules/field/modules/field_sql_storage/field_sql_storage.install
+++ /dev/null
@@ -1,215 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the field_sql_storage module.
- */
-
-/**
- * Implements hook_schema().
- */
-function field_sql_storage_schema() {
-  $schema = array();
-
-  // Dynamic (data) tables.
-  if (db_table_exists('field_config')) {
-    $fields = field_read_fields(array(), array('include_deleted' => TRUE, 'include_inactive' => TRUE));
-    drupal_load('module', 'field_sql_storage');
-    foreach ($fields as $field) {
-      if ($field['storage']['type'] == 'field_sql_storage') {
-        $schema += _field_sql_storage_schema($field);
-      }
-    }
-  }
-  return $schema;
-}
-
-/**
- * Utility function: write field data directly to SQL storage.
- *
- * This function can be used for databases whose schema is at field module
- * version 7000 or higher.
- *
- * @ingroup update_api
- */
-function _update_7000_field_sql_storage_write($entity_type, $bundle, $entity_id, $revision_id, $field_name, $data) {
-  $table_name = "field_data_{$field_name}";
-  $revision_name = "field_revision_{$field_name}";
-
-  db_delete($table_name)
-    ->condition('entity_type', $entity_type)
-    ->condition('entity_id', $entity_id)
-    ->execute();
-  db_delete($revision_name)
-    ->condition('entity_type', $entity_type)
-    ->condition('entity_id', $entity_id)
-    ->condition('revision_id', $revision_id)
-    ->execute();
-
-  $columns = array();
-  foreach ($data as $langcode => $items) {
-    foreach ($items as $delta => $item) {
-      $record = array(
-        'entity_type' => $entity_type,
-        'entity_id' => $entity_id,
-        'revision_id' => $revision_id,
-        'bundle' => $bundle,
-        'delta' => $delta,
-        'language' => $langcode,
-      );
-      foreach ($item as $column => $value) {
-        $record[_field_sql_storage_columnname($field_name, $column)] = $value;
-      }
-
-      $records[] = $record;
-      // Record the columns used.
-      $columns += $record;
-    }
-  }
-
-  if ($columns) {
-    $query = db_insert($table_name)->fields(array_keys($columns));
-    $revision_query = db_insert($revision_name)->fields(array_keys($columns));
-    foreach ($records as $record) {
-      $query->values($record);
-      if ($revision_id) {
-        $revision_query->values($record);
-      }
-    }
-    $query->execute();
-    $revision_query->execute();
-  }
-}
-
-/**
- * @addtogroup updates-6.x-to-7.x
- * @{
- */
-
-/**
- * Field SQL storage update version placeholder.
- */
-function field_sql_storage_update_7000() {
-  // Some update helper functions (such as
-  // _update_7000_field_sql_storage_write()) modify the database directly. They
-  // can be used safely only if the database schema matches the field module
-  // schema established for Drupal 7.0 (i.e. version 7000). This function exists
-  // solely to set the schema version to 7000, so that update functions calling
-  // those helpers can do so safely by declaring a dependency on
-  // field_sql_storage_update_7000().
-}
-
-/**
- * Remove the field_config_entity_type table and store 'entity_type' strings.
- */
-function field_sql_storage_update_7001(&$sandbox) {
-  if (!isset($sandbox['progress'])) {
-    // Collect current etids.
-    $sandbox['etids'] = db_query('SELECT etid, type FROM {field_config_entity_type}')->fetchAllKeyed();
-
-    // Collect affected tables: field data, field revision data, 'deleted'
-    // tables.
-    $sandbox['tables'] = array();
-    $results = db_select('field_config', 'fc', array('fetch' => PDO::FETCH_ASSOC))
-      ->fields('fc')
-      ->condition('storage_module', 'field_sql_storage')
-      ->execute();
-    foreach ($results as $field) {
-      if ($field['deleted']) {
-        $sandbox['tables']["field_deleted_data_{$field['id']}"] = 'data';
-        $sandbox['tables']["field_deleted_revision_{$field['id']}"] = 'revision';
-      }
-      else {
-        $sandbox['tables']["field_data_{$field['field_name']}"] = 'data';
-        $sandbox['tables']["field_revision_{$field['field_name']}"] = 'revision';
-      }
-    }
-    reset($sandbox['tables']);
-
-    $sandbox['total'] = count($sandbox['tables']);
-    $sandbox['progress'] = 0;
-  }
-
-  if ($sandbox['tables']) {
-    // Grab the next table to process.
-    $table = key($sandbox['tables']);
-    $type = array_shift($sandbox['tables']);
-
-    if (db_table_exists($table)) {
-      // Add the 'entity_type' column.
-      if (!db_field_exists($table, 'entity_type')) {
-        $column = array(
-          'type' => 'varchar',
-          'length' => 128,
-          'not null' => TRUE,
-          'default' => '',
-          'description' => 'The entity type this data is attached to.',
-        );
-        db_add_field($table, 'entity_type', $column);
-
-        // Populate the 'entity_type' column based on the 'etid' column.
-        foreach ($sandbox['etids'] as $etid => $entity_type) {
-          db_update($table)
-            ->fields(array('entity_type' => $entity_type))
-            ->condition('etid', $etid)
-            ->execute();
-        }
-
-        // Index the new column.
-        db_add_index($table, 'entity_type', array('entity_type'));
-      }
-
-      // Use the 'entity_type' column in the primary key.
-      db_drop_primary_key($table);
-      $primary_keys = array(
-        'data' => array('entity_type', 'entity_id', 'deleted', 'delta', 'language'),
-        'revision' => array('entity_type', 'entity_id', 'revision_id', 'deleted', 'delta', 'language'),
-      );
-      db_add_primary_key($table, $primary_keys[$type]);
-
-      // Drop the 'etid' column.
-      if (db_field_exists($table, 'etid')) {
-        db_drop_field($table, 'etid');
-      }
-    }
-
-    // Report progress.
-    $sandbox['progress']++;
-    $sandbox['#finished'] = min(0.99, $sandbox['progress'] / $sandbox['total']);
-  }
-  else {
-    // No more tables left: drop the field_config_entity_type table.
-    db_drop_table('field_config_entity_type');
-
-    // Drop the previous 'field_sql_storage_ENTITYTYPE_etid' system variables.
-    foreach ($sandbox['etids'] as $etid => $entity_type) {
-      variable_del('field_sql_storage_' . $entity_type . '_etid');
-    }
-
-    // We're done.
-    $sandbox['#finished'] = 1;
-  }
-}
-
-/**
- * Fix primary keys in field revision data tables.
- */
-function field_sql_storage_update_7002() {
-  $results = db_select('field_config', 'fc', array('fetch' => PDO::FETCH_ASSOC))
-    ->fields('fc')
-    ->condition('storage_module', 'field_sql_storage')
-    ->execute();
-  foreach ($results as $field) {
-    // Revision tables of deleted fields do not need to be fixed, since no new
-    // data is written to them.
-    if (!$field['deleted']) {
-      $table = "field_revision_{$field['field_name']}";
-      db_drop_primary_key($table);
-      db_add_primary_key($table, array('entity_type', 'entity_id', 'revision_id', 'deleted', 'delta', 'language'));
-    }
-  }
-}
-
-/**
- * @} End of "addtogroup updates-6.x-to-7.x".
- */
diff --git a/modules/field/modules/field_sql_storage/field_sql_storage.module b/modules/field/modules/field_sql_storage/field_sql_storage.module
deleted file mode 100644
index 93f2077..0000000
--- a/modules/field/modules/field_sql_storage/field_sql_storage.module
+++ /dev/null
@@ -1,758 +0,0 @@
-<?php
-
-/**
- * @file
- * Default implementation of the field storage API.
- */
-
-/**
- * Implements hook_help().
- */
-function field_sql_storage_help($path, $arg) {
-  switch ($path) {
-    case 'admin/help#field_sql_storage':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Field SQL storage module stores field data in the database. It is the default field storage module; other field storage mechanisms may be available as contributed modules. See the <a href="@field-help">Field module help page</a> for more information about fields.', array('@field-help' => url('admin/help/field'))) . '</p>';
-      return $output;
-  }
-}
-
-/**
- * Implements hook_field_storage_info().
- */
-function field_sql_storage_field_storage_info() {
-  return array(
-    'field_sql_storage' => array(
-      'label' => t('Default SQL storage'),
-      'description' => t('Stores fields in the local SQL database, using per-field tables.'),
-    ),
-  );
-}
-
-/**
- * Generate a table name for a field data table.
- *
- * @param $field
- *   The field structure.
- * @return
- *   A string containing the generated name for the database table
- */
-function _field_sql_storage_tablename($field) {
-  if ($field['deleted']) {
-    return "field_deleted_data_{$field['id']}";
-  }
-  else {
-    return "field_data_{$field['field_name']}";
-  }
-}
-
-/**
- * Generate a table name for a field revision archive table.
- *
- * @param $name
- *   The field structure.
- * @return
- *   A string containing the generated name for the database table
- */
-function _field_sql_storage_revision_tablename($field) {
-  if ($field['deleted']) {
-    return "field_deleted_revision_{$field['id']}";
-  }
-  else {
-    return "field_revision_{$field['field_name']}";
-  }
-}
-
-/**
- * Generate a column name for a field data table.
- *
- * @param $name
- *   The name of the field
- * @param $column
- *   The name of the column
- * @return
- *   A string containing a generated column name for a field data
- *   table that is unique among all other fields.
- */
-function _field_sql_storage_columnname($name, $column) {
-  return $name . '_' . $column;
-}
-
-/**
- * Generate an index name for a field data table.
- *
- * @param $name
- *   The name of the field
- * @param $column
- *   The name of the index
- * @return
- *   A string containing a generated index name for a field data
- *   table that is unique among all other fields.
- */
-function _field_sql_storage_indexname($name, $index) {
-  return $name . '_' . $index;
-}
-
-/**
- * Return the database schema for a field. This may contain one or
- * more tables. Each table will contain the columns relevant for the
- * specified field. Leave the $field's 'columns' and 'indexes' keys
- * empty to get only the base schema.
- *
- * @param $field
- *   The field structure for which to generate a database schema.
- * @return
- *   One or more tables representing the schema for the field.
- */
-function _field_sql_storage_schema($field) {
-  $deleted = $field['deleted'] ? 'deleted ' : '';
-  $current = array(
-    'description' => "Data storage for {$deleted}field {$field['id']} ({$field['field_name']})",
-    'fields' => array(
-      'entity_type' => array(
-        'type' => 'varchar',
-        'length' => 128,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'The entity type this data is attached to',
-      ),
-      'bundle' => array(
-        'type' => 'varchar',
-        'length' => 128,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'The field instance bundle to which this row belongs, used when deleting a field instance',
-      ),
-      'deleted' => array(
-        'type' => 'int',
-        'size' => 'tiny',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'A boolean indicating whether this data item has been deleted'
-      ),
-      'entity_id' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'description' => 'The entity id this data is attached to',
-      ),
-      'revision_id' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => FALSE,
-        'description' => 'The entity revision id this data is attached to, or NULL if the entity type is not versioned',
-      ),
-      // @todo Consider storing language as integer.
-      'language' => array(
-        'type' => 'varchar',
-        'length' => 32,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'The language for this data item.',
-      ),
-      'delta' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'description' => 'The sequence number for this data item, used for multi-value fields',
-      ),
-    ),
-    'primary key' => array('entity_type', 'entity_id', 'deleted', 'delta', 'language'),
-    'indexes' => array(
-      'entity_type' => array('entity_type'),
-      'bundle' => array('bundle'),
-      'deleted' => array('deleted'),
-      'entity_id' => array('entity_id'),
-      'revision_id' => array('revision_id'),
-      'language' => array('language'),
-    ),
-  );
-
-  $field += array('columns' => array(), 'indexes' => array(), 'foreign keys' => array());
-  // Add field columns.
-  foreach ($field['columns'] as $column_name => $attributes) {
-    $real_name = _field_sql_storage_columnname($field['field_name'], $column_name);
-    $current['fields'][$real_name] = $attributes;
-  }
-
-  // Add indexes.
-  foreach ($field['indexes'] as $index_name => $columns) {
-    $real_name = _field_sql_storage_indexname($field['field_name'], $index_name);
-    foreach ($columns as $column_name) {
-      $current['indexes'][$real_name][] = _field_sql_storage_columnname($field['field_name'], $column_name);
-    }
-  }
-
-  // Add foreign keys.
-  foreach ($field['foreign keys'] as $specifier => $specification) {
-    $real_name = _field_sql_storage_indexname($field['field_name'], $specifier);
-    $current['foreign keys'][$real_name]['table'] = $specification['table'];
-    foreach ($specification['columns'] as $column_name => $referenced) {
-      $sql_storage_column = _field_sql_storage_columnname($field['field_name'], $column_name);
-      $current['foreign keys'][$real_name]['columns'][$sql_storage_column] = $referenced;
-    }
-  }
-
-  // Construct the revision table.
-  $revision = $current;
-  $revision['description'] = "Revision archive storage for {$deleted}field {$field['id']} ({$field['field_name']})";
-  $revision['primary key'] = array('entity_type', 'entity_id', 'revision_id', 'deleted', 'delta', 'language');
-  $revision['fields']['revision_id']['not null'] = TRUE;
-  $revision['fields']['revision_id']['description'] = 'The entity revision id this data is attached to';
-
-  return array(
-    _field_sql_storage_tablename($field) => $current,
-    _field_sql_storage_revision_tablename($field) => $revision,
-  );
-}
-
-/**
- * Implements hook_field_storage_create_field().
- */
-function field_sql_storage_field_storage_create_field($field) {
-  $schema = _field_sql_storage_schema($field);
-  foreach ($schema as $name => $table) {
-    db_create_table($name, $table);
-  }
-  drupal_get_schema(NULL, TRUE);
-}
-
-/**
- * Implements hook_field_update_forbid().
- *
- * Forbid any field update that changes column definitions if there is
- * any data.
- */
-function field_sql_storage_field_update_forbid($field, $prior_field, $has_data) {
-  if ($has_data && $field['columns'] != $prior_field['columns']) {
-    throw new FieldUpdateForbiddenException("field_sql_storage cannot change the schema for an existing field with data.");
-  }
-}
-
-/**
- * Implements hook_field_storage_update_field().
- */
-function field_sql_storage_field_storage_update_field($field, $prior_field, $has_data) {
-  if (! $has_data) {
-    // There is no data. Re-create the tables completely.
-
-    if (Database::getConnection()->supportsTransactionalDDL()) {
-      // If the database supports transactional DDL, we can go ahead and rely
-      // on it. If not, we will have to rollback manually if something fails.
-      $transaction = db_transaction();
-    }
-
-    try {
-      $prior_schema = _field_sql_storage_schema($prior_field);
-      foreach ($prior_schema as $name => $table) {
-        db_drop_table($name, $table);
-      }
-      $schema = _field_sql_storage_schema($field);
-      foreach ($schema as $name => $table) {
-        db_create_table($name, $table);
-      }
-    }
-    catch (Exception $e) {
-      if (Database::getConnection()->supportsTransactionalDDL()) {
-        $transaction->rollback();
-      }
-      else {
-        // Recreate tables.
-        $prior_schema = _field_sql_storage_schema($prior_field);
-        foreach ($prior_schema as $name => $table) {
-          if (!db_table_exists($name)) {
-            db_create_table($name, $table);
-          }
-        }
-      }
-      throw $e;
-    }
-  }
-  else {
-    // There is data, so there are no column changes. Drop all the
-    // prior indexes and create all the new ones, except for all the
-    // priors that exist unchanged.
-    $table = _field_sql_storage_tablename($prior_field);
-    $revision_table = _field_sql_storage_revision_tablename($prior_field);
-    foreach ($prior_field['indexes'] as $name => $columns) {
-      if (!isset($field['indexes'][$name]) || $columns != $field['indexes'][$name]) {
-        $real_name = _field_sql_storage_indexname($field['field_name'], $name);
-        db_drop_index($table, $real_name);
-        db_drop_index($revision_table, $real_name);
-      }
-    }
-    $table = _field_sql_storage_tablename($field);
-    $revision_table = _field_sql_storage_revision_tablename($field);
-    foreach ($field['indexes'] as $name => $columns) {
-      if (!isset($prior_field['indexes'][$name]) || $columns != $prior_field['indexes'][$name]) {
-        $real_name = _field_sql_storage_indexname($field['field_name'], $name);
-        $real_columns = array();
-        foreach ($columns as $column_name) {
-          $real_columns[] = _field_sql_storage_columnname($field['field_name'], $column_name);
-        }
-        db_add_index($table, $real_name, $real_columns);
-        db_add_index($revision_table, $real_name, $real_columns);
-      }
-    }
-  }
-  drupal_get_schema(NULL, TRUE);
-}
-
-/**
- * Implements hook_field_storage_delete_field().
- */
-function field_sql_storage_field_storage_delete_field($field) {
-  // Mark all data associated with the field for deletion.
-  $field['deleted'] = 0;
-  $table = _field_sql_storage_tablename($field);
-  $revision_table = _field_sql_storage_revision_tablename($field);
-  db_update($table)
-    ->fields(array('deleted' => 1))
-    ->execute();
-
-  // Move the table to a unique name while the table contents are being deleted.
-  $field['deleted'] = 1;
-  $new_table = _field_sql_storage_tablename($field);
-  $revision_new_table = _field_sql_storage_revision_tablename($field);
-  db_rename_table($table, $new_table);
-  db_rename_table($revision_table, $revision_new_table);
-  drupal_get_schema(NULL, TRUE);
-}
-
-/**
- * Implements hook_field_storage_load().
- */
-function field_sql_storage_field_storage_load($entity_type, $entities, $age, $fields, $options) {
-  $load_current = $age == FIELD_LOAD_CURRENT;
-
-  foreach ($fields as $field_id => $ids) {
-    // By the time this hook runs, the relevant field definitions have been
-    // populated and cached in FieldInfo, so calling field_info_field_by_id()
-    // on each field individually is more efficient than loading all fields in
-    // memory upfront with field_info_field_by_ids().
-    $field = field_info_field_by_id($field_id);
-    $field_name = $field['field_name'];
-    $table = $load_current ? _field_sql_storage_tablename($field) : _field_sql_storage_revision_tablename($field);
-
-    $query = db_select($table, 't')
-      ->fields('t')
-      ->condition('entity_type', $entity_type)
-      ->condition($load_current ? 'entity_id' : 'revision_id', $ids, 'IN')
-      ->condition('language', field_available_languages($entity_type, $field), 'IN')
-      ->orderBy('delta');
-
-    if (empty($options['deleted'])) {
-      $query->condition('deleted', 0);
-    }
-
-    $results = $query->execute();
-
-    $delta_count = array();
-    foreach ($results as $row) {
-      if (!isset($delta_count[$row->entity_id][$row->language])) {
-        $delta_count[$row->entity_id][$row->language] = 0;
-      }
-
-      if ($field['cardinality'] == FIELD_CARDINALITY_UNLIMITED || $delta_count[$row->entity_id][$row->language] < $field['cardinality']) {
-        $item = array();
-        // For each column declared by the field, populate the item
-        // from the prefixed database column.
-        foreach ($field['columns'] as $column => $attributes) {
-          $column_name = _field_sql_storage_columnname($field_name, $column);
-          $item[$column] = $row->$column_name;
-        }
-
-        // Add the item to the field values for the entity.
-        $entities[$row->entity_id]->{$field_name}[$row->language][] = $item;
-        $delta_count[$row->entity_id][$row->language]++;
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_field_storage_write().
- */
-function field_sql_storage_field_storage_write($entity_type, $entity, $op, $fields) {
-  list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
-  if (!isset($vid)) {
-    $vid = $id;
-  }
-
-  foreach ($fields as $field_id) {
-    $field = field_info_field_by_id($field_id);
-    $field_name = $field['field_name'];
-    $table_name = _field_sql_storage_tablename($field);
-    $revision_name = _field_sql_storage_revision_tablename($field);
-
-    $all_languages = field_available_languages($entity_type, $field);
-    $field_languages = array_intersect($all_languages, array_keys((array) $entity->$field_name));
-
-    // Delete and insert, rather than update, in case a value was added.
-    if ($op == FIELD_STORAGE_UPDATE) {
-      // Delete languages present in the incoming $entity->$field_name.
-      // Delete all languages if $entity->$field_name is empty.
-      $languages = !empty($entity->$field_name) ? $field_languages : $all_languages;
-      if ($languages) {
-        db_delete($table_name)
-          ->condition('entity_type', $entity_type)
-          ->condition('entity_id', $id)
-          ->condition('language', $languages, 'IN')
-          ->execute();
-        db_delete($revision_name)
-          ->condition('entity_type', $entity_type)
-          ->condition('entity_id', $id)
-          ->condition('revision_id', $vid)
-          ->condition('language', $languages, 'IN')
-          ->execute();
-      }
-    }
-
-    // Prepare the multi-insert query.
-    $do_insert = FALSE;
-    $columns = array('entity_type', 'entity_id', 'revision_id', 'bundle', 'delta', 'language');
-    foreach ($field['columns'] as $column => $attributes) {
-      $columns[] = _field_sql_storage_columnname($field_name, $column);
-    }
-    $query = db_insert($table_name)->fields($columns);
-    $revision_query = db_insert($revision_name)->fields($columns);
-
-    foreach ($field_languages as $langcode) {
-      $items = (array) $entity->{$field_name}[$langcode];
-      $delta_count = 0;
-      foreach ($items as $delta => $item) {
-        // We now know we have someting to insert.
-        $do_insert = TRUE;
-        $record = array(
-          'entity_type' => $entity_type,
-          'entity_id' => $id,
-          'revision_id' => $vid,
-          'bundle' => $bundle,
-          'delta' => $delta,
-          'language' => $langcode,
-        );
-        foreach ($field['columns'] as $column => $attributes) {
-          $record[_field_sql_storage_columnname($field_name, $column)] = isset($item[$column]) ? $item[$column] : NULL;
-        }
-        $query->values($record);
-        if (isset($vid)) {
-          $revision_query->values($record);
-        }
-
-        if ($field['cardinality'] != FIELD_CARDINALITY_UNLIMITED && ++$delta_count == $field['cardinality']) {
-          break;
-        }
-      }
-    }
-
-    // Execute the query if we have values to insert.
-    if ($do_insert) {
-      $query->execute();
-      $revision_query->execute();
-    }
-  }
-}
-
-/**
- * Implements hook_field_storage_delete().
- *
- * This function deletes data for all fields for an entity from the database.
- */
-function field_sql_storage_field_storage_delete($entity_type, $entity, $fields) {
-  list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
-
-  foreach (field_info_instances($entity_type, $bundle) as $instance) {
-    if (isset($fields[$instance['field_id']])) {
-      $field = field_info_field_by_id($instance['field_id']);
-      field_sql_storage_field_storage_purge($entity_type, $entity, $field, $instance);
-    }
-  }
-}
-
-/**
- * Implements hook_field_storage_purge().
- *
- * This function deletes data from the database for a single field on
- * an entity.
- */
-function field_sql_storage_field_storage_purge($entity_type, $entity, $field, $instance) {
-  list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
-
-  $table_name = _field_sql_storage_tablename($field);
-  $revision_name = _field_sql_storage_revision_tablename($field);
-  db_delete($table_name)
-    ->condition('entity_type', $entity_type)
-    ->condition('entity_id', $id)
-    ->execute();
-  db_delete($revision_name)
-    ->condition('entity_type', $entity_type)
-    ->condition('entity_id', $id)
-    ->execute();
-}
-
-/**
- * Implements hook_field_storage_query().
- */
-function field_sql_storage_field_storage_query(EntityFieldQuery $query) {
-  if ($query->age == FIELD_LOAD_CURRENT) {
-    $tablename_function = '_field_sql_storage_tablename';
-    $id_key = 'entity_id';
-  }
-  else {
-    $tablename_function = '_field_sql_storage_revision_tablename';
-    $id_key = 'revision_id';
-  }
-  $table_aliases = array();
-  // Add tables for the fields used.
-  foreach ($query->fields as $key => $field) {
-    $tablename = $tablename_function($field);
-    // Every field needs a new table.
-    $table_alias = $tablename . $key;
-    $table_aliases[$key] = $table_alias;
-    if ($key) {
-      $select_query->join($tablename, $table_alias, "$table_alias.entity_type = $field_base_table.entity_type AND $table_alias.$id_key = $field_base_table.$id_key");
-    }
-    else {
-      $select_query = db_select($tablename, $table_alias);
-      // Allow queries internal to the Field API to opt out of the access
-      // check, for situations where the query's results should not depend on
-      // the access grants for the current user.
-      if (!isset($query->tags['DANGEROUS_ACCESS_CHECK_OPT_OUT'])) {
-        $select_query->addTag('entity_field_access');
-      }
-      $select_query->addMetaData('base_table', $tablename);
-      $select_query->fields($table_alias, array('entity_type', 'entity_id', 'revision_id', 'bundle'));
-      $field_base_table = $table_alias;
-    }
-    if ($field['cardinality'] != 1 || $field['translatable']) {
-      $select_query->distinct();
-    }
-  }
-
-  // Add field conditions. We need a fresh grouping cache.
-  drupal_static_reset('_field_sql_storage_query_field_conditions');
-  _field_sql_storage_query_field_conditions($query, $select_query, $query->fieldConditions, $table_aliases, '_field_sql_storage_columnname');
-
-  // Add field meta conditions.
-  _field_sql_storage_query_field_conditions($query, $select_query, $query->fieldMetaConditions, $table_aliases, '_field_sql_storage_query_columnname');
-
-  if (isset($query->deleted)) {
-    $select_query->condition("$field_base_table.deleted", (int) $query->deleted);
-  }
-
-  // Is there a need to sort the query by property?
-  $has_property_order = FALSE;
-  foreach ($query->order as $order) {
-    if ($order['type'] == 'property') {
-      $has_property_order = TRUE;
-    }
-  }
-
-  if ($query->propertyConditions || $has_property_order) {
-    if (empty($query->entityConditions['entity_type']['value'])) {
-      throw new EntityFieldQueryException('Property conditions and orders must have an entity type defined.');
-    }
-    $entity_type = $query->entityConditions['entity_type']['value'];
-    $entity_base_table = _field_sql_storage_query_join_entity($select_query, $entity_type, $field_base_table);
-    $query->entityConditions['entity_type']['operator'] = '=';
-    foreach ($query->propertyConditions as $property_condition) {
-      $query->addCondition($select_query, "$entity_base_table." . $property_condition['column'], $property_condition);
-    }
-  }
-  foreach ($query->entityConditions as $key => $condition) {
-    $query->addCondition($select_query, "$field_base_table.$key", $condition);
-  }
-
-  // Order the query.
-  foreach ($query->order as $order) {
-    if ($order['type'] == 'entity') {
-      $key = $order['specifier'];
-      $select_query->orderBy("$field_base_table.$key", $order['direction']);
-    }
-    elseif ($order['type'] == 'field') {
-      $specifier = $order['specifier'];
-      $field = $specifier['field'];
-      $table_alias = $table_aliases[$specifier['index']];
-      $sql_field = "$table_alias." . _field_sql_storage_columnname($field['field_name'], $specifier['column']);
-      $select_query->orderBy($sql_field, $order['direction']);
-    }
-    elseif ($order['type'] == 'property') {
-      $select_query->orderBy("$entity_base_table." . $order['specifier'], $order['direction']);
-    }
-  }
-
-  return $query->finishQuery($select_query, $id_key);
-}
-
-/**
- * Adds the base entity table to a field query object.
- *
- * @param SelectQuery $select_query
- *   A SelectQuery containing at least one table as specified by
- *   _field_sql_storage_tablename().
- * @param $entity_type
- *   The entity type for which the base table should be joined.
- * @param $field_base_table
- *   Name of a table in $select_query. As only INNER JOINs are used, it does
- *   not matter which.
- *
- * @return
- *   The name of the entity base table joined in.
- */
-function _field_sql_storage_query_join_entity(SelectQuery $select_query, $entity_type, $field_base_table) {
-  $entity_info = entity_get_info($entity_type);
-  $entity_base_table = $entity_info['base table'];
-  $entity_field = $entity_info['entity keys']['id'];
-  $select_query->join($entity_base_table, $entity_base_table, "$entity_base_table.$entity_field = $field_base_table.entity_id");
-  return $entity_base_table;
-}
-
-/**
- * Adds field (meta) conditions to the given query objects respecting groupings.
- *
- * @param EntityFieldQuery $query
- *   The field query object to be processed.
- * @param SelectQuery $select_query
- *   The SelectQuery that should get grouping conditions.
- * @param condtions
- *   The conditions to be added.
- * @param $table_aliases
- *   An associative array of table aliases keyed by field index.
- * @param $column_callback
- *   A callback that should return the column name to be used for the field
- *   conditions. Accepts a field name and a field column name as parameters.
- */
-function _field_sql_storage_query_field_conditions(EntityFieldQuery $query, SelectQuery $select_query, $conditions, $table_aliases, $column_callback) {
-  $groups = &drupal_static(__FUNCTION__, array());
-  foreach ($conditions as $key => $condition) {
-    $table_alias = $table_aliases[$key];
-    $field = $condition['field'];
-    // Add the specified condition.
-    $sql_field = "$table_alias." . $column_callback($field['field_name'], $condition['column']);
-    $query->addCondition($select_query, $sql_field, $condition);
-    // Add delta / language group conditions.
-    foreach (array('delta', 'language') as $column) {
-      if (isset($condition[$column . '_group'])) {
-        $group_name = $condition[$column . '_group'];
-        if (!isset($groups[$column][$group_name])) {
-          $groups[$column][$group_name] = $table_alias;
-        }
-        else {
-          $select_query->where("$table_alias.$column = " . $groups[$column][$group_name] . ".$column");
-        }
-      }
-    }
-  }
-}
-
-/**
- * Field meta condition column callback.
- */
-function _field_sql_storage_query_columnname($field_name, $column) {
-  return $column;
-}
-
-/**
- * Implements hook_field_storage_delete_revision().
- *
- * This function actually deletes the data from the database.
- */
-function field_sql_storage_field_storage_delete_revision($entity_type, $entity, $fields) {
-  list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
-
-  if (isset($vid)) {
-    foreach ($fields as $field_id) {
-      $field = field_info_field_by_id($field_id);
-      $revision_name = _field_sql_storage_revision_tablename($field);
-      db_delete($revision_name)
-        ->condition('entity_type', $entity_type)
-        ->condition('entity_id', $id)
-        ->condition('revision_id', $vid)
-        ->execute();
-    }
-  }
-}
-
-/**
- * Implements hook_field_storage_delete_instance().
- *
- * This function simply marks for deletion all data associated with the field.
- */
-function field_sql_storage_field_storage_delete_instance($instance) {
-  $field = field_info_field($instance['field_name']);
-  $table_name = _field_sql_storage_tablename($field);
-  $revision_name = _field_sql_storage_revision_tablename($field);
-  db_update($table_name)
-    ->fields(array('deleted' => 1))
-    ->condition('entity_type', $instance['entity_type'])
-    ->condition('bundle', $instance['bundle'])
-    ->execute();
-  db_update($revision_name)
-    ->fields(array('deleted' => 1))
-    ->condition('entity_type', $instance['entity_type'])
-    ->condition('bundle', $instance['bundle'])
-    ->execute();
-}
-
-/**
- * Implements hook_field_attach_rename_bundle().
- */
-function field_sql_storage_field_attach_rename_bundle($entity_type, $bundle_old, $bundle_new) {
-  // We need to account for deleted or inactive fields and instances.
-  $instances = field_read_instances(array('entity_type' => $entity_type, 'bundle' => $bundle_new), array('include_deleted' => TRUE, 'include_inactive' => TRUE));
-  foreach ($instances as $instance) {
-    $field = field_info_field_by_id($instance['field_id']);
-    if ($field['storage']['type'] == 'field_sql_storage') {
-      $table_name = _field_sql_storage_tablename($field);
-      $revision_name = _field_sql_storage_revision_tablename($field);
-      db_update($table_name)
-        ->fields(array('bundle' => $bundle_new))
-        ->condition('entity_type', $entity_type)
-        ->condition('bundle', $bundle_old)
-        ->execute();
-      db_update($revision_name)
-        ->fields(array('bundle' => $bundle_new))
-        ->condition('entity_type', $entity_type)
-        ->condition('bundle', $bundle_old)
-        ->execute();
-    }
-  }
-}
-
-/**
- * Implements hook_field_storage_purge_field().
- *
- * All field data items and instances have already been purged, so all
- * that is left is to delete the table.
- */
-function field_sql_storage_field_storage_purge_field($field) {
-  $table_name = _field_sql_storage_tablename($field);
-  $revision_name = _field_sql_storage_revision_tablename($field);
-  db_drop_table($table_name);
-  db_drop_table($revision_name);
-}
-
-/**
- * Implements hook_field_storage_details().
- */
-function field_sql_storage_field_storage_details($field) {
-  $details = array();
-  if (!empty($field['columns'])) {
-     // Add field columns.
-    foreach ($field['columns'] as $column_name => $attributes) {
-      $real_name = _field_sql_storage_columnname($field['field_name'], $column_name);
-      $columns[$column_name] = $real_name;
-    }
-    return array(
-      'sql' => array(
-        FIELD_LOAD_CURRENT => array(
-          _field_sql_storage_tablename($field) => $columns,
-        ),
-        FIELD_LOAD_REVISION => array(
-          _field_sql_storage_revision_tablename($field) => $columns,
-        ),
-      ),
-    );
-  }
-}
diff --git a/modules/field/modules/field_sql_storage/field_sql_storage.test b/modules/field/modules/field_sql_storage/field_sql_storage.test
deleted file mode 100644
index 12c54ba..0000000
--- a/modules/field/modules/field_sql_storage/field_sql_storage.test
+++ /dev/null
@@ -1,441 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for field_sql_storage.module.
- *
- * Field_sql_storage.module implements the default back-end storage plugin
- * for the Field Strage API.
- */
-
-/**
- * Tests field storage.
- */
-class FieldSqlStorageTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name'  => 'Field SQL storage tests',
-      'description'  => "Test field SQL storage module.",
-      'group' => 'Field API'
-    );
-  }
-
-  function setUp() {
-    parent::setUp('field_sql_storage', 'field', 'field_test', 'text');
-    $this->field_name = strtolower($this->randomName());
-    $this->field = array('field_name' => $this->field_name, 'type' => 'test_field', 'cardinality' => 4);
-    $this->field = field_create_field($this->field);
-    $this->instance = array(
-      'field_name' => $this->field_name,
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle'
-    );
-    $this->instance = field_create_instance($this->instance);
-    $this->table = _field_sql_storage_tablename($this->field);
-    $this->revision_table = _field_sql_storage_revision_tablename($this->field);
-
-  }
-
-  /**
-   * Uses the mysql tables and records to verify
-   * field_load_revision works correctly.
-   */
-  function testFieldAttachLoad() {
-    $entity_type = 'test_entity';
-    $eid = 0;
-    $langcode = LANGUAGE_NONE;
-
-    $columns = array('entity_type', 'entity_id', 'revision_id', 'delta', 'language', $this->field_name . '_value');
-
-    // Insert data for four revisions to the field revisions table
-    $query = db_insert($this->revision_table)->fields($columns);
-    for ($evid = 0; $evid < 4; ++$evid) {
-      $values[$evid] = array();
-      // Note: we insert one extra value ('<=' instead of '<').
-      for ($delta = 0; $delta <= $this->field['cardinality']; $delta++) {
-        $value = mt_rand(1, 127);
-        $values[$evid][] = $value;
-        $query->values(array($entity_type, $eid, $evid, $delta, $langcode, $value));
-      }
-    }
-    $query->execute();
-
-    // Insert data for the "most current revision" into the field table
-    $query = db_insert($this->table)->fields($columns);
-    foreach ($values[0] as $delta => $value) {
-      $query->values(array($entity_type, $eid, 0, $delta, $langcode, $value));
-    }
-    $query->execute();
-
-    // Load the "most current revision"
-    $entity = field_test_create_stub_entity($eid, 0, $this->instance['bundle']);
-    field_attach_load($entity_type, array($eid => $entity));
-    foreach ($values[0] as $delta => $value) {
-      if ($delta < $this->field['cardinality']) {
-        $this->assertEqual($entity->{$this->field_name}[$langcode][$delta]['value'], $value, "Value $delta is loaded correctly for current revision");
-      }
-      else {
-        $this->assertFalse(array_key_exists($delta, $entity->{$this->field_name}[$langcode]), "No extraneous value gets loaded for current revision.");
-      }
-    }
-
-    // Load every revision
-    for ($evid = 0; $evid < 4; ++$evid) {
-      $entity = field_test_create_stub_entity($eid, $evid, $this->instance['bundle']);
-      field_attach_load_revision($entity_type, array($eid => $entity));
-      foreach ($values[$evid] as $delta => $value) {
-        if ($delta < $this->field['cardinality']) {
-          $this->assertEqual($entity->{$this->field_name}[$langcode][$delta]['value'], $value, "Value $delta for revision $evid is loaded correctly");
-        }
-        else {
-          $this->assertFalse(array_key_exists($delta, $entity->{$this->field_name}[$langcode]), "No extraneous value gets loaded for revision $evid.");
-        }
-      }
-    }
-
-    // Add a translation in an unavailable language and verify it is not loaded.
-    $eid = $evid = 1;
-    $unavailable_language = 'xx';
-    $entity = field_test_create_stub_entity($eid, $evid, $this->instance['bundle']);
-    $values = array($entity_type, $eid, $evid, 0, $unavailable_language, mt_rand(1, 127));
-    db_insert($this->table)->fields($columns)->values($values)->execute();
-    db_insert($this->revision_table)->fields($columns)->values($values)->execute();
-    field_attach_load($entity_type, array($eid => $entity));
-    $this->assertFalse(array_key_exists($unavailable_language, $entity->{$this->field_name}), 'Field translation in an unavailable language ignored');
-  }
-
-  /**
-   * Reads mysql to verify correct data is
-   * written when using insert and update.
-   */
-  function testFieldAttachInsertAndUpdate() {
-    $entity_type = 'test_entity';
-    $entity = field_test_create_stub_entity(0, 0, $this->instance['bundle']);
-    $langcode = LANGUAGE_NONE;
-
-    // Test insert.
-    $values = array();
-    // Note: we try to insert one extra value ('<=' instead of '<').
-    // TODO : test empty values filtering and "compression" (store consecutive deltas).
-    for ($delta = 0; $delta <= $this->field['cardinality']; $delta++) {
-      $values[$delta]['value'] = mt_rand(1, 127);
-    }
-    $entity->{$this->field_name}[$langcode] = $rev_values[0] = $values;
-    field_attach_insert($entity_type, $entity);
-
-    $rows = db_select($this->table, 't')->fields('t')->execute()->fetchAllAssoc('delta', PDO::FETCH_ASSOC);
-    foreach ($values as $delta => $value) {
-      if ($delta < $this->field['cardinality']) {
-        $this->assertEqual($rows[$delta][$this->field_name . '_value'], $value['value'], format_string("Value %delta is inserted correctly", array('%delta' => $delta)));
-      }
-      else {
-        $this->assertFalse(array_key_exists($delta, $rows), "No extraneous value gets inserted.");
-      }
-    }
-
-    // Test update.
-    $entity = field_test_create_stub_entity(0, 1, $this->instance['bundle']);
-    $values = array();
-    // Note: we try to update one extra value ('<=' instead of '<').
-    for ($delta = 0; $delta <= $this->field['cardinality']; $delta++) {
-      $values[$delta]['value'] = mt_rand(1, 127);
-    }
-    $entity->{$this->field_name}[$langcode] = $rev_values[1] = $values;
-    field_attach_update($entity_type, $entity);
-    $rows = db_select($this->table, 't')->fields('t')->execute()->fetchAllAssoc('delta', PDO::FETCH_ASSOC);
-    foreach ($values as $delta => $value) {
-      if ($delta < $this->field['cardinality']) {
-        $this->assertEqual($rows[$delta][$this->field_name . '_value'], $value['value'], format_string("Value %delta is updated correctly", array('%delta' => $delta)));
-      }
-      else {
-        $this->assertFalse(array_key_exists($delta, $rows), "No extraneous value gets updated.");
-      }
-    }
-
-    // Check that data for both revisions are in the revision table.
-    // We make sure each value is stored correctly, then unset it.
-    // When an entire revision's values are unset (remembering that we
-    // put one extra value in $values per revision), unset the entire
-    // revision. Then, if $rev_values is empty at the end, all
-    // revision data was found.
-    $results = db_select($this->revision_table, 't')->fields('t')->execute();
-    foreach ($results as $row) {
-      $this->assertEqual($row->{$this->field_name . '_value'}, $rev_values[$row->revision_id][$row->delta]['value'], "Value {$row->delta} for revision {$row->revision_id} stored correctly");
-      unset($rev_values[$row->revision_id][$row->delta]);
-      if (count($rev_values[$row->revision_id]) == 1) {
-        unset($rev_values[$row->revision_id]);
-      }
-    }
-    $this->assertTrue(empty($rev_values), "All values for all revisions are stored in revision table {$this->revision_table}");
-
-    // Check that update leaves the field data untouched if
-    // $entity->{$field_name} is absent.
-    unset($entity->{$this->field_name});
-    field_attach_update($entity_type, $entity);
-    $rows = db_select($this->table, 't')->fields('t')->execute()->fetchAllAssoc('delta', PDO::FETCH_ASSOC);
-    foreach ($values as $delta => $value) {
-      if ($delta < $this->field['cardinality']) {
-        $this->assertEqual($rows[$delta][$this->field_name . '_value'], $value['value'], format_string("Update with no field_name entry leaves value %delta untouched", array('%delta' => $delta)));
-      }
-    }
-
-    // Check that update with an empty $entity->$field_name empties the field.
-    $entity->{$this->field_name} = NULL;
-    field_attach_update($entity_type, $entity);
-    $rows = db_select($this->table, 't')->fields('t')->execute()->fetchAllAssoc('delta', PDO::FETCH_ASSOC);
-    $this->assertEqual(count($rows), 0, "Update with an empty field_name entry empties the field.");
-  }
-
-  /**
-   * Tests insert and update with missing or NULL fields.
-   */
-  function testFieldAttachSaveMissingData() {
-    $entity_type = 'test_entity';
-    $entity = field_test_create_stub_entity(0, 0, $this->instance['bundle']);
-    $langcode = LANGUAGE_NONE;
-
-    // Insert: Field is missing
-    field_attach_insert($entity_type, $entity);
-    $count = db_select($this->table)
-      ->countQuery()
-      ->execute()
-      ->fetchField();
-    $this->assertEqual($count, 0, 'Missing field results in no inserts');
-
-    // Insert: Field is NULL
-    $entity->{$this->field_name} = NULL;
-    field_attach_insert($entity_type, $entity);
-    $count = db_select($this->table)
-      ->countQuery()
-      ->execute()
-      ->fetchField();
-    $this->assertEqual($count, 0, 'NULL field results in no inserts');
-
-    // Add some real data
-    $entity->{$this->field_name}[$langcode] = array(0 => array('value' => 1));
-    field_attach_insert($entity_type, $entity);
-    $count = db_select($this->table)
-      ->countQuery()
-      ->execute()
-      ->fetchField();
-    $this->assertEqual($count, 1, 'Field data saved');
-
-    // Update: Field is missing. Data should survive.
-    unset($entity->{$this->field_name});
-    field_attach_update($entity_type, $entity);
-    $count = db_select($this->table)
-      ->countQuery()
-      ->execute()
-      ->fetchField();
-    $this->assertEqual($count, 1, 'Missing field leaves data in table');
-
-    // Update: Field is NULL. Data should be wiped.
-    $entity->{$this->field_name} = NULL;
-    field_attach_update($entity_type, $entity);
-    $count = db_select($this->table)
-      ->countQuery()
-      ->execute()
-      ->fetchField();
-    $this->assertEqual($count, 0, 'NULL field leaves no data in table');
-
-    // Add a translation in an unavailable language.
-    $unavailable_language = 'xx';
-    db_insert($this->table)
-      ->fields(array('entity_type', 'bundle', 'deleted', 'entity_id', 'revision_id', 'delta', 'language'))
-      ->values(array($entity_type, $this->instance['bundle'], 0, 0, 0, 0, $unavailable_language))
-      ->execute();
-    $count = db_select($this->table)
-      ->countQuery()
-      ->execute()
-      ->fetchField();
-    $this->assertEqual($count, 1, 'Field translation in an unavailable language saved.');
-
-    // Again add some real data.
-    $entity->{$this->field_name}[$langcode] = array(0 => array('value' => 1));
-    field_attach_insert($entity_type, $entity);
-    $count = db_select($this->table)
-      ->countQuery()
-      ->execute()
-      ->fetchField();
-    $this->assertEqual($count, 2, 'Field data saved.');
-
-    // Update: Field translation is missing but field is not empty. Translation
-    // data should survive.
-    $entity->{$this->field_name}[$unavailable_language] = array(mt_rand(1, 127));
-    unset($entity->{$this->field_name}[$langcode]);
-    field_attach_update($entity_type, $entity);
-    $count = db_select($this->table)
-      ->countQuery()
-      ->execute()
-      ->fetchField();
-    $this->assertEqual($count, 2, 'Missing field translation leaves data in table.');
-
-    // Update: Field translation is NULL but field is not empty. Translation
-    // data should be wiped.
-    $entity->{$this->field_name}[$langcode] = NULL;
-    field_attach_update($entity_type, $entity);
-    $count = db_select($this->table)
-      ->countQuery()
-      ->execute()
-      ->fetchField();
-    $this->assertEqual($count, 1, 'NULL field translation is wiped.');
-  }
-
-  /**
-   * Test trying to update a field with data.
-   */
-  function testUpdateFieldSchemaWithData() {
-    // Create a decimal 5.2 field and add some data.
-    $field = array('field_name' => 'decimal52', 'type' => 'number_decimal', 'settings' => array('precision' => 5, 'scale' => 2));
-    $field = field_create_field($field);
-    $instance = array('field_name' => 'decimal52', 'entity_type' => 'test_entity', 'bundle' => 'test_bundle');
-    $instance = field_create_instance($instance);
-    $entity = field_test_create_stub_entity(0, 0, $instance['bundle']);
-    $entity->decimal52[LANGUAGE_NONE][0]['value'] = '1.235';
-    field_attach_insert('test_entity', $entity);
-
-    // Attempt to update the field in a way that would work without data.
-    $field['settings']['scale'] = 3;
-    try {
-      field_update_field($field);
-      $this->fail(t('Cannot update field schema with data.'));
-    }
-    catch (FieldException $e) {
-      $this->pass(t('Cannot update field schema with data.'));
-    }
-  }
-
-  /**
-   * Test that failure to create fields is handled gracefully.
-   */
-  function testFieldUpdateFailure() {
-    // Create a text field.
-    $field = array('field_name' => 'test_text', 'type' => 'text', 'settings' => array('max_length' => 255));
-    $field = field_create_field($field);
-
-    // Attempt to update the field in a way that would break the storage.
-    $prior_field = $field;
-    $field['settings']['max_length'] = -1;
-    try {
-      field_update_field($field);
-      $this->fail(t('Update succeeded.'));
-    }
-    catch (Exception $e) {
-      $this->pass(t('Update properly failed.'));
-    }
-
-    // Ensure that the field tables are still there.
-    foreach (_field_sql_storage_schema($prior_field) as $table_name => $table_info) {
-      $this->assertTrue(db_table_exists($table_name), format_string('Table %table exists.', array('%table' => $table_name)));
-    }
-  }
-
-  /**
-   * Test adding and removing indexes while data is present.
-   */
-  function testFieldUpdateIndexesWithData() {
-
-    // Create a decimal field.
-    $field_name = 'testfield';
-    $field = array('field_name' => $field_name, 'type' => 'text');
-    $field = field_create_field($field);
-    $instance = array('field_name' => $field_name, 'entity_type' => 'test_entity', 'bundle' => 'test_bundle');
-    $instance = field_create_instance($instance);
-    $tables = array(_field_sql_storage_tablename($field), _field_sql_storage_revision_tablename($field));
-
-    // Verify the indexes we will create do not exist yet.
-    foreach ($tables as $table) {
-      $this->assertFalse(Database::getConnection()->schema()->indexExists($table, 'value'), format_string("No index named value exists in %table", array('%table' => $table)));
-      $this->assertFalse(Database::getConnection()->schema()->indexExists($table, 'value_format'), format_string("No index named value_format exists in %table", array('%table' => $table)));
-    }
-
-    // Add data so the table cannot be dropped.
-    $entity = field_test_create_stub_entity(0, 0, $instance['bundle']);
-    $entity->{$field_name}[LANGUAGE_NONE][0]['value'] = 'field data';
-    field_attach_insert('test_entity', $entity);
-
-    // Add an index
-    $field = array('field_name' => $field_name, 'indexes' => array('value' => array('value')));
-    field_update_field($field);
-    foreach ($tables as $table) {
-      $this->assertTrue(Database::getConnection()->schema()->indexExists($table, "{$field_name}_value"), format_string("Index on value created in %table", array('%table' => $table)));
-    }
-
-    // Add a different index, removing the existing custom one.
-    $field = array('field_name' => $field_name, 'indexes' => array('value_format' => array('value', 'format')));
-    field_update_field($field);
-    foreach ($tables as $table) {
-      $this->assertTrue(Database::getConnection()->schema()->indexExists($table, "{$field_name}_value_format"), format_string("Index on value_format created in %table", array('%table' => $table)));
-      $this->assertFalse(Database::getConnection()->schema()->indexExists($table, "{$field_name}_value"), format_string("Index on value removed in %table", array('%table' => $table)));
-    }
-
-    // Verify that the tables were not dropped.
-    $entity = field_test_create_stub_entity(0, 0, $instance['bundle']);
-    field_attach_load('test_entity', array(0 => $entity));
-    $this->assertEqual($entity->{$field_name}[LANGUAGE_NONE][0]['value'], 'field data', "Index changes performed without dropping the tables");
-  }
-
-  /**
-   * Test the storage details.
-   */
-  function testFieldStorageDetails() {
-    $current = _field_sql_storage_tablename($this->field);
-    $revision = _field_sql_storage_revision_tablename($this->field);
-
-    // Retrieve the field and instance with field_info so the storage details are attached.
-    $field = field_info_field($this->field['field_name']);
-    $instance = field_info_instance($this->instance['entity_type'], $this->instance['field_name'], $this->instance['bundle']);
-
-    // The storage details are indexed by a storage engine type.
-    $this->assertTrue(array_key_exists('sql', $field['storage']['details']), 'The storage type is SQL.');
-
-    // The SQL details are indexed by table name.
-    $details = $field['storage']['details']['sql'];
-    $this->assertTrue(array_key_exists($current, $details[FIELD_LOAD_CURRENT]), 'Table name is available in the instance array.');
-    $this->assertTrue(array_key_exists($revision, $details[FIELD_LOAD_REVISION]), 'Revision table name is available in the instance array.');
-
-    // Test current and revision storage details together because the columns
-    // are the same.
-    foreach ((array) $this->field['columns'] as $column_name => $attributes) {
-      $storage_column_name = _field_sql_storage_columnname($this->field['field_name'], $column_name);
-      $this->assertEqual($details[FIELD_LOAD_CURRENT][$current][$column_name], $storage_column_name, format_string('Column name %value matches the definition in %bin.', array('%value' => $column_name, '%bin' => $current)));
-      $this->assertEqual($details[FIELD_LOAD_REVISION][$revision][$column_name], $storage_column_name, format_string('Column name %value matches the definition in %bin.', array('%value' => $column_name, '%bin' => $revision)));
-    }
-  }
-
-  /**
-   * Test foreign key support.
-   */
-  function testFieldSqlStorageForeignKeys() {
-    // Create a 'shape' field, with a configurable foreign key (see
-    // field_test_field_schema()).
-    $field_name = 'testfield';
-    $foreign_key_name = 'shape';
-    $field = array('field_name' => $field_name, 'type' => 'shape', 'settings' => array('foreign_key_name' => $foreign_key_name));
-    field_create_field($field);
-
-    // Retrieve the field definition and check that the foreign key is in place.
-    $field = field_info_field($field_name);
-    $this->assertEqual($field['foreign keys'][$foreign_key_name]['table'], $foreign_key_name, 'Foreign key table name preserved through CRUD');
-    $this->assertEqual($field['foreign keys'][$foreign_key_name]['columns'][$foreign_key_name], 'id', 'Foreign key column name preserved through CRUD');
-
-    // Update the field settings, it should update the foreign key definition
-    // too.
-    $foreign_key_name = 'color';
-    $field['settings']['foreign_key_name'] = $foreign_key_name;
-    field_update_field($field);
-
-    // Retrieve the field definition and check that the foreign key is in place.
-    $field = field_info_field($field_name);
-    $this->assertEqual($field['foreign keys'][$foreign_key_name]['table'], $foreign_key_name, 'Foreign key table name modified after update');
-    $this->assertEqual($field['foreign keys'][$foreign_key_name]['columns'][$foreign_key_name], 'id', 'Foreign key column name modified after update');
-
-    // Now grab the SQL schema and verify that too.
-    $schema = drupal_get_schema(_field_sql_storage_tablename($field), TRUE);
-    $this->assertEqual(count($schema['foreign keys']), 1, 'There is 1 foreign key in the schema');
-    $foreign_key = reset($schema['foreign keys']);
-    $foreign_key_column = _field_sql_storage_columnname($field['field_name'], $foreign_key_name);
-    $this->assertEqual($foreign_key['table'], $foreign_key_name, 'Foreign key table name preserved in the schema');
-    $this->assertEqual($foreign_key['columns'][$foreign_key_column], 'id', 'Foreign key column name preserved in the schema');
-  }
-}
diff --git a/modules/field/modules/list/list.info b/modules/field/modules/list/list.info
deleted file mode 100644
index 6bcec5d..0000000
--- a/modules/field/modules/list/list.info
+++ /dev/null
@@ -1,8 +0,0 @@
-name = List
-description = Defines list field types. Use with Options to create selection lists.
-package = Core
-version = VERSION
-core = 7.x
-dependencies[] = field
-dependencies[] = options
-files[] = tests/list.test
diff --git a/modules/field/modules/list/list.install b/modules/field/modules/list/list.install
deleted file mode 100644
index 2386f04..0000000
--- a/modules/field/modules/list/list.install
+++ /dev/null
@@ -1,138 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the list module.
- */
-
-/**
- * Implements hook_field_schema().
- */
-function list_field_schema($field) {
-  switch ($field['type']) {
-    case 'list_text':
-      $columns = array(
-        'value' => array(
-          'type' => 'varchar',
-          'length' => 255,
-          'not null' => FALSE,
-        ),
-      );
-      break;
-    case 'list_float':
-      $columns = array(
-        'value' => array(
-          'type' => 'float',
-          'not null' => FALSE,
-        ),
-      );
-      break;
-    case 'list_integer':
-    case 'list_boolean':
-      $columns = array(
-        'value' => array(
-          'type' => 'int',
-          'not null' => FALSE,
-        ),
-      );
-      break;
-  }
-  return array(
-    'columns' => $columns,
-    'indexes' => array(
-      'value' => array('value'),
-    ),
-  );
-}
-
-/**
- * Rename the list field types and change 'allowed_values' format.
- */
-function list_update_7001() {
-  $fields = _update_7000_field_read_fields(array('module' => 'list'));
-  foreach ($fields as $field) {
-    $update = array();
-
-    // Translate the old string format into the new array format.
-    $allowed_values = $field['settings']['allowed_values'];
-    if (is_string($allowed_values)) {
-      $position_keys = ($field['type'] == 'list');
-      $allowed_values = _list_update_7001_extract_allowed_values($allowed_values, $position_keys);
-
-      // Additionally, float keys need to be disambiguated ('.5' is '0.5').
-      if ($field['type'] == 'list_number' && !empty($allowed_values)) {
-        $keys = array_map(create_function('$a', 'return (string) (float) $a;'), array_keys($allowed_values));
-        $allowed_values = array_combine($keys, array_values($allowed_values));
-      }
-
-      // Place the new setting in the existing serialized 'data' column.
-      $data = db_query("SELECT data FROM {field_config} WHERE id = :id", array(':id' => $field['id']))->fetchField();
-      $data = unserialize($data);
-      $data['settings']['allowed_values'] = $allowed_values;
-      $update['data'] = serialize($data);
-    }
-
-    // Rename field types.
-    $types = array('list' => 'list_integer', 'list_number' => 'list_float');
-    if (isset($types[$field['type']])) {
-      $update['type'] = $types[$field['type']];
-    }
-
-    // Save the new data.
-    if ($update) {
-      $query = db_update('field_config')
-        ->condition('id', $field['id'])
-        ->fields($update)
-        ->execute();
-    }
-  }
-}
-
-/**
- * Helper function for list_update_7001: extract allowed values from a string.
- *
- * This reproduces the parsing logic in use before D7 RC2.
- */
-function _list_update_7001_extract_allowed_values($string, $position_keys) {
-  $values = array();
-
-  $list = explode("\n", $string);
-  $list = array_map('trim', $list);
-  $list = array_filter($list, 'strlen');
-
-  foreach ($list as $key => $value) {
-    // Check for a manually specified key.
-    if (strpos($value, '|') !== FALSE) {
-      list($key, $value) = explode('|', $value);
-    }
-    // Otherwise see if we need to use the value as the key. The "list" type
-    // will automatically convert non-keyed lines to integers.
-    elseif (!$position_keys) {
-      $key = $value;
-    }
-    $values[$key] = (isset($value) && $value !== '') ? $value : $key;
-  }
-
-  return $values;
-}
-
-/**
- * @addtogroup updates-7.x-extra
- * @{
- */
-
-/**
- * Re-apply list_update_7001() for deleted fields.
- */
-function list_update_7002() {
-  // See http://drupal.org/node/1022924: list_update_7001() intitally
-  // overlooked deleted fields, which then caused fatal errors when the fields
-  // were being purged.
-  // list_update_7001() has the required checks to ensure it is reentrant, so
-  // it can simply be executed once more..
-  list_update_7001();
-}
-
-/**
- * @} End of "addtogroup updates-7.x-extra".
- */
diff --git a/modules/field/modules/list/list.module b/modules/field/modules/list/list.module
deleted file mode 100644
index 634c134..0000000
--- a/modules/field/modules/list/list.module
+++ /dev/null
@@ -1,486 +0,0 @@
-<?php
-
-/**
- * @file
- * Defines list field types that can be used with the Options module.
- */
-
-/**
- * Implements hook_help().
- */
-function list_help($path, $arg) {
-  switch ($path) {
-    case 'admin/help#list':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The List module defines various fields for storing a list of items, for use with the Field module. Usually these items are entered through a select list, checkboxes, or radio buttons. See the <a href="@field-help">Field module help page</a> for more information about fields.', array('@field-help' => url('admin/help/field'))) . '</p>';
-      return $output;
-  }
-}
-
-/**
- * Implements hook_field_info().
- */
-function list_field_info() {
-  return array(
-    'list_integer' => array(
-      'label' => t('List (integer)'),
-      'description' => t("This field stores integer values from a list of allowed 'value => label' pairs, i.e. 'Lifetime in days': 1 => 1 day, 7 => 1 week, 31 => 1 month."),
-      'settings' => array('allowed_values' => array(), 'allowed_values_function' => ''),
-      'default_widget' => 'options_select',
-      'default_formatter' => 'list_default',
-    ),
-    'list_float' => array(
-      'label' => t('List (float)'),
-      'description' => t("This field stores float values from a list of allowed 'value => label' pairs, i.e. 'Fraction': 0 => 0, .25 => 1/4, .75 => 3/4, 1 => 1."),
-      'settings' => array('allowed_values' => array(), 'allowed_values_function' => ''),
-      'default_widget' => 'options_select',
-      'default_formatter' => 'list_default',
-    ),
-    'list_text' => array(
-      'label' => t('List (text)'),
-      'description' => t("This field stores text values from a list of allowed 'value => label' pairs, i.e. 'US States': IL => Illinois, IA => Iowa, IN => Indiana."),
-      'settings' => array('allowed_values' => array(), 'allowed_values_function' => ''),
-      'default_widget' => 'options_select',
-      'default_formatter' => 'list_default',
-    ),
-    'list_boolean' => array(
-      'label' => t('Boolean'),
-      'description' => t('This field stores simple on/off or yes/no options.'),
-      'settings' => array('allowed_values' => array(), 'allowed_values_function' => ''),
-      'default_widget' => 'options_buttons',
-      'default_formatter' => 'list_default',
-    ),
-  );
-}
-
-/**
- * Implements hook_field_settings_form().
- */
-function list_field_settings_form($field, $instance, $has_data) {
-  $settings = $field['settings'];
-
-  switch ($field['type']) {
-    case 'list_integer':
-    case 'list_float':
-    case 'list_text':
-      $form['allowed_values'] = array(
-        '#type' => 'textarea',
-        '#title' => t('Allowed values list'),
-        '#default_value' => list_allowed_values_string($settings['allowed_values']),
-        '#rows' => 10,
-        '#element_validate' => array('list_allowed_values_setting_validate'),
-        '#field_has_data' => $has_data,
-        '#field' => $field,
-        '#field_type' => $field['type'],
-        '#access' => empty($settings['allowed_values_function']),
-      );
-
-      $description = '<p>' . t('The possible values this field can contain. Enter one value per line, in the format key|label.');
-      if ($field['type'] == 'list_integer' || $field['type'] == 'list_float') {
-        $description .= '<br/>' . t('The key is the stored value, and must be numeric. The label will be used in displayed values and edit forms.');
-        $description .= '<br/>' . t('The label is optional: if a line contains a single number, it will be used as key and label.');
-        $description .= '<br/>' . t('Lists of labels are also accepted (one label per line), only if the field does not hold any values yet. Numeric keys will be automatically generated from the positions in the list.');
-      }
-      else {
-        $description .= '<br/>' . t('The key is the stored value. The label will be used in displayed values and edit forms.');
-        $description .= '<br/>' . t('The label is optional: if a line contains a single string, it will be used as key and label.');
-      }
-      $description .= '</p>';
-      $form['allowed_values']['#description'] = $description;
-
-      break;
-
-    case 'list_boolean':
-      $values = $settings['allowed_values'];
-      $off_value = array_shift($values);
-      $on_value = array_shift($values);
-
-      $form['allowed_values'] = array(
-        '#type' => 'value',
-        '#description' => '',
-        '#value_callback' => 'list_boolean_allowed_values_callback',
-        '#access' => empty($settings['allowed_values_function']),
-      );
-      $form['allowed_values']['on'] = array(
-        '#type' => 'textfield',
-        '#title' => t('On value'),
-        '#default_value' => $on_value,
-        '#required' => FALSE,
-        '#description' => t('If left empty, "1" will be used.'),
-        // Change #parents to make sure the element is not saved into field
-        // settings.
-        '#parents' => array('on'),
-      );
-      $form['allowed_values']['off'] = array(
-        '#type' => 'textfield',
-        '#title' => t('Off value'),
-        '#default_value' => $off_value,
-        '#required' => FALSE,
-        '#description' => t('If left empty, "0" will be used.'),
-        // Change #parents to make sure the element is not saved into field
-        // settings.
-        '#parents' => array('off'),
-      );
-
-      // Link the allowed value to the on / off elements to prepare for the rare
-      // case of an alter changing #parents.
-      $form['allowed_values']['#on_parents'] = &$form['allowed_values']['on']['#parents'];
-      $form['allowed_values']['#off_parents'] = &$form['allowed_values']['off']['#parents'];
-
-      break;
-  }
-
-  // Alter the description for allowed values depending on the widget type.
-  if ($instance['widget']['type'] == 'options_onoff') {
-    $form['allowed_values']['#description'] .= '<p>' . t("For a 'single on/off checkbox' widget, define the 'off' value first, then the 'on' value in the <strong>Allowed values</strong> section. Note that the checkbox will be labeled with the label of the 'on' value.") . '</p>';
-  }
-  elseif ($instance['widget']['type'] == 'options_buttons') {
-    $form['allowed_values']['#description'] .= '<p>' . t("The 'checkboxes/radio buttons' widget will display checkboxes if the <em>Number of values</em> option is greater than 1 for this field, otherwise radios will be displayed.") . '</p>';
-  }
-  $form['allowed_values']['#description'] .= '<p>' . t('Allowed HTML tags in labels: @tags', array('@tags' => _field_filter_xss_display_allowed_tags())) . '</p>';
-
-  $form['allowed_values_function'] = array(
-    '#type' => 'value',
-    '#value' => $settings['allowed_values_function'],
-  );
-  $form['allowed_values_function_display'] = array(
-    '#type' => 'item',
-    '#title' => t('Allowed values list'),
-    '#markup' => t('The value of this field is being determined by the %function function and may not be changed.', array('%function' => $settings['allowed_values_function'])),
-    '#access' => !empty($settings['allowed_values_function']),
-  );
-
-  return $form;
-}
-
-/**
- * Element validate callback; check that the entered values are valid.
- */
-function list_allowed_values_setting_validate($element, &$form_state) {
-  $field = $element['#field'];
-  $has_data = $element['#field_has_data'];
-  $field_type = $field['type'];
-  $generate_keys = ($field_type == 'list_integer' || $field_type == 'list_float') && !$has_data;
-
-  $values = list_extract_allowed_values($element['#value'], $field['type'], $generate_keys);
-
-  if (!is_array($values)) {
-    form_error($element, t('Allowed values list: invalid input.'));
-  }
-  else {
-    // Check that keys are valid for the field type.
-    foreach ($values as $key => $value) {
-      if ($field_type == 'list_integer' && !preg_match('/^-?\d+$/', $key)) {
-        form_error($element, t('Allowed values list: keys must be integers.'));
-        break;
-      }
-      if ($field_type == 'list_float' && !is_numeric($key)) {
-        form_error($element, t('Allowed values list: each key must be a valid integer or decimal.'));
-        break;
-      }
-      elseif ($field_type == 'list_text' && drupal_strlen($key) > 255) {
-        form_error($element, t('Allowed values list: each key must be a string at most 255 characters long.'));
-        break;
-      }
-    }
-
-    // Prevent removing values currently in use.
-    if ($has_data) {
-      $lost_keys = array_diff(array_keys($field['settings']['allowed_values']), array_keys($values));
-      if (_list_values_in_use($field, $lost_keys)) {
-        form_error($element, t('Allowed values list: some values are being removed while currently in use.'));
-      }
-    }
-
-    form_set_value($element, $values, $form_state);
-  }
-}
-
-/**
-* Form element #value_callback: assembles the allowed values for 'boolean' fields.
-*/
-function list_boolean_allowed_values_callback($element, $input, $form_state) {
-  $on = drupal_array_get_nested_value($form_state['input'], $element['#on_parents']);
-  $off = drupal_array_get_nested_value($form_state['input'], $element['#off_parents']);
-  return array($off, $on);
-}
-
-/**
- * Implements hook_field_update_field().
- */
-function list_field_update_field($field, $prior_field, $has_data) {
-  drupal_static_reset('list_allowed_values');
-}
-
-/**
- * Returns the array of allowed values for a list field.
- *
- * The strings are not safe for output. Keys and values of the array should be
- * sanitized through field_filter_xss() before being displayed.
- *
- * @param $field
- *   The field definition.
- * @param $instance
- *   (optional) A field instance array. Defaults to NULL.
- * @param $entity_type
- *   (optional) The type of entity; e.g. 'node' or 'user'. Defaults to NULL.
- * @param $entity
- *   (optional) The entity object. Defaults to NULL.
- *
- * @return
- *   The array of allowed values. Keys of the array are the raw stored values
- *   (number or text), values of the array are the display labels.
- */
-function list_allowed_values($field, $instance = NULL, $entity_type = NULL, $entity = NULL) {
-  $allowed_values = &drupal_static(__FUNCTION__, array());
-
-  if (!isset($allowed_values[$field['id']])) {
-    $function = $field['settings']['allowed_values_function'];
-    // If $cacheable is FALSE, then the allowed values are not statically
-    // cached. See list_test_dynamic_values_callback() for an example of
-    // generating dynamic and uncached values.
-    $cacheable = TRUE;
-    if (!empty($function) && function_exists($function)) {
-      $values = $function($field, $instance, $entity_type, $entity, $cacheable);
-    }
-    else {
-      $values = $field['settings']['allowed_values'];
-    }
-
-    if ($cacheable) {
-      $allowed_values[$field['id']] = $values;
-    }
-    else {
-      return $values;
-    }
-  }
-
-  return $allowed_values[$field['id']];
-}
-
-/**
- * Parses a string of 'allowed values' into an array.
- *
- * @param $string
- *   The list of allowed values in string format described in
- *   list_allowed_values_string().
- * @param $field_type
- *   The field type. Either 'list_number' or 'list_text'.
- * @param $generate_keys
- *   Boolean value indicating whether to generate keys based on the position of
- *   the value if a key is not manually specified, and if the value cannot be
- *   used as a key. This should only be TRUE for fields of type 'list_number'.
- *
- * @return
- *   The array of extracted key/value pairs, or NULL if the string is invalid.
- *
- * @see list_allowed_values_string()
- */
-function list_extract_allowed_values($string, $field_type, $generate_keys) {
-  $values = array();
-
-  $list = explode("\n", $string);
-  $list = array_map('trim', $list);
-  $list = array_filter($list, 'strlen');
-
-  $generated_keys = $explicit_keys = FALSE;
-  foreach ($list as $position => $text) {
-    $value = $key = FALSE;
-
-    // Check for an explicit key.
-    $matches = array();
-    if (preg_match('/(.*)\|(.*)/', $text, $matches)) {
-      $key = $matches[1];
-      $value = $matches[2];
-      $explicit_keys = TRUE;
-    }
-    // Otherwise see if we can use the value as the key. Detecting true integer
-    // strings takes a little trick.
-    elseif ($field_type == 'list_text'
-    || ($field_type == 'list_float' && is_numeric($text))
-    || ($field_type == 'list_integer' && is_numeric($text) && (float) $text == intval($text))) {
-      $key = $value = $text;
-      $explicit_keys = TRUE;
-    }
-    // Otherwise see if we can generate a key from the position.
-    elseif ($generate_keys) {
-      $key = (string) $position;
-      $value = $text;
-      $generated_keys = TRUE;
-    }
-    else {
-      return;
-    }
-
-    // Float keys are represented as strings and need to be disambiguated
-    // ('.5' is '0.5').
-    if ($field_type == 'list_float' && is_numeric($key)) {
-      $key = (string) (float) $key;
-    }
-
-    $values[$key] = $value;
-  }
-
-  // We generate keys only if the list contains no explicit key at all.
-  if ($explicit_keys && $generated_keys) {
-    return;
-  }
-
-  return $values;
-}
-
-/**
- * Generates a string representation of an array of 'allowed values'.
- *
- * This string format is suitable for edition in a textarea.
- *
- * @param $values
- *   An array of values, where array keys are values and array values are
- *   labels.
- *
- * @return
- *   The string representation of the $values array:
- *    - Values are separated by a carriage return.
- *    - Each value is in the format "value|label" or "value".
- */
-function list_allowed_values_string($values) {
-  $lines = array();
-  foreach ($values as $key => $value) {
-    $lines[] = "$key|$value";
-  }
-  return implode("\n", $lines);
-}
-
-/**
- * Implements hook_field_update_forbid().
- */
-function list_field_update_forbid($field, $prior_field, $has_data) {
-  if ($field['module'] == 'list' && $has_data) {
-    // Forbid any update that removes allowed values with actual data.
-    $lost_keys = array_diff(array_keys($prior_field['settings']['allowed_values']), array_keys($field['settings']['allowed_values']));
-    if (_list_values_in_use($field, $lost_keys)) {
-      throw new FieldUpdateForbiddenException(t('A list field (@field_name) with existing data cannot have its keys changed.', array('@field_name' => $field['field_name'])));
-    }
-  }
-}
-
-/**
- * Checks if a list of values are being used in actual field values.
- */
-function _list_values_in_use($field, $values) {
-  if ($values) {
-    $query = new EntityFieldQuery();
-    $found = $query
-      ->fieldCondition($field['field_name'], 'value', $values)
-      ->range(0, 1)
-      ->execute();
-    return !empty($found);
-  }
-
-  return FALSE;
-}
-
-/**
- * Implements hook_field_validate().
- *
- * Possible error codes:
- * - 'list_illegal_value': The value is not part of the list of allowed values.
- */
-function list_field_validate($entity_type, $entity, $field, $instance, $langcode, $items, &$errors) {
-  $allowed_values = list_allowed_values($field, $instance, $entity_type, $entity);
-  foreach ($items as $delta => $item) {
-    if (!empty($item['value'])) {
-      if (!empty($allowed_values) && !isset($allowed_values[$item['value']])) {
-        $errors[$field['field_name']][$langcode][$delta][] = array(
-          'error' => 'list_illegal_value',
-          'message' => t('%name: illegal value.', array('%name' => $instance['label'])),
-        );
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_field_is_empty().
- */
-function list_field_is_empty($item, $field) {
-  if (empty($item['value']) && (string) $item['value'] !== '0') {
-    return TRUE;
-  }
-  return FALSE;
-}
-
-/**
- * Implements hook_field_widget_info_alter().
- *
- * The List module does not implement widgets of its own, but reuses the
- * widgets defined in options.module.
- *
- * @see list_options_list()
- */
-function list_field_widget_info_alter(&$info) {
-  $widgets = array(
-    'options_select' => array('list_integer', 'list_float', 'list_text'),
-    'options_buttons' => array('list_integer', 'list_float', 'list_text', 'list_boolean'),
-    'options_onoff' => array('list_boolean'),
-  );
-
-  foreach ($widgets as $widget => $field_types) {
-    $info[$widget]['field types'] = array_merge($info[$widget]['field types'], $field_types);
-  }
-}
-
-/**
- * Implements hook_options_list().
- */
-function list_options_list($field, $instance, $entity_type, $entity) {
-  return list_allowed_values($field, $instance, $entity_type, $entity);
-}
-
-/**
- * Implements hook_field_formatter_info().
- */
-function list_field_formatter_info() {
-  return array(
-    'list_default' => array(
-      'label' => t('Default'),
-      'field types' => array('list_integer', 'list_float', 'list_text', 'list_boolean'),
-    ),
-    'list_key' => array(
-      'label' => t('Key'),
-      'field types' => array('list_integer', 'list_float', 'list_text', 'list_boolean'),
-    ),
-  );
-}
-
-/**
- * Implements hook_field_formatter_view().
- */
-function list_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
-  $element = array();
-
-  switch ($display['type']) {
-    case 'list_default':
-      $allowed_values = list_allowed_values($field, $instance, $entity_type, $entity);
-      foreach ($items as $delta => $item) {
-        if (isset($allowed_values[$item['value']])) {
-          $output = field_filter_xss($allowed_values[$item['value']]);
-        }
-        else {
-          // If no match was found in allowed values, fall back to the key.
-          $output = field_filter_xss($item['value']);
-        }
-        $element[$delta] = array('#markup' => $output);
-      }
-      break;
-
-    case 'list_key':
-      foreach ($items as $delta => $item) {
-        $element[$delta] = array('#markup' => field_filter_xss($item['value']));
-      }
-      break;
-  }
-
-  return $element;
-}
diff --git a/modules/field/modules/list/tests/list.test b/modules/field/modules/list/tests/list.test
deleted file mode 100644
index 84de7e8..0000000
--- a/modules/field/modules/list/tests/list.test
+++ /dev/null
@@ -1,457 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for list.module.
- */
-
-/**
- * Tests for the 'List' field types.
- */
-class ListFieldTestCase extends FieldTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'List field',
-      'description' => 'Test the List field type.',
-      'group' => 'Field types',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('field_test');
-
-    $this->field_name = 'test_list';
-    $this->field = array(
-      'field_name' => $this->field_name,
-      'type' => 'list_integer',
-      'cardinality' => 1,
-      'settings' => array(
-        'allowed_values' => array(1 => 'One', 2 => 'Two', 3 => 'Three'),
-      ),
-    );
-    $this->field = field_create_field($this->field);
-
-    $this->instance = array(
-      'field_name' => $this->field_name,
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
-      'widget' => array(
-        'type' => 'options_buttons',
-      ),
-    );
-    $this->instance = field_create_instance($this->instance);
-  }
-
-  /**
-   * Test that allowed values can be updated.
-   */
-  function testUpdateAllowedValues() {
-    $langcode = LANGUAGE_NONE;
-
-    // All three options appear.
-    $entity = field_test_create_stub_entity();
-    $form = drupal_get_form('field_test_entity_form', $entity);
-    $this->assertTrue(!empty($form[$this->field_name][$langcode][1]), 'Option 1 exists');
-    $this->assertTrue(!empty($form[$this->field_name][$langcode][2]), 'Option 2 exists');
-    $this->assertTrue(!empty($form[$this->field_name][$langcode][3]), 'Option 3 exists');
-
-    // Use one of the values in an actual entity, and check that this value
-    // cannot be removed from the list.
-    $entity = field_test_create_stub_entity();
-    $entity->{$this->field_name}[$langcode][0] = array('value' => 1);
-    field_test_entity_save($entity);
-    $this->field['settings']['allowed_values'] = array(2 => 'Two');
-    try {
-      field_update_field($this->field);
-      $this->fail(t('Cannot update a list field to not include keys with existing data.'));
-    }
-    catch (FieldException $e) {
-      $this->pass(t('Cannot update a list field to not include keys with existing data.'));
-    }
-    // Empty the value, so that we can actually remove the option.
-    $entity->{$this->field_name}[$langcode] = array();
-    field_test_entity_save($entity);
-
-    // Removed options do not appear.
-    $this->field['settings']['allowed_values'] = array(2 => 'Two');
-    field_update_field($this->field);
-    $entity = field_test_create_stub_entity();
-    $form = drupal_get_form('field_test_entity_form', $entity);
-    $this->assertTrue(empty($form[$this->field_name][$langcode][1]), 'Option 1 does not exist');
-    $this->assertTrue(!empty($form[$this->field_name][$langcode][2]), 'Option 2 exists');
-    $this->assertTrue(empty($form[$this->field_name][$langcode][3]), 'Option 3 does not exist');
-
-    // Completely new options appear.
-    $this->field['settings']['allowed_values'] = array(10 => 'Update', 20 => 'Twenty');
-    field_update_field($this->field);
-    $form = drupal_get_form('field_test_entity_form', $entity);
-    $this->assertTrue(empty($form[$this->field_name][$langcode][1]), 'Option 1 does not exist');
-    $this->assertTrue(empty($form[$this->field_name][$langcode][2]), 'Option 2 does not exist');
-    $this->assertTrue(empty($form[$this->field_name][$langcode][3]), 'Option 3 does not exist');
-    $this->assertTrue(!empty($form[$this->field_name][$langcode][10]), 'Option 10 exists');
-    $this->assertTrue(!empty($form[$this->field_name][$langcode][20]), 'Option 20 exists');
-
-    // Options are reset when a new field with the same name is created.
-    field_delete_field($this->field_name);
-    unset($this->field['id']);
-    $this->field['settings']['allowed_values'] = array(1 => 'One', 2 => 'Two', 3 => 'Three');
-    $this->field = field_create_field($this->field);
-    $this->instance = array(
-      'field_name' => $this->field_name,
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
-      'widget' => array(
-        'type' => 'options_buttons',
-      ),
-    );
-    $this->instance = field_create_instance($this->instance);
-    $entity = field_test_create_stub_entity();
-    $form = drupal_get_form('field_test_entity_form', $entity);
-    $this->assertTrue(!empty($form[$this->field_name][$langcode][1]), 'Option 1 exists');
-    $this->assertTrue(!empty($form[$this->field_name][$langcode][2]), 'Option 2 exists');
-    $this->assertTrue(!empty($form[$this->field_name][$langcode][3]), 'Option 3 exists');
-  }
-}
-
-/**
- * Sets up a List field for testing allowed values functions.
- */
-class ListDynamicValuesTestCase extends FieldTestCase {
-  function setUp() {
-    parent::setUp(array('list', 'field_test', 'list_test'));
-
-    $this->field_name = 'test_list';
-    $this->field = array(
-      'field_name' => $this->field_name,
-      'type' => 'list_text',
-      'cardinality' => 1,
-      'settings' => array(
-        'allowed_values_function' => 'list_test_dynamic_values_callback',
-      ),
-    );
-    $this->field = field_create_field($this->field);
-
-    $this->instance = array(
-      'field_name' => $this->field_name,
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
-      'required' => TRUE,
-      'widget' => array(
-        'type' => 'options_select',
-      ),
-    );
-    $this->instance = field_create_instance($this->instance);
-    $this->test = array(
-      'id' => mt_rand(1, 10),
-      // Make sure this does not equal the ID so that
-      // list_test_dynamic_values_callback() always returns 4 values.
-      'vid' => mt_rand(20, 30),
-      'bundle' => 'test_bundle',
-      'label' => $this->randomName(),
-    );
-    $this->entity = call_user_func_array('field_test_create_stub_entity', $this->test);
-  }
-}
-
-/**
- * Tests the List field allowed values function.
- */
-class ListDynamicValuesValidationTestCase extends ListDynamicValuesTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'List field dynamic values',
-      'description' => 'Test the List field allowed values function.',
-      'group' => 'Field types',
-    );
-  }
-
-  /**
-   * Test that allowed values function gets the entity.
-   */
-  function testDynamicAllowedValues() {
-    // Verify that the test passes against every value we had.
-    foreach ($this->test as $key => $value) {
-      $this->entity->test_list[LANGUAGE_NONE][0]['value'] = $value;
-      try {
-        field_attach_validate('test_entity', $this->entity);
-        $this->pass("$key should pass");
-      }
-      catch (FieldValidationException $e) {
-        // This will display as an exception, no need for a separate error.
-        throw($e);
-      }
-    }
-    // Now verify that the test does not pass against anything else.
-    foreach ($this->test as $key => $value) {
-      $this->entity->test_list[LANGUAGE_NONE][0]['value'] = is_numeric($value) ? (100 - $value) : ('X' . $value);
-      $pass = FALSE;
-      try {
-        field_attach_validate('test_entity', $this->entity);
-      }
-      catch (FieldValidationException $e) {
-        $pass = TRUE;
-      }
-      $this->assertTrue($pass, $key . ' should not pass');
-    }
-  }
-}
-
-/**
- * List module UI tests.
- */
-class ListFieldUITestCase extends FieldTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'List field UI',
-      'description' => 'Test the List field UI functionality.',
-      'group' => 'Field types',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('field_test', 'field_ui');
-
-    // Create test user.
-    $admin_user = $this->drupalCreateUser(array('access content', 'administer content types', 'administer taxonomy'));
-    $this->drupalLogin($admin_user);
-
-    // Create content type, with underscores.
-    $type_name = 'test_' . strtolower($this->randomName());
-    $type = $this->drupalCreateContentType(array('name' => $type_name, 'type' => $type_name));
-    $this->type = $type->type;
-    // Store a valid URL name, with hyphens instead of underscores.
-    $this->hyphen_type = str_replace('_', '-', $this->type);
-  }
-
-  /**
-   * List (integer) : test 'allowed values' input.
-   */
-  function testListAllowedValuesInteger() {
-    $this->field_name = 'field_list_integer';
-    $this->createListField('list_integer');
-
-    // Flat list of textual values.
-    $string = "Zero\nOne";
-    $array = array('0' => 'Zero', '1' => 'One');
-    $this->assertAllowedValuesInput($string, $array, 'Unkeyed lists are accepted.');
-    // Explicit integer keys.
-    $string = "0|Zero\n2|Two";
-    $array = array('0' => 'Zero', '2' => 'Two');
-    $this->assertAllowedValuesInput($string, $array, 'Integer keys are accepted.');
-    // Check that values can be added and removed.
-    $string = "0|Zero\n1|One";
-    $array = array('0' => 'Zero', '1' => 'One');
-    $this->assertAllowedValuesInput($string, $array, 'Values can be added and removed.');
-    // Non-integer keys.
-    $this->assertAllowedValuesInput("1.1|One", 'keys must be integers', 'Non integer keys are rejected.');
-    $this->assertAllowedValuesInput("abc|abc", 'keys must be integers', 'Non integer keys are rejected.');
-    // Mixed list of keyed and unkeyed values.
-    $this->assertAllowedValuesInput("Zero\n1|One", 'invalid input', 'Mixed lists are rejected.');
-
-    // Create a node with actual data for the field.
-    $settings = array(
-      'type' => $this->type,
-      $this->field_name => array(LANGUAGE_NONE => array(array('value' => 1))),
-    );
-    $node = $this->drupalCreateNode($settings);
-
-    // Check that a flat list of values is rejected once the field has data.
-    $this->assertAllowedValuesInput( "Zero\nOne", 'invalid input', 'Unkeyed lists are rejected once the field has data.');
-
-    // Check that values can be added but values in use cannot be removed.
-    $string = "0|Zero\n1|One\n2|Two";
-    $array = array('0' => 'Zero', '1' => 'One', '2' => 'Two');
-    $this->assertAllowedValuesInput($string, $array, 'Values can be added.');
-    $string = "0|Zero\n1|One";
-    $array = array('0' => 'Zero', '1' => 'One');
-    $this->assertAllowedValuesInput($string, $array, 'Values not in use can be removed.');
-    $this->assertAllowedValuesInput("0|Zero", 'some values are being removed while currently in use', 'Values in use cannot be removed.');
-
-    // Delete the node, remove the value.
-    node_delete($node->nid);
-    $string = "0|Zero";
-    $array = array('0' => 'Zero');
-    $this->assertAllowedValuesInput($string, $array, 'Values not in use can be removed.');
-  }
-
-  /**
-   * List (float) : test 'allowed values' input.
-   */
-  function testListAllowedValuesFloat() {
-    $this->field_name = 'field_list_float';
-    $this->createListField('list_float');
-
-    // Flat list of textual values.
-    $string = "Zero\nOne";
-    $array = array('0' => 'Zero', '1' => 'One');
-    $this->assertAllowedValuesInput($string, $array, 'Unkeyed lists are accepted.');
-    // Explicit numeric keys.
-    $string = "0|Zero\n.5|Point five";
-    $array = array('0' => 'Zero', '0.5' => 'Point five');
-    $this->assertAllowedValuesInput($string, $array, 'Integer keys are accepted.');
-    // Check that values can be added and removed.
-    $string = "0|Zero\n.5|Point five\n1.0|One";
-    $array = array('0' => 'Zero', '0.5' => 'Point five', '1' => 'One');
-    $this->assertAllowedValuesInput($string, $array, 'Values can be added and removed.');
-    // Non-numeric keys.
-    $this->assertAllowedValuesInput("abc|abc\n", 'each key must be a valid integer or decimal', 'Non numeric keys are rejected.');
-    // Mixed list of keyed and unkeyed values.
-    $this->assertAllowedValuesInput("Zero\n1|One\n", 'invalid input', 'Mixed lists are rejected.');
-
-    // Create a node with actual data for the field.
-    $settings = array(
-      'type' => $this->type,
-      $this->field_name => array(LANGUAGE_NONE => array(array('value' => .5))),
-    );
-    $node = $this->drupalCreateNode($settings);
-
-    // Check that a flat list of values is rejected once the field has data.
-    $this->assertAllowedValuesInput("Zero\nOne", 'invalid input', 'Unkeyed lists are rejected once the field has data.');
-
-    // Check that values can be added but values in use cannot be removed.
-    $string = "0|Zero\n.5|Point five\n2|Two";
-    $array = array('0' => 'Zero', '0.5' => 'Point five', '2' => 'Two');
-    $this->assertAllowedValuesInput($string, $array, 'Values can be added.');
-    $string = "0|Zero\n.5|Point five";
-    $array = array('0' => 'Zero', '0.5' => 'Point five');
-    $this->assertAllowedValuesInput($string, $array, 'Values not in use can be removed.');
-    $this->assertAllowedValuesInput("0|Zero", 'some values are being removed while currently in use', 'Values in use cannot be removed.');
-
-    // Delete the node, remove the value.
-    node_delete($node->nid);
-    $string = "0|Zero";
-    $array = array('0' => 'Zero');
-    $this->assertAllowedValuesInput($string, $array, 'Values not in use can be removed.');
-  }
-
-  /**
-   * List (text) : test 'allowed values' input.
-   */
-  function testListAllowedValuesText() {
-    $this->field_name = 'field_list_text';
-    $this->createListField('list_text');
-
-    // Flat list of textual values.
-    $string = "Zero\nOne";
-    $array = array('Zero' => 'Zero', 'One' => 'One');
-    $this->assertAllowedValuesInput($string, $array, 'Unkeyed lists are accepted.');
-    // Explicit keys.
-    $string = "zero|Zero\none|One";
-    $array = array('zero' => 'Zero', 'one' => 'One');
-    $this->assertAllowedValuesInput($string, $array, 'Explicit keys are accepted.');
-    // Check that values can be added and removed.
-    $string = "zero|Zero\ntwo|Two";
-    $array = array('zero' => 'Zero', 'two' => 'Two');
-    $this->assertAllowedValuesInput($string, $array, 'Values can be added and removed.');
-    // Mixed list of keyed and unkeyed values.
-    $string = "zero|Zero\nOne\n";
-    $array = array('zero' => 'Zero', 'One' => 'One');
-    $this->assertAllowedValuesInput($string, $array, 'Mixed lists are accepted.');
-    // Overly long keys.
-    $this->assertAllowedValuesInput("zero|Zero\n" . $this->randomName(256) . "|One", 'each key must be a string at most 255 characters long', 'Overly long keys are rejected.');
-
-    // Create a node with actual data for the field.
-    $settings = array(
-      'type' => $this->type,
-      $this->field_name => array(LANGUAGE_NONE => array(array('value' => 'One'))),
-    );
-    $node = $this->drupalCreateNode($settings);
-
-    // Check that flat lists of values are still accepted once the field has
-    // data.
-    $string = "Zero\nOne";
-    $array = array('Zero' => 'Zero', 'One' => 'One');
-    $this->assertAllowedValuesInput($string, $array, 'Unkeyed lists are still accepted once the field has data.');
-
-    // Check that values can be added but values in use cannot be removed.
-    $string = "Zero\nOne\nTwo";
-    $array = array('Zero' => 'Zero', 'One' => 'One', 'Two' => 'Two');
-    $this->assertAllowedValuesInput($string, $array, 'Values can be added.');
-    $string = "Zero\nOne";
-    $array = array('Zero' => 'Zero', 'One' => 'One');
-    $this->assertAllowedValuesInput($string, $array, 'Values not in use can be removed.');
-    $this->assertAllowedValuesInput("Zero", 'some values are being removed while currently in use', 'Values in use cannot be removed.');
-
-    // Delete the node, remove the value.
-    node_delete($node->nid);
-    $string = "Zero";
-    $array = array('Zero' => 'Zero');
-    $this->assertAllowedValuesInput($string, $array, 'Values not in use can be removed.');
-  }
-
-  /**
-   * List (boolen) : test 'On/Off' values input.
-   */
-  function testListAllowedValuesBoolean() {
-    $this->field_name = 'field_list_boolean';
-    $this->createListField('list_boolean');
-
-    // Check that the separate 'On' and 'Off' form fields work.
-    $on = $this->randomName();
-    $off = $this->randomName();
-    $allowed_values = array(1 => $on, 0 => $off);
-    $edit = array(
-      'on' => $on,
-      'off' => $off,
-    );
-    $this->drupalPost($this->admin_path, $edit, t('Save settings'));
-    $this->assertText("Saved field_list_boolean configuration.", "The 'On' and 'Off' form fields work for boolean fields.");
-    // Test the allowed_values on the field settings form.
-    $this->drupalGet($this->admin_path);
-    $this->assertFieldByName('on', $on, "The 'On' value is stored correctly.");
-    $this->assertFieldByName('off', $off, "The 'Off' value is stored correctly.");
-    $field = field_info_field($this->field_name);
-    $this->assertEqual($field['settings']['allowed_values'], $allowed_values, 'The allowed value is correct');
-    $this->assertFalse(isset($field['settings']['on']), 'The on value is not saved into settings');
-    $this->assertFalse(isset($field['settings']['off']), 'The off value is not saved into settings');
-  }
-
-  /**
-   * Helper function to create list field of a given type.
-   *
-   * @param string $type
-   *   'list_integer', 'list_float', 'list_text' or 'list_boolean'
-   */
-  protected function createListField($type) {
-    // Create a test field and instance.
-    $field = array(
-      'field_name' => $this->field_name,
-      'type' => $type,
-    );
-    field_create_field($field);
-    $instance = array(
-      'field_name' => $this->field_name,
-      'entity_type' => 'node',
-      'bundle' => $this->type,
-    );
-    field_create_instance($instance);
-
-    $this->admin_path = 'admin/structure/types/manage/' . $this->hyphen_type . '/fields/' . $this->field_name;
-  }
-
-  /**
-   * Tests a string input for the 'allowed values' form element.
-   *
-   * @param $input_string
-   *   The input string, in the pipe-linefeed format expected by the form
-   *   element.
-   * @param $result
-   *   Either an expected resulting array in
-   *   $field['settings']['allowed_values'], or an expected error message.
-   * @param $message
-   *   Message to display.
-   */
-  function assertAllowedValuesInput($input_string, $result, $message) {
-    $edit = array('field[settings][allowed_values]' => $input_string);
-    $this->drupalPost($this->admin_path, $edit, t('Save settings'));
-
-    if (is_string($result)) {
-      $this->assertText($result, $message);
-    }
-    else {
-      field_info_cache_clear();
-      $field = field_info_field($this->field_name);
-      $this->assertIdentical($field['settings']['allowed_values'], $result, $message);
-    }
-  }
-}
diff --git a/modules/field/modules/list/tests/list_test.info b/modules/field/modules/list/tests/list_test.info
deleted file mode 100644
index 83ae747..0000000
--- a/modules/field/modules/list/tests/list_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "List test"
-description = "Support module for the List module tests."
-core = 7.x
-package = Testing
-version = VERSION
-hidden = TRUE
diff --git a/modules/field/modules/list/tests/list_test.module b/modules/field/modules/list/tests/list_test.module
deleted file mode 100644
index aa53337..0000000
--- a/modules/field/modules/list/tests/list_test.module
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-/**
- * @file
- * Helper module for the List module tests.
- */
-
-/**
- * Allowed values callback.
- */
-function list_test_allowed_values_callback($field) {
-  $values = array(
-    'Group 1' => array(
-      0 => 'Zero',
-    ),
-    1 => 'One',
-    'Group 2' => array(
-      2 => 'Some <script>dangerous</script> & unescaped <strong>markup</strong>',
-    ),
-  );
-
-  return $values;
-}
-
-/**
- * An entity-bound allowed values callback.
- */
-function list_test_dynamic_values_callback($field, $instance, $entity_type, $entity, &$cacheable) {
-  $cacheable = FALSE;
-  // We need the values of the entity as keys.
-  return drupal_map_assoc(array_merge(array($entity->ftlabel), entity_extract_ids($entity_type, $entity)));
-}
diff --git a/modules/field/modules/number/number.info b/modules/field/modules/number/number.info
deleted file mode 100644
index 203d85d..0000000
--- a/modules/field/modules/number/number.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Number
-description = Defines numeric field types.
-package = Core
-version = VERSION
-core = 7.x
-dependencies[] = field
-files[] = number.test
diff --git a/modules/field/modules/number/number.install b/modules/field/modules/number/number.install
deleted file mode 100644
index 02c7a30..0000000
--- a/modules/field/modules/number/number.install
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the number module.
- */
-
-/**
- * Implements hook_field_schema().
- */
-function number_field_schema($field) {
-  switch ($field['type']) {
-    case 'number_integer' :
-      $columns = array(
-        'value' => array(
-          'type' => 'int',
-          'not null' => FALSE
-        ),
-      );
-      break;
-
-    case 'number_float' :
-      $columns = array(
-        'value' => array(
-          'type' => 'float',
-          'not null' => FALSE
-        ),
-      );
-      break;
-
-    case 'number_decimal' :
-      $columns = array(
-        'value' => array(
-          'type' => 'numeric',
-          'precision' => $field['settings']['precision'],
-          'scale' => $field['settings']['scale'],
-          'not null' => FALSE
-        ),
-      );
-      break;
-  }
-  return array(
-    'columns' => $columns,
-  );
-}
diff --git a/modules/field/modules/number/number.module b/modules/field/modules/number/number.module
deleted file mode 100644
index 6046544..0000000
--- a/modules/field/modules/number/number.module
+++ /dev/null
@@ -1,419 +0,0 @@
-<?php
-
-/**
- * @file
- * Defines numeric field types.
- */
-
-/**
- * Implements hook_help().
- */
-function number_help($path, $arg) {
-  switch ($path) {
-    case 'admin/help#number':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Number module defines various numeric field types for the Field module. Numbers can be in integer, decimal, or floating-point form, and they can be formatted when displayed. Number fields can be limited to a specific set of input values or to a range of values. See the <a href="@field-help">Field module help page</a> for more information about fields.', array('@field-help' => url('admin/help/field'))) . '</p>';
-      return $output;
-  }
-}
-
-/**
- * Implements hook_field_info().
- */
-function number_field_info() {
-  return array(
-    'number_integer' => array(
-      'label' => t('Integer'),
-      'description' => t('This field stores a number in the database as an integer.'),
-      'instance_settings' => array('min' => '', 'max' => '', 'prefix' => '', 'suffix' => ''),
-      'default_widget' => 'number',
-      'default_formatter' => 'number_integer',
-    ),
-    'number_decimal' => array(
-      'label' => t('Decimal'),
-      'description' => t('This field stores a number in the database in a fixed decimal format.'),
-      'settings' => array('precision' => 10, 'scale' => 2, 'decimal_separator' => '.'),
-      'instance_settings' => array('min' => '', 'max' => '', 'prefix' => '', 'suffix' => ''),
-      'default_widget' => 'number',
-      'default_formatter' => 'number_decimal',
-    ),
-    'number_float' => array(
-      'label' => t('Float'),
-      'description' => t('This field stores a number in the database in a floating point format.'),
-      'settings' => array('decimal_separator' => '.'),
-      'instance_settings' => array('min' => '', 'max' => '', 'prefix' => '', 'suffix' => ''),
-      'default_widget' => 'number',
-      'default_formatter' => 'number_decimal',
-    ),
-  );
-}
-
-/**
- * Implements hook_field_settings_form().
- */
-function number_field_settings_form($field, $instance, $has_data) {
-  $settings = $field['settings'];
-  $form = array();
-
-  if ($field['type'] == 'number_decimal') {
-    $form['precision'] = array(
-      '#type' => 'select',
-      '#title' => t('Precision'),
-      '#options' => drupal_map_assoc(range(10, 32)),
-      '#default_value' => $settings['precision'],
-      '#description' => t('The total number of digits to store in the database, including those to the right of the decimal.'),
-      '#disabled' => $has_data,
-    );
-    $form['scale'] = array(
-      '#type' => 'select',
-      '#title' => t('Scale'),
-      '#options' => drupal_map_assoc(range(0, 10)),
-      '#default_value' => $settings['scale'],
-      '#description' => t('The number of digits to the right of the decimal.'),
-      '#disabled' => $has_data,
-    );
-  }
-  if ($field['type'] == 'number_decimal' || $field['type'] == 'number_float') {
-    $form['decimal_separator'] = array(
-      '#type' => 'select',
-      '#title' => t('Decimal marker'),
-      '#options' => array('.' => t('Decimal point'), ',' => t('Comma')),
-      '#default_value' => $settings['decimal_separator'],
-      '#description' => t('The character users will input to mark the decimal point in forms.'),
-    );
-  }
-
-  return $form;
-}
-
-/**
- * Implements hook_field_instance_settings_form().
- */
-function number_field_instance_settings_form($field, $instance) {
-  $settings = $instance['settings'];
-
-  $form['min'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Minimum'),
-    '#default_value' => $settings['min'],
-    '#description' => t('The minimum value that should be allowed in this field. Leave blank for no minimum.'),
-    '#element_validate' => array('element_validate_number'),
-  );
-  $form['max'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Maximum'),
-    '#default_value' => $settings['max'],
-    '#description' => t('The maximum value that should be allowed in this field. Leave blank for no maximum.'),
-    '#element_validate' => array('element_validate_number'),
-  );
-  $form['prefix'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Prefix'),
-    '#default_value' => $settings['prefix'],
-    '#size' => 60,
-    '#description' => t("Define a string that should be prefixed to the value, like '$ ' or '&euro; '. Leave blank for none. Separate singular and plural values with a pipe ('pound|pounds')."),
-  );
-  $form['suffix'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Suffix'),
-    '#default_value' => $settings['suffix'],
-    '#size' => 60,
-    '#description' => t("Define a string that should be suffixed to the value, like ' m', ' kb/s'. Leave blank for none. Separate singular and plural values with a pipe ('pound|pounds')."),
-  );
-
-  return $form;
-}
-
-/**
- * Implements hook_field_validate().
- *
- * Possible error codes:
- * - 'number_min': The value is less than the allowed minimum value.
- * - 'number_max': The value is greater than the allowed maximum value.
- */
-function number_field_validate($entity_type, $entity, $field, $instance, $langcode, $items, &$errors) {
-  foreach ($items as $delta => $item) {
-    if ($item['value'] != '') {
-      if (is_numeric($instance['settings']['min']) && $item['value'] < $instance['settings']['min']) {
-        $errors[$field['field_name']][$langcode][$delta][] = array(
-          'error' => 'number_min',
-          'message' => t('%name: the value may be no less than %min.', array('%name' => $instance['label'], '%min' => $instance['settings']['min'])),
-        );
-      }
-      if (is_numeric($instance['settings']['max']) && $item['value'] > $instance['settings']['max']) {
-        $errors[$field['field_name']][$langcode][$delta][] = array(
-          'error' => 'number_max',
-          'message' => t('%name: the value may be no greater than %max.', array('%name' => $instance['label'], '%max' => $instance['settings']['max'])),
-        );
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_field_presave().
- */
-function number_field_presave($entity_type, $entity, $field, $instance, $langcode, &$items) {
-  if ($field['type'] == 'number_decimal') {
-    // Let PHP round the value to ensure consistent behavior across storage
-    // backends.
-    foreach ($items as $delta => $item) {
-      if (isset($item['value'])) {
-        $items[$delta]['value'] = round($item['value'], $field['settings']['scale']);
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_field_is_empty().
- */
-function number_field_is_empty($item, $field) {
-  if (empty($item['value']) && (string) $item['value'] !== '0') {
-    return TRUE;
-  }
-  return FALSE;
-}
-
-/**
- * Implements hook_field_formatter_info().
- */
-function number_field_formatter_info() {
-  return array(
-    // The 'Default' formatter is different for integer fields on the one hand,
-    // and for decimal and float fields on the other hand, in order to be able
-    // to use different default values for the settings.
-    'number_integer' => array(
-      'label' => t('Default'),
-      'field types' => array('number_integer'),
-      'settings' =>  array(
-        'thousand_separator' => ' ',
-        // The 'decimal_separator' and 'scale' settings are not configurable
-        // through the UI, and will therefore keep their default values. They
-        // are only present so that the 'number_integer' and 'number_decimal'
-        // formatters can use the same code.
-        'decimal_separator' => '.',
-        'scale' => 0,
-        'prefix_suffix' => TRUE,
-      ),
-    ),
-    'number_decimal' => array(
-      'label' => t('Default'),
-      'field types' => array('number_decimal', 'number_float'),
-      'settings' =>  array(
-        'thousand_separator' => ' ',
-        'decimal_separator' => '.',
-        'scale' => 2,
-        'prefix_suffix' => TRUE,
-      ),
-    ),
-    'number_unformatted' => array(
-      'label' => t('Unformatted'),
-      'field types' => array('number_integer', 'number_decimal', 'number_float'),
-    ),
-  );
-}
-
-/**
- * Implements hook_field_formatter_settings_form().
- */
-function number_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
-  $display = $instance['display'][$view_mode];
-  $settings = $display['settings'];
-
-  if ($display['type'] == 'number_decimal' || $display['type'] == 'number_integer') {
-    $options = array(
-      ''  => t('<none>'),
-      '.' => t('Decimal point'),
-      ',' => t('Comma'),
-      ' ' => t('Space'),
-    );
-    $element['thousand_separator'] = array(
-      '#type' => 'select',
-      '#title' => t('Thousand marker'),
-      '#options' => $options,
-      '#default_value' => $settings['thousand_separator'],
-    );
-
-    if ($display['type'] == 'number_decimal') {
-      $element['decimal_separator'] = array(
-        '#type' => 'select',
-        '#title' => t('Decimal marker'),
-        '#options' => array('.' => t('Decimal point'), ',' => t('Comma')),
-        '#default_value' => $settings['decimal_separator'],
-      );
-      $element['scale'] = array(
-        '#type' => 'select',
-        '#title' => t('Scale'),
-        '#options' => drupal_map_assoc(range(0, 10)),
-        '#default_value' => $settings['scale'],
-        '#description' => t('The number of digits to the right of the decimal.'),
-      );
-    }
-
-    $element['prefix_suffix'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Display prefix and suffix.'),
-      '#default_value' => $settings['prefix_suffix'],
-    );
-  }
-
-  return $element;
-}
-
-/**
- * Implements hook_field_formatter_settings_summary().
- */
-function number_field_formatter_settings_summary($field, $instance, $view_mode) {
-  $display = $instance['display'][$view_mode];
-  $settings = $display['settings'];
-
-  $summary = array();
-  if ($display['type'] == 'number_decimal' || $display['type'] == 'number_integer') {
-    $summary[] = number_format(1234.1234567890, $settings['scale'], $settings['decimal_separator'], $settings['thousand_separator']);
-    if ($settings['prefix_suffix']) {
-      $summary[] = t('Display with prefix and suffix.');
-    }
-  }
-
-  return implode('<br />', $summary);
-}
-
-/**
- * Implements hook_field_formatter_view().
- */
-function number_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
-  $element = array();
-  $settings = $display['settings'];
-
-  switch ($display['type']) {
-    case 'number_integer':
-    case 'number_decimal':
-      foreach ($items as $delta => $item) {
-        $output = number_format($item['value'], $settings['scale'], $settings['decimal_separator'], $settings['thousand_separator']);
-        if ($settings['prefix_suffix']) {
-          $prefixes = isset($instance['settings']['prefix']) ? array_map('field_filter_xss', explode('|', $instance['settings']['prefix'])) : array('');
-          $suffixes = isset($instance['settings']['suffix']) ? array_map('field_filter_xss', explode('|', $instance['settings']['suffix'])) : array('');
-          $prefix = (count($prefixes) > 1) ? format_plural($item['value'], $prefixes[0], $prefixes[1]) : $prefixes[0];
-          $suffix = (count($suffixes) > 1) ? format_plural($item['value'], $suffixes[0], $suffixes[1]) : $suffixes[0];
-          $output = $prefix . $output . $suffix;
-        }
-        $element[$delta] = array('#markup' => $output);
-      }
-      break;
-
-    case 'number_unformatted':
-      foreach ($items as $delta => $item) {
-        $element[$delta] = array('#markup' => $item['value']);
-      }
-      break;
-  }
-
-  return $element;
-}
-
-/**
- * Implements hook_field_widget_info().
- */
-function number_field_widget_info() {
-  return array(
-    'number' => array(
-      'label' => t('Text field'),
-      'field types' => array('number_integer', 'number_decimal', 'number_float'),
-    ),
-  );
-}
-
-/**
- * Implements hook_field_widget_form().
- */
-function number_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
-  $value = isset($items[$delta]['value']) ? $items[$delta]['value'] : '';
-  // Substitute the decimal separator.
-  if ($field['type'] == 'number_decimal' || $field['type'] == 'number_float') {
-    $value = strtr($value, '.', $field['settings']['decimal_separator']);
-  }
-
-  $element += array(
-    '#type' => 'textfield',
-    '#default_value' => $value,
-    // Allow a slightly larger size that the field length to allow for some
-    // configurations where all characters won't fit in input field.
-    '#size' => $field['type'] == 'number_decimal' ? $field['settings']['precision'] + 4 : 12,
-    // Allow two extra characters for signed values and decimal separator.
-    '#maxlength' => $field['type'] == 'number_decimal' ? $field['settings']['precision'] + 2 : 10,
-    // Extract the number type from the field type name for easier validation.
-    '#number_type' => str_replace('number_', '', $field['type']),
-  );
-
-  // Add prefix and suffix.
-  if (!empty($instance['settings']['prefix'])) {
-    $prefixes = explode('|', $instance['settings']['prefix']);
-    $element['#field_prefix'] = field_filter_xss(array_pop($prefixes));
-  }
-  if (!empty($instance['settings']['suffix'])) {
-    $suffixes = explode('|', $instance['settings']['suffix']);
-    $element['#field_suffix'] = field_filter_xss(array_pop($suffixes));
-  }
-
-  $element['#element_validate'][] = 'number_field_widget_validate';
-
-  return array('value' => $element);
-}
-
-/**
- * FAPI validation of an individual number element.
- */
-function number_field_widget_validate($element, &$form_state) {
-  $field = field_widget_field($element, $form_state);
-  $instance = field_widget_instance($element, $form_state);
-
-  $type = $element['#number_type'];
-  $value = $element['#value'];
-
-  // Reject invalid characters.
-  if (!empty($value)) {
-    switch ($type) {
-      case 'float':
-      case 'decimal':
-        $regexp = '@([^-0-9\\' . $field['settings']['decimal_separator'] . '])|(.-)@';
-        $message = t('Only numbers and the decimal separator (@separator) allowed in %field.', array('%field' => $instance['label'], '@separator' => $field['settings']['decimal_separator']));
-        break;
-
-      case 'integer':
-        $regexp = '@([^-0-9])|(.-)@';
-        $message = t('Only numbers are allowed in %field.', array('%field' => $instance['label']));
-        break;
-    }
-    if ($value != preg_replace($regexp, '', $value)) {
-      form_error($element, $message);
-    }
-    else {
-      if ($type == 'decimal' || $type == 'float') {
-        // Verify that only one decimal separator exists in the field.
-        if (substr_count($value, $field['settings']['decimal_separator']) > 1) {
-          $message = t('%field: There should only be one decimal separator (@separator).',
-            array(
-              '%field' => t($instance['label']),
-              '@separator' => $field['settings']['decimal_separator'],
-            )
-          );
-          form_error($element, $message);
-        }
-        else {
-          // Substitute the decimal separator; things should be fine.
-          $value = strtr($value, $field['settings']['decimal_separator'], '.');
-        }
-      }
-      form_set_value($element, $value, $form_state);
-    }
-  }
-}
-
-/**
- * Implements hook_field_widget_error().
- */
-function number_field_widget_error($element, $error, $form, &$form_state) {
-  form_error($element['value'], $error['message']);
-}
diff --git a/modules/field/modules/number/number.test b/modules/field/modules/number/number.test
deleted file mode 100644
index 88029cd..0000000
--- a/modules/field/modules/number/number.test
+++ /dev/null
@@ -1,155 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for number.module.
- */
-
-/**
- * Tests for number field types.
- */
-class NumberFieldTestCase extends DrupalWebTestCase {
-  protected $field;
-  protected $instance;
-  protected $web_user;
-
-  public static function getInfo() {
-    return array(
-      'name'  => 'Number field',
-      'description'  => 'Test the creation of number fields.',
-      'group' => 'Field types'
-    );
-  }
-
-  function setUp() {
-    parent::setUp('field_test');
-    $this->web_user = $this->drupalCreateUser(array('access field_test content', 'administer field_test content', 'administer content types'));
-    $this->drupalLogin($this->web_user);
-  }
-
-  /**
-   * Test number_decimal field.
-   */
-  function testNumberDecimalField() {
-    // Create a field with settings to validate.
-    $this->field = array(
-      'field_name' => drupal_strtolower($this->randomName()),
-      'type' => 'number_decimal',
-      'settings' => array(
-        'precision' => 8, 'scale' => 4, 'decimal_separator' => '.',
-      )
-    );
-    field_create_field($this->field);
-    $this->instance = array(
-      'field_name' => $this->field['field_name'],
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
-      'widget' => array(
-        'type' => 'number',
-      ),
-      'display' => array(
-        'default' => array(
-          'type' => 'number_decimal',
-        ),
-      ),
-    );
-    field_create_instance($this->instance);
-
-    // Display creation form.
-    $this->drupalGet('test-entity/add/test-bundle');
-    $langcode = LANGUAGE_NONE;
-    $this->assertFieldByName("{$this->field['field_name']}[$langcode][0][value]", '', 'Widget is displayed');
-
-    // Submit a signed decimal value within the allowed precision and scale.
-    $value = '-1234.5678';
-    $edit = array(
-      "{$this->field['field_name']}[$langcode][0][value]" => $value,
-    );
-    $this->drupalPost(NULL, $edit, t('Save'));
-    preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
-    $id = $match[1];
-    $this->assertRaw(t('test_entity @id has been created.', array('@id' => $id)), 'Entity was created');
-    $this->assertRaw(round($value, 2), 'Value is displayed.');
-
-    // Try to create entries with more than one decimal separator; assert fail.
-    $wrong_entries = array(
-      '3.14.159',
-      '0..45469',
-      '..4589',
-      '6.459.52',
-      '6.3..25',
-    );
-
-    foreach ($wrong_entries as $wrong_entry) {
-      $this->drupalGet('test-entity/add/test-bundle');
-      $edit = array(
-        "{$this->field['field_name']}[$langcode][0][value]" => $wrong_entry,
-      );
-      $this->drupalPost(NULL, $edit, t('Save'));
-      $this->assertText(
-        t('There should only be one decimal separator (@separator)',
-          array('@separator' => $this->field['settings']['decimal_separator'])),
-        'Correctly failed to save decimal value with more than one decimal point.'
-      );
-    }
-
-    // Try to create entries with minus sign not in the first position.
-    $wrong_entries = array(
-      '3-3',
-      '4-',
-      '1.3-',
-      '1.2-4',
-      '-10-10',
-    );
-
-    foreach ($wrong_entries as $wrong_entry) {
-      $this->drupalGet('test-entity/add/test-bundle');
-      $edit = array(
-        "{$this->field['field_name']}[$langcode][0][value]" => $wrong_entry,
-      );
-      $this->drupalPost(NULL, $edit, t('Save'));
-      $this->assertText(
-        t('Only numbers and the decimal separator (@separator) allowed in ',
-          array('@separator' => $this->field['settings']['decimal_separator'])),
-        'Correctly failed to save decimal value with minus sign in the wrong position.'
-      );
-    }
-  }
-
-  /**
-   * Test number_integer field.
-   */
-  function testNumberIntegerField() {
-    // Display the "Add content type" form.
-    $this->drupalGet('admin/structure/types/add');
-
-    // Add a content type.
-    $name = $this->randomName();
-    $type = drupal_strtolower($name);
-    $edit = array('name' => $name, 'type' => $type);
-    $this->drupalPost(NULL, $edit, t('Save and add fields'));
-
-    // Add an integer field to the newly-created type.
-    $label = $this->randomName();
-    $field_name = drupal_strtolower($label);
-    $edit = array(
-      'fields[_add_new_field][label]'=> $label,
-      'fields[_add_new_field][field_name]' => $field_name,
-      'fields[_add_new_field][type]' => 'number_integer',
-      'fields[_add_new_field][widget_type]' => 'number',
-    );
-    $this->drupalPost(NULL, $edit, t('Save'));
-
-    // Set the formatter to "number_integer" and to "unformatted", and just
-    // check that the settings summary does not generate warnings.
-    $this->drupalGet("admin/structure/types/manage/$type/display");
-    $edit = array(
-      "fields[field_$field_name][type]" => 'number_integer',
-    );
-    $this->drupalPost(NULL, $edit, t('Save'));
-    $edit = array(
-      "fields[field_$field_name][type]" => 'number_unformatted',
-    );
-    $this->drupalPost(NULL, $edit, t('Save'));
-  }
-}
diff --git a/modules/field/modules/options/options.api.php b/modules/field/modules/options/options.api.php
deleted file mode 100644
index 86f2b12..0000000
--- a/modules/field/modules/options/options.api.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-
-/**
- * @file
- * Hooks provided by the Options module.
- */
-
-/**
- * Returns the list of options to be displayed for a field.
- *
- * Field types willing to enable one or several of the widgets defined in
- * options.module (select, radios/checkboxes, on/off checkbox) need to
- * implement this hook to specify the list of options to display in the
- * widgets.
- *
- * @param $field
- *   The field definition.
- * @param $instance
- *   (optional) The instance definition. The hook might be called without an
- *   $instance parameter in contexts where no specific instance can be targeted.
- *   It is recommended to only use instance level properties to filter out
- *   values from a list defined by field level properties.
- * @param $entity_type
- *   The entity type the field is attached to.
- * @param $entity
- *   The entity object the field is attached to, or NULL if no entity
- *   exists (e.g. in field settings page).
- *
- * @return
- *   The array of options for the field. Array keys are the values to be
- *   stored, and should be of the data type (string, number...) expected by
- *   the first 'column' for the field type. Array values are the labels to
- *   display within the widgets. The labels should NOT be sanitized,
- *   options.module takes care of sanitation according to the needs of each
- *   widget. The HTML tags defined in _field_filter_xss_allowed_tags() are
- *   allowed, other tags will be filtered.
- */
-function hook_options_list($field, $instance, $entity_type, $entity) {
-  // Sample structure.
-  $options = array(
-    0 => t('Zero'),
-    1 => t('One'),
-    2 => t('Two'),
-    3 => t('Three'),
-  );
-
-  // Sample structure with groups. Only one level of nesting is allowed. This
-  // is only supported by the 'options_select' widget. Other widgets will
-  // flatten the array.
-  $options = array(
-    t('First group') => array(
-      0 => t('Zero'),
-    ),
-    t('Second group') => array(
-      1 => t('One'),
-      2 => t('Two'),
-    ),
-    3 => t('Three'),
-  );
-
-  // In actual implementations, the array of options will most probably depend
-  // on properties of the field. Example from taxonomy.module:
-  $options = array();
-  foreach ($field['settings']['allowed_values'] as $tree) {
-    $terms = taxonomy_get_tree($tree['vid'], $tree['parent']);
-    if ($terms) {
-      foreach ($terms as $term) {
-        $options[$term->tid] = str_repeat('-', $term->depth) . $term->name;
-      }
-    }
-  }
-
-  return $options;
-}
diff --git a/modules/field/modules/options/options.info b/modules/field/modules/options/options.info
deleted file mode 100644
index 985a74c..0000000
--- a/modules/field/modules/options/options.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Options
-description = Defines selection, check box and radio button widgets for text and numeric fields.
-package = Core
-version = VERSION
-core = 7.x
-dependencies[] = field
-files[] = options.test
diff --git a/modules/field/modules/options/options.module b/modules/field/modules/options/options.module
deleted file mode 100644
index 3862ba7..0000000
--- a/modules/field/modules/options/options.module
+++ /dev/null
@@ -1,417 +0,0 @@
-<?php
-
-/**
- * @file
- * Defines selection, check box and radio button widgets for text and numeric fields.
- */
-
-/**
- * Implements hook_help().
- */
-function options_help($path, $arg) {
-  switch ($path) {
-    case 'admin/help#options':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Options module defines checkbox, selection, and other input widgets for the Field module. See the <a href="@field-help">Field module help page</a> for more information about fields.', array('@field-help' => url('admin/help/field'))) . '</p>';
-      return $output;
-  }
-}
-
-/**
- * Implements hook_theme().
- */
-function options_theme() {
-  return array(
-    'options_none' => array(
-      'variables' => array('instance' => NULL, 'option' => NULL),
-    ),
-  );
-}
-
-/**
- * Implements hook_field_widget_info().
- *
- * Field type modules willing to use those widgets should:
- * - Use hook_field_widget_info_alter() to append their field own types to the
- *   list of types supported by the widgets,
- * - Implement hook_options_list() to provide the list of options.
- * See list.module.
- */
-function options_field_widget_info() {
-  return array(
-    'options_select' => array(
-      'label' => t('Select list'),
-      'field types' => array(),
-      'behaviors' => array(
-        'multiple values' => FIELD_BEHAVIOR_CUSTOM,
-      ),
-    ),
-    'options_buttons' => array(
-      'label' => t('Check boxes/radio buttons'),
-      'field types' => array(),
-      'behaviors' => array(
-        'multiple values' => FIELD_BEHAVIOR_CUSTOM,
-      ),
-    ),
-    'options_onoff' => array(
-      'label' => t('Single on/off checkbox'),
-      'field types' => array(),
-      'behaviors' => array(
-        'multiple values' => FIELD_BEHAVIOR_CUSTOM,
-      ),
-      'settings' => array('display_label' => 0),
-    ),
-  );
-}
-
-/**
- * Implements hook_field_widget_form().
- */
-function options_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
-  // Abstract over the actual field columns, to allow different field types to
-  // reuse those widgets.
-  $value_key = key($field['columns']);
-
-  $type = str_replace('options_', '', $instance['widget']['type']);
-  $multiple = $field['cardinality'] > 1 || $field['cardinality'] == FIELD_CARDINALITY_UNLIMITED;
-  $required = $element['#required'];
-  $has_value = isset($items[0][$value_key]);
-  $properties = _options_properties($type, $multiple, $required, $has_value);
-
-  $entity_type = $element['#entity_type'];
-  $entity = $element['#entity'];
-
-  // Prepare the list of options.
-  $options = _options_get_options($field, $instance, $properties, $entity_type, $entity);
-
-  // Put current field values in shape.
-  $default_value = _options_storage_to_form($items, $options, $value_key, $properties);
-
-  switch ($type) {
-    case 'select':
-      $element += array(
-        '#type' => 'select',
-        '#default_value' => $default_value,
-        // Do not display a 'multiple' select box if there is only one option.
-        '#multiple' => $multiple && count($options) > 1,
-        '#options' => $options,
-      );
-      break;
-
-    case 'buttons':
-      // If required and there is one single option, preselect it.
-      if ($required && count($options) == 1) {
-        reset($options);
-        $default_value = array(key($options));
-      }
-
-      // If this is a single-value field, take the first default value, or
-      // default to NULL so that the form element is properly recognized as
-      // not having a default value.
-      if (!$multiple) {
-        $default_value = $default_value ? reset($default_value) : NULL;
-      }
-
-      $element += array(
-        '#type' => $multiple ? 'checkboxes' : 'radios',
-        // Radio buttons need a scalar value.
-        '#default_value' => $default_value,
-        '#options' => $options,
-      );
-      break;
-
-    case 'onoff':
-      $keys = array_keys($options);
-      $off_value = array_shift($keys);
-      $on_value = array_shift($keys);
-      $element += array(
-        '#type' => 'checkbox',
-        '#default_value' => (isset($default_value[0]) && $default_value[0] == $on_value) ? 1 : 0,
-        '#on_value' => $on_value,
-        '#off_value' => $off_value,
-      );
-      // Override the title from the incoming $element.
-      $element['#title'] = isset($options[$on_value]) ? $options[$on_value] : '';
-
-      if ($instance['widget']['settings']['display_label']) {
-        $element['#title'] = $instance['label'];
-      }
-      break;
-  }
-
-  $element += array(
-    '#value_key' => $value_key,
-    '#element_validate' => array('options_field_widget_validate'),
-    '#properties' => $properties,
-  );
-
-  return $element;
-}
-
-/**
- * Implements hook_field_widget_settings_form().
- */
-function options_field_widget_settings_form($field, $instance) {
-  $form = array();
-  if ($instance['widget']['type'] == 'options_onoff') {
-    $form['display_label'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Use field label instead of the "On value" as label'),
-      '#default_value' => $instance['widget']['settings']['display_label'],
-      '#weight' => -1,
-    );
-  }
-  return $form;
-}
-
-/**
- * Form element validation handler for options element.
- */
-function options_field_widget_validate($element, &$form_state) {
-  if ($element['#required'] && $element['#value'] == '_none') {
-    form_error($element, t('!name field is required.', array('!name' => $element['#title'])));
-  }
-  // Transpose selections from field => delta to delta => field, turning
-  // multiple selected options into multiple parent elements.
-  $items = _options_form_to_storage($element);
-  form_set_value($element, $items, $form_state);
-}
-
-/**
- * Describes the preparation steps required by each widget.
- */
-function _options_properties($type, $multiple, $required, $has_value) {
-  $base = array(
-    'filter_xss' => FALSE,
-    'strip_tags' => FALSE,
-    'empty_option' => FALSE,
-    'optgroups' => FALSE,
-  );
-
-  $properties = array();
-
-  switch ($type) {
-    case 'select':
-      $properties = array(
-        // Select boxes do not support any HTML tag.
-        'strip_tags' => TRUE,
-        'optgroups' => TRUE,
-      );
-      if ($multiple) {
-        // Multiple select: add a 'none' option for non-required fields.
-        if (!$required) {
-          $properties['empty_option'] = 'option_none';
-        }
-      }
-      else {
-        // Single select: add a 'none' option for non-required fields,
-        // and a 'select a value' option for required fields that do not come
-        // with a value selected.
-        if (!$required) {
-          $properties['empty_option'] = 'option_none';
-        }
-        elseif (!$has_value) {
-          $properties['empty_option'] = 'option_select';
-        }
-      }
-      break;
-
-    case 'buttons':
-      $properties = array(
-        'filter_xss' => TRUE,
-      );
-      // Add a 'none' option for non-required radio buttons.
-      if (!$required && !$multiple) {
-        $properties['empty_option'] = 'option_none';
-      }
-      break;
-
-    case 'onoff':
-      $properties = array(
-        'filter_xss' => TRUE,
-      );
-      break;
-  }
-
-  return $properties + $base;
-}
-
-/**
- * Collects the options for a field.
- */
-function _options_get_options($field, $instance, $properties, $entity_type, $entity) {
-  // Get the list of options.
-  $options = (array) module_invoke($field['module'], 'options_list', $field, $instance, $entity_type, $entity);
-
-  // Sanitize the options.
-  _options_prepare_options($options, $properties);
-
-  if (!$properties['optgroups']) {
-    $options = options_array_flatten($options);
-  }
-
-  if ($properties['empty_option']) {
-    $label = theme('options_none', array('instance' => $instance, 'option' => $properties['empty_option']));
-    $options = array('_none' => $label) + $options;
-  }
-
-  return $options;
-}
-
-/**
- * Sanitizes the options.
- *
- * The function is recursive to support optgroups.
- */
-function _options_prepare_options(&$options, $properties) {
-  foreach ($options as $value => $label) {
-    // Recurse for optgroups.
-    if (is_array($label)) {
-      _options_prepare_options($options[$value], $properties);
-    }
-    else {
-      if ($properties['strip_tags']) {
-        $options[$value] = strip_tags($label);
-      }
-      if ($properties['filter_xss']) {
-        $options[$value] = field_filter_xss($label);
-      }
-    }
-  }
-}
-
-/**
- * Transforms stored field values into the format the widgets need.
- */
-function _options_storage_to_form($items, $options, $column, $properties) {
-  $items_transposed = options_array_transpose($items);
-  $values = (isset($items_transposed[$column]) && is_array($items_transposed[$column])) ? $items_transposed[$column] : array();
-
-  // Discard values that are not in the current list of options. Flatten the
-  // array if needed.
-  if ($properties['optgroups']) {
-    $options = options_array_flatten($options);
-  }
-  $values = array_values(array_intersect($values, array_keys($options)));
-  return $values;
-}
-
-/**
- * Transforms submitted form values into field storage format.
- */
-function _options_form_to_storage($element) {
-  $values = array_values((array) $element['#value']);
-  $properties = $element['#properties'];
-
-  // On/off checkbox: transform '0 / 1' into the 'on / off' values.
-  if ($element['#type'] == 'checkbox') {
-    $values = array($values[0] ? $element['#on_value'] : $element['#off_value']);
-  }
-
-  // Filter out the 'none' option. Use a strict comparison, because
-  // 0 == 'any string'.
-  if ($properties['empty_option']) {
-    $index = array_search('_none', $values, TRUE);
-    if ($index !== FALSE) {
-      unset($values[$index]);
-    }
-  }
-
-  // Make sure we populate at least an empty value.
-  if (empty($values)) {
-    $values = array(NULL);
-  }
-
-  $result = options_array_transpose(array($element['#value_key'] => $values));
-  return $result;
-}
-
-/**
- * Manipulates a 2D array to reverse rows and columns.
- *
- * The default data storage for fields is delta first, column names second.
- * This is sometimes inconvenient for field modules, so this function can be
- * used to present the data in an alternate format.
- *
- * @param $array
- *   The array to be transposed. It must be at least two-dimensional, and
- *   the subarrays must all have the same keys or behavior is undefined.
- * @return
- *   The transposed array.
- */
-function options_array_transpose($array) {
-  $result = array();
-  if (is_array($array)) {
-    foreach ($array as $key1 => $value1) {
-      if (is_array($value1)) {
-        foreach ($value1 as $key2 => $value2) {
-          if (!isset($result[$key2])) {
-            $result[$key2] = array();
-          }
-          $result[$key2][$key1] = $value2;
-        }
-      }
-    }
-  }
-  return $result;
-}
-
-/**
- * Flattens an array of allowed values.
- *
- * @param $array
- *   A single or multidimensional array.
- * @return
- *   A flattened array.
- */
-function options_array_flatten($array) {
-  $result = array();
-  if (is_array($array)) {
-    foreach ($array as $key => $value) {
-      if (is_array($value)) {
-        $result += options_array_flatten($value);
-      }
-      else {
-        $result[$key] = $value;
-      }
-    }
-  }
-  return $result;
-}
-
-/**
- * Implements hook_field_widget_error().
- */
-function options_field_widget_error($element, $error, $form, &$form_state) {
-  form_error($element, $error['message']);
-}
-
-/**
- * Returns HTML for the label for the empty value for options that are not required.
- *
- * The default theme will display N/A for a radio list and '- None -' for a select.
- *
- * @param $variables
- *   An associative array containing:
- *   - instance: An array representing the widget requesting the options.
- *
- * @ingroup themeable
- */
-function theme_options_none($variables) {
-  $instance = $variables['instance'];
-  $option = $variables['option'];
-
-  $output = '';
-  switch ($instance['widget']['type']) {
-    case 'options_buttons':
-      $output = t('N/A');
-      break;
-
-    case 'options_select':
-      $output = ($option == 'option_none' ? t('- None -') : t('- Select a value -'));
-      break;
-  }
-
-  return $output;
-}
diff --git a/modules/field/modules/text/text.info b/modules/field/modules/text/text.info
deleted file mode 100644
index 976e299..0000000
--- a/modules/field/modules/text/text.info
+++ /dev/null
@@ -1,8 +0,0 @@
-name = Text
-description = Defines simple text field types.
-package = Core
-version = VERSION
-core = 7.x
-dependencies[] = field
-files[] = text.test
-required = TRUE
diff --git a/modules/field/modules/text/text.install b/modules/field/modules/text/text.install
deleted file mode 100644
index 61be748..0000000
--- a/modules/field/modules/text/text.install
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the text module.
- */
-
-/**
- * Implements hook_field_schema().
- */
-function text_field_schema($field) {
-  switch ($field['type']) {
-    case 'text':
-      $columns = array(
-        'value' => array(
-          'type' => 'varchar',
-          'length' => $field['settings']['max_length'],
-          'not null' => FALSE,
-        ),
-      );
-      break;
-
-    case 'text_long':
-      $columns = array(
-        'value' => array(
-          'type' => 'text',
-          'size' => 'big',
-          'not null' => FALSE,
-        ),
-      );
-      break;
-
-    case 'text_with_summary':
-      $columns = array(
-        'value' => array(
-          'type' => 'text',
-          'size' => 'big',
-          'not null' => FALSE,
-        ),
-        'summary' => array(
-          'type' => 'text',
-          'size' => 'big',
-          'not null' => FALSE,
-        ),
-      );
-      break;
-  }
-  $columns += array(
-    'format' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => FALSE,
-    ),
-  );
-  return array(
-    'columns' => $columns,
-    'indexes' => array(
-      'format' => array('format'),
-    ),
-    'foreign keys' => array(
-      'format' => array(
-        'table' => 'filter_format',
-        'columns' => array('format' => 'format'),
-      ),
-    ),
-  );
-}
-
-/**
- * Change text field 'format' columns into varchar.
- */
-function text_update_7000() {
-  $spec = array(
-    'type' => 'varchar',
-    'length' => 255,
-    'not null' => FALSE,
-  );
-  $fields = _update_7000_field_read_fields(array(
-    'module' => 'text',
-    'storage_type' => 'field_sql_storage',
-  ));
-  foreach ($fields as $field) {
-    if ($field['deleted']) {
-      $table = "field_deleted_data_{$field['id']}";
-      $revision_table = "field_deleted_revision_{$field['id']}";
-    }
-    else {
-      $table = "field_data_{$field['field_name']}";
-      $revision_table = "field_revision_{$field['field_name']}";
-    }
-    $column = $field['field_name'] . '_' . 'format';
-    db_change_field($table, $column, $column, $spec);
-    db_change_field($revision_table, $column, $column, $spec);
-  }
-}
diff --git a/modules/field/modules/text/text.js b/modules/field/modules/text/text.js
deleted file mode 100644
index f3ae894..0000000
--- a/modules/field/modules/text/text.js
+++ /dev/null
@@ -1,49 +0,0 @@
-
-(function ($) {
-
-/**
- * Auto-hide summary textarea if empty and show hide and unhide links.
- */
-Drupal.behaviors.textSummary = {
-  attach: function (context, settings) {
-    $('.text-summary', context).once('text-summary', function () {
-      var $widget = $(this).closest('div.field-type-text-with-summary');
-      var $summaries = $widget.find('div.text-summary-wrapper');
-
-      $summaries.once('text-summary-wrapper').each(function(index) {
-        var $summary = $(this);
-        var $summaryLabel = $summary.find('label');
-        var $full = $widget.find('.text-full').eq(index).closest('.form-item');
-        var $fullLabel = $full.find('label');
-
-        // Create a placeholder label when the field cardinality is
-        // unlimited or greater than 1.
-        if ($fullLabel.length == 0) {
-          $fullLabel = $('<label></label>').prependTo($full);
-        }
-
-        // Setup the edit/hide summary link.
-        var $link = $('<span class="field-edit-link">(<a class="link-edit-summary" href="#">' + Drupal.t('Hide summary') + '</a>)</span>').toggle(
-          function () {
-            $summary.hide();
-            $(this).find('a').html(Drupal.t('Edit summary')).end().appendTo($fullLabel);
-            return false;
-          },
-          function () {
-            $summary.show();
-            $(this).find('a').html(Drupal.t('Hide summary')).end().appendTo($summaryLabel);
-            return false;
-          }
-        ).appendTo($summaryLabel);
-
-        // If no summary is set, hide the summary field.
-        if ($(this).find('.text-summary').val() == '') {
-          $link.click();
-        }
-        return;
-      });
-    });
-  }
-};
-
-})(jQuery);
diff --git a/modules/field/modules/text/text.module b/modules/field/modules/text/text.module
deleted file mode 100644
index d73814f..0000000
--- a/modules/field/modules/text/text.module
+++ /dev/null
@@ -1,611 +0,0 @@
-<?php
-
-/**
- * @file
- * Defines simple text field types.
- */
-
-/**
- * Implements hook_help().
- */
-function text_help($path, $arg) {
-  switch ($path) {
-    case 'admin/help#text':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t("The Text module defines various text field types for the Field module. A text field may contain plain text only, or optionally, may use Drupal's <a href='@filter-help'>text filters</a> to securely manage HTML output. Text input fields may be either a single line (text field), multiple lines (text area), or for greater input control, a select box, checkbox, or radio buttons. If desired, the field can be validated, so that it is limited to a set of allowed values. See the <a href='@field-help'>Field module help page</a> for more information about fields.", array('@field-help' => url('admin/help/field'), '@filter-help' => url('admin/help/filter'))) . '</p>';
-      return $output;
-  }
-}
-
-/**
- * Implements hook_field_info().
- *
- * Field settings:
- *   - max_length: the maximum length for a varchar field.
- * Instance settings:
- *   - text_processing: whether text input filters should be used.
- *   - display_summary: whether the summary field should be displayed.
- *     When empty and not displayed the summary will take its value from the
- *     trimmed value of the main text field.
- */
-function text_field_info() {
-  return array(
-    'text' => array(
-      'label' => t('Text'),
-      'description' => t('This field stores varchar text in the database.'),
-      'settings' => array('max_length' => 255),
-      'instance_settings' => array('text_processing' => 0),
-      'default_widget' => 'text_textfield',
-      'default_formatter' => 'text_default',
-    ),
-    'text_long' => array(
-      'label' => t('Long text'),
-      'description' => t('This field stores long text in the database.'),
-      'instance_settings' => array('text_processing' => 0),
-      'default_widget' => 'text_textarea',
-      'default_formatter' => 'text_default',
-    ),
-    'text_with_summary' => array(
-      'label' => t('Long text and summary'),
-      'description' => t('This field stores long text in the database along with optional summary text.'),
-      'instance_settings' => array('text_processing' => 1, 'display_summary' => 0),
-      'default_widget' => 'text_textarea_with_summary',
-      'default_formatter' => 'text_default',
-    ),
-  );
-}
-
-/**
- * Implements hook_field_settings_form().
- */
-function text_field_settings_form($field, $instance, $has_data) {
-  $settings = $field['settings'];
-
-  $form = array();
-
-  if ($field['type'] == 'text') {
-    $form['max_length'] = array(
-      '#type' => 'textfield',
-      '#title' => t('Maximum length'),
-      '#default_value' => $settings['max_length'],
-      '#required' => TRUE,
-      '#description' => t('The maximum length of the field in characters.'),
-      '#element_validate' => array('element_validate_integer_positive'),
-      // @todo: If $has_data, add a validate handler that only allows
-      // max_length to increase.
-      '#disabled' => $has_data,
-    );
-  }
-
-  return $form;
-}
-
-/**
- * Implements hook_field_instance_settings_form().
- */
-function text_field_instance_settings_form($field, $instance) {
-  $settings = $instance['settings'];
-
-  $form['text_processing'] = array(
-    '#type' => 'radios',
-    '#title' => t('Text processing'),
-    '#default_value' => $settings['text_processing'],
-    '#options' => array(
-      t('Plain text'),
-      t('Filtered text (user selects text format)'),
-    ),
-  );
-  if ($field['type'] == 'text_with_summary') {
-    $form['display_summary'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Summary input'),
-      '#default_value' => $settings['display_summary'],
-      '#description' => t('This allows authors to input an explicit summary, to be displayed instead of the automatically trimmed text when using the "Summary or trimmed" display type.'),
-    );
-  }
-
-  return $form;
-}
-
-/**
- * Implements hook_field_validate().
- *
- * Possible error codes:
- * - 'text_value_max_length': The value exceeds the maximum length.
- * - 'text_summary_max_length': The summary exceeds the maximum length.
- */
-function text_field_validate($entity_type, $entity, $field, $instance, $langcode, $items, &$errors) {
-  foreach ($items as $delta => $item) {
-    // @todo Length is counted separately for summary and value, so the maximum
-    //   length can be exceeded very easily.
-    foreach (array('value', 'summary') as $column) {
-      if (!empty($item[$column])) {
-        if (!empty($field['settings']['max_length']) && drupal_strlen($item[$column]) > $field['settings']['max_length']) {
-          switch ($column) {
-            case 'value':
-              $message = t('%name: the text may not be longer than %max characters.', array('%name' => $instance['label'], '%max' => $field['settings']['max_length']));
-              break;
-
-            case 'summary':
-              $message = t('%name: the summary may not be longer than %max characters.', array('%name' => $instance['label'], '%max' => $field['settings']['max_length']));
-              break;
-          }
-          $errors[$field['field_name']][$langcode][$delta][] = array(
-            'error' => "text_{$column}_length",
-            'message' => $message,
-          );
-        }
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_field_load().
- *
- * Where possible, generate the sanitized version of each field early so that
- * it is cached in the field cache. This avoids looking up from the filter cache
- * separately.
- *
- * @see text_field_formatter_view()
- */
-function text_field_load($entity_type, $entities, $field, $instances, $langcode, &$items) {
-  foreach ($entities as $id => $entity) {
-    foreach ($items[$id] as $delta => $item) {
-      // Only process items with a cacheable format, the rest will be handled
-      // by formatters if needed.
-      if (empty($instances[$id]['settings']['text_processing']) || filter_format_allowcache($item['format'])) {
-        $items[$id][$delta]['safe_value'] = isset($item['value']) ? _text_sanitize($instances[$id], $langcode, $item, 'value') : '';
-        if ($field['type'] == 'text_with_summary') {
-          $items[$id][$delta]['safe_summary'] = isset($item['summary']) ? _text_sanitize($instances[$id], $langcode, $item, 'summary') : '';
-        }
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_field_is_empty().
- */
-function text_field_is_empty($item, $field) {
-  if (!isset($item['value']) || $item['value'] === '') {
-    return !isset($item['summary']) || $item['summary'] === '';
-  }
-  return FALSE;
-}
-
-/**
- * Implements hook_field_formatter_info().
- */
-function text_field_formatter_info() {
-  return array(
-    'text_default' => array(
-      'label' => t('Default'),
-      'field types' => array('text', 'text_long', 'text_with_summary'),
-    ),
-    'text_plain' => array(
-      'label' => t('Plain text'),
-      'field types' => array('text', 'text_long', 'text_with_summary'),
-    ),
-
-    // The text_trimmed formatter displays the trimmed version of the
-    // full element of the field. It is intended to be used with text
-    // and text_long fields. It also works with text_with_summary
-    // fields though the text_summary_or_trimmed formatter makes more
-    // sense for that field type.
-    'text_trimmed' => array(
-      'label' => t('Trimmed'),
-      'field types' => array('text', 'text_long', 'text_with_summary'),
-      'settings' => array('trim_length' => 600),
-    ),
-
-    // The 'summary or trimmed' field formatter for text_with_summary
-    // fields displays returns the summary element of the field or, if
-    // the summary is empty, the trimmed version of the full element
-    // of the field.
-    'text_summary_or_trimmed' => array(
-      'label' => t('Summary or trimmed'),
-      'field types' => array('text_with_summary'),
-      'settings' => array('trim_length' => 600),
-    ),
-  );
-}
-
-/**
- * Implements hook_field_formatter_settings_form().
- */
-function text_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
-  $display = $instance['display'][$view_mode];
-  $settings = $display['settings'];
-
-  $element = array();
-
-  if (strpos($display['type'], '_trimmed') !== FALSE) {
-    $element['trim_length'] = array(
-      '#title' => t('Trim length'),
-      '#type' => 'textfield',
-      '#size' => 10,
-      '#default_value' => $settings['trim_length'],
-      '#element_validate' => array('element_validate_integer_positive'),
-      '#required' => TRUE,
-    );
-  }
-
-  return $element;
-}
-
-/**
- * Implements hook_field_formatter_settings_summary().
- */
-function text_field_formatter_settings_summary($field, $instance, $view_mode) {
-  $display = $instance['display'][$view_mode];
-  $settings = $display['settings'];
-
-  $summary = '';
-
-  if (strpos($display['type'], '_trimmed') !== FALSE) {
-    $summary = t('Trim length') . ': ' . $settings['trim_length'];
-  }
-
-  return $summary;
-}
-
-/**
- * Implements hook_field_formatter_view().
- */
-function text_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
-  $element = array();
-
-  switch ($display['type']) {
-    case 'text_default':
-    case 'text_trimmed':
-      foreach ($items as $delta => $item) {
-        $output = _text_sanitize($instance, $langcode, $item, 'value');
-        if ($display['type'] == 'text_trimmed') {
-          $output = text_summary($output, $instance['settings']['text_processing'] ? $item['format'] : NULL, $display['settings']['trim_length']);
-        }
-        $element[$delta] = array('#markup' => $output);
-      }
-      break;
-
-    case 'text_summary_or_trimmed':
-      foreach ($items as $delta => $item) {
-        if (!empty($item['summary'])) {
-          $output = _text_sanitize($instance, $langcode, $item, 'summary');
-        }
-        else {
-          $output = _text_sanitize($instance, $langcode, $item, 'value');
-          $output = text_summary($output, $instance['settings']['text_processing'] ? $item['format'] : NULL, $display['settings']['trim_length']);
-        }
-        $element[$delta] = array('#markup' => $output);
-      }
-      break;
-
-    case 'text_plain':
-      foreach ($items as $delta => $item) {
-        $element[$delta] = array('#markup' => strip_tags($item['value']));
-      }
-      break;
-  }
-
-  return $element;
-}
-
-/**
- * Sanitizes the 'value' or 'summary' data of a text value.
- *
- * Depending on whether the field instance uses text processing, data is run
- * through check_plain() or check_markup().
- *
- * @param $instance
- *   The instance definition.
- * @param $langcode
- *  The language associated to $item.
- * @param $item
- *   The field value to sanitize.
- * @param $column
- *   The column to sanitize (either 'value' or 'summary').
- *
- * @return
- *  The sanitized string.
- */
-function _text_sanitize($instance, $langcode, $item, $column) {
-  // If the value uses a cacheable text format, text_field_load() precomputes
-  // the sanitized string.
-  if (isset($item["safe_$column"])) {
-    return $item["safe_$column"];
-  }
-  return $instance['settings']['text_processing'] ? check_markup($item[$column], $item['format'], $langcode) : check_plain($item[$column]);
-}
-
-/**
- * Generate a trimmed, formatted version of a text field value.
- *
- * If the end of the summary is not indicated using the <!--break--> delimiter
- * then we generate the summary automatically, trying to end it at a sensible
- * place such as the end of a paragraph, a line break, or the end of a
- * sentence (in that order of preference).
- *
- * @param $text
- *   The content for which a summary will be generated.
- * @param $format
- *   The format of the content.
- *   If the PHP filter is present and $text contains PHP code, we do not
- *   split it up to prevent parse errors.
- *   If the line break filter is present then we treat newlines embedded in
- *   $text as line breaks.
- *   If the htmlcorrector filter is present, it will be run on the generated
- *   summary (if different from the incoming $text).
- * @param $size
- *   The desired character length of the summary. If omitted, the default
- *   value will be used. Ignored if the special delimiter is present
- *   in $text.
- * @return
- *   The generated summary.
- */
-function text_summary($text, $format = NULL, $size = NULL) {
-
-  if (!isset($size)) {
-    // What used to be called 'teaser' is now called 'summary', but
-    // the variable 'teaser_length' is preserved for backwards compatibility.
-    $size = variable_get('teaser_length', 600);
-  }
-
-  // Find where the delimiter is in the body
-  $delimiter = strpos($text, '<!--break-->');
-
-  // If the size is zero, and there is no delimiter, the entire body is the summary.
-  if ($size == 0 && $delimiter === FALSE) {
-    return $text;
-  }
-
-  // If a valid delimiter has been specified, use it to chop off the summary.
-  if ($delimiter !== FALSE) {
-    return substr($text, 0, $delimiter);
-  }
-
-  // We check for the presence of the PHP evaluator filter in the current
-  // format. If the body contains PHP code, we do not split it up to prevent
-  // parse errors.
-  if (isset($format)) {
-    $filters = filter_list_format($format);
-    if (isset($filters['php_code']) && $filters['php_code']->status && strpos($text, '<?') !== FALSE) {
-      return $text;
-    }
-  }
-
-  // If we have a short body, the entire body is the summary.
-  if (drupal_strlen($text) <= $size) {
-    return $text;
-  }
-
-  // If the delimiter has not been specified, try to split at paragraph or
-  // sentence boundaries.
-
-  // The summary may not be longer than maximum length specified. Initial slice.
-  $summary = truncate_utf8($text, $size);
-
-  // Store the actual length of the UTF8 string -- which might not be the same
-  // as $size.
-  $max_rpos = strlen($summary);
-
-  // How much to cut off the end of the summary so that it doesn't end in the
-  // middle of a paragraph, sentence, or word.
-  // Initialize it to maximum in order to find the minimum.
-  $min_rpos = $max_rpos;
-
-  // Store the reverse of the summary. We use strpos on the reversed needle and
-  // haystack for speed and convenience.
-  $reversed = strrev($summary);
-
-  // Build an array of arrays of break points grouped by preference.
-  $break_points = array();
-
-  // A paragraph near the end of sliced summary is most preferable.
-  $break_points[] = array('</p>' => 0);
-
-  // If no complete paragraph then treat line breaks as paragraphs.
-  $line_breaks = array('<br />' => 6, '<br>' => 4);
-  // Newline only indicates a line break if line break converter
-  // filter is present.
-  if (isset($filters['filter_autop'])) {
-    $line_breaks["\n"] = 1;
-  }
-  $break_points[] = $line_breaks;
-
-  // If the first paragraph is too long, split at the end of a sentence.
-  $break_points[] = array('. ' => 1, '! ' => 1, '? ' => 1, '。' => 0, '؟ ' => 1);
-
-  // Iterate over the groups of break points until a break point is found.
-  foreach ($break_points as $points) {
-    // Look for each break point, starting at the end of the summary.
-    foreach ($points as $point => $offset) {
-      // The summary is already reversed, but the break point isn't.
-      $rpos = strpos($reversed, strrev($point));
-      if ($rpos !== FALSE) {
-        $min_rpos = min($rpos + $offset, $min_rpos);
-      }
-    }
-
-    // If a break point was found in this group, slice and stop searching.
-    if ($min_rpos !== $max_rpos) {
-      // Don't slice with length 0. Length must be <0 to slice from RHS.
-      $summary = ($min_rpos === 0) ? $summary : substr($summary, 0, 0 - $min_rpos);
-      break;
-    }
-  }
-
-  // If the htmlcorrector filter is present, apply it to the generated summary.
-  if (isset($filters['filter_htmlcorrector'])) {
-    $summary = _filter_htmlcorrector($summary);
-  }
-
-  return $summary;
-}
-
-/**
- * Implements hook_field_widget_info().
- */
-function text_field_widget_info() {
-  return array(
-    'text_textfield' => array(
-      'label' => t('Text field'),
-      'field types' => array('text'),
-      'settings' => array('size' => 60),
-    ),
-    'text_textarea' => array(
-      'label' => t('Text area (multiple rows)'),
-      'field types' => array('text_long'),
-      'settings' => array('rows' => 5),
-    ),
-    'text_textarea_with_summary' => array(
-      'label' => t('Text area with a summary'),
-      'field types' => array('text_with_summary'),
-      'settings' => array('rows' => 20, 'summary_rows' => 5),
-    ),
-  );
-}
-
-/**
- * Implements hook_field_widget_settings_form().
- */
-function text_field_widget_settings_form($field, $instance) {
-  $widget = $instance['widget'];
-  $settings = $widget['settings'];
-
-  if ($widget['type'] == 'text_textfield') {
-    $form['size'] = array(
-      '#type' => 'textfield',
-      '#title' => t('Size of textfield'),
-      '#default_value' => $settings['size'],
-      '#required' => TRUE,
-      '#element_validate' => array('element_validate_integer_positive'),
-    );
-  }
-  else {
-    $form['rows'] = array(
-      '#type' => 'textfield',
-      '#title' => t('Rows'),
-      '#default_value' => $settings['rows'],
-      '#required' => TRUE,
-      '#element_validate' => array('element_validate_integer_positive'),
-    );
-  }
-
-  return $form;
-}
-
-/**
- * Implements hook_field_widget_form().
- */
-function text_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
-  $summary_widget = array();
-  $main_widget = array();
-
-  switch ($instance['widget']['type']) {
-    case 'text_textfield':
-      $main_widget = $element + array(
-        '#type' => 'textfield',
-        '#default_value' => isset($items[$delta]['value']) ? $items[$delta]['value'] : NULL,
-        '#size' => $instance['widget']['settings']['size'],
-        '#maxlength' => $field['settings']['max_length'],
-        '#attributes' => array('class' => array('text-full')),
-      );
-      break;
-
-    case 'text_textarea_with_summary':
-      $display = !empty($items[$delta]['summary']) || !empty($instance['settings']['display_summary']);
-      $summary_widget = array(
-        '#type' => $display ? 'textarea' : 'value',
-        '#default_value' => isset($items[$delta]['summary']) ? $items[$delta]['summary'] : NULL,
-        '#title' => t('Summary'),
-        '#rows' => $instance['widget']['settings']['summary_rows'],
-        '#description' => t('Leave blank to use trimmed value of full text as the summary.'),
-        '#attached' => array(
-          'js' => array(drupal_get_path('module', 'text') . '/text.js'),
-        ),
-        '#attributes' => array('class' => array('text-summary')),
-        '#prefix' => '<div class="text-summary-wrapper">',
-        '#suffix' => '</div>',
-        '#weight' => -10,
-      );
-      // Fall through to the next case.
-
-    case 'text_textarea':
-      $main_widget = $element + array(
-        '#type' => 'textarea',
-        '#default_value' => isset($items[$delta]['value']) ? $items[$delta]['value'] : NULL,
-        '#rows' => $instance['widget']['settings']['rows'],
-        '#attributes' => array('class' => array('text-full')),
-      );
-      break;
-  }
-
-  if ($main_widget) {
-    // Conditionally alter the form element's type if text processing is enabled.
-    if ($instance['settings']['text_processing']) {
-      $element = $main_widget;
-      $element['#type'] = 'text_format';
-      $element['#format'] = isset($items[$delta]['format']) ? $items[$delta]['format'] : NULL;
-      $element['#base_type'] = $main_widget['#type'];
-    }
-    else {
-      $element['value'] = $main_widget;
-    }
-  }
-  if ($summary_widget) {
-    $element['summary'] = $summary_widget;
-  }
-
-  return $element;
-}
-
-/**
- * Implements hook_field_widget_error().
- */
-function text_field_widget_error($element, $error, $form, &$form_state) {
-  switch ($error['error']) {
-    case 'text_summary_max_length':
-      $error_element = $element[$element['#columns'][1]];
-      break;
-
-    default:
-      $error_element = $element[$element['#columns'][0]];
-      break;
-  }
-
-  form_error($error_element, $error['message']);
-}
-
-/**
- * Implements hook_field_prepare_translation().
- */
-function text_field_prepare_translation($entity_type, $entity, $field, $instance, $langcode, &$items, $source_entity, $source_langcode) {
-  // If the translating user is not permitted to use the assigned text format,
-  // we must not expose the source values.
-  $field_name = $field['field_name'];
-  if (!empty($source_entity->{$field_name}[$source_langcode])) {
-    $formats = filter_formats();
-    foreach ($source_entity->{$field_name}[$source_langcode] as $delta => $item) {
-      $format_id = $item['format'];
-      if (!empty($format_id) && !filter_access($formats[$format_id])) {
-        unset($items[$delta]);
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_filter_format_update().
- */
-function text_filter_format_update($format) {
-  field_cache_clear();
-}
-
-/**
- * Implements hook_filter_format_disable().
- */
-function text_filter_format_disable($format) {
-  field_cache_clear();
-}
diff --git a/modules/field/modules/text/text.test b/modules/field/modules/text/text.test
deleted file mode 100644
index 2f14738..0000000
--- a/modules/field/modules/text/text.test
+++ /dev/null
@@ -1,517 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for text.module.
- */
-
-class TextFieldTestCase extends DrupalWebTestCase {
-  protected $instance;
-  protected $admin_user;
-  protected $web_user;
-
-  public static function getInfo() {
-    return array(
-      'name'  => 'Text field',
-      'description'  => "Test the creation of text fields.",
-      'group' => 'Field types'
-    );
-  }
-
-  function setUp() {
-    parent::setUp('field_test');
-
-    $this->admin_user = $this->drupalCreateUser(array('administer filters'));
-    $this->web_user = $this->drupalCreateUser(array('access field_test content', 'administer field_test content'));
-    $this->drupalLogin($this->web_user);
-  }
-
-  // Test fields.
-
-  /**
-   * Test text field validation.
-   */
-  function testTextFieldValidation() {
-    // Create a field with settings to validate.
-    $max_length = 3;
-    $this->field = array(
-      'field_name' => drupal_strtolower($this->randomName()),
-      'type' => 'text',
-      'settings' => array(
-        'max_length' => $max_length,
-      )
-    );
-    field_create_field($this->field);
-    $this->instance = array(
-      'field_name' => $this->field['field_name'],
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
-      'widget' => array(
-        'type' => 'text_textfield',
-      ),
-      'display' => array(
-        'default' => array(
-          'type' => 'text_default',
-        ),
-      ),
-    );
-    field_create_instance($this->instance);
-    // Test valid and invalid values with field_attach_validate().
-    $entity = field_test_create_stub_entity();
-    $langcode = LANGUAGE_NONE;
-    for ($i = 0; $i <= $max_length + 2; $i++) {
-      $entity->{$this->field['field_name']}[$langcode][0]['value'] = str_repeat('x', $i);
-      try {
-        field_attach_validate('test_entity', $entity);
-        $this->assertTrue($i <= $max_length, "Length $i does not cause validation error when max_length is $max_length");
-      }
-      catch (FieldValidationException $e) {
-        $this->assertTrue($i > $max_length, "Length $i causes validation error when max_length is $max_length");
-      }
-    }
-  }
-
-  /**
-   * Test widgets.
-   */
-  function testTextfieldWidgets() {
-    $this->_testTextfieldWidgets('text', 'text_textfield');
-    $this->_testTextfieldWidgets('text_long', 'text_textarea');
-  }
-
-  /**
-   * Helper function for testTextfieldWidgets().
-   */
-  function _testTextfieldWidgets($field_type, $widget_type) {
-    // Setup a field and instance
-    $entity_type = 'test_entity';
-    $this->field_name = drupal_strtolower($this->randomName());
-    $this->field = array('field_name' => $this->field_name, 'type' => $field_type);
-    field_create_field($this->field);
-    $this->instance = array(
-      'field_name' => $this->field_name,
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
-      'label' => $this->randomName() . '_label',
-      'settings' => array(
-        'text_processing' => TRUE,
-      ),
-      'widget' => array(
-        'type' => $widget_type,
-      ),
-      'display' => array(
-        'full' => array(
-          'type' => 'text_default',
-        ),
-      ),
-    );
-    field_create_instance($this->instance);
-    $langcode = LANGUAGE_NONE;
-
-    // Display creation form.
-    $this->drupalGet('test-entity/add/test-bundle');
-    $this->assertFieldByName("{$this->field_name}[$langcode][0][value]", '', 'Widget is displayed');
-    $this->assertNoFieldByName("{$this->field_name}[$langcode][0][format]", '1', 'Format selector is not displayed');
-
-    // Submit with some value.
-    $value = $this->randomName();
-    $edit = array(
-      "{$this->field_name}[$langcode][0][value]" => $value,
-    );
-    $this->drupalPost(NULL, $edit, t('Save'));
-    preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
-    $id = $match[1];
-    $this->assertRaw(t('test_entity @id has been created.', array('@id' => $id)), 'Entity was created');
-
-    // Display the entity.
-    $entity = field_test_entity_test_load($id);
-    $entity->content = field_attach_view($entity_type, $entity, 'full');
-    $this->content = drupal_render($entity->content);
-    $this->assertText($value, 'Filtered tags are not displayed');
-  }
-
-  /**
-   * Test widgets + 'formatted_text' setting.
-   */
-  function testTextfieldWidgetsFormatted() {
-    $this->_testTextfieldWidgetsFormatted('text', 'text_textfield');
-    $this->_testTextfieldWidgetsFormatted('text_long', 'text_textarea');
-  }
-
-  /**
-   * Helper function for testTextfieldWidgetsFormatted().
-   */
-  function _testTextfieldWidgetsFormatted($field_type, $widget_type) {
-    // Setup a field and instance
-    $entity_type = 'test_entity';
-    $this->field_name = drupal_strtolower($this->randomName());
-    $this->field = array('field_name' => $this->field_name, 'type' => $field_type);
-    field_create_field($this->field);
-    $this->instance = array(
-      'field_name' => $this->field_name,
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
-      'label' => $this->randomName() . '_label',
-      'settings' => array(
-        'text_processing' => TRUE,
-      ),
-      'widget' => array(
-        'type' => $widget_type,
-      ),
-      'display' => array(
-        'full' => array(
-          'type' => 'text_default',
-        ),
-      ),
-    );
-    field_create_instance($this->instance);
-    $langcode = LANGUAGE_NONE;
-
-    // Disable all text formats besides the plain text fallback format.
-    $this->drupalLogin($this->admin_user);
-    foreach (filter_formats() as $format) {
-      if ($format->format != filter_fallback_format()) {
-        $this->drupalPost('admin/config/content/formats/' . $format->format . '/disable', array(), t('Disable'));
-      }
-    }
-    $this->drupalLogin($this->web_user);
-
-    // Display the creation form. Since the user only has access to one format,
-    // no format selector will be displayed.
-    $this->drupalGet('test-entity/add/test-bundle');
-    $this->assertFieldByName("{$this->field_name}[$langcode][0][value]", '', 'Widget is displayed');
-    $this->assertNoFieldByName("{$this->field_name}[$langcode][0][format]", '', 'Format selector is not displayed');
-
-    // Submit with data that should be filtered.
-    $value = '<em>' . $this->randomName() . '</em>';
-    $edit = array(
-      "{$this->field_name}[$langcode][0][value]" => $value,
-    );
-    $this->drupalPost(NULL, $edit, t('Save'));
-    preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
-    $id = $match[1];
-    $this->assertRaw(t('test_entity @id has been created.', array('@id' => $id)), 'Entity was created');
-
-    // Display the entity.
-    $entity = field_test_entity_test_load($id);
-    $entity->content = field_attach_view($entity_type, $entity, 'full');
-    $this->content = drupal_render($entity->content);
-    $this->assertNoRaw($value, 'HTML tags are not displayed.');
-    $this->assertRaw(check_plain($value), 'Escaped HTML is displayed correctly.');
-
-    // Create a new text format that does not escape HTML, and grant the user
-    // access to it.
-    $this->drupalLogin($this->admin_user);
-    $edit = array(
-      'format' => drupal_strtolower($this->randomName()),
-      'name' => $this->randomName(),
-    );
-    $this->drupalPost('admin/config/content/formats/add', $edit, t('Save configuration'));
-    filter_formats_reset();
-    $this->checkPermissions(array(), TRUE);
-    $format = filter_format_load($edit['format']);
-    $format_id = $format->format;
-    $permission = filter_permission_name($format);
-    $rid = max(array_keys($this->web_user->roles));
-    user_role_grant_permissions($rid, array($permission));
-    $this->drupalLogin($this->web_user);
-
-    // Display edition form.
-    // We should now have a 'text format' selector.
-    $this->drupalGet('test-entity/manage/' . $id . '/edit');
-    $this->assertFieldByName("{$this->field_name}[$langcode][0][value]", NULL, 'Widget is displayed');
-    $this->assertFieldByName("{$this->field_name}[$langcode][0][format]", NULL, 'Format selector is displayed');
-
-    // Edit and change the text format to the new one that was created.
-    $edit = array(
-      "{$this->field_name}[$langcode][0][format]" => $format_id,
-    );
-    $this->drupalPost(NULL, $edit, t('Save'));
-    $this->assertRaw(t('test_entity @id has been updated.', array('@id' => $id)), 'Entity was updated');
-
-    // Display the entity.
-    $entity = field_test_entity_test_load($id);
-    $entity->content = field_attach_view($entity_type, $entity, 'full');
-    $this->content = drupal_render($entity->content);
-    $this->assertRaw($value, 'Value is displayed unfiltered');
-  }
-}
-
-class TextSummaryTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Text summary',
-      'description' => 'Test text_summary() with different strings and lengths.',
-      'group' => 'Field types',
-    );
-  }
-
-  function setUp() {
-    parent::setUp();
-    $this->article_creator = $this->drupalCreateUser(array('create article content', 'edit own article content'));
-  }
-
-  /**
-   * Tests an edge case where the first sentence is a question and
-   * subsequent sentences are not. This edge case is documented at
-   * http://drupal.org/node/180425.
-   */
-  function testFirstSentenceQuestion() {
-    $text = 'A question? A sentence. Another sentence.';
-    $expected = 'A question? A sentence.';
-    $this->callTextSummary($text, $expected, NULL, 30);
-  }
-
-  /**
-   * Test summary with long example.
-   */
-  function testLongSentence() {
-    $text = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ' . // 125
-            'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. ' . // 108
-            'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. ' . // 103
-            'Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'; // 110
-    $expected = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ' .
-                'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. ' .
-                'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.';
-    // First three sentences add up to: 336, so add one for space and then 3 to get half-way into next word.
-    $this->callTextSummary($text, $expected, NULL, 340);
-  }
-
-  /**
-   * Test various summary length edge cases.
-   */
-  function testLength() {
-    // This string tests a number of edge cases.
-    $text = "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>";
-
-    // The summaries we expect text_summary() to return when $size is the index
-    // of each array item.
-    // Using no text format:
-    $expected = array(
-      "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>",
-      "<",
-      "<p",
-      "<p>",
-      "<p>\n",
-      "<p>\nH",
-      "<p>\nHi",
-      "<p>\nHi\n",
-      "<p>\nHi\n<",
-      "<p>\nHi\n</",
-      "<p>\nHi\n</p",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>",
-      "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>",
-      "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>",
-    );
-
-    // And using a text format WITH the line-break and htmlcorrector filters.
-    $expected_lb = array(
-      "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>",
-      "",
-      "<p></p>",
-      "<p></p>",
-      "<p></p>",
-      "<p></p>",
-      "<p></p>",
-      "<p>\nHi</p>",
-      "<p>\nHi</p>",
-      "<p>\nHi</p>",
-      "<p>\nHi</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>",
-      "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>",
-      "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>",
-      "<p>\nHi\n</p>\n<p>\nfolks\n<br />\n!\n</p>",
-    );
-
-    // Test text_summary() for different sizes.
-    for ($i = 0; $i <= 37; $i++) {
-      $this->callTextSummary($text, $expected[$i],    NULL, $i);
-      $this->callTextSummary($text, $expected_lb[$i], 'plain_text', $i);
-      $this->callTextSummary($text, $expected_lb[$i], 'filtered_html', $i);
-    }
-  }
-
-  /**
-   * Calls text_summary() and asserts that the expected teaser is returned.
-   */
-  function callTextSummary($text, $expected, $format = NULL, $size = NULL) {
-    $summary = text_summary($text, $format, $size);
-    $this->assertIdentical($summary, $expected, format_string('Generated summary "@summary" matches expected "@expected".', array('@summary' => $summary, '@expected' => $expected)));
-  }
-
-  /**
-   * Test sending only summary.
-   */
-  function testOnlyTextSummary() {
-    // Login as article creator.
-    $this->drupalLogin($this->article_creator);
-    // Create article with summary but empty body.
-    $summary = $this->randomName();
-    $edit = array(
-      "title" => $this->randomName(),
-      "body[und][0][summary]" => $summary,
-    );
-    $this->drupalPost('node/add/article', $edit, t('Save'));
-    $node = $this->drupalGetNodeByTitle($edit['title']);
-
-    $this->assertIdentical($node->body['und'][0]['summary'], $summary, 'Article with with summary and no body has been submitted.');
-  }
-}
-
-class TextTranslationTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Text translation',
-      'description' => 'Check if the text field is correctly prepared for translation.',
-      'group' => 'Field types',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('locale', 'translation');
-
-    $full_html_format = filter_format_load('full_html');
-    $this->format = $full_html_format->format;
-    $this->admin = $this->drupalCreateUser(array(
-      'administer languages',
-      'administer content types',
-      'access administration pages',
-      'bypass node access',
-      filter_permission_name($full_html_format),
-    ));
-    $this->translator = $this->drupalCreateUser(array('create article content', 'edit own article content', 'translate content'));
-
-    // Enable an additional language.
-    $this->drupalLogin($this->admin);
-    $edit = array('langcode' => 'fr');
-    $this->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));
-
-    // Set "Article" content type to use multilingual support with translation.
-    $edit = array('language_content_type' => 2);
-    $this->drupalPost('admin/structure/types/manage/article', $edit, t('Save content type'));
-    $this->assertRaw(t('The content type %type has been updated.', array('%type' => 'Article')), 'Article content type has been updated.');
-  }
-
-  /**
-   * Test that a plaintext textfield widget is correctly populated.
-   */
-  function testTextField() {
-    // Disable text processing for body.
-    $edit = array('instance[settings][text_processing]' => 0);
-    $this->drupalPost('admin/structure/types/manage/article/fields/body', $edit, t('Save settings'));
-
-    // Login as translator.
-    $this->drupalLogin($this->translator);
-
-    // Create content.
-    $langcode = LANGUAGE_NONE;
-    $body = $this->randomName();
-    $edit = array(
-      "title" => $this->randomName(),
-      "language" => 'en',
-      "body[$langcode][0][value]" => $body,
-    );
-
-    // Translate the article in french.
-    $this->drupalPost('node/add/article', $edit, t('Save'));
-    $node = $this->drupalGetNodeByTitle($edit['title']);
-    $this->drupalGet("node/$node->nid/translate");
-    $this->clickLink(t('add translation'));
-    $this->assertFieldByXPath("//textarea[@name='body[$langcode][0][value]']", $body, 'The textfield widget is populated.');
-  }
-
-  /**
-   * Check that user that does not have access the field format cannot see the
-   * source value when creating a translation.
-   */
-  function testTextFieldFormatted() {
-    // Make node body multiple.
-    $edit = array('field[cardinality]' => -1);
-    $this->drupalPost('admin/structure/types/manage/article/fields/body', $edit, t('Save settings'));
-    $this->drupalGet('node/add/article');
-    $this->assertFieldByXPath("//input[@name='body_add_more']", t('Add another item'), 'Body field cardinality set to multiple.');
-
-    $body = array(
-      $this->randomName(),
-      $this->randomName(),
-    );
-
-    // Create an article with the first body input format set to "Full HTML".
-    $title = $this->randomName();
-    $edit = array(
-      'title' => $title,
-      'language' => 'en',
-    );
-    $this->drupalPost('node/add/article', $edit, t('Save'));
-
-    // Populate the body field: the first item gets the "Full HTML" input
-    // format, the second one "Filtered HTML".
-    $formats = array('full_html', 'filtered_html');
-    $langcode = LANGUAGE_NONE;
-    foreach ($body as $delta => $value) {
-      $edit = array(
-        "body[$langcode][$delta][value]" => $value,
-        "body[$langcode][$delta][format]" => array_shift($formats),
-      );
-      $this->drupalPost('node/1/edit', $edit, t('Save'));
-      $this->assertText($body[$delta], format_string('The body field with delta @delta has been saved.', array('@delta' => $delta)));
-    }
-
-    // Login as translator.
-    $this->drupalLogin($this->translator);
-
-    // Translate the article in french.
-    $node = $this->drupalGetNodeByTitle($title);
-    $this->drupalGet("node/$node->nid/translate");
-    $this->clickLink(t('add translation'));
-    $this->assertNoText($body[0], format_string('The body field with delta @delta is hidden.', array('@delta' => 0)));
-    $this->assertText($body[1], format_string('The body field with delta @delta is shown.', array('@delta' => 1)));
-  }
-}
diff --git a/modules/field/tests/field.test b/modules/field/tests/field.test
deleted file mode 100644
index 1e59315..0000000
--- a/modules/field/tests/field.test
+++ /dev/null
@@ -1,3709 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for field.module.
- */
-
-/**
- * Parent class for Field API tests.
- */
-class FieldTestCase extends DrupalWebTestCase {
-  var $default_storage = 'field_sql_storage';
-
-  /**
-   * Set the default field storage backend for fields created during tests.
-   */
-  function setUp() {
-    // Since this is a base class for many test cases, support the same
-    // flexibility that DrupalWebTestCase::setUp() has for the modules to be
-    // passed in as either an array or a variable number of string arguments.
-    $modules = func_get_args();
-    if (isset($modules[0]) && is_array($modules[0])) {
-      $modules = $modules[0];
-    }
-    parent::setUp($modules);
-    // Set default storage backend.
-    variable_set('field_storage_default', $this->default_storage);
-  }
-
-  /**
-   * Generate random values for a field_test field.
-   *
-   * @param $cardinality
-   *   Number of values to generate.
-   * @return
-   *  An array of random values, in the format expected for field values.
-   */
-  function _generateTestFieldValues($cardinality) {
-    $values = array();
-    for ($i = 0; $i < $cardinality; $i++) {
-      // field_test fields treat 0 as 'empty value'.
-      $values[$i]['value'] = mt_rand(1, 127);
-    }
-    return $values;
-  }
-
-  /**
-   * Assert that a field has the expected values in an entity.
-   *
-   * This function only checks a single column in the field values.
-   *
-   * @param $entity
-   *   The entity to test.
-   * @param $field_name
-   *   The name of the field to test
-   * @param $langcode
-   *   The language code for the values.
-   * @param $expected_values
-   *   The array of expected values.
-   * @param $column
-   *   (Optional) the name of the column to check.
-   */
-  function assertFieldValues($entity, $field_name, $langcode, $expected_values, $column = 'value') {
-    $e = clone $entity;
-    field_attach_load('test_entity', array($e->ftid => $e));
-    $values = isset($e->{$field_name}[$langcode]) ? $e->{$field_name}[$langcode] : array();
-    $this->assertEqual(count($values), count($expected_values), 'Expected number of values were saved.');
-    foreach ($expected_values as $key => $value) {
-      $this->assertEqual($values[$key][$column], $value, format_string('Value @value was saved correctly.', array('@value' => $value)));
-    }
-  }
-}
-
-class FieldAttachTestCase extends FieldTestCase {
-  function setUp() {
-    // Since this is a base class for many test cases, support the same
-    // flexibility that DrupalWebTestCase::setUp() has for the modules to be
-    // passed in as either an array or a variable number of string arguments.
-    $modules = func_get_args();
-    if (isset($modules[0]) && is_array($modules[0])) {
-      $modules = $modules[0];
-    }
-    if (!in_array('field_test', $modules)) {
-      $modules[] = 'field_test';
-    }
-    parent::setUp($modules);
-
-    $this->createFieldWithInstance();
-  }
-
-  /**
-   * Create a field and an instance of it.
-   *
-   * @param string $suffix
-   *   (optional) A string that should only contain characters that are valid in
-   *   PHP variable names as well.
-   */
-  function createFieldWithInstance($suffix = '') {
-    $field_name = 'field_name' . $suffix;
-    $field = 'field' . $suffix;
-    $field_id = 'field_id' . $suffix;
-    $instance = 'instance' . $suffix;
-
-    $this->$field_name = drupal_strtolower($this->randomName() . '_field_name' . $suffix);
-    $this->$field = array('field_name' => $this->$field_name, 'type' => 'test_field', 'cardinality' => 4);
-    $this->$field = field_create_field($this->$field);
-    $this->$field_id = $this->{$field}['id'];
-    $this->$instance = array(
-      'field_name' => $this->$field_name,
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
-      'label' => $this->randomName() . '_label',
-      'description' => $this->randomName() . '_description',
-      'weight' => mt_rand(0, 127),
-      'settings' => array(
-        'test_instance_setting' => $this->randomName(),
-      ),
-      'widget' => array(
-        'type' => 'test_field_widget',
-        'label' => 'Test Field',
-        'settings' => array(
-          'test_widget_setting' => $this->randomName(),
-        )
-      )
-    );
-    field_create_instance($this->$instance);
-  }
-}
-
-/**
- * Unit test class for storage-related field_attach_* functions.
- *
- * All field_attach_* test work with all field_storage plugins and
- * all hook_field_attach_pre_{load,insert,update}() hooks.
- */
-class FieldAttachStorageTestCase extends FieldAttachTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Field attach tests (storage-related)',
-      'description' => 'Test storage-related Field Attach API functions.',
-      'group' => 'Field API',
-    );
-  }
-
-  /**
-   * Check field values insert, update and load.
-   *
-   * Works independently of the underlying field storage backend. Inserts or
-   * updates random field data and then loads and verifies the data.
-   */
-  function testFieldAttachSaveLoad() {
-    // Configure the instance so that we test hook_field_load() (see
-    // field_test_field_load() in field_test.module).
-    $this->instance['settings']['test_hook_field_load'] = TRUE;
-    field_update_instance($this->instance);
-    $langcode = LANGUAGE_NONE;
-
-    $entity_type = 'test_entity';
-    $values = array();
-
-    // TODO : test empty values filtering and "compression" (store consecutive deltas).
-
-    // Preparation: create three revisions and store them in $revision array.
-    for ($revision_id = 0; $revision_id < 3; $revision_id++) {
-      $revision[$revision_id] = field_test_create_stub_entity(0, $revision_id, $this->instance['bundle']);
-      // Note: we try to insert one extra value.
-      $values[$revision_id] = $this->_generateTestFieldValues($this->field['cardinality'] + 1);
-      $current_revision = $revision_id;
-      // If this is the first revision do an insert.
-      if (!$revision_id) {
-        $revision[$revision_id]->{$this->field_name}[$langcode] = $values[$revision_id];
-        field_attach_insert($entity_type, $revision[$revision_id]);
-      }
-      else {
-        // Otherwise do an update.
-        $revision[$revision_id]->{$this->field_name}[$langcode] = $values[$revision_id];
-        field_attach_update($entity_type, $revision[$revision_id]);
-      }
-    }
-
-    // Confirm current revision loads the correct data.
-    $entity = field_test_create_stub_entity(0, 0, $this->instance['bundle']);
-    field_attach_load($entity_type, array(0 => $entity));
-    // Number of values per field loaded equals the field cardinality.
-    $this->assertEqual(count($entity->{$this->field_name}[$langcode]), $this->field['cardinality'], 'Current revision: expected number of values');
-    for ($delta = 0; $delta < $this->field['cardinality']; $delta++) {
-      // The field value loaded matches the one inserted or updated.
-      $this->assertEqual($entity->{$this->field_name}[$langcode][$delta]['value'] , $values[$current_revision][$delta]['value'], format_string('Current revision: expected value %delta was found.', array('%delta' => $delta)));
-      // The value added in hook_field_load() is found.
-      $this->assertEqual($entity->{$this->field_name}[$langcode][$delta]['additional_key'], 'additional_value', format_string('Current revision: extra information for value %delta was found', array('%delta' => $delta)));
-    }
-
-    // Confirm each revision loads the correct data.
-    foreach (array_keys($revision) as $revision_id) {
-      $entity = field_test_create_stub_entity(0, $revision_id, $this->instance['bundle']);
-      field_attach_load_revision($entity_type, array(0 => $entity));
-      // Number of values per field loaded equals the field cardinality.
-      $this->assertEqual(count($entity->{$this->field_name}[$langcode]), $this->field['cardinality'], format_string('Revision %revision_id: expected number of values.', array('%revision_id' => $revision_id)));
-      for ($delta = 0; $delta < $this->field['cardinality']; $delta++) {
-        // The field value loaded matches the one inserted or updated.
-        $this->assertEqual($entity->{$this->field_name}[$langcode][$delta]['value'], $values[$revision_id][$delta]['value'], format_string('Revision %revision_id: expected value %delta was found.', array('%revision_id' => $revision_id, '%delta' => $delta)));
-        // The value added in hook_field_load() is found.
-        $this->assertEqual($entity->{$this->field_name}[$langcode][$delta]['additional_key'], 'additional_value', format_string('Revision %revision_id: extra information for value %delta was found', array('%revision_id' => $revision_id, '%delta' => $delta)));
-      }
-    }
-  }
-
-  /**
-   * Test the 'multiple' load feature.
-   */
-  function testFieldAttachLoadMultiple() {
-    $entity_type = 'test_entity';
-    $langcode = LANGUAGE_NONE;
-
-    // Define 2 bundles.
-    $bundles = array(
-      1 => 'test_bundle_1',
-      2 => 'test_bundle_2',
-    );
-    field_test_create_bundle($bundles[1]);
-    field_test_create_bundle($bundles[2]);
-    // Define 3 fields:
-    // - field_1 is in bundle_1 and bundle_2,
-    // - field_2 is in bundle_1,
-    // - field_3 is in bundle_2.
-    $field_bundles_map = array(
-      1 => array(1, 2),
-      2 => array(1),
-      3 => array(2),
-    );
-    for ($i = 1; $i <= 3; $i++) {
-      $field_names[$i] = 'field_' . $i;
-      $field = array('field_name' => $field_names[$i], 'type' => 'test_field');
-      $field = field_create_field($field);
-      $field_ids[$i] = $field['id'];
-      foreach ($field_bundles_map[$i] as $bundle) {
-        $instance = array(
-          'field_name' => $field_names[$i],
-          'entity_type' => 'test_entity',
-          'bundle' => $bundles[$bundle],
-          'settings' => array(
-            // Configure the instance so that we test hook_field_load()
-            // (see field_test_field_load() in field_test.module).
-            'test_hook_field_load' => TRUE,
-          ),
-        );
-        field_create_instance($instance);
-      }
-    }
-
-    // Create one test entity per bundle, with random values.
-    foreach ($bundles as $index => $bundle) {
-      $entities[$index] = field_test_create_stub_entity($index, $index, $bundle);
-      $entity = clone($entities[$index]);
-      $instances = field_info_instances('test_entity', $bundle);
-      foreach ($instances as $field_name => $instance) {
-        $values[$index][$field_name] = mt_rand(1, 127);
-        $entity->$field_name = array($langcode => array(array('value' => $values[$index][$field_name])));
-      }
-      field_attach_insert($entity_type, $entity);
-    }
-
-    // Check that a single load correctly loads field values for both entities.
-    field_attach_load($entity_type, $entities);
-    foreach ($entities as $index => $entity) {
-      $instances = field_info_instances($entity_type, $bundles[$index]);
-      foreach ($instances as $field_name => $instance) {
-        // The field value loaded matches the one inserted.
-        $this->assertEqual($entity->{$field_name}[$langcode][0]['value'], $values[$index][$field_name], format_string('Entity %index: expected value was found.', array('%index' => $index)));
-        // The value added in hook_field_load() is found.
-        $this->assertEqual($entity->{$field_name}[$langcode][0]['additional_key'], 'additional_value', format_string('Entity %index: extra information was found', array('%index' => $index)));
-      }
-    }
-
-    // Check that the single-field load option works.
-    $entity = field_test_create_stub_entity(1, 1, $bundles[1]);
-    field_attach_load($entity_type, array(1 => $entity), FIELD_LOAD_CURRENT, array('field_id' => $field_ids[1]));
-    $this->assertEqual($entity->{$field_names[1]}[$langcode][0]['value'], $values[1][$field_names[1]], format_string('Entity %index: expected value was found.', array('%index' => 1)));
-    $this->assertEqual($entity->{$field_names[1]}[$langcode][0]['additional_key'], 'additional_value', format_string('Entity %index: extra information was found', array('%index' => 1)));
-    $this->assert(!isset($entity->{$field_names[2]}), format_string('Entity %index: field %field_name is not loaded.', array('%index' => 2, '%field_name' => $field_names[2])));
-    $this->assert(!isset($entity->{$field_names[3]}), format_string('Entity %index: field %field_name is not loaded.', array('%index' => 3, '%field_name' => $field_names[3])));
-  }
-
-  /**
-   * Test saving and loading fields using different storage backends.
-   */
-  function testFieldAttachSaveLoadDifferentStorage() {
-    $entity_type = 'test_entity';
-    $langcode = LANGUAGE_NONE;
-
-    // Create two fields using different storage backends, and their instances.
-    $fields = array(
-      array(
-        'field_name' => 'field_1',
-        'type' => 'test_field',
-        'cardinality' => 4,
-        'storage' => array('type' => 'field_sql_storage')
-      ),
-      array(
-        'field_name' => 'field_2',
-        'type' => 'test_field',
-        'cardinality' => 4,
-        'storage' => array('type' => 'field_test_storage')
-      ),
-    );
-    foreach ($fields as $field) {
-      field_create_field($field);
-      $instance = array(
-        'field_name' => $field['field_name'],
-        'entity_type' => 'test_entity',
-        'bundle' => 'test_bundle',
-      );
-      field_create_instance($instance);
-    }
-
-    $entity_init = field_test_create_stub_entity();
-
-    // Create entity and insert random values.
-    $entity = clone($entity_init);
-    $values = array();
-    foreach ($fields as $field) {
-      $values[$field['field_name']] = $this->_generateTestFieldValues($this->field['cardinality']);
-      $entity->{$field['field_name']}[$langcode] = $values[$field['field_name']];
-    }
-    field_attach_insert($entity_type, $entity);
-
-    // Check that values are loaded as expected.
-    $entity = clone($entity_init);
-    field_attach_load($entity_type, array($entity->ftid => $entity));
-    foreach ($fields as $field) {
-      $this->assertEqual($values[$field['field_name']], $entity->{$field['field_name']}[$langcode], format_string('%storage storage: expected values were found.', array('%storage' => $field['storage']['type'])));
-    }
-  }
-
-  /**
-   * Test storage details alteration.
-   *
-   * @see field_test_storage_details_alter()
-   */
-  function testFieldStorageDetailsAlter() {
-    $field_name = 'field_test_change_my_details';
-    $field = array(
-      'field_name' => $field_name,
-      'type' => 'test_field',
-      'cardinality' => 4,
-      'storage' => array('type' => 'field_test_storage'),
-    );
-    $field = field_create_field($field);
-    $instance = array(
-      'field_name' => $field_name,
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
-    );
-    field_create_instance($instance);
-
-    $field = field_info_field($instance['field_name']);
-    $instance = field_info_instance($instance['entity_type'], $instance['field_name'], $instance['bundle']);
-
-    // The storage details are indexed by a storage engine type.
-    $this->assertTrue(array_key_exists('drupal_variables', $field['storage']['details']), 'The storage type is Drupal variables.');
-
-    $details = $field['storage']['details']['drupal_variables'];
-
-    // The field_test storage details are indexed by variable name. The details
-    // are altered, so moon and mars are correct for this test.
-    $this->assertTrue(array_key_exists('moon', $details[FIELD_LOAD_CURRENT]), 'Moon is available in the instance array.');
-    $this->assertTrue(array_key_exists('mars', $details[FIELD_LOAD_REVISION]), 'Mars is available in the instance array.');
-
-    // Test current and revision storage details together because the columns
-    // are the same.
-    foreach ((array) $field['columns'] as $column_name => $attributes) {
-      $this->assertEqual($details[FIELD_LOAD_CURRENT]['moon'][$column_name], $column_name, format_string('Column name %value matches the definition in %bin.', array('%value' => $column_name, '%bin' => 'moon[FIELD_LOAD_CURRENT]')));
-      $this->assertEqual($details[FIELD_LOAD_REVISION]['mars'][$column_name], $column_name, format_string('Column name %value matches the definition in %bin.', array('%value' => $column_name, '%bin' => 'mars[FIELD_LOAD_REVISION]')));
-    }
-  }
-
-  /**
-   * Tests insert and update with missing or NULL fields.
-   */
-  function testFieldAttachSaveMissingData() {
-    $entity_type = 'test_entity';
-    $entity_init = field_test_create_stub_entity();
-    $langcode = LANGUAGE_NONE;
-
-    // Insert: Field is missing.
-    $entity = clone($entity_init);
-    field_attach_insert($entity_type, $entity);
-
-    $entity = clone($entity_init);
-    field_attach_load($entity_type, array($entity->ftid => $entity));
-    $this->assertTrue(empty($entity->{$this->field_name}), 'Insert: missing field results in no value saved');
-
-    // Insert: Field is NULL.
-    field_cache_clear();
-    $entity = clone($entity_init);
-    $entity->{$this->field_name} = NULL;
-    field_attach_insert($entity_type, $entity);
-
-    $entity = clone($entity_init);
-    field_attach_load($entity_type, array($entity->ftid => $entity));
-    $this->assertTrue(empty($entity->{$this->field_name}), 'Insert: NULL field results in no value saved');
-
-    // Add some real data.
-    field_cache_clear();
-    $entity = clone($entity_init);
-    $values = $this->_generateTestFieldValues(1);
-    $entity->{$this->field_name}[$langcode] = $values;
-    field_attach_insert($entity_type, $entity);
-
-    $entity = clone($entity_init);
-    field_attach_load($entity_type, array($entity->ftid => $entity));
-    $this->assertEqual($entity->{$this->field_name}[$langcode], $values, 'Field data saved');
-
-    // Update: Field is missing. Data should survive.
-    field_cache_clear();
-    $entity = clone($entity_init);
-    field_attach_update($entity_type, $entity);
-
-    $entity = clone($entity_init);
-    field_attach_load($entity_type, array($entity->ftid => $entity));
-    $this->assertEqual($entity->{$this->field_name}[$langcode], $values, 'Update: missing field leaves existing values in place');
-
-    // Update: Field is NULL. Data should be wiped.
-    field_cache_clear();
-    $entity = clone($entity_init);
-    $entity->{$this->field_name} = NULL;
-    field_attach_update($entity_type, $entity);
-
-    $entity = clone($entity_init);
-    field_attach_load($entity_type, array($entity->ftid => $entity));
-    $this->assertTrue(empty($entity->{$this->field_name}), 'Update: NULL field removes existing values');
-
-    // Re-add some data.
-    field_cache_clear();
-    $entity = clone($entity_init);
-    $values = $this->_generateTestFieldValues(1);
-    $entity->{$this->field_name}[$langcode] = $values;
-    field_attach_update($entity_type, $entity);
-
-    $entity = clone($entity_init);
-    field_attach_load($entity_type, array($entity->ftid => $entity));
-    $this->assertEqual($entity->{$this->field_name}[$langcode], $values, 'Field data saved');
-
-    // Update: Field is empty array. Data should be wiped.
-    field_cache_clear();
-    $entity = clone($entity_init);
-    $entity->{$this->field_name} = array();
-    field_attach_update($entity_type, $entity);
-
-    $entity = clone($entity_init);
-    field_attach_load($entity_type, array($entity->ftid => $entity));
-    $this->assertTrue(empty($entity->{$this->field_name}), 'Update: empty array removes existing values');
-  }
-
-  /**
-   * Test insert with missing or NULL fields, with default value.
-   */
-  function testFieldAttachSaveMissingDataDefaultValue() {
-    // Add a default value function.
-    $this->instance['default_value_function'] = 'field_test_default_value';
-    field_update_instance($this->instance);
-
-    $entity_type = 'test_entity';
-    $entity_init = field_test_create_stub_entity();
-    $langcode = LANGUAGE_NONE;
-
-    // Insert: Field is NULL.
-    $entity = clone($entity_init);
-    $entity->{$this->field_name}[$langcode] = NULL;
-    field_attach_insert($entity_type, $entity);
-
-    $entity = clone($entity_init);
-    field_attach_load($entity_type, array($entity->ftid => $entity));
-    $this->assertTrue(empty($entity->{$this->field_name}[$langcode]), 'Insert: NULL field results in no value saved');
-
-    // Insert: Field is missing.
-    field_cache_clear();
-    $entity = clone($entity_init);
-    field_attach_insert($entity_type, $entity);
-
-    $entity = clone($entity_init);
-    field_attach_load($entity_type, array($entity->ftid => $entity));
-    $values = field_test_default_value($entity_type, $entity, $this->field, $this->instance);
-    $this->assertEqual($entity->{$this->field_name}[$langcode], $values, 'Insert: missing field results in default value saved');
-  }
-
-  /**
-   * Test field_attach_delete().
-   */
-  function testFieldAttachDelete() {
-    $entity_type = 'test_entity';
-    $langcode = LANGUAGE_NONE;
-    $rev[0] = field_test_create_stub_entity(0, 0, $this->instance['bundle']);
-
-    // Create revision 0
-    $values = $this->_generateTestFieldValues($this->field['cardinality']);
-    $rev[0]->{$this->field_name}[$langcode] = $values;
-    field_attach_insert($entity_type, $rev[0]);
-
-    // Create revision 1
-    $rev[1] = field_test_create_stub_entity(0, 1, $this->instance['bundle']);
-    $rev[1]->{$this->field_name}[$langcode] = $values;
-    field_attach_update($entity_type, $rev[1]);
-
-    // Create revision 2
-    $rev[2] = field_test_create_stub_entity(0, 2, $this->instance['bundle']);
-    $rev[2]->{$this->field_name}[$langcode] = $values;
-    field_attach_update($entity_type, $rev[2]);
-
-    // Confirm each revision loads
-    foreach (array_keys($rev) as $vid) {
-      $read = field_test_create_stub_entity(0, $vid, $this->instance['bundle']);
-      field_attach_load_revision($entity_type, array(0 => $read));
-      $this->assertEqual(count($read->{$this->field_name}[$langcode]), $this->field['cardinality'], "The test entity revision $vid has {$this->field['cardinality']} values.");
-    }
-
-    // Delete revision 1, confirm the other two still load.
-    field_attach_delete_revision($entity_type, $rev[1]);
-    foreach (array(0, 2) as $vid) {
-      $read = field_test_create_stub_entity(0, $vid, $this->instance['bundle']);
-      field_attach_load_revision($entity_type, array(0 => $read));
-      $this->assertEqual(count($read->{$this->field_name}[$langcode]), $this->field['cardinality'], "The test entity revision $vid has {$this->field['cardinality']} values.");
-    }
-
-    // Confirm the current revision still loads
-    $read = field_test_create_stub_entity(0, 2, $this->instance['bundle']);
-    field_attach_load($entity_type, array(0 => $read));
-    $this->assertEqual(count($read->{$this->field_name}[$langcode]), $this->field['cardinality'], "The test entity current revision has {$this->field['cardinality']} values.");
-
-    // Delete all field data, confirm nothing loads
-    field_attach_delete($entity_type, $rev[2]);
-    foreach (array(0, 1, 2) as $vid) {
-      $read = field_test_create_stub_entity(0, $vid, $this->instance['bundle']);
-      field_attach_load_revision($entity_type, array(0 => $read));
-      $this->assertIdentical($read->{$this->field_name}, array(), "The test entity revision $vid is deleted.");
-    }
-    $read = field_test_create_stub_entity(0, 2, $this->instance['bundle']);
-    field_attach_load($entity_type, array(0 => $read));
-    $this->assertIdentical($read->{$this->field_name}, array(), 'The test entity current revision is deleted.');
-  }
-
-  /**
-   * Test field_attach_create_bundle() and field_attach_rename_bundle().
-   */
-  function testFieldAttachCreateRenameBundle() {
-    // Create a new bundle. This has to be initiated by the module so that its
-    // hook_entity_info() is consistent.
-    $new_bundle = 'test_bundle_' . drupal_strtolower($this->randomName());
-    field_test_create_bundle($new_bundle);
-
-    // Add an instance to that bundle.
-    $this->instance['bundle'] = $new_bundle;
-    field_create_instance($this->instance);
-
-    // Save an entity with data in the field.
-    $entity = field_test_create_stub_entity(0, 0, $this->instance['bundle']);
-    $langcode = LANGUAGE_NONE;
-    $values = $this->_generateTestFieldValues($this->field['cardinality']);
-    $entity->{$this->field_name}[$langcode] = $values;
-    $entity_type = 'test_entity';
-    field_attach_insert($entity_type, $entity);
-
-    // Verify the field data is present on load.
-    $entity = field_test_create_stub_entity(0, 0, $this->instance['bundle']);
-    field_attach_load($entity_type, array(0 => $entity));
-    $this->assertEqual(count($entity->{$this->field_name}[$langcode]), $this->field['cardinality'], "Data is retrieved for the new bundle");
-
-    // Rename the bundle. This has to be initiated by the module so that its
-    // hook_entity_info() is consistent.
-    $new_bundle = 'test_bundle_' . drupal_strtolower($this->randomName());
-    field_test_rename_bundle($this->instance['bundle'], $new_bundle);
-
-    // Check that the instance definition has been updated.
-    $this->instance = field_info_instance($entity_type, $this->field_name, $new_bundle);
-    $this->assertIdentical($this->instance['bundle'], $new_bundle, "Bundle name has been updated in the instance.");
-
-    // Verify the field data is present on load.
-    $entity = field_test_create_stub_entity(0, 0, $new_bundle);
-    field_attach_load($entity_type, array(0 => $entity));
-    $this->assertEqual(count($entity->{$this->field_name}[$langcode]), $this->field['cardinality'], "Bundle name has been updated in the field storage");
-  }
-
-  /**
-   * Test field_attach_delete_bundle().
-   */
-  function testFieldAttachDeleteBundle() {
-    // Create a new bundle. This has to be initiated by the module so that its
-    // hook_entity_info() is consistent.
-    $new_bundle = 'test_bundle_' . drupal_strtolower($this->randomName());
-    field_test_create_bundle($new_bundle);
-
-    // Add an instance to that bundle.
-    $this->instance['bundle'] = $new_bundle;
-    field_create_instance($this->instance);
-
-    // Create a second field for the test bundle
-    $field_name = drupal_strtolower($this->randomName() . '_field_name');
-    $field = array('field_name' => $field_name, 'type' => 'test_field', 'cardinality' => 1);
-    field_create_field($field);
-    $instance = array(
-      'field_name' => $field_name,
-      'entity_type' => 'test_entity',
-      'bundle' => $this->instance['bundle'],
-      'label' => $this->randomName() . '_label',
-      'description' => $this->randomName() . '_description',
-      'weight' => mt_rand(0, 127),
-      // test_field has no instance settings
-      'widget' => array(
-        'type' => 'test_field_widget',
-        'settings' => array(
-          'size' => mt_rand(0, 255))));
-    field_create_instance($instance);
-
-    // Save an entity with data for both fields
-    $entity = field_test_create_stub_entity(0, 0, $this->instance['bundle']);
-    $langcode = LANGUAGE_NONE;
-    $values = $this->_generateTestFieldValues($this->field['cardinality']);
-    $entity->{$this->field_name}[$langcode] = $values;
-    $entity->{$field_name}[$langcode] = $this->_generateTestFieldValues(1);
-    field_attach_insert('test_entity', $entity);
-
-    // Verify the fields are present on load
-    $entity = field_test_create_stub_entity(0, 0, $this->instance['bundle']);
-    field_attach_load('test_entity', array(0 => $entity));
-    $this->assertEqual(count($entity->{$this->field_name}[$langcode]), 4, 'First field got loaded');
-    $this->assertEqual(count($entity->{$field_name}[$langcode]), 1, 'Second field got loaded');
-
-    // Delete the bundle. This has to be initiated by the module so that its
-    // hook_entity_info() is consistent.
-    field_test_delete_bundle($this->instance['bundle']);
-
-    // Verify no data gets loaded
-    $entity = field_test_create_stub_entity(0, 0, $this->instance['bundle']);
-    field_attach_load('test_entity', array(0 => $entity));
-    $this->assertFalse(isset($entity->{$this->field_name}[$langcode]), 'No data for first field');
-    $this->assertFalse(isset($entity->{$field_name}[$langcode]), 'No data for second field');
-
-    // Verify that the instances are gone
-    $this->assertFalse(field_read_instance('test_entity', $this->field_name, $this->instance['bundle']), "First field is deleted");
-    $this->assertFalse(field_read_instance('test_entity', $field_name, $instance['bundle']), "Second field is deleted");
-  }
-}
-
-/**
- * Unit test class for non-storage related field_attach_* functions.
- */
-class FieldAttachOtherTestCase extends FieldAttachTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Field attach tests (other)',
-      'description' => 'Test other Field Attach API functions.',
-      'group' => 'Field API',
-    );
-  }
-
-  /**
-   * Test field_attach_view() and field_attach_prepare_view().
-   */
-  function testFieldAttachView() {
-    $this->createFieldWithInstance('_2');
-
-    $entity_type = 'test_entity';
-    $entity_init = field_test_create_stub_entity();
-    $langcode = LANGUAGE_NONE;
-    $options = array('field_name' => $this->field_name_2);
-
-    // Populate values to be displayed.
-    $values = $this->_generateTestFieldValues($this->field['cardinality']);
-    $entity_init->{$this->field_name}[$langcode] = $values;
-    $values_2 = $this->_generateTestFieldValues($this->field_2['cardinality']);
-    $entity_init->{$this->field_name_2}[$langcode] = $values_2;
-
-    // Simple formatter, label displayed.
-    $entity = clone($entity_init);
-    $formatter_setting = $this->randomName();
-    $this->instance['display'] = array(
-      'full' => array(
-        'label' => 'above',
-        'type' => 'field_test_default',
-        'settings' => array(
-          'test_formatter_setting' => $formatter_setting,
-        )
-      ),
-    );
-    field_update_instance($this->instance);
-    $formatter_setting_2 = $this->randomName();
-    $this->instance_2['display'] = array(
-      'full' => array(
-        'label' => 'above',
-        'type' => 'field_test_default',
-        'settings' => array(
-          'test_formatter_setting' => $formatter_setting_2,
-        )
-      ),
-    );
-    field_update_instance($this->instance_2);
-    // View all fields.
-    field_attach_prepare_view($entity_type, array($entity->ftid => $entity), 'full');
-    $entity->content = field_attach_view($entity_type, $entity, 'full');
-    $output = drupal_render($entity->content);
-    $this->content = $output;
-    $this->assertRaw($this->instance['label'], "First field's label is displayed.");
-    foreach ($values as $delta => $value) {
-      $this->content = $output;
-      $this->assertRaw("$formatter_setting|{$value['value']}", "Value $delta is displayed, formatter settings are applied.");
-    }
-    $this->assertRaw($this->instance_2['label'], "Second field's label is displayed.");
-    foreach ($values_2 as $delta => $value) {
-      $this->content = $output;
-      $this->assertRaw("$formatter_setting_2|{$value['value']}", "Value $delta is displayed, formatter settings are applied.");
-    }
-    // View single field (the second field).
-    field_attach_prepare_view($entity_type, array($entity->ftid => $entity), 'full', $langcode, $options);
-    $entity->content = field_attach_view($entity_type, $entity, 'full', $langcode, $options);
-    $output = drupal_render($entity->content);
-    $this->content = $output;
-    $this->assertNoRaw($this->instance['label'], "First field's label is not displayed.");
-    foreach ($values as $delta => $value) {
-      $this->content = $output;
-      $this->assertNoRaw("$formatter_setting|{$value['value']}", "Value $delta is displayed, formatter settings are applied.");
-    }
-    $this->assertRaw($this->instance_2['label'], "Second field's label is displayed.");
-    foreach ($values_2 as $delta => $value) {
-      $this->content = $output;
-      $this->assertRaw("$formatter_setting_2|{$value['value']}", "Value $delta is displayed, formatter settings are applied.");
-    }
-
-    // Label hidden.
-    $entity = clone($entity_init);
-    $this->instance['display']['full']['label'] = 'hidden';
-    field_update_instance($this->instance);
-    field_attach_prepare_view($entity_type, array($entity->ftid => $entity), 'full');
-    $entity->content = field_attach_view($entity_type, $entity, 'full');
-    $output = drupal_render($entity->content);
-    $this->content = $output;
-    $this->assertNoRaw($this->instance['label'], "Hidden label: label is not displayed.");
-
-    // Field hidden.
-    $entity = clone($entity_init);
-    $this->instance['display'] = array(
-      'full' => array(
-        'label' => 'above',
-        'type' => 'hidden',
-      ),
-    );
-    field_update_instance($this->instance);
-    field_attach_prepare_view($entity_type, array($entity->ftid => $entity), 'full');
-    $entity->content = field_attach_view($entity_type, $entity, 'full');
-    $output = drupal_render($entity->content);
-    $this->content = $output;
-    $this->assertNoRaw($this->instance['label'], "Hidden field: label is not displayed.");
-    foreach ($values as $delta => $value) {
-      $this->assertNoRaw("$formatter_setting|{$value['value']}", "Hidden field: value $delta is not displayed.");
-    }
-
-    // Multiple formatter.
-    $entity = clone($entity_init);
-    $formatter_setting = $this->randomName();
-    $this->instance['display'] = array(
-      'full' => array(
-        'label' => 'above',
-        'type' => 'field_test_multiple',
-        'settings' => array(
-          'test_formatter_setting_multiple' => $formatter_setting,
-        )
-      ),
-    );
-    field_update_instance($this->instance);
-    field_attach_prepare_view($entity_type, array($entity->ftid => $entity), 'full');
-    $entity->content = field_attach_view($entity_type, $entity, 'full');
-    $output = drupal_render($entity->content);
-    $display = $formatter_setting;
-    foreach ($values as $delta => $value) {
-      $display .= "|$delta:{$value['value']}";
-    }
-    $this->content = $output;
-    $this->assertRaw($display, "Multiple formatter: all values are displayed, formatter settings are applied.");
-
-    // Test a formatter that uses hook_field_formatter_prepare_view().
-    $entity = clone($entity_init);
-    $formatter_setting = $this->randomName();
-    $this->instance['display'] = array(
-      'full' => array(
-        'label' => 'above',
-        'type' => 'field_test_with_prepare_view',
-        'settings' => array(
-          'test_formatter_setting_additional' => $formatter_setting,
-        )
-      ),
-    );
-    field_update_instance($this->instance);
-    field_attach_prepare_view($entity_type, array($entity->ftid => $entity), 'full');
-    $entity->content = field_attach_view($entity_type, $entity, 'full');
-    $output = drupal_render($entity->content);
-    $this->content = $output;
-    foreach ($values as $delta => $value) {
-      $this->content = $output;
-      $expected = $formatter_setting . '|' . $value['value'] . '|' . ($value['value'] + 1);
-      $this->assertRaw($expected, "Value $delta is displayed, formatter settings are applied.");
-    }
-
-    // TODO:
-    // - check display order with several fields
-
-    // Preprocess template.
-    $variables = array();
-    field_attach_preprocess($entity_type, $entity, $entity->content, $variables);
-    $result = TRUE;
-    foreach ($values as $delta => $item) {
-      if ($variables[$this->field_name][$delta]['value'] !== $item['value']) {
-        $result = FALSE;
-        break;
-      }
-    }
-    $this->assertTrue($result, format_string('Variable $@field_name correctly populated.', array('@field_name' => $this->field_name)));
-  }
-
-  /**
-   * Tests the 'multiple entity' behavior of field_attach_prepare_view().
-   */
-  function testFieldAttachPrepareViewMultiple() {
-    $entity_type = 'test_entity';
-    $langcode = LANGUAGE_NONE;
-
-    // Set the instance to be hidden.
-    $this->instance['display']['full']['type'] = 'hidden';
-    field_update_instance($this->instance);
-
-    // Set up a second instance on another bundle, with a formatter that uses
-    // hook_field_formatter_prepare_view().
-    field_test_create_bundle('test_bundle_2');
-    $formatter_setting = $this->randomName();
-    $this->instance2 = $this->instance;
-    $this->instance2['bundle'] = 'test_bundle_2';
-    $this->instance2['display']['full'] = array(
-      'type' => 'field_test_with_prepare_view',
-      'settings' => array(
-        'test_formatter_setting_additional' => $formatter_setting,
-      )
-    );
-    field_create_instance($this->instance2);
-
-    // Create one entity in each bundle.
-    $entity1_init = field_test_create_stub_entity(1, 1, 'test_bundle');
-    $values1 = $this->_generateTestFieldValues($this->field['cardinality']);
-    $entity1_init->{$this->field_name}[$langcode] = $values1;
-
-    $entity2_init = field_test_create_stub_entity(2, 2, 'test_bundle_2');
-    $values2 = $this->_generateTestFieldValues($this->field['cardinality']);
-    $entity2_init->{$this->field_name}[$langcode] = $values2;
-
-    // Run prepare_view, and check that the entities come out as expected.
-    $entity1 = clone($entity1_init);
-    $entity2 = clone($entity2_init);
-    field_attach_prepare_view($entity_type, array($entity1->ftid => $entity1, $entity2->ftid => $entity2), 'full');
-    $this->assertFalse(isset($entity1->{$this->field_name}[$langcode][0]['additional_formatter_value']), 'Entity 1 did not run through the prepare_view hook.');
-    $this->assertTrue(isset($entity2->{$this->field_name}[$langcode][0]['additional_formatter_value']), 'Entity 2 ran through the prepare_view hook.');
-
-    // Same thing, reversed order.
-    $entity1 = clone($entity1_init);
-    $entity2 = clone($entity2_init);
-    field_attach_prepare_view($entity_type, array($entity2->ftid => $entity2, $entity1->ftid => $entity1), 'full');
-    $this->assertFalse(isset($entity1->{$this->field_name}[$langcode][0]['additional_formatter_value']), 'Entity 1 did not run through the prepare_view hook.');
-    $this->assertTrue(isset($entity2->{$this->field_name}[$langcode][0]['additional_formatter_value']), 'Entity 2 ran through the prepare_view hook.');
-  }
-
-  /**
-   * Test field cache.
-   */
-  function testFieldAttachCache() {
-    // Initialize random values and a test entity.
-    $entity_init = field_test_create_stub_entity(1, 1, $this->instance['bundle']);
-    $langcode = LANGUAGE_NONE;
-    $values = $this->_generateTestFieldValues($this->field['cardinality']);
-
-    // Non-cacheable entity type.
-    $entity_type = 'test_entity';
-    $cid = "field:$entity_type:{$entity_init->ftid}";
-
-    // Check that no initial cache entry is present.
-    $this->assertFalse(cache_get($cid, 'cache_field'), 'Non-cached: no initial cache entry');
-
-    // Save, and check that no cache entry is present.
-    $entity = clone($entity_init);
-    $entity->{$this->field_name}[$langcode] = $values;
-    field_attach_insert($entity_type, $entity);
-    $this->assertFalse(cache_get($cid, 'cache_field'), 'Non-cached: no cache entry on insert');
-
-    // Load, and check that no cache entry is present.
-    $entity = clone($entity_init);
-    field_attach_load($entity_type, array($entity->ftid => $entity));
-    $this->assertFalse(cache_get($cid, 'cache_field'), 'Non-cached: no cache entry on load');
-
-
-    // Cacheable entity type.
-    $entity_type = 'test_cacheable_entity';
-    $cid = "field:$entity_type:{$entity_init->ftid}";
-    $instance = $this->instance;
-    $instance['entity_type'] = $entity_type;
-    field_create_instance($instance);
-
-    // Check that no initial cache entry is present.
-    $this->assertFalse(cache_get($cid, 'cache_field'), 'Cached: no initial cache entry');
-
-    // Save, and check that no cache entry is present.
-    $entity = clone($entity_init);
-    $entity->{$this->field_name}[$langcode] = $values;
-    field_attach_insert($entity_type, $entity);
-    $this->assertFalse(cache_get($cid, 'cache_field'), 'Cached: no cache entry on insert');
-
-    // Load a single field, and check that no cache entry is present.
-    $entity = clone($entity_init);
-    field_attach_load($entity_type, array($entity->ftid => $entity), FIELD_LOAD_CURRENT, array('field_id' => $this->field_id));
-    $cache = cache_get($cid, 'cache_field');
-    $this->assertFalse(cache_get($cid, 'cache_field'), 'Cached: no cache entry on loading a single field');
-
-    // Load, and check that a cache entry is present with the expected values.
-    $entity = clone($entity_init);
-    field_attach_load($entity_type, array($entity->ftid => $entity));
-    $cache = cache_get($cid, 'cache_field');
-    $this->assertEqual($cache->data[$this->field_name][$langcode], $values, 'Cached: correct cache entry on load');
-
-    // Update with different values, and check that the cache entry is wiped.
-    $values = $this->_generateTestFieldValues($this->field['cardinality']);
-    $entity = clone($entity_init);
-    $entity->{$this->field_name}[$langcode] = $values;
-    field_attach_update($entity_type, $entity);
-    $this->assertFalse(cache_get($cid, 'cache_field'), 'Cached: no cache entry on update');
-
-    // Load, and check that a cache entry is present with the expected values.
-    $entity = clone($entity_init);
-    field_attach_load($entity_type, array($entity->ftid => $entity));
-    $cache = cache_get($cid, 'cache_field');
-    $this->assertEqual($cache->data[$this->field_name][$langcode], $values, 'Cached: correct cache entry on load');
-
-    // Create a new revision, and check that the cache entry is wiped.
-    $entity_init = field_test_create_stub_entity(1, 2, $this->instance['bundle']);
-    $values = $this->_generateTestFieldValues($this->field['cardinality']);
-    $entity = clone($entity_init);
-    $entity->{$this->field_name}[$langcode] = $values;
-    field_attach_update($entity_type, $entity);
-    $cache = cache_get($cid, 'cache_field');
-    $this->assertFalse(cache_get($cid, 'cache_field'), 'Cached: no cache entry on new revision creation');
-
-    // Load, and check that a cache entry is present with the expected values.
-    $entity = clone($entity_init);
-    field_attach_load($entity_type, array($entity->ftid => $entity));
-    $cache = cache_get($cid, 'cache_field');
-    $this->assertEqual($cache->data[$this->field_name][$langcode], $values, 'Cached: correct cache entry on load');
-
-    // Delete, and check that the cache entry is wiped.
-    field_attach_delete($entity_type, $entity);
-    $this->assertFalse(cache_get($cid, 'cache_field'), 'Cached: no cache entry after delete');
-  }
-
-  /**
-   * Test field_attach_validate().
-   *
-   * Verify that field_attach_validate() invokes the correct
-   * hook_field_validate.
-   */
-  function testFieldAttachValidate() {
-    $this->createFieldWithInstance('_2');
-
-    $entity_type = 'test_entity';
-    $entity = field_test_create_stub_entity(0, 0, $this->instance['bundle']);
-    $langcode = LANGUAGE_NONE;
-
-    // Set up all but one values of the first field to generate errors.
-    $values = array();
-    for ($delta = 0; $delta < $this->field['cardinality']; $delta++) {
-      $values[$delta]['value'] = -1;
-    }
-    // Arrange for item 1 not to generate an error
-    $values[1]['value'] = 1;
-    $entity->{$this->field_name}[$langcode] = $values;
-
-    // Set up all values of the second field to generate errors.
-    $values_2 = array();
-    for ($delta = 0; $delta < $this->field_2['cardinality']; $delta++) {
-      $values_2[$delta]['value'] = -1;
-    }
-    $entity->{$this->field_name_2}[$langcode] = $values_2;
-
-    // Validate all fields.
-    try {
-      field_attach_validate($entity_type, $entity);
-    }
-    catch (FieldValidationException $e) {
-      $errors = $e->errors;
-    }
-
-    foreach ($values as $delta => $value) {
-      if ($value['value'] != 1) {
-        $this->assertIdentical($errors[$this->field_name][$langcode][$delta][0]['error'], 'field_test_invalid', "Error set on first field's value $delta");
-        $this->assertEqual(count($errors[$this->field_name][$langcode][$delta]), 1, "Only one error set on first field's value $delta");
-        unset($errors[$this->field_name][$langcode][$delta]);
-      }
-      else {
-        $this->assertFalse(isset($errors[$this->field_name][$langcode][$delta]), "No error set on first field's value $delta");
-      }
-    }
-    foreach ($values_2 as $delta => $value) {
-      $this->assertIdentical($errors[$this->field_name_2][$langcode][$delta][0]['error'], 'field_test_invalid', "Error set on second field's value $delta");
-      $this->assertEqual(count($errors[$this->field_name_2][$langcode][$delta]), 1, "Only one error set on second field's value $delta");
-      unset($errors[$this->field_name_2][$langcode][$delta]);
-    }
-    $this->assertEqual(count($errors[$this->field_name][$langcode]), 0, 'No extraneous errors set for first field');
-    $this->assertEqual(count($errors[$this->field_name_2][$langcode]), 0, 'No extraneous errors set for second field');
-
-    // Validate a single field.
-    $options = array('field_name' => $this->field_name_2);
-    try {
-      field_attach_validate($entity_type, $entity, $options);
-    }
-    catch (FieldValidationException $e) {
-      $errors = $e->errors;
-    }
-
-    foreach ($values_2 as $delta => $value) {
-      $this->assertIdentical($errors[$this->field_name_2][$langcode][$delta][0]['error'], 'field_test_invalid', "Error set on second field's value $delta");
-      $this->assertEqual(count($errors[$this->field_name_2][$langcode][$delta]), 1, "Only one error set on second field's value $delta");
-      unset($errors[$this->field_name_2][$langcode][$delta]);
-    }
-    $this->assertFalse(isset($errors[$this->field_name]), 'No validation errors are set for the first field, despite it having errors');
-    $this->assertEqual(count($errors[$this->field_name_2][$langcode]), 0, 'No extraneous errors set for second field');
-
-    // Check that cardinality is validated.
-    $entity->{$this->field_name_2}[$langcode] = $this->_generateTestFieldValues($this->field_2['cardinality'] + 1);
-    // When validating all fields.
-    try {
-      field_attach_validate($entity_type, $entity);
-    }
-    catch (FieldValidationException $e) {
-      $errors = $e->errors;
-    }
-    $this->assertEqual($errors[$this->field_name_2][$langcode][0][0]['error'], 'field_cardinality', 'Cardinality validation failed.');
-    // When validating a single field (the second field).
-    try {
-      field_attach_validate($entity_type, $entity, $options);
-    }
-    catch (FieldValidationException $e) {
-      $errors = $e->errors;
-    }
-    $this->assertEqual($errors[$this->field_name_2][$langcode][0][0]['error'], 'field_cardinality', 'Cardinality validation failed.');
-  }
-
-  /**
-   * Test field_attach_form().
-   *
-   * This could be much more thorough, but it does verify that the correct
-   * widgets show up.
-   */
-  function testFieldAttachForm() {
-    $this->createFieldWithInstance('_2');
-
-    $entity_type = 'test_entity';
-    $entity = field_test_create_stub_entity(0, 0, $this->instance['bundle']);
-    $langcode = LANGUAGE_NONE;
-
-    // When generating form for all fields.
-    $form = array();
-    $form_state = form_state_defaults();
-    field_attach_form($entity_type, $entity, $form, $form_state);
-
-    $this->assertEqual($form[$this->field_name][$langcode]['#title'], $this->instance['label'], "First field's form title is {$this->instance['label']}");
-    $this->assertEqual($form[$this->field_name_2][$langcode]['#title'], $this->instance_2['label'], "Second field's form title is {$this->instance_2['label']}");
-    for ($delta = 0; $delta < $this->field['cardinality']; $delta++) {
-      // field_test_widget uses 'textfield'
-        $this->assertEqual($form[$this->field_name][$langcode][$delta]['value']['#type'], 'textfield', "First field's form delta $delta widget is textfield");
-      }
-      for ($delta = 0; $delta < $this->field_2['cardinality']; $delta++) {
-        // field_test_widget uses 'textfield'
-        $this->assertEqual($form[$this->field_name_2][$langcode][$delta]['value']['#type'], 'textfield', "Second field's form delta $delta widget is textfield");
-      }
-
-      // When generating form for a single field (the second field).
-      $options = array('field_name' => $this->field_name_2);
-      $form = array();
-      $form_state = form_state_defaults();
-      field_attach_form($entity_type, $entity, $form, $form_state, NULL, $options);
-
-      $this->assertFalse(isset($form[$this->field_name]), 'The first field does not exist in the form');
-      $this->assertEqual($form[$this->field_name_2][$langcode]['#title'], $this->instance_2['label'], "Second field's form title is {$this->instance_2['label']}");
-      for ($delta = 0; $delta < $this->field_2['cardinality']; $delta++) {
-        // field_test_widget uses 'textfield'
-        $this->assertEqual($form[$this->field_name_2][$langcode][$delta]['value']['#type'], 'textfield', "Second field's form delta $delta widget is textfield");
-      }
-  }
-
-  /**
-   * Test field_attach_submit().
-   */
-  function testFieldAttachSubmit() {
-    $this->createFieldWithInstance('_2');
-
-    $entity_type = 'test_entity';
-    $entity_init = field_test_create_stub_entity(0, 0, $this->instance['bundle']);
-    $langcode = LANGUAGE_NONE;
-
-    // Build the form for all fields.
-    $form = array();
-    $form_state = form_state_defaults();
-    field_attach_form($entity_type, $entity_init, $form, $form_state);
-
-    // Simulate incoming values.
-    // First field.
-    $values = array();
-    $weights = array();
-    for ($delta = 0; $delta < $this->field['cardinality']; $delta++) {
-      $values[$delta]['value'] = mt_rand(1, 127);
-      // Assign random weight.
-      do {
-        $weight = mt_rand(0, $this->field['cardinality']);
-      } while (in_array($weight, $weights));
-      $weights[$delta] = $weight;
-      $values[$delta]['_weight'] = $weight;
-    }
-    // Leave an empty value. 'field_test' fields are empty if empty().
-    $values[1]['value'] = 0;
-    // Second field.
-    $values_2 = array();
-    $weights_2 = array();
-    for ($delta = 0; $delta < $this->field_2['cardinality']; $delta++) {
-      $values_2[$delta]['value'] = mt_rand(1, 127);
-      // Assign random weight.
-      do {
-        $weight = mt_rand(0, $this->field_2['cardinality']);
-      } while (in_array($weight, $weights_2));
-      $weights_2[$delta] = $weight;
-      $values_2[$delta]['_weight'] = $weight;
-    }
-    // Leave an empty value. 'field_test' fields are empty if empty().
-    $values_2[1]['value'] = 0;
-    // Pretend the form has been built.
-    drupal_prepare_form('field_test_entity_form', $form, $form_state);
-    drupal_process_form('field_test_entity_form', $form, $form_state);
-    $form_state['values'][$this->field_name][$langcode] = $values;
-    $form_state['values'][$this->field_name_2][$langcode] = $values_2;
-
-    // Call field_attach_submit() for all fields.
-    $entity = clone($entity_init);
-    field_attach_submit($entity_type, $entity, $form, $form_state);
-
-    asort($weights);
-    asort($weights_2);
-    $expected_values = array();
-    $expected_values_2 = array();
-    foreach ($weights as $key => $value) {
-      if ($key != 1) {
-        $expected_values[] = array('value' => $values[$key]['value']);
-      }
-    }
-    $this->assertIdentical($entity->{$this->field_name}[$langcode], $expected_values, 'Submit filters empty values');
-    foreach ($weights_2 as $key => $value) {
-      if ($key != 1) {
-        $expected_values_2[] = array('value' => $values_2[$key]['value']);
-      }
-    }
-    $this->assertIdentical($entity->{$this->field_name_2}[$langcode], $expected_values_2, 'Submit filters empty values');
-
-    // Call field_attach_submit() for a single field (the second field).
-    $options = array('field_name' => $this->field_name_2);
-    $entity = clone($entity_init);
-    field_attach_submit($entity_type, $entity, $form, $form_state, $options);
-    $expected_values_2 = array();
-    foreach ($weights_2 as $key => $value) {
-      if ($key != 1) {
-        $expected_values_2[] = array('value' => $values_2[$key]['value']);
-      }
-    }
-    $this->assertFalse(isset($entity->{$this->field_name}), 'The first field does not exist in the entity object');
-    $this->assertIdentical($entity->{$this->field_name_2}[$langcode], $expected_values_2, 'Submit filters empty values');
-  }
-}
-
-class FieldInfoTestCase extends FieldTestCase {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Field info tests',
-      'description' => 'Get information about existing fields, instances and bundles.',
-      'group' => 'Field API',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('field_test');
-  }
-
-  /**
-   * Test that field types and field definitions are correcly cached.
-   */
-  function testFieldInfo() {
-    // Test that field_test module's fields, widgets, and formatters show up.
-
-    $field_test_info = field_test_field_info();
-    // We need to account for the existence of user_field_info_alter().
-    foreach (array_keys($field_test_info) as $name) {
-      $field_test_info[$name]['instance_settings']['user_register_form'] = FALSE;
-    }
-    $info = field_info_field_types();
-    foreach ($field_test_info as $t_key => $field_type) {
-      foreach ($field_type as $key => $val) {
-        $this->assertEqual($info[$t_key][$key], $val, format_string('Field type %t_key key %key is %value', array('%t_key' => $t_key, '%key' => $key, '%value' => print_r($val, TRUE))));
-      }
-      $this->assertEqual($info[$t_key]['module'], 'field_test',  "Field type field_test module appears");
-    }
-
-    $formatter_info = field_test_field_formatter_info();
-    $info = field_info_formatter_types();
-    foreach ($formatter_info as $f_key => $formatter) {
-      foreach ($formatter as $key => $val) {
-        $this->assertEqual($info[$f_key][$key], $val, format_string('Formatter type %f_key key %key is %value', array('%f_key' => $f_key, '%key' => $key, '%value' => print_r($val, TRUE))));
-      }
-      $this->assertEqual($info[$f_key]['module'], 'field_test',  "Formatter type field_test module appears");
-    }
-
-    $widget_info = field_test_field_widget_info();
-    $info = field_info_widget_types();
-    foreach ($widget_info as $w_key => $widget) {
-      foreach ($widget as $key => $val) {
-        $this->assertEqual($info[$w_key][$key], $val, format_string('Widget type %w_key key %key is %value', array('%w_key' => $w_key, '%key' => $key, '%value' => print_r($val, TRUE))));
-      }
-      $this->assertEqual($info[$w_key]['module'], 'field_test',  "Widget type field_test module appears");
-    }
-
-    $storage_info = field_test_field_storage_info();
-    $info = field_info_storage_types();
-    foreach ($storage_info as $s_key => $storage) {
-      foreach ($storage as $key => $val) {
-        $this->assertEqual($info[$s_key][$key], $val, format_string('Storage type %s_key key %key is %value', array('%s_key' => $s_key, '%key' => $key, '%value' => print_r($val, TRUE))));
-      }
-      $this->assertEqual($info[$s_key]['module'], 'field_test',  "Storage type field_test module appears");
-    }
-
-    // Verify that no unexpected instances exist.
-    $instances = field_info_instances('test_entity');
-    $expected = array('test_bundle' => array());
-    $this->assertIdentical($instances, $expected, format_string("field_info_instances('test_entity') returns %expected.", array('%expected' => var_export($expected, TRUE))));
-    $instances = field_info_instances('test_entity', 'test_bundle');
-    $this->assertIdentical($instances, array(), "field_info_instances('test_entity', 'test_bundle') returns an empty array.");
-
-    // Create a field, verify it shows up.
-    $core_fields = field_info_fields();
-    $field = array(
-      'field_name' => drupal_strtolower($this->randomName()),
-      'type' => 'test_field',
-    );
-    field_create_field($field);
-    $fields = field_info_fields();
-    $this->assertEqual(count($fields), count($core_fields) + 1, 'One new field exists');
-    $this->assertEqual($fields[$field['field_name']]['field_name'], $field['field_name'], 'info fields contains field name');
-    $this->assertEqual($fields[$field['field_name']]['type'], $field['type'], 'info fields contains field type');
-    $this->assertEqual($fields[$field['field_name']]['module'], 'field_test', 'info fields contains field module');
-    $settings = array('test_field_setting' => 'dummy test string');
-    foreach ($settings as $key => $val) {
-      $this->assertEqual($fields[$field['field_name']]['settings'][$key], $val, format_string('Field setting %key has correct default value %value', array('%key' => $key, '%value' => $val)));
-    }
-    $this->assertEqual($fields[$field['field_name']]['cardinality'], 1, 'info fields contains cardinality 1');
-    $this->assertEqual($fields[$field['field_name']]['active'], 1, 'info fields contains active 1');
-
-    // Create an instance, verify that it shows up
-    $instance = array(
-      'field_name' => $field['field_name'],
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
-      'label' => $this->randomName(),
-      'description' => $this->randomName(),
-      'weight' => mt_rand(0, 127),
-      // test_field has no instance settings
-      'widget' => array(
-        'type' => 'test_field_widget',
-        'settings' => array(
-          'test_setting' => 999)));
-    field_create_instance($instance);
-
-    $info = entity_get_info('test_entity');
-    $instances = field_info_instances('test_entity', $instance['bundle']);
-    $this->assertEqual(count($instances), 1, format_string('One instance shows up in info when attached to a bundle on a @label.', array(
-      '@label' => $info['label']
-    )));
-    $this->assertTrue($instance < $instances[$instance['field_name']], 'Instance appears in info correctly');
-
-    // Test a valid entity type but an invalid bundle.
-    $instances = field_info_instances('test_entity', 'invalid_bundle');
-    $this->assertIdentical($instances, array(), "field_info_instances('test_entity', 'invalid_bundle') returns an empty array.");
-
-    // Test invalid entity type and bundle.
-    $instances = field_info_instances('invalid_entity', $instance['bundle']);
-    $this->assertIdentical($instances, array(), "field_info_instances('invalid_entity', 'test_bundle') returns an empty array.");
-
-    // Test invalid entity type, no bundle provided.
-    $instances = field_info_instances('invalid_entity');
-    $this->assertIdentical($instances, array(), "field_info_instances('invalid_entity') returns an empty array.");
-
-    // Test with an entity type that has no bundles.
-    $instances = field_info_instances('user');
-    $expected = array('user' => array());
-    $this->assertIdentical($instances, $expected, format_string("field_info_instances('user') returns %expected.", array('%expected' => var_export($expected, TRUE))));
-    $instances = field_info_instances('user', 'user');
-    $this->assertIdentical($instances, array(), "field_info_instances('user', 'user') returns an empty array.");
-
-    // Test that querying for invalid entity types does not add entries in the
-    // list returned by field_info_instances().
-    field_info_cache_clear();
-    field_info_instances('invalid_entity', 'invalid_bundle');
-    // Simulate new request by clearing static caches.
-    drupal_static_reset();
-    field_info_instances('invalid_entity', 'invalid_bundle');
-    $instances = field_info_instances();
-    $this->assertFalse(isset($instances['invalid_entity']), 'field_info_instances() does not contain entries for the invalid entity type that was queried before');
-  }
-
-  /**
-   * Test that cached field definitions are ready for current runtime context.
-   */
-  function testFieldPrepare() {
-    $field_definition = array(
-      'field_name' => 'field',
-      'type' => 'test_field',
-    );
-    field_create_field($field_definition);
-
-    // Simulate a stored field definition missing a field setting (e.g. a
-    // third-party module adding a new field setting has been enabled, and
-    // existing fields do not know the setting yet).
-    $data = db_query('SELECT data FROM {field_config} WHERE field_name = :field_name', array(':field_name' => $field_definition['field_name']))->fetchField();
-    $data = unserialize($data);
-    $data['settings'] = array();
-    db_update('field_config')
-      ->fields(array('data' => serialize($data)))
-      ->condition('field_name', $field_definition['field_name'])
-      ->execute();
-
-    field_cache_clear();
-
-    // Read the field back.
-    $field = field_info_field($field_definition['field_name']);
-
-    // Check that all expected settings are in place.
-    $field_type = field_info_field_types($field_definition['type']);
-    $this->assertIdentical($field['settings'], $field_type['settings'], 'All expected default field settings are present.');
-  }
-
-  /**
-   * Test that cached instance definitions are ready for current runtime context.
-   */
-  function testInstancePrepare() {
-    $field_definition = array(
-      'field_name' => 'field',
-      'type' => 'test_field',
-    );
-    field_create_field($field_definition);
-    $instance_definition = array(
-      'field_name' => $field_definition['field_name'],
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
-    );
-    field_create_instance($instance_definition);
-
-    // Simulate a stored instance definition missing various settings (e.g. a
-    // third-party module adding instance, widget or display settings has been
-    // enabled, but existing instances do not know the new settings).
-    $data = db_query('SELECT data FROM {field_config_instance} WHERE field_name = :field_name AND bundle = :bundle', array(':field_name' => $instance_definition['field_name'], ':bundle' => $instance_definition['bundle']))->fetchField();
-    $data = unserialize($data);
-    $data['settings'] = array();
-    $data['widget']['settings'] = 'unavailable_widget';
-    $data['widget']['settings'] = array();
-    $data['display']['default']['type'] = 'unavailable_formatter';
-    $data['display']['default']['settings'] = array();
-    db_update('field_config_instance')
-      ->fields(array('data' => serialize($data)))
-      ->condition('field_name', $instance_definition['field_name'])
-      ->condition('bundle', $instance_definition['bundle'])
-      ->execute();
-
-    field_cache_clear();
-
-    // Read the instance back.
-    $instance = field_info_instance($instance_definition['entity_type'], $instance_definition['field_name'], $instance_definition['bundle']);
-
-    // Check that all expected instance settings are in place.
-    $field_type = field_info_field_types($field_definition['type']);
-    $this->assertIdentical($instance['settings'], $field_type['instance_settings'] , 'All expected instance settings are present.');
-
-    // Check that the default widget is used and expected settings are in place.
-    $this->assertIdentical($instance['widget']['type'], $field_type['default_widget'], 'Unavailable widget replaced with default widget.');
-    $widget_type = field_info_widget_types($instance['widget']['type']);
-    $this->assertIdentical($instance['widget']['settings'], $widget_type['settings'] , 'All expected widget settings are present.');
-
-    // Check that display settings are set for the 'default' mode.
-    $display = $instance['display']['default'];
-    $this->assertIdentical($display['type'], $field_type['default_formatter'], "Formatter is set for the 'default' view mode");
-    $formatter_type = field_info_formatter_types($display['type']);
-    $this->assertIdentical($display['settings'], $formatter_type['settings'] , "Formatter settings are set for the 'default' view mode");
-  }
-
-  /**
-   * Test that instances on disabled entity types are filtered out.
-   */
-  function testInstanceDisabledEntityType() {
-    // For this test the field type and the entity type must be exposed by
-    // different modules.
-    $field_definition = array(
-      'field_name' => 'field',
-      'type' => 'test_field',
-    );
-    field_create_field($field_definition);
-    $instance_definition = array(
-      'field_name' => 'field',
-      'entity_type' => 'comment',
-      'bundle' => 'comment_node_article',
-    );
-    field_create_instance($instance_definition);
-
-    // Disable coment module. This clears field_info cache.
-    module_disable(array('comment'));
-    $this->assertNull(field_info_instance('comment', 'field', 'comment_node_article'), 'No instances are returned on disabled entity types.');
-  }
-
-  /**
-   * Test field_info_field_map().
-   */
-  function testFieldMap() {
-    // We will overlook fields created by the 'standard' install profile.
-    $exclude = field_info_field_map();
-
-    // Create a new bundle for 'test_entity' entity type.
-    field_test_create_bundle('test_bundle_2');
-
-    // Create a couple fields.
-    $fields  = array(
-      array(
-        'field_name' => 'field_1',
-        'type' => 'test_field',
-      ),
-      array(
-        'field_name' => 'field_2',
-        'type' => 'hidden_test_field',
-      ),
-    );
-    foreach ($fields as $field) {
-      field_create_field($field);
-    }
-
-    // Create a couple instances.
-    $instances = array(
-      array(
-        'field_name' => 'field_1',
-        'entity_type' => 'test_entity',
-        'bundle' => 'test_bundle',
-      ),
-      array(
-        'field_name' => 'field_1',
-        'entity_type' => 'test_entity',
-        'bundle' => 'test_bundle_2',
-      ),
-      array(
-        'field_name' => 'field_2',
-        'entity_type' => 'test_entity',
-        'bundle' => 'test_bundle',
-      ),
-      array(
-        'field_name' => 'field_2',
-        'entity_type' => 'test_cacheable_entity',
-        'bundle' => 'test_bundle',
-      ),
-    );
-    foreach ($instances as $instance) {
-      field_create_instance($instance);
-    }
-
-    $expected = array(
-      'field_1' => array(
-        'type' => 'test_field',
-        'bundles' => array(
-          'test_entity' => array('test_bundle', 'test_bundle_2'),
-        ),
-      ),
-      'field_2' => array(
-        'type' => 'hidden_test_field',
-        'bundles' => array(
-          'test_entity' => array('test_bundle'),
-          'test_cacheable_entity' => array('test_bundle'),
-        ),
-      ),
-    );
-
-    // Check that the field map is correct.
-    $map = field_info_field_map();
-    $map = array_diff_key($map, $exclude);
-    $this->assertEqual($map, $expected);
-  }
-
-  /**
-   * Test that the field_info settings convenience functions work.
-   */
-  function testSettingsInfo() {
-    $info = field_test_field_info();
-    // We need to account for the existence of user_field_info_alter().
-    foreach (array_keys($info) as $name) {
-      $info[$name]['instance_settings']['user_register_form'] = FALSE;
-    }
-    foreach ($info as $type => $data) {
-      $this->assertIdentical(field_info_field_settings($type), $data['settings'], format_string("field_info_field_settings returns %type's field settings", array('%type' => $type)));
-      $this->assertIdentical(field_info_instance_settings($type), $data['instance_settings'], format_string("field_info_field_settings returns %type's field instance settings", array('%type' => $type)));
-    }
-
-    $info = field_test_field_widget_info();
-    foreach ($info as $type => $data) {
-      $this->assertIdentical(field_info_widget_settings($type), $data['settings'], format_string("field_info_widget_settings returns %type's widget settings", array('%type' => $type)));
-    }
-
-    $info = field_test_field_formatter_info();
-    foreach ($info as $type => $data) {
-      $this->assertIdentical(field_info_formatter_settings($type), $data['settings'], format_string("field_info_formatter_settings returns %type's formatter settings", array('%type' => $type)));
-    }
-  }
-
-  /**
-   * Tests that the field info cache can be built correctly.
-   */
-  function testFieldInfoCache() {
-    // Create a test field and ensure it's in the array returned by
-    // field_info_fields().
-    $field_name = drupal_strtolower($this->randomName());
-    $field = array(
-      'field_name' => $field_name,
-      'type' => 'test_field',
-    );
-    field_create_field($field);
-    $fields = field_info_fields();
-    $this->assertTrue(isset($fields[$field_name]), 'The test field is initially found in the array returned by field_info_fields().');
-
-    // Now rebuild the field info cache, and set a variable which will cause
-    // the cache to be cleared while it's being rebuilt; see
-    // field_test_entity_info(). Ensure the test field is still in the returned
-    // array.
-    field_info_cache_clear();
-    variable_set('field_test_clear_info_cache_in_hook_entity_info', TRUE);
-    $fields = field_info_fields();
-    $this->assertTrue(isset($fields[$field_name]), 'The test field is found in the array returned by field_info_fields() even if its cache is cleared while being rebuilt.');
-  }
-}
-
-class FieldFormTestCase extends FieldTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Field form tests',
-      'description' => 'Test Field form handling.',
-      'group' => 'Field API',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('field_test');
-
-    $web_user = $this->drupalCreateUser(array('access field_test content', 'administer field_test content'));
-    $this->drupalLogin($web_user);
-
-    $this->field_single = array('field_name' => 'field_single', 'type' => 'test_field');
-    $this->field_multiple = array('field_name' => 'field_multiple', 'type' => 'test_field', 'cardinality' => 4);
-    $this->field_unlimited = array('field_name' => 'field_unlimited', 'type' => 'test_field', 'cardinality' => FIELD_CARDINALITY_UNLIMITED);
-
-    $this->instance = array(
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
-      'label' => $this->randomName() . '_label',
-      'description' => $this->randomName() . '_description',
-      'weight' => mt_rand(0, 127),
-      'settings' => array(
-        'test_instance_setting' => $this->randomName(),
-      ),
-      'widget' => array(
-        'type' => 'test_field_widget',
-        'label' => 'Test Field',
-        'settings' => array(
-          'test_widget_setting' => $this->randomName(),
-        )
-      )
-    );
-  }
-
-  function testFieldFormSingle() {
-    $this->field = $this->field_single;
-    $this->field_name = $this->field['field_name'];
-    $this->instance['field_name'] = $this->field_name;
-    field_create_field($this->field);
-    field_create_instance($this->instance);
-    $langcode = LANGUAGE_NONE;
-
-    // Display creation form.
-    $this->drupalGet('test-entity/add/test-bundle');
-    $this->assertFieldByName("{$this->field_name}[$langcode][0][value]", '', 'Widget is displayed');
-    $this->assertNoField("{$this->field_name}[$langcode][1][value]", 'No extraneous widget is displayed');
-    // TODO : check that the widget is populated with default value ?
-
-    // Submit with invalid value (field-level validation).
-    $edit = array("{$this->field_name}[$langcode][0][value]" => -1);
-    $this->drupalPost(NULL, $edit, t('Save'));
-    $this->assertRaw(t('%name does not accept the value -1.', array('%name' => $this->instance['label'])), 'Field validation fails with invalid input.');
-    // TODO : check that the correct field is flagged for error.
-
-    // Create an entity
-    $value = mt_rand(1, 127);
-    $edit = array("{$this->field_name}[$langcode][0][value]" => $value);
-    $this->drupalPost(NULL, $edit, t('Save'));
-    preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
-    $id = $match[1];
-    $this->assertRaw(t('test_entity @id has been created.', array('@id' => $id)), 'Entity was created');
-    $entity = field_test_entity_test_load($id);
-    $this->assertEqual($entity->{$this->field_name}[$langcode][0]['value'], $value, 'Field value was saved');
-
-    // Display edit form.
-    $this->drupalGet('test-entity/manage/' . $id . '/edit');
-    $this->assertFieldByName("{$this->field_name}[$langcode][0][value]", $value, 'Widget is displayed with the correct default value');
-    $this->assertNoField("{$this->field_name}[$langcode][1][value]", 'No extraneous widget is displayed');
-
-    // Update the entity.
-    $value = mt_rand(1, 127);
-    $edit = array("{$this->field_name}[$langcode][0][value]" => $value);
-    $this->drupalPost(NULL, $edit, t('Save'));
-    $this->assertRaw(t('test_entity @id has been updated.', array('@id' => $id)), 'Entity was updated');
-    $entity = field_test_entity_test_load($id);
-    $this->assertEqual($entity->{$this->field_name}[$langcode][0]['value'], $value, 'Field value was updated');
-
-    // Empty the field.
-    $value = '';
-    $edit = array("{$this->field_name}[$langcode][0][value]" => $value);
-    $this->drupalPost('test-entity/manage/' . $id . '/edit', $edit, t('Save'));
-    $this->assertRaw(t('test_entity @id has been updated.', array('@id' => $id)), 'Entity was updated');
-    $entity = field_test_entity_test_load($id);
-    $this->assertIdentical($entity->{$this->field_name}, array(), 'Field was emptied');
-
-  }
-
-  function testFieldFormSingleRequired() {
-    $this->field = $this->field_single;
-    $this->field_name = $this->field['field_name'];
-    $this->instance['field_name'] = $this->field_name;
-    $this->instance['required'] = TRUE;
-    field_create_field($this->field);
-    field_create_instance($this->instance);
-    $langcode = LANGUAGE_NONE;
-
-    // Submit with missing required value.
-    $edit = array();
-    $this->drupalPost('test-entity/add/test-bundle', $edit, t('Save'));
-    $this->assertRaw(t('!name field is required.', array('!name' => $this->instance['label'])), 'Required field with no value fails validation');
-
-    // Create an entity
-    $value = mt_rand(1, 127);
-    $edit = array("{$this->field_name}[$langcode][0][value]" => $value);
-    $this->drupalPost(NULL, $edit, t('Save'));
-    preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
-    $id = $match[1];
-    $this->assertRaw(t('test_entity @id has been created.', array('@id' => $id)), 'Entity was created');
-    $entity = field_test_entity_test_load($id);
-    $this->assertEqual($entity->{$this->field_name}[$langcode][0]['value'], $value, 'Field value was saved');
-
-    // Edit with missing required value.
-    $value = '';
-    $edit = array("{$this->field_name}[$langcode][0][value]" => $value);
-    $this->drupalPost('test-entity/manage/' . $id . '/edit', $edit, t('Save'));
-    $this->assertRaw(t('!name field is required.', array('!name' => $this->instance['label'])), 'Required field with no value fails validation');
-  }
-
-//  function testFieldFormMultiple() {
-//    $this->field = $this->field_multiple;
-//    $this->field_name = $this->field['field_name'];
-//    $this->instance['field_name'] = $this->field_name;
-//    field_create_field($this->field);
-//    field_create_instance($this->instance);
-//  }
-
-  function testFieldFormUnlimited() {
-    $this->field = $this->field_unlimited;
-    $this->field_name = $this->field['field_name'];
-    $this->instance['field_name'] = $this->field_name;
-    field_create_field($this->field);
-    field_create_instance($this->instance);
-    $langcode = LANGUAGE_NONE;
-
-    // Display creation form -> 1 widget.
-    $this->drupalGet('test-entity/add/test-bundle');
-    $this->assertFieldByName("{$this->field_name}[$langcode][0][value]", '', 'Widget 1 is displayed');
-    $this->assertNoField("{$this->field_name}[$langcode][1][value]", 'No extraneous widget is displayed');
-
-    // Press 'add more' button -> 2 widgets.
-    $this->drupalPost(NULL, array(), t('Add another item'));
-    $this->assertFieldByName("{$this->field_name}[$langcode][0][value]", '', 'Widget 1 is displayed');
-    $this->assertFieldByName("{$this->field_name}[$langcode][1][value]", '', 'New widget is displayed');
-    $this->assertNoField("{$this->field_name}[$langcode][2][value]", 'No extraneous widget is displayed');
-    // TODO : check that non-field inpurs are preserved ('title')...
-
-    // Yet another time so that we can play with more values -> 3 widgets.
-    $this->drupalPost(NULL, array(), t('Add another item'));
-
-    // Prepare values and weights.
-    $count = 3;
-    $delta_range = $count - 1;
-    $values = $weights = $pattern = $expected_values = $edit = array();
-    for ($delta = 0; $delta <= $delta_range; $delta++) {
-      // Assign unique random values and weights.
-      do {
-        $value = mt_rand(1, 127);
-      } while (in_array($value, $values));
-      do {
-        $weight = mt_rand(-$delta_range, $delta_range);
-      } while (in_array($weight, $weights));
-      $edit["$this->field_name[$langcode][$delta][value]"] = $value;
-      $edit["$this->field_name[$langcode][$delta][_weight]"] = $weight;
-      // We'll need three slightly different formats to check the values.
-      $values[$delta] = $value;
-      $weights[$delta] = $weight;
-      $field_values[$weight]['value'] = (string) $value;
-      $pattern[$weight] = "<input [^>]*value=\"$value\" [^>]*";
-    }
-
-    // Press 'add more' button -> 4 widgets
-    $this->drupalPost(NULL, $edit, t('Add another item'));
-    for ($delta = 0; $delta <= $delta_range; $delta++) {
-      $this->assertFieldByName("$this->field_name[$langcode][$delta][value]", $values[$delta], "Widget $delta is displayed and has the right value");
-      $this->assertFieldByName("$this->field_name[$langcode][$delta][_weight]", $weights[$delta], "Widget $delta has the right weight");
-    }
-    ksort($pattern);
-    $pattern = implode('.*', array_values($pattern));
-    $this->assertPattern("|$pattern|s", 'Widgets are displayed in the correct order');
-    $this->assertFieldByName("$this->field_name[$langcode][$delta][value]", '', "New widget is displayed");
-    $this->assertFieldByName("$this->field_name[$langcode][$delta][_weight]", $delta, "New widget has the right weight");
-    $this->assertNoField("$this->field_name[$langcode][" . ($delta + 1) . '][value]', 'No extraneous widget is displayed');
-
-    // Submit the form and create the entity.
-    $this->drupalPost(NULL, $edit, t('Save'));
-    preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
-    $id = $match[1];
-    $this->assertRaw(t('test_entity @id has been created.', array('@id' => $id)), 'Entity was created');
-    $entity = field_test_entity_test_load($id);
-    ksort($field_values);
-    $field_values = array_values($field_values);
-    $this->assertIdentical($entity->{$this->field_name}[$langcode], $field_values, 'Field values were saved in the correct order');
-
-    // Display edit form: check that the expected number of widgets is
-    // displayed, with correct values change values, reorder, leave an empty
-    // value in the middle.
-    // Submit: check that the entity is updated with correct values
-    // Re-submit: check that the field can be emptied.
-
-    // Test with several multiple fields in a form
-  }
-
-  /**
-   * Tests widget handling of multiple required radios.
-   */
-  function testFieldFormMultivalueWithRequiredRadio() {
-    // Create a multivalue test field.
-    $this->field = $this->field_unlimited;
-    $this->field_name = $this->field['field_name'];
-    $this->instance['field_name'] = $this->field_name;
-    field_create_field($this->field);
-    field_create_instance($this->instance);
-    $langcode = LANGUAGE_NONE;
-
-    // Add a required radio field.
-    field_create_field(array(
-      'field_name' => 'required_radio_test',
-      'type' => 'list_text',
-      'settings' => array(
-        'allowed_values' => array('yes' => 'yes', 'no' => 'no'),
-      ),
-    ));
-    field_create_instance(array(
-      'field_name' => 'required_radio_test',
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
-      'required' => TRUE,
-      'widget' => array(
-        'type' => 'options_buttons',
-      ),
-    ));
-
-    // Display creation form.
-    $this->drupalGet('test-entity/add/test-bundle');
-
-    // Press the 'Add more' button.
-    $this->drupalPost(NULL, array(), t('Add another item'));
-
-    // Verify that no error is thrown by the radio element.
-    $this->assertNoFieldByXpath('//div[contains(@class, "error")]', FALSE, 'No error message is displayed.');
-
-    // Verify that the widget is added.
-    $this->assertFieldByName("{$this->field_name}[$langcode][0][value]", '', 'Widget 1 is displayed');
-    $this->assertFieldByName("{$this->field_name}[$langcode][1][value]", '', 'New widget is displayed');
-    $this->assertNoField("{$this->field_name}[$langcode][2][value]", 'No extraneous widget is displayed');
-  }
-
-  function testFieldFormJSAddMore() {
-    $this->field = $this->field_unlimited;
-    $this->field_name = $this->field['field_name'];
-    $this->instance['field_name'] = $this->field_name;
-    field_create_field($this->field);
-    field_create_instance($this->instance);
-    $langcode = LANGUAGE_NONE;
-
-    // Display creation form -> 1 widget.
-    $this->drupalGet('test-entity/add/test-bundle');
-
-    // Press 'add more' button a couple times -> 3 widgets.
-    // drupalPostAJAX() will not work iteratively, so we add those through
-    // non-JS submission.
-    $this->drupalPost(NULL, array(), t('Add another item'));
-    $this->drupalPost(NULL, array(), t('Add another item'));
-
-    // Prepare values and weights.
-    $count = 3;
-    $delta_range = $count - 1;
-    $values = $weights = $pattern = $expected_values = $edit = array();
-    for ($delta = 0; $delta <= $delta_range; $delta++) {
-      // Assign unique random values and weights.
-      do {
-        $value = mt_rand(1, 127);
-      } while (in_array($value, $values));
-      do {
-        $weight = mt_rand(-$delta_range, $delta_range);
-      } while (in_array($weight, $weights));
-      $edit["$this->field_name[$langcode][$delta][value]"] = $value;
-      $edit["$this->field_name[$langcode][$delta][_weight]"] = $weight;
-      // We'll need three slightly different formats to check the values.
-      $values[$delta] = $value;
-      $weights[$delta] = $weight;
-      $field_values[$weight]['value'] = (string) $value;
-      $pattern[$weight] = "<input [^>]*value=\"$value\" [^>]*";
-    }
-    // Press 'add more' button through Ajax, and place the expected HTML result
-    // as the tested content.
-    $commands = $this->drupalPostAJAX(NULL, $edit, $this->field_name . '_add_more');
-    $this->content = $commands[1]['data'];
-
-    for ($delta = 0; $delta <= $delta_range; $delta++) {
-      $this->assertFieldByName("$this->field_name[$langcode][$delta][value]", $values[$delta], "Widget $delta is displayed and has the right value");
-      $this->assertFieldByName("$this->field_name[$langcode][$delta][_weight]", $weights[$delta], "Widget $delta has the right weight");
-    }
-    ksort($pattern);
-    $pattern = implode('.*', array_values($pattern));
-    $this->assertPattern("|$pattern|s", 'Widgets are displayed in the correct order');
-    $this->assertFieldByName("$this->field_name[$langcode][$delta][value]", '', "New widget is displayed");
-    $this->assertFieldByName("$this->field_name[$langcode][$delta][_weight]", $delta, "New widget has the right weight");
-    $this->assertNoField("$this->field_name[$langcode][" . ($delta + 1) . '][value]', 'No extraneous widget is displayed');
-  }
-
-  /**
-   * Tests widgets handling multiple values.
-   */
-  function testFieldFormMultipleWidget() {
-    // Create a field with fixed cardinality and an instance using a multiple
-    // widget.
-    $this->field = $this->field_multiple;
-    $this->field_name = $this->field['field_name'];
-    $this->instance['field_name'] = $this->field_name;
-    $this->instance['widget']['type'] = 'test_field_widget_multiple';
-    field_create_field($this->field);
-    field_create_instance($this->instance);
-    $langcode = LANGUAGE_NONE;
-
-    // Display creation form.
-    $this->drupalGet('test-entity/add/test-bundle');
-    $this->assertFieldByName("{$this->field_name}[$langcode]", '', 'Widget is displayed.');
-
-    // Create entity with three values.
-    $edit = array("{$this->field_name}[$langcode]" => '1, 2, 3');
-    $this->drupalPost(NULL, $edit, t('Save'));
-    preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
-    $id = $match[1];
-
-    // Check that the values were saved.
-    $entity_init = field_test_create_stub_entity($id);
-    $this->assertFieldValues($entity_init, $this->field_name, $langcode, array(1, 2, 3));
-
-    // Display the form, check that the values are correctly filled in.
-    $this->drupalGet('test-entity/manage/' . $id . '/edit');
-    $this->assertFieldByName("{$this->field_name}[$langcode]", '1, 2, 3', 'Widget is displayed.');
-
-    // Submit the form with more values than the field accepts.
-    $edit = array("{$this->field_name}[$langcode]" => '1, 2, 3, 4, 5');
-    $this->drupalPost(NULL, $edit, t('Save'));
-    $this->assertRaw('this field cannot hold more than 4 values', 'Form validation failed.');
-    // Check that the field values were not submitted.
-    $this->assertFieldValues($entity_init, $this->field_name, $langcode, array(1, 2, 3));
-  }
-
-  /**
-   * Tests fields with no 'edit' access.
-   */
-  function testFieldFormAccess() {
-    // Create a "regular" field.
-    $field = $this->field_single;
-    $field_name = $field['field_name'];
-    $instance = $this->instance;
-    $instance['field_name'] = $field_name;
-    field_create_field($field);
-    field_create_instance($instance);
-
-    // Create a field with no edit access - see field_test_field_access().
-    $field_no_access = array(
-      'field_name' => 'field_no_edit_access',
-      'type' => 'test_field',
-    );
-    $field_name_no_access = $field_no_access['field_name'];
-    $instance_no_access = array(
-      'field_name' => $field_name_no_access,
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
-      'default_value' => array(0 => array('value' => 99)),
-    );
-    field_create_field($field_no_access);
-    field_create_instance($instance_no_access);
-
-    $langcode = LANGUAGE_NONE;
-
-    // Test that the form structure includes full information for each delta
-    // apart from #access.
-    $entity_type = 'test_entity';
-    $entity = field_test_create_stub_entity(0, 0, $this->instance['bundle']);
-
-    $form = array();
-    $form_state = form_state_defaults();
-    field_attach_form($entity_type, $entity, $form, $form_state);
-
-    $this->assertEqual($form[$field_name_no_access][$langcode][0]['value']['#entity_type'], $entity_type, 'The correct entity type is set in the field structure.');
-    $this->assertFalse($form[$field_name_no_access]['#access'], 'Field #access is FALSE for the field without edit access.');
-
-    // Display creation form.
-    $this->drupalGet('test-entity/add/test-bundle');
-    $this->assertNoFieldByName("{$field_name_no_access}[$langcode][0][value]", '', 'Widget is not displayed if field access is denied.');
-
-    // Create entity.
-    $edit = array("{$field_name}[$langcode][0][value]" => 1);
-    $this->drupalPost(NULL, $edit, t('Save'));
-    preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
-    $id = $match[1];
-
-    // Check that the default value was saved.
-    $entity = field_test_entity_test_load($id);
-    $this->assertEqual($entity->{$field_name_no_access}[$langcode][0]['value'], 99, 'Default value was saved for the field with no edit access.');
-    $this->assertEqual($entity->{$field_name}[$langcode][0]['value'], 1, 'Entered value vas saved for the field with edit access.');
-
-    // Create a new revision.
-    $edit = array("{$field_name}[$langcode][0][value]" => 2, 'revision' => TRUE);
-    $this->drupalPost('test-entity/manage/' . $id . '/edit', $edit, t('Save'));
-
-    // Check that the new revision has the expected values.
-    $entity = field_test_entity_test_load($id);
-    $this->assertEqual($entity->{$field_name_no_access}[$langcode][0]['value'], 99, 'New revision has the expected value for the field with no edit access.');
-    $this->assertEqual($entity->{$field_name}[$langcode][0]['value'], 2, 'New revision has the expected value for the field with edit access.');
-
-    // Check that the revision is also saved in the revisions table.
-    $entity = field_test_entity_test_load($id, $entity->ftvid);
-    $this->assertEqual($entity->{$field_name_no_access}[$langcode][0]['value'], 99, 'New revision has the expected value for the field with no edit access.');
-    $this->assertEqual($entity->{$field_name}[$langcode][0]['value'], 2, 'New revision has the expected value for the field with edit access.');
-  }
-
-  /**
-   * Tests Field API form integration within a subform.
-   */
-  function testNestedFieldForm() {
-    // Add two instances on the 'test_bundle'
-    field_create_field($this->field_single);
-    field_create_field($this->field_unlimited);
-    $this->instance['field_name'] = 'field_single';
-    $this->instance['label'] = 'Single field';
-    field_create_instance($this->instance);
-    $this->instance['field_name'] = 'field_unlimited';
-    $this->instance['label'] = 'Unlimited field';
-    field_create_instance($this->instance);
-
-    // Create two entities.
-    $entity_1 = field_test_create_stub_entity(1, 1);
-    $entity_1->is_new = TRUE;
-    $entity_1->field_single[LANGUAGE_NONE][] = array('value' => 0);
-    $entity_1->field_unlimited[LANGUAGE_NONE][] = array('value' => 1);
-    field_test_entity_save($entity_1);
-
-    $entity_2 = field_test_create_stub_entity(2, 2);
-    $entity_2->is_new = TRUE;
-    $entity_2->field_single[LANGUAGE_NONE][] = array('value' => 10);
-    $entity_2->field_unlimited[LANGUAGE_NONE][] = array('value' => 11);
-    field_test_entity_save($entity_2);
-
-    // Display the 'combined form'.
-    $this->drupalGet('test-entity/nested/1/2');
-    $this->assertFieldByName('field_single[und][0][value]', 0, 'Entity 1: field_single value appears correctly is the form.');
-    $this->assertFieldByName('field_unlimited[und][0][value]', 1, 'Entity 1: field_unlimited value 0 appears correctly is the form.');
-    $this->assertFieldByName('entity_2[field_single][und][0][value]', 10, 'Entity 2: field_single value appears correctly is the form.');
-    $this->assertFieldByName('entity_2[field_unlimited][und][0][value]', 11, 'Entity 2: field_unlimited value 0 appears correctly is the form.');
-
-    // Submit the form and check that the entities are updated accordingly.
-    $edit = array(
-      'field_single[und][0][value]' => 1,
-      'field_unlimited[und][0][value]' => 2,
-      'field_unlimited[und][1][value]' => 3,
-      'entity_2[field_single][und][0][value]' => 11,
-      'entity_2[field_unlimited][und][0][value]' => 12,
-      'entity_2[field_unlimited][und][1][value]' => 13,
-    );
-    $this->drupalPost(NULL, $edit, t('Save'));
-    field_cache_clear();
-    $entity_1 = field_test_create_stub_entity(1);
-    $entity_2 = field_test_create_stub_entity(2);
-    $this->assertFieldValues($entity_1, 'field_single', LANGUAGE_NONE, array(1));
-    $this->assertFieldValues($entity_1, 'field_unlimited', LANGUAGE_NONE, array(2, 3));
-    $this->assertFieldValues($entity_2, 'field_single', LANGUAGE_NONE, array(11));
-    $this->assertFieldValues($entity_2, 'field_unlimited', LANGUAGE_NONE, array(12, 13));
-
-    // Submit invalid values and check that errors are reported on the
-    // correct widgets.
-    $edit = array(
-      'field_unlimited[und][1][value]' => -1,
-    );
-    $this->drupalPost('test-entity/nested/1/2', $edit, t('Save'));
-    $this->assertRaw(t('%label does not accept the value -1', array('%label' => 'Unlimited field')), 'Entity 1: the field validation error was reported.');
-    $error_field = $this->xpath('//input[@id=:id and contains(@class, "error")]', array(':id' => 'edit-field-unlimited-und-1-value'));
-    $this->assertTrue($error_field, 'Entity 1: the error was flagged on the correct element.');
-    $edit = array(
-      'entity_2[field_unlimited][und][1][value]' => -1,
-    );
-    $this->drupalPost('test-entity/nested/1/2', $edit, t('Save'));
-    $this->assertRaw(t('%label does not accept the value -1', array('%label' => 'Unlimited field')), 'Entity 2: the field validation error was reported.');
-    $error_field = $this->xpath('//input[@id=:id and contains(@class, "error")]', array(':id' => 'edit-entity-2-field-unlimited-und-1-value'));
-    $this->assertTrue($error_field, 'Entity 2: the error was flagged on the correct element.');
-
-    // Test that reordering works on both entities.
-    $edit = array(
-      'field_unlimited[und][0][_weight]' => 0,
-      'field_unlimited[und][1][_weight]' => -1,
-      'entity_2[field_unlimited][und][0][_weight]' => 0,
-      'entity_2[field_unlimited][und][1][_weight]' => -1,
-    );
-    $this->drupalPost('test-entity/nested/1/2', $edit, t('Save'));
-    field_cache_clear();
-    $this->assertFieldValues($entity_1, 'field_unlimited', LANGUAGE_NONE, array(3, 2));
-    $this->assertFieldValues($entity_2, 'field_unlimited', LANGUAGE_NONE, array(13, 12));
-
-    // Test the 'add more' buttons. Only Ajax submission is tested, because
-    // the two 'add more' buttons present in the form have the same #value,
-    // which confuses drupalPost().
-    // 'Add more' button in the first entity:
-    $this->drupalGet('test-entity/nested/1/2');
-    $this->drupalPostAJAX(NULL, array(), 'field_unlimited_add_more');
-    $this->assertFieldByName('field_unlimited[und][0][value]', 3, 'Entity 1: field_unlimited value 0 appears correctly is the form.');
-    $this->assertFieldByName('field_unlimited[und][1][value]', 2, 'Entity 1: field_unlimited value 1 appears correctly is the form.');
-    $this->assertFieldByName('field_unlimited[und][2][value]', '', 'Entity 1: field_unlimited value 2 appears correctly is the form.');
-    $this->assertFieldByName('field_unlimited[und][3][value]', '', 'Entity 1: an empty widget was added for field_unlimited value 3.');
-    // 'Add more' button in the first entity (changing field values):
-    $edit = array(
-      'entity_2[field_unlimited][und][0][value]' => 13,
-      'entity_2[field_unlimited][und][1][value]' => 14,
-      'entity_2[field_unlimited][und][2][value]' => 15,
-    );
-    $this->drupalPostAJAX(NULL, $edit, 'entity_2_field_unlimited_add_more');
-    $this->assertFieldByName('entity_2[field_unlimited][und][0][value]', 13, 'Entity 2: field_unlimited value 0 appears correctly is the form.');
-    $this->assertFieldByName('entity_2[field_unlimited][und][1][value]', 14, 'Entity 2: field_unlimited value 1 appears correctly is the form.');
-    $this->assertFieldByName('entity_2[field_unlimited][und][2][value]', 15, 'Entity 2: field_unlimited value 2 appears correctly is the form.');
-    $this->assertFieldByName('entity_2[field_unlimited][und][3][value]', '', 'Entity 2: an empty widget was added for field_unlimited value 3.');
-    // Save the form and check values are saved correclty.
-    $this->drupalPost(NULL, array(), t('Save'));
-    field_cache_clear();
-    $this->assertFieldValues($entity_1, 'field_unlimited', LANGUAGE_NONE, array(3, 2));
-    $this->assertFieldValues($entity_2, 'field_unlimited', LANGUAGE_NONE, array(13, 14, 15));
-  }
-}
-
-class FieldDisplayAPITestCase extends FieldTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Field Display API tests',
-      'description' => 'Test the display API.',
-      'group' => 'Field API',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('field_test');
-
-    // Create a field and instance.
-    $this->field_name = 'test_field';
-    $this->label = $this->randomName();
-    $this->cardinality = 4;
-
-    $this->field = array(
-      'field_name' => $this->field_name,
-      'type' => 'test_field',
-      'cardinality' => $this->cardinality,
-    );
-    $this->instance = array(
-      'field_name' => $this->field_name,
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
-      'label' => $this->label,
-      'display' => array(
-        'default' => array(
-          'type' => 'field_test_default',
-          'settings' => array(
-            'test_formatter_setting' => $this->randomName(),
-          ),
-        ),
-        'teaser' => array(
-          'type' => 'field_test_default',
-          'settings' => array(
-            'test_formatter_setting' => $this->randomName(),
-          ),
-        ),
-      ),
-    );
-    field_create_field($this->field);
-    field_create_instance($this->instance);
-
-    // Create an entity with values.
-    $this->values = $this->_generateTestFieldValues($this->cardinality);
-    $this->entity = field_test_create_stub_entity();
-    $this->is_new = TRUE;
-    $this->entity->{$this->field_name}[LANGUAGE_NONE] = $this->values;
-    field_test_entity_save($this->entity);
-  }
-
-  /**
-   * Test the field_view_field() function.
-   */
-  function testFieldViewField() {
-    // No display settings: check that default display settings are used.
-    $output = field_view_field('test_entity', $this->entity, $this->field_name);
-    $this->drupalSetContent(drupal_render($output));
-    $settings = field_info_formatter_settings('field_test_default');
-    $setting = $settings['test_formatter_setting'];
-    $this->assertText($this->label, 'Label was displayed.');
-    foreach ($this->values as $delta => $value) {
-      $this->assertText($setting . '|' . $value['value'], format_string('Value @delta was displayed with expected setting.', array('@delta' => $delta)));
-    }
-
-    // Check that explicit display settings are used.
-    $display = array(
-      'label' => 'hidden',
-      'type' => 'field_test_multiple',
-      'settings' => array(
-        'test_formatter_setting_multiple' => $this->randomName(),
-        'alter' => TRUE,
-      ),
-    );
-    $output = field_view_field('test_entity', $this->entity, $this->field_name, $display);
-    $this->drupalSetContent(drupal_render($output));
-    $setting = $display['settings']['test_formatter_setting_multiple'];
-    $this->assertNoText($this->label, 'Label was not displayed.');
-    $this->assertText('field_test_field_attach_view_alter', 'Alter fired, display passed.');
-    $array = array();
-    foreach ($this->values as $delta => $value) {
-      $array[] = $delta . ':' . $value['value'];
-    }
-    $this->assertText($setting . '|' . implode('|', $array), 'Values were displayed with expected setting.');
-
-    // Check the prepare_view steps are invoked.
-    $display = array(
-      'label' => 'hidden',
-      'type' => 'field_test_with_prepare_view',
-      'settings' => array(
-        'test_formatter_setting_additional' => $this->randomName(),
-      ),
-    );
-    $output = field_view_field('test_entity', $this->entity, $this->field_name, $display);
-    $view = drupal_render($output);
-    $this->drupalSetContent($view);
-    $setting = $display['settings']['test_formatter_setting_additional'];
-    $this->assertNoText($this->label, 'Label was not displayed.');
-    $this->assertNoText('field_test_field_attach_view_alter', 'Alter not fired.');
-    foreach ($this->values as $delta => $value) {
-      $this->assertText($setting . '|' . $value['value'] . '|' . ($value['value'] + 1), format_string('Value @delta was displayed with expected setting.', array('@delta' => $delta)));
-    }
-
-    // View mode: check that display settings specified in the instance are
-    // used.
-    $output = field_view_field('test_entity', $this->entity, $this->field_name, 'teaser');
-    $this->drupalSetContent(drupal_render($output));
-    $setting = $this->instance['display']['teaser']['settings']['test_formatter_setting'];
-    $this->assertText($this->label, 'Label was displayed.');
-    foreach ($this->values as $delta => $value) {
-      $this->assertText($setting . '|' . $value['value'], format_string('Value @delta was displayed with expected setting.', array('@delta' => $delta)));
-    }
-
-    // Unknown view mode: check that display settings for 'default' view mode
-    // are used.
-    $output = field_view_field('test_entity', $this->entity, $this->field_name, 'unknown_view_mode');
-    $this->drupalSetContent(drupal_render($output));
-    $setting = $this->instance['display']['default']['settings']['test_formatter_setting'];
-    $this->assertText($this->label, 'Label was displayed.');
-    foreach ($this->values as $delta => $value) {
-      $this->assertText($setting . '|' . $value['value'], format_string('Value @delta was displayed with expected setting.', array('@delta' => $delta)));
-    }
-  }
-
-  /**
-   * Test the field_view_value() function.
-   */
-  function testFieldViewValue() {
-    // No display settings: check that default display settings are used.
-    $settings = field_info_formatter_settings('field_test_default');
-    $setting = $settings['test_formatter_setting'];
-    foreach ($this->values as $delta => $value) {
-      $item = $this->entity->{$this->field_name}[LANGUAGE_NONE][$delta];
-      $output = field_view_value('test_entity', $this->entity, $this->field_name, $item);
-      $this->drupalSetContent(drupal_render($output));
-      $this->assertText($setting . '|' . $value['value'], format_string('Value @delta was displayed with expected setting.', array('@delta' => $delta)));
-    }
-
-    // Check that explicit display settings are used.
-    $display = array(
-      'type' => 'field_test_multiple',
-      'settings' => array(
-        'test_formatter_setting_multiple' => $this->randomName(),
-      ),
-    );
-    $setting = $display['settings']['test_formatter_setting_multiple'];
-    $array = array();
-    foreach ($this->values as $delta => $value) {
-      $item = $this->entity->{$this->field_name}[LANGUAGE_NONE][$delta];
-      $output = field_view_value('test_entity', $this->entity, $this->field_name, $item, $display);
-      $this->drupalSetContent(drupal_render($output));
-      $this->assertText($setting . '|0:' . $value['value'], format_string('Value @delta was displayed with expected setting.', array('@delta' => $delta)));
-    }
-
-    // Check that prepare_view steps are invoked.
-    $display = array(
-      'type' => 'field_test_with_prepare_view',
-      'settings' => array(
-        'test_formatter_setting_additional' => $this->randomName(),
-      ),
-    );
-    $setting = $display['settings']['test_formatter_setting_additional'];
-    $array = array();
-    foreach ($this->values as $delta => $value) {
-      $item = $this->entity->{$this->field_name}[LANGUAGE_NONE][$delta];
-      $output = field_view_value('test_entity', $this->entity, $this->field_name, $item, $display);
-      $this->drupalSetContent(drupal_render($output));
-      $this->assertText($setting . '|' . $value['value'] . '|' . ($value['value'] + 1), format_string('Value @delta was displayed with expected setting.', array('@delta' => $delta)));
-    }
-
-    // View mode: check that display settings specified in the instance are
-    // used.
-    $setting = $this->instance['display']['teaser']['settings']['test_formatter_setting'];
-    foreach ($this->values as $delta => $value) {
-      $item = $this->entity->{$this->field_name}[LANGUAGE_NONE][$delta];
-      $output = field_view_value('test_entity', $this->entity, $this->field_name, $item, 'teaser');
-      $this->drupalSetContent(drupal_render($output));
-      $this->assertText($setting . '|' . $value['value'], format_string('Value @delta was displayed with expected setting.', array('@delta' => $delta)));
-    }
-
-    // Unknown view mode: check that display settings for 'default' view mode
-    // are used.
-    $setting = $this->instance['display']['default']['settings']['test_formatter_setting'];
-    foreach ($this->values as $delta => $value) {
-      $item = $this->entity->{$this->field_name}[LANGUAGE_NONE][$delta];
-      $output = field_view_value('test_entity', $this->entity, $this->field_name, $item, 'unknown_view_mode');
-      $this->drupalSetContent(drupal_render($output));
-      $this->assertText($setting . '|' . $value['value'], format_string('Value @delta was displayed with expected setting.', array('@delta' => $delta)));
-    }
-  }
-}
-
-class FieldCrudTestCase extends FieldTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Field CRUD tests',
-      'description' => 'Test field create, read, update, and delete.',
-      'group' => 'Field API',
-    );
-  }
-
-  function setUp() {
-    // field_update_field() tests use number.module
-    parent::setUp('field_test', 'number');
-  }
-
-  // TODO : test creation with
-  // - a full fledged $field structure, check that all the values are there
-  // - a minimal $field structure, check all default values are set
-  // defer actual $field comparison to a helper function, used for the two cases above
-
-  /**
-   * Test the creation of a field.
-   */
-  function testCreateField() {
-    $field_definition = array(
-      'field_name' => 'field_2',
-      'type' => 'test_field',
-    );
-    field_test_memorize();
-    $field_definition = field_create_field($field_definition);
-    $mem = field_test_memorize();
-    $this->assertIdentical($mem['field_test_field_create_field'][0][0], $field_definition, 'hook_field_create_field() called with correct arguments.');
-
-    // Read the raw record from the {field_config_instance} table.
-    $result = db_query('SELECT * FROM {field_config} WHERE field_name = :field_name', array(':field_name' => $field_definition['field_name']));
-    $record = $result->fetchAssoc();
-    $record['data'] = unserialize($record['data']);
-
-    // Ensure that basic properties are preserved.
-    $this->assertEqual($record['field_name'], $field_definition['field_name'], 'The field name is properly saved.');
-    $this->assertEqual($record['type'], $field_definition['type'], 'The field type is properly saved.');
-
-    // Ensure that cardinality defaults to 1.
-    $this->assertEqual($record['cardinality'], 1, 'Cardinality defaults to 1.');
-
-    // Ensure that default settings are present.
-    $field_type = field_info_field_types($field_definition['type']);
-    $this->assertIdentical($record['data']['settings'], $field_type['settings'], 'Default field settings have been written.');
-
-    // Ensure that default storage was set.
-    $this->assertEqual($record['storage_type'], variable_get('field_storage_default'), 'The field type is properly saved.');
-
-    // Guarantee that the name is unique.
-    try {
-      field_create_field($field_definition);
-      $this->fail(t('Cannot create two fields with the same name.'));
-    }
-    catch (FieldException $e) {
-      $this->pass(t('Cannot create two fields with the same name.'));
-    }
-
-    // Check that field type is required.
-    try {
-      $field_definition = array(
-        'field_name' => 'field_1',
-      );
-      field_create_field($field_definition);
-      $this->fail(t('Cannot create a field with no type.'));
-    }
-    catch (FieldException $e) {
-      $this->pass(t('Cannot create a field with no type.'));
-    }
-
-    // Check that field name is required.
-    try {
-      $field_definition = array(
-        'type' => 'test_field'
-      );
-      field_create_field($field_definition);
-      $this->fail(t('Cannot create an unnamed field.'));
-    }
-    catch (FieldException $e) {
-      $this->pass(t('Cannot create an unnamed field.'));
-    }
-
-    // Check that field name must start with a letter or _.
-    try {
-      $field_definition = array(
-        'field_name' => '2field_2',
-        'type' => 'test_field',
-      );
-      field_create_field($field_definition);
-      $this->fail(t('Cannot create a field with a name starting with a digit.'));
-    }
-    catch (FieldException $e) {
-      $this->pass(t('Cannot create a field with a name starting with a digit.'));
-    }
-
-    // Check that field name must only contain lowercase alphanumeric or _.
-    try {
-      $field_definition = array(
-        'field_name' => 'field#_3',
-        'type' => 'test_field',
-      );
-      field_create_field($field_definition);
-      $this->fail(t('Cannot create a field with a name containing an illegal character.'));
-    }
-    catch (FieldException $e) {
-      $this->pass(t('Cannot create a field with a name containing an illegal character.'));
-    }
-
-    // Check that field name cannot be longer than 32 characters long.
-    try {
-      $field_definition = array(
-        'field_name' => '_12345678901234567890123456789012',
-        'type' => 'test_field',
-      );
-      field_create_field($field_definition);
-      $this->fail(t('Cannot create a field with a name longer than 32 characters.'));
-    }
-    catch (FieldException $e) {
-      $this->pass(t('Cannot create a field with a name longer than 32 characters.'));
-    }
-
-    // Check that field name can not be an entity key.
-    // "ftvid" is known as an entity key from the "test_entity" type.
-    try {
-      $field_definition = array(
-        'type' => 'test_field',
-        'field_name' => 'ftvid',
-      );
-      $field = field_create_field($field_definition);
-      $this->fail(t('Cannot create a field bearing the name of an entity key.'));
-    }
-    catch (FieldException $e) {
-      $this->pass(t('Cannot create a field bearing the name of an entity key.'));
-    }
-  }
-
-  /**
-   * Test failure to create a field.
-   */
-  function testCreateFieldFail() {
-    $field_name = 'duplicate';
-    $field_definition = array('field_name' => $field_name, 'type' => 'test_field', 'storage' => array('type' => 'field_test_storage_failure'));
-    $query = db_select('field_config')->condition('field_name', $field_name)->countQuery();
-
-    // The field does not appear in field_config.
-    $count = $query->execute()->fetchField();
-    $this->assertEqual($count, 0, 'A field_config row for the field does not exist.');
-
-    // Try to create the field.
-    try {
-      $field = field_create_field($field_definition);
-      $this->assertTrue(FALSE, 'Field creation (correctly) fails.');
-    }
-    catch (Exception $e) {
-      $this->assertTrue(TRUE, 'Field creation (correctly) fails.');
-    }
-
-    // The field does not appear in field_config.
-    $count = $query->execute()->fetchField();
-    $this->assertEqual($count, 0, 'A field_config row for the field does not exist.');
-  }
-
-  /**
-   * Test reading back a field definition.
-   */
-  function testReadField() {
-    $field_definition = array(
-      'field_name' => 'field_1',
-      'type' => 'test_field',
-    );
-    field_create_field($field_definition);
-
-    // Read the field back.
-    $field = field_read_field($field_definition['field_name']);
-    $this->assertTrue($field_definition < $field, 'The field was properly read.');
-  }
-
-  /**
-   * Tests reading field definitions.
-   */
-  function testReadFields() {
-    $field_definition = array(
-      'field_name' => 'field_1',
-      'type' => 'test_field',
-    );
-    field_create_field($field_definition);
-
-    // Check that 'single column' criteria works.
-    $fields = field_read_fields(array('field_name' => $field_definition['field_name']));
-    $this->assertTrue(count($fields) == 1 && isset($fields[$field_definition['field_name']]), 'The field was properly read.');
-
-    // Check that 'multi column' criteria works.
-    $fields = field_read_fields(array('field_name' => $field_definition['field_name'], 'type' => $field_definition['type']));
-    $this->assertTrue(count($fields) == 1 && isset($fields[$field_definition['field_name']]), 'The field was properly read.');
-    $fields = field_read_fields(array('field_name' => $field_definition['field_name'], 'type' => 'foo'));
-    $this->assertTrue(empty($fields), 'No field was found.');
-
-    // Create an instance of the field.
-    $instance_definition = array(
-      'field_name' => $field_definition['field_name'],
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
-    );
-    field_create_instance($instance_definition);
-
-    // Check that criteria spanning over the field_config_instance table work.
-    $fields = field_read_fields(array('entity_type' => $instance_definition['entity_type'], 'bundle' => $instance_definition['bundle']));
-    $this->assertTrue(count($fields) == 1 && isset($fields[$field_definition['field_name']]), 'The field was properly read.');
-    $fields = field_read_fields(array('entity_type' => $instance_definition['entity_type'], 'field_name' => $instance_definition['field_name']));
-    $this->assertTrue(count($fields) == 1 && isset($fields[$field_definition['field_name']]), 'The field was properly read.');
-  }
-
-  /**
-   * Test creation of indexes on data column.
-   */
-  function testFieldIndexes() {
-    // Check that indexes specified by the field type are used by default.
-    $field_definition = array(
-      'field_name' => 'field_1',
-      'type' => 'test_field',
-    );
-    field_create_field($field_definition);
-    $field = field_read_field($field_definition['field_name']);
-    $expected_indexes = array('value' => array('value'));
-    $this->assertEqual($field['indexes'], $expected_indexes, 'Field type indexes saved by default');
-
-    // Check that indexes specified by the field definition override the field
-    // type indexes.
-    $field_definition = array(
-      'field_name' => 'field_2',
-      'type' => 'test_field',
-      'indexes' => array(
-        'value' => array(),
-      ),
-    );
-    field_create_field($field_definition);
-    $field = field_read_field($field_definition['field_name']);
-    $expected_indexes = array('value' => array());
-    $this->assertEqual($field['indexes'], $expected_indexes, 'Field definition indexes override field type indexes');
-
-    // Check that indexes specified by the field definition add to the field
-    // type indexes.
-    $field_definition = array(
-      'field_name' => 'field_3',
-      'type' => 'test_field',
-      'indexes' => array(
-        'value_2' => array('value'),
-      ),
-    );
-    field_create_field($field_definition);
-    $field = field_read_field($field_definition['field_name']);
-    $expected_indexes = array('value' => array('value'), 'value_2' => array('value'));
-    $this->assertEqual($field['indexes'], $expected_indexes, 'Field definition indexes are merged with field type indexes');
-  }
-
-  /**
-   * Test the deletion of a field.
-   */
-  function testDeleteField() {
-    // TODO: Also test deletion of the data stored in the field ?
-
-    // Create two fields (so we can test that only one is deleted).
-    $this->field = array('field_name' => 'field_1', 'type' => 'test_field');
-    field_create_field($this->field);
-    $this->another_field = array('field_name' => 'field_2', 'type' => 'test_field');
-    field_create_field($this->another_field);
-
-    // Create instances for each.
-    $this->instance_definition = array(
-      'field_name' => $this->field['field_name'],
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
-      'widget' => array(
-        'type' => 'test_field_widget',
-      ),
-    );
-    field_create_instance($this->instance_definition);
-    $this->another_instance_definition = $this->instance_definition;
-    $this->another_instance_definition['field_name'] = $this->another_field['field_name'];
-    field_create_instance($this->another_instance_definition);
-
-    // Test that the first field is not deleted, and then delete it.
-    $field = field_read_field($this->field['field_name'], array('include_deleted' => TRUE));
-    $this->assertTrue(!empty($field) && empty($field['deleted']), 'A new field is not marked for deletion.');
-    field_delete_field($this->field['field_name']);
-
-    // Make sure that the field is marked as deleted when it is specifically
-    // loaded.
-    $field = field_read_field($this->field['field_name'], array('include_deleted' => TRUE));
-    $this->assertTrue(!empty($field['deleted']), 'A deleted field is marked for deletion.');
-
-    // Make sure that this field's instance is marked as deleted when it is
-    // specifically loaded.
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle'], array('include_deleted' => TRUE));
-    $this->assertTrue(!empty($instance['deleted']), 'An instance for a deleted field is marked for deletion.');
-
-    // Try to load the field normally and make sure it does not show up.
-    $field = field_read_field($this->field['field_name']);
-    $this->assertTrue(empty($field), 'A deleted field is not loaded by default.');
-
-    // Try to load the instance normally and make sure it does not show up.
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
-    $this->assertTrue(empty($instance), 'An instance for a deleted field is not loaded by default.');
-
-    // Make sure the other field (and its field instance) are not deleted.
-    $another_field = field_read_field($this->another_field['field_name']);
-    $this->assertTrue(!empty($another_field) && empty($another_field['deleted']), 'A non-deleted field is not marked for deletion.');
-    $another_instance = field_read_instance('test_entity', $this->another_instance_definition['field_name'], $this->another_instance_definition['bundle']);
-    $this->assertTrue(!empty($another_instance) && empty($another_instance['deleted']), 'An instance of a non-deleted field is not marked for deletion.');
-
-    // Try to create a new field the same name as a deleted field and
-    // write data into it.
-    field_create_field($this->field);
-    field_create_instance($this->instance_definition);
-    $field = field_read_field($this->field['field_name']);
-    $this->assertTrue(!empty($field) && empty($field['deleted']), 'A new field with a previously used name is created.');
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
-    $this->assertTrue(!empty($instance) && empty($instance['deleted']), 'A new instance for a previously used field name is created.');
-
-    // Save an entity with data for the field
-    $entity = field_test_create_stub_entity(0, 0, $instance['bundle']);
-    $langcode = LANGUAGE_NONE;
-    $values[0]['value'] = mt_rand(1, 127);
-    $entity->{$field['field_name']}[$langcode] = $values;
-    $entity_type = 'test_entity';
-    field_attach_insert('test_entity', $entity);
-
-    // Verify the field is present on load
-    $entity = field_test_create_stub_entity(0, 0, $this->instance_definition['bundle']);
-    field_attach_load($entity_type, array(0 => $entity));
-    $this->assertIdentical(count($entity->{$field['field_name']}[$langcode]), count($values), "Data in previously deleted field saves and loads correctly");
-    foreach ($values as $delta => $value) {
-      $this->assertEqual($entity->{$field['field_name']}[$langcode][$delta]['value'], $values[$delta]['value'], "Data in previously deleted field saves and loads correctly");
-    }
-  }
-
-  function testUpdateNonExistentField() {
-    $test_field = array('field_name' => 'does_not_exist', 'type' => 'number_decimal');
-    try {
-      field_update_field($test_field);
-      $this->fail(t('Cannot update a field that does not exist.'));
-    }
-    catch (FieldException $e) {
-      $this->pass(t('Cannot update a field that does not exist.'));
-    }
-  }
-
-  function testUpdateFieldType() {
-    $field = array('field_name' => 'field_type', 'type' => 'number_decimal');
-    $field = field_create_field($field);
-
-    $test_field = array('field_name' => 'field_type', 'type' => 'number_integer');
-    try {
-      field_update_field($test_field);
-      $this->fail(t('Cannot update a field to a different type.'));
-    }
-    catch (FieldException $e) {
-      $this->pass(t('Cannot update a field to a different type.'));
-    }
-  }
-
-  /**
-   * Test updating a field.
-   */
-  function testUpdateField() {
-    // Create a field with a defined cardinality, so that we can ensure it's
-    // respected. Since cardinality enforcement is consistent across database
-    // systems, it makes a good test case.
-    $cardinality = 4;
-    $field_definition = array(
-      'field_name' => 'field_update',
-      'type' => 'test_field',
-      'cardinality' => $cardinality,
-    );
-    $field_definition = field_create_field($field_definition);
-    $instance = array(
-      'field_name' => 'field_update',
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
-    );
-    $instance = field_create_instance($instance);
-
-    do {
-      // We need a unique ID for our entity. $cardinality will do.
-      $id = $cardinality;
-      $entity = field_test_create_stub_entity($id, $id, $instance['bundle']);
-      // Fill in the entity with more values than $cardinality.
-      for ($i = 0; $i < 20; $i++) {
-        $entity->field_update[LANGUAGE_NONE][$i]['value'] = $i;
-      }
-      // Save the entity.
-      field_attach_insert('test_entity', $entity);
-      // Load back and assert there are $cardinality number of values.
-      $entity = field_test_create_stub_entity($id, $id, $instance['bundle']);
-      field_attach_load('test_entity', array($id => $entity));
-      $this->assertEqual(count($entity->field_update[LANGUAGE_NONE]), $field_definition['cardinality'], 'Cardinality is kept');
-      // Now check the values themselves.
-      for ($delta = 0; $delta < $cardinality; $delta++) {
-        $this->assertEqual($entity->field_update[LANGUAGE_NONE][$delta]['value'], $delta, 'Value is kept');
-      }
-      // Increase $cardinality and set the field cardinality to the new value.
-      $field_definition['cardinality'] = ++$cardinality;
-      field_update_field($field_definition);
-    } while ($cardinality < 6);
-  }
-
-  /**
-   * Test field type modules forbidding an update.
-   */
-  function testUpdateFieldForbid() {
-    $field = array('field_name' => 'forbidden', 'type' => 'test_field', 'settings' => array('changeable' => 0, 'unchangeable' => 0));
-    $field = field_create_field($field);
-    $field['settings']['changeable']++;
-    try {
-      field_update_field($field);
-      $this->pass(t("A changeable setting can be updated."));
-    }
-    catch (FieldException $e) {
-      $this->fail(t("An unchangeable setting cannot be updated."));
-    }
-    $field['settings']['unchangeable']++;
-    try {
-      field_update_field($field);
-      $this->fail(t("An unchangeable setting can be updated."));
-    }
-    catch (FieldException $e) {
-      $this->pass(t("An unchangeable setting cannot be updated."));
-    }
-  }
-
-  /**
-   * Test that fields are properly marked active or inactive.
-   */
-  function testActive() {
-    $field_definition = array(
-      'field_name' => 'field_1',
-      'type' => 'test_field',
-      // For this test, we need a storage backend provided by a different
-      // module than field_test.module.
-      'storage' => array(
-        'type' => 'field_sql_storage',
-      ),
-    );
-    field_create_field($field_definition);
-
-    // Test disabling and enabling:
-    // - the field type module,
-    // - the storage module,
-    // - both.
-    $this->_testActiveHelper($field_definition, array('field_test'));
-    $this->_testActiveHelper($field_definition, array('field_sql_storage'));
-    $this->_testActiveHelper($field_definition, array('field_test', 'field_sql_storage'));
-  }
-
-  /**
-   * Helper function for testActive().
-   *
-   * Test dependency between a field and a set of modules.
-   *
-   * @param $field_definition
-   *   A field definition.
-   * @param $modules
-   *   An aray of module names. The field will be tested to be inactive as long
-   *   as any of those modules is disabled.
-   */
-  function _testActiveHelper($field_definition, $modules) {
-    $field_name = $field_definition['field_name'];
-
-    // Read the field.
-    $field = field_read_field($field_name);
-    $this->assertTrue($field_definition <= $field, 'The field was properly read.');
-
-    module_disable($modules, FALSE);
-
-    $fields = field_read_fields(array('field_name' => $field_name), array('include_inactive' => TRUE));
-    $this->assertTrue(isset($fields[$field_name]) && $field_definition < $field, 'The field is properly read when explicitly fetching inactive fields.');
-
-    // Re-enable modules one by one, and check that the field is still inactive
-    // while some modules remain disabled.
-    while ($modules) {
-      $field = field_read_field($field_name);
-      $this->assertTrue(empty($field), format_string('%modules disabled. The field is marked inactive.', array('%modules' => implode(', ', $modules))));
-
-      $module = array_shift($modules);
-      module_enable(array($module), FALSE);
-    }
-
-    // Check that the field is active again after all modules have been
-    // enabled.
-    $field = field_read_field($field_name);
-    $this->assertTrue($field_definition <= $field, 'The field was was marked active.');
-  }
-}
-
-class FieldInstanceCrudTestCase extends FieldTestCase {
-  protected $field;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Field instance CRUD tests',
-      'description' => 'Create field entities by attaching fields to entities.',
-      'group' => 'Field API',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('field_test');
-
-    $this->field = array(
-      'field_name' => drupal_strtolower($this->randomName()),
-      'type' => 'test_field',
-    );
-    field_create_field($this->field);
-    $this->instance_definition = array(
-      'field_name' => $this->field['field_name'],
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
-    );
-  }
-
-  // TODO : test creation with
-  // - a full fledged $instance structure, check that all the values are there
-  // - a minimal $instance structure, check all default values are set
-  // defer actual $instance comparison to a helper function, used for the two cases above,
-  // and for testUpdateFieldInstance
-
-  /**
-   * Test the creation of a field instance.
-   */
-  function testCreateFieldInstance() {
-    field_create_instance($this->instance_definition);
-
-    // Read the raw record from the {field_config_instance} table.
-    $result = db_query('SELECT * FROM {field_config_instance} WHERE field_name = :field_name AND bundle = :bundle', array(':field_name' => $this->instance_definition['field_name'], ':bundle' => $this->instance_definition['bundle']));
-    $record = $result->fetchAssoc();
-    $record['data'] = unserialize($record['data']);
-
-    $field_type = field_info_field_types($this->field['type']);
-    $widget_type = field_info_widget_types($field_type['default_widget']);
-    $formatter_type = field_info_formatter_types($field_type['default_formatter']);
-
-    // Check that default values are set.
-    $this->assertIdentical($record['data']['required'], FALSE, 'Required defaults to false.');
-    $this->assertIdentical($record['data']['label'], $this->instance_definition['field_name'], 'Label defaults to field name.');
-    $this->assertIdentical($record['data']['description'], '', 'Description defaults to empty string.');
-    $this->assertIdentical($record['data']['widget']['type'], $field_type['default_widget'], 'Default widget has been written.');
-    $this->assertTrue(isset($record['data']['display']['default']), 'Display for "full" view_mode has been written.');
-    $this->assertIdentical($record['data']['display']['default']['type'], $field_type['default_formatter'], 'Default formatter for "full" view_mode has been written.');
-
-    // Check that default settings are set.
-    $this->assertIdentical($record['data']['settings'], $field_type['instance_settings'] , 'Default instance settings have been written.');
-    $this->assertIdentical($record['data']['widget']['settings'], $widget_type['settings'] , 'Default widget settings have been written.');
-    $this->assertIdentical($record['data']['display']['default']['settings'], $formatter_type['settings'], 'Default formatter settings for "full" view_mode have been written.');
-
-    // Guarantee that the field/bundle combination is unique.
-    try {
-      field_create_instance($this->instance_definition);
-      $this->fail(t('Cannot create two instances with the same field / bundle combination.'));
-    }
-    catch (FieldException $e) {
-      $this->pass(t('Cannot create two instances with the same field / bundle combination.'));
-    }
-
-    // Check that the specified field exists.
-    try {
-      $this->instance_definition['field_name'] = $this->randomName();
-      field_create_instance($this->instance_definition);
-      $this->fail(t('Cannot create an instance of a non-existing field.'));
-    }
-    catch (FieldException $e) {
-      $this->pass(t('Cannot create an instance of a non-existing field.'));
-    }
-
-    // Create a field restricted to a specific entity type.
-    $field_restricted = array(
-      'field_name' => drupal_strtolower($this->randomName()),
-      'type' => 'test_field',
-      'entity_types' => array('test_cacheable_entity'),
-    );
-    field_create_field($field_restricted);
-
-    // Check that an instance can be added to an entity type allowed
-    // by the field.
-    try {
-      $instance = $this->instance_definition;
-      $instance['field_name'] = $field_restricted['field_name'];
-      $instance['entity_type'] = 'test_cacheable_entity';
-      field_create_instance($instance);
-      $this->pass(t('Can create an instance on an entity type allowed by the field.'));
-    }
-    catch (FieldException $e) {
-      $this->fail(t('Can create an instance on an entity type allowed by the field.'));
-    }
-
-    // Check that an instance cannot be added to an entity type
-    // forbidden by the field.
-    try {
-      $instance = $this->instance_definition;
-      $instance['field_name'] = $field_restricted['field_name'];
-      field_create_instance($instance);
-      $this->fail(t('Cannot create an instance on an entity type forbidden by the field.'));
-    }
-    catch (FieldException $e) {
-      $this->pass(t('Cannot create an instance on an entity type forbidden by the field.'));
-    }
-
-    // TODO: test other failures.
-  }
-
-  /**
-   * Test reading back an instance definition.
-   */
-  function testReadFieldInstance() {
-    field_create_instance($this->instance_definition);
-
-    // Read the instance back.
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
-    $this->assertTrue($this->instance_definition < $instance, 'The field was properly read.');
-  }
-
-  /**
-   * Test the update of a field instance.
-   */
-  function testUpdateFieldInstance() {
-    field_create_instance($this->instance_definition);
-    $field_type = field_info_field_types($this->field['type']);
-
-    // Check that basic changes are saved.
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
-    $instance['required'] = !$instance['required'];
-    $instance['label'] = $this->randomName();
-    $instance['description'] = $this->randomName();
-    $instance['settings']['test_instance_setting'] = $this->randomName();
-    $instance['widget']['settings']['test_widget_setting'] =$this->randomName();
-    $instance['widget']['weight']++;
-    $instance['display']['default']['settings']['test_formatter_setting'] = $this->randomName();
-    $instance['display']['default']['weight']++;
-    field_update_instance($instance);
-
-    $instance_new = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
-    $this->assertEqual($instance['required'], $instance_new['required'], '"required" change is saved');
-    $this->assertEqual($instance['label'], $instance_new['label'], '"label" change is saved');
-    $this->assertEqual($instance['description'], $instance_new['description'], '"description" change is saved');
-    $this->assertEqual($instance['widget']['settings']['test_widget_setting'], $instance_new['widget']['settings']['test_widget_setting'], 'Widget setting change is saved');
-    $this->assertEqual($instance['widget']['weight'], $instance_new['widget']['weight'], 'Widget weight change is saved');
-    $this->assertEqual($instance['display']['default']['settings']['test_formatter_setting'], $instance_new['display']['default']['settings']['test_formatter_setting'], 'Formatter setting change is saved');
-    $this->assertEqual($instance['display']['default']['weight'], $instance_new['display']['default']['weight'], 'Widget weight change is saved');
-
-    // Check that changing widget and formatter types updates the default settings.
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
-    $instance['widget']['type'] = 'test_field_widget_multiple';
-    $instance['display']['default']['type'] = 'field_test_multiple';
-    field_update_instance($instance);
-
-    $instance_new = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
-    $this->assertEqual($instance['widget']['type'], $instance_new['widget']['type'] , 'Widget type change is saved.');
-    $settings = field_info_widget_settings($instance_new['widget']['type']);
-    $this->assertIdentical($settings, array_intersect_key($instance_new['widget']['settings'], $settings) , 'Widget type change updates default settings.');
-    $this->assertEqual($instance['display']['default']['type'], $instance_new['display']['default']['type'] , 'Formatter type change is saved.');
-    $info = field_info_formatter_types($instance_new['display']['default']['type']);
-    $settings = $info['settings'];
-    $this->assertIdentical($settings, array_intersect_key($instance_new['display']['default']['settings'], $settings) , 'Changing formatter type updates default settings.');
-
-    // Check that adding a new view mode is saved and gets default settings.
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
-    $instance['display']['teaser'] = array();
-    field_update_instance($instance);
-
-    $instance_new = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
-    $this->assertTrue(isset($instance_new['display']['teaser']), 'Display for the new view_mode has been written.');
-    $this->assertIdentical($instance_new['display']['teaser']['type'], $field_type['default_formatter'], 'Default formatter for the new view_mode has been written.');
-    $info = field_info_formatter_types($instance_new['display']['teaser']['type']);
-    $settings = $info['settings'];
-    $this->assertIdentical($settings, $instance_new['display']['teaser']['settings'] , 'Default formatter settings for the new view_mode have been written.');
-
-    // TODO: test failures.
-  }
-
-  /**
-   * Test the deletion of a field instance.
-   */
-  function testDeleteFieldInstance() {
-    // TODO: Test deletion of the data stored in the field also.
-    // Need to check that data for a 'deleted' field / instance doesn't get loaded
-    // Need to check data marked deleted is cleaned on cron (not implemented yet...)
-
-    // Create two instances for the same field so we can test that only one
-    // is deleted.
-    field_create_instance($this->instance_definition);
-    $this->another_instance_definition = $this->instance_definition;
-    $this->another_instance_definition['bundle'] .= '_another_bundle';
-    $instance = field_create_instance($this->another_instance_definition);
-
-    // Test that the first instance is not deleted, and then delete it.
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle'], array('include_deleted' => TRUE));
-    $this->assertTrue(!empty($instance) && empty($instance['deleted']), 'A new field instance is not marked for deletion.');
-    field_delete_instance($instance);
-
-    // Make sure the instance is marked as deleted when the instance is
-    // specifically loaded.
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle'], array('include_deleted' => TRUE));
-    $this->assertTrue(!empty($instance['deleted']), 'A deleted field instance is marked for deletion.');
-
-    // Try to load the instance normally and make sure it does not show up.
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
-    $this->assertTrue(empty($instance), 'A deleted field instance is not loaded by default.');
-
-    // Make sure the other field instance is not deleted.
-    $another_instance = field_read_instance('test_entity', $this->another_instance_definition['field_name'], $this->another_instance_definition['bundle']);
-    $this->assertTrue(!empty($another_instance) && empty($another_instance['deleted']), 'A non-deleted field instance is not marked for deletion.');
-
-    // Make sure the field is deleted when its last instance is deleted.
-    field_delete_instance($another_instance);
-    $field = field_read_field($another_instance['field_name'], array('include_deleted' => TRUE));
-    $this->assertTrue(!empty($field['deleted']), 'A deleted field is marked for deletion after all its instances have been marked for deletion.');
-  }
-}
-
-/**
- * Unit test class for the multilanguage fields logic.
- *
- * The following tests will check the multilanguage logic of _field_invoke() and
- * that only the correct values are returned by field_available_languages().
- */
-class FieldTranslationsTestCase extends FieldTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Field translations tests',
-      'description' => 'Test multilanguage fields logic.',
-      'group' => 'Field API',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('locale', 'field_test');
-
-    $this->field_name = drupal_strtolower($this->randomName() . '_field_name');
-
-    $this->entity_type = 'test_entity';
-
-    $field = array(
-      'field_name' => $this->field_name,
-      'type' => 'test_field',
-      'cardinality' => 4,
-      'translatable' => TRUE,
-    );
-    field_create_field($field);
-    $this->field = field_read_field($this->field_name);
-
-    $instance = array(
-      'field_name' => $this->field_name,
-      'entity_type' => $this->entity_type,
-      'bundle' => 'test_bundle',
-    );
-    field_create_instance($instance);
-    $this->instance = field_read_instance('test_entity', $this->field_name, 'test_bundle');
-
-    require_once DRUPAL_ROOT . '/includes/locale.inc';
-    for ($i = 0; $i < 3; ++$i) {
-      locale_add_language('l' . $i, $this->randomString(), $this->randomString());
-    }
-  }
-
-  /**
-   * Ensures that only valid values are returned by field_available_languages().
-   */
-  function testFieldAvailableLanguages() {
-    // Test 'translatable' fieldable info.
-    field_test_entity_info_translatable('test_entity', FALSE);
-    $field = $this->field;
-    $field['field_name'] .= '_untranslatable';
-
-    // Enable field translations for the entity.
-    field_test_entity_info_translatable('test_entity', TRUE);
-
-    // Test hook_field_languages() invocation on a translatable field.
-    variable_set('field_test_field_available_languages_alter', TRUE);
-    $enabled_languages = field_content_languages();
-    $available_languages = field_available_languages($this->entity_type, $this->field);
-    foreach ($available_languages as $delta => $langcode) {
-      if ($langcode != 'xx' && $langcode != 'en') {
-        $this->assertTrue(in_array($langcode, $enabled_languages), format_string('%language is an enabled language.', array('%language' => $langcode)));
-      }
-    }
-    $this->assertTrue(in_array('xx', $available_languages), format_string('%language was made available.', array('%language' => 'xx')));
-    $this->assertFalse(in_array('en', $available_languages), format_string('%language was made unavailable.', array('%language' => 'en')));
-
-    // Test field_available_languages() behavior for untranslatable fields.
-    $this->field['translatable'] = FALSE;
-    field_update_field($this->field);
-    $available_languages = field_available_languages($this->entity_type, $this->field);
-    $this->assertTrue(count($available_languages) == 1 && $available_languages[0] === LANGUAGE_NONE, 'For untranslatable fields only LANGUAGE_NONE is available.');
-  }
-
-  /**
-   * Test the multilanguage logic of _field_invoke().
-   */
-  function testFieldInvoke() {
-    // Enable field translations for the entity.
-    field_test_entity_info_translatable('test_entity', TRUE);
-
-    $entity_type = 'test_entity';
-    $entity = field_test_create_stub_entity(0, 0, $this->instance['bundle']);
-
-    // Populate some extra languages to check if _field_invoke() correctly uses
-    // the result of field_available_languages().
-    $values = array();
-    $extra_languages = mt_rand(1, 4);
-    $languages = $available_languages = field_available_languages($this->entity_type, $this->field);
-    for ($i = 0; $i < $extra_languages; ++$i) {
-      $languages[] = $this->randomName(2);
-    }
-
-    // For each given language provide some random values.
-    foreach ($languages as $langcode) {
-      for ($delta = 0; $delta < $this->field['cardinality']; $delta++) {
-        $values[$langcode][$delta]['value'] = mt_rand(1, 127);
-      }
-    }
-    $entity->{$this->field_name} = $values;
-
-    $results = _field_invoke('test_op', $entity_type, $entity);
-    foreach ($results as $langcode => $result) {
-      $hash = hash('sha256', serialize(array($entity_type, $entity, $this->field_name, $langcode, $values[$langcode])));
-      // Check whether the parameters passed to _field_invoke() were correctly
-      // forwarded to the callback function.
-      $this->assertEqual($hash, $result, format_string('The result for %language is correctly stored.', array('%language' => $langcode)));
-    }
-
-    $this->assertEqual(count($results), count($available_languages), 'No unavailable language has been processed.');
-  }
-
-  /**
-   * Test the multilanguage logic of _field_invoke_multiple().
-   */
-  function testFieldInvokeMultiple() {
-    // Enable field translations for the entity.
-    field_test_entity_info_translatable('test_entity', TRUE);
-
-    $values = array();
-    $options = array();
-    $entities = array();
-    $entity_type = 'test_entity';
-    $entity_count = 5;
-    $available_languages = field_available_languages($this->entity_type, $this->field);
-
-    for ($id = 1; $id <= $entity_count; ++$id) {
-      $entity = field_test_create_stub_entity($id, $id, $this->instance['bundle']);
-      $languages = $available_languages;
-
-      // Populate some extra languages to check whether _field_invoke()
-      // correctly uses the result of field_available_languages().
-      $extra_languages = mt_rand(1, 4);
-      for ($i = 0; $i < $extra_languages; ++$i) {
-        $languages[] = $this->randomName(2);
-      }
-
-      // For each given language provide some random values.
-      $language_count = count($languages);
-      for ($i = 0; $i < $language_count; ++$i) {
-        $langcode = $languages[$i];
-        // Avoid to populate at least one field translation to check that
-        // per-entity language suggestions work even when available field values
-        // are different for each language.
-        if ($i !== $id) {
-          for ($delta = 0; $delta < $this->field['cardinality']; $delta++) {
-            $values[$id][$langcode][$delta]['value'] = mt_rand(1, 127);
-          }
-        }
-        // Ensure that a language for which there is no field translation is
-        // used as display language to prepare per-entity language suggestions.
-        elseif (!isset($display_language)) {
-          $display_language = $langcode;
-        }
-      }
-
-      $entity->{$this->field_name} = $values[$id];
-      $entities[$id] = $entity;
-
-      // Store per-entity language suggestions.
-      $options['language'][$id] = field_language($entity_type, $entity, NULL, $display_language);
-    }
-
-    $grouped_results = _field_invoke_multiple('test_op_multiple', $entity_type, $entities);
-    foreach ($grouped_results as $id => $results) {
-      foreach ($results as $langcode => $result) {
-        if (isset($values[$id][$langcode])) {
-          $hash = hash('sha256', serialize(array($entity_type, $entities[$id], $this->field_name, $langcode, $values[$id][$langcode])));
-          // Check whether the parameters passed to _field_invoke_multiple()
-          // were correctly forwarded to the callback function.
-          $this->assertEqual($hash, $result, format_string('The result for entity %id/%language is correctly stored.', array('%id' => $id, '%language' => $langcode)));
-        }
-      }
-      $this->assertEqual(count($results), count($available_languages), format_string('No unavailable language has been processed for entity %id.', array('%id' => $id)));
-    }
-
-    $null = NULL;
-    $grouped_results = _field_invoke_multiple('test_op_multiple', $entity_type, $entities, $null, $null, $options);
-    foreach ($grouped_results as $id => $results) {
-      foreach ($results as $langcode => $result) {
-        $this->assertTrue(isset($options['language'][$id]), format_string('The result language %language for entity %id was correctly suggested (display language: %display_language).', array('%id' => $id, '%language' => $langcode, '%display_language' => $display_language)));
-      }
-    }
-  }
-
-  /**
-   * Test translatable fields storage/retrieval.
-   */
-  function testTranslatableFieldSaveLoad() {
-    // Enable field translations for nodes.
-    field_test_entity_info_translatable('node', TRUE);
-    $entity_info = entity_get_info('node');
-    $this->assertTrue(count($entity_info['translation']), 'Nodes are translatable.');
-
-    // Prepare the field translations.
-    field_test_entity_info_translatable('test_entity', TRUE);
-    $eid = $evid = 1;
-    $entity_type = 'test_entity';
-    $entity = field_test_create_stub_entity($eid, $evid, $this->instance['bundle']);
-    $field_translations = array();
-    $available_languages = field_available_languages($entity_type, $this->field);
-    $this->assertTrue(count($available_languages) > 1, 'Field is translatable.');
-    foreach ($available_languages as $langcode) {
-      $field_translations[$langcode] = $this->_generateTestFieldValues($this->field['cardinality']);
-    }
-
-    // Save and reload the field translations.
-    $entity->{$this->field_name} = $field_translations;
-    field_attach_insert($entity_type, $entity);
-    unset($entity->{$this->field_name});
-    field_attach_load($entity_type, array($eid => $entity));
-
-    // Check if the correct values were saved/loaded.
-    foreach ($field_translations as $langcode => $items) {
-      $result = TRUE;
-      foreach ($items as $delta => $item) {
-        $result = $result && $item['value'] == $entity->{$this->field_name}[$langcode][$delta]['value'];
-      }
-      $this->assertTrue($result, format_string('%language translation correctly handled.', array('%language' => $langcode)));
-    }
-  }
-
-  /**
-   * Tests display language logic for translatable fields.
-   */
-  function testFieldDisplayLanguage() {
-    $field_name = drupal_strtolower($this->randomName() . '_field_name');
-    $entity_type = 'test_entity';
-
-    // We need an additional field here to properly test display language
-    // suggestions.
-    $field = array(
-      'field_name' => $field_name,
-      'type' => 'test_field',
-      'cardinality' => 2,
-      'translatable' => TRUE,
-    );
-    field_create_field($field);
-
-    $instance = array(
-      'field_name' => $field['field_name'],
-      'entity_type' => $entity_type,
-      'bundle' => 'test_bundle',
-    );
-    field_create_instance($instance);
-
-    $entity = field_test_create_stub_entity(1, 1, $this->instance['bundle']);
-    $instances = field_info_instances($entity_type, $this->instance['bundle']);
-
-    $enabled_languages = field_content_languages();
-    $languages = array();
-
-    // Generate field translations for languages different from the first
-    // enabled.
-    foreach ($instances as $instance) {
-      $field_name = $instance['field_name'];
-      $field = field_info_field($field_name);
-      do {
-        // Index 0 is reserved for the requested language, this way we ensure
-        // that no field is actually populated with it.
-        $langcode = $enabled_languages[mt_rand(1, count($enabled_languages) - 1)];
-      }
-      while (isset($languages[$langcode]));
-      $languages[$langcode] = TRUE;
-      $entity->{$field_name}[$langcode] = $this->_generateTestFieldValues($field['cardinality']);
-    }
-
-    // Test multiple-fields display languages for untranslatable entities.
-    field_test_entity_info_translatable($entity_type, FALSE);
-    drupal_static_reset('field_language');
-    $requested_language = $enabled_languages[0];
-    $display_language = field_language($entity_type, $entity, NULL, $requested_language);
-    foreach ($instances as $instance) {
-      $field_name = $instance['field_name'];
-      $this->assertTrue($display_language[$field_name] == LANGUAGE_NONE, format_string('The display language for field %field_name is %language.', array('%field_name' => $field_name, '%language' => LANGUAGE_NONE)));
-    }
-
-    // Test multiple-fields display languages for translatable entities.
-    field_test_entity_info_translatable($entity_type, TRUE);
-    drupal_static_reset('field_language');
-    $display_language = field_language($entity_type, $entity, NULL, $requested_language);
-
-    foreach ($instances as $instance) {
-      $field_name = $instance['field_name'];
-      $langcode = $display_language[$field_name];
-      // As the requested language was not assinged to any field, if the
-      // returned language is defined for the current field, core fallback rules
-      // were successfully applied.
-      $this->assertTrue(isset($entity->{$field_name}[$langcode]) && $langcode != $requested_language, format_string('The display language for the field %field_name is %language.', array('%field_name' => $field_name, '%language' => $langcode)));
-    }
-
-    // Test single-field display language.
-    drupal_static_reset('field_language');
-    $langcode = field_language($entity_type, $entity, $this->field_name, $requested_language);
-    $this->assertTrue(isset($entity->{$this->field_name}[$langcode]) && $langcode != $requested_language, format_string('The display language for the (single) field %field_name is %language.', array('%field_name' => $field_name, '%language' => $langcode)));
-
-    // Test field_language() basic behavior without language fallback.
-    variable_set('field_test_language_fallback', FALSE);
-    $entity->{$this->field_name}[$requested_language] = mt_rand(1, 127);
-    drupal_static_reset('field_language');
-    $display_language = field_language($entity_type, $entity, $this->field_name, $requested_language);
-    $this->assertEqual($display_language, $requested_language, 'Display language behave correctly when language fallback is disabled');
-  }
-
-  /**
-   * Tests field translations when creating a new revision.
-   */
-  function testFieldFormTranslationRevisions() {
-    $web_user = $this->drupalCreateUser(array('access field_test content', 'administer field_test content'));
-    $this->drupalLogin($web_user);
-
-    // Prepare the field translations.
-    field_test_entity_info_translatable($this->entity_type, TRUE);
-    $eid = 1;
-    $entity = field_test_create_stub_entity($eid, $eid, $this->instance['bundle']);
-    $available_languages = array_flip(field_available_languages($this->entity_type, $this->field));
-    unset($available_languages[LANGUAGE_NONE]);
-    $field_name = $this->field['field_name'];
-
-    // Store the field translations.
-    $entity->is_new = TRUE;
-    foreach ($available_languages as $langcode => $value) {
-      $entity->{$field_name}[$langcode][0]['value'] = $value + 1;
-    }
-    field_test_entity_save($entity);
-
-    // Create a new revision.
-    $langcode = field_valid_language(NULL);
-    $edit = array("{$field_name}[$langcode][0][value]" => $entity->{$field_name}[$langcode][0]['value'], 'revision' => TRUE);
-    $this->drupalPost('test-entity/manage/' . $eid . '/edit', $edit, t('Save'));
-
-    // Check translation revisions.
-    $this->checkTranslationRevisions($eid, $eid, $available_languages);
-    $this->checkTranslationRevisions($eid, $eid + 1, $available_languages);
-  }
-
-  /**
-   * Check if the field translation attached to the entity revision identified
-   * by the passed arguments were correctly stored.
-   */
-  private function checkTranslationRevisions($eid, $evid, $available_languages) {
-    $field_name = $this->field['field_name'];
-    $entity = field_test_entity_test_load($eid, $evid);
-    foreach ($available_languages as $langcode => $value) {
-      $passed = isset($entity->{$field_name}[$langcode]) && $entity->{$field_name}[$langcode][0]['value'] == $value + 1;
-      $this->assertTrue($passed, format_string('The @language translation for revision @revision was correctly stored', array('@language' => $langcode, '@revision' => $entity->ftvid)));
-    }
-  }
-}
-
-/**
- * Unit test class for field bulk delete and batch purge functionality.
- */
-class FieldBulkDeleteTestCase extends FieldTestCase {
-  protected $field;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Field bulk delete tests',
-      'description' => 'Bulk delete fields and instances, and clean up afterwards.',
-      'group' => 'Field API',
-    );
-  }
-
-  /**
-   * Convenience function for Field API tests.
-   *
-   * Given an array of potentially fully-populated entities and an
-   * optional field name, generate an array of stub entities of the
-   * same fieldable type which contains the data for the field name
-   * (if given).
-   *
-   * @param $entity_type
-   *   The entity type of $entities.
-   * @param $entities
-   *   An array of entities of type $entity_type.
-   * @param $field_name
-   *   Optional; a field name whose data should be copied from
-   *   $entities into the returned stub entities.
-   * @return
-   *   An array of stub entities corresponding to $entities.
-   */
-  function _generateStubEntities($entity_type, $entities, $field_name = NULL) {
-    $stubs = array();
-    foreach ($entities as $id => $entity) {
-      $stub = entity_create_stub_entity($entity_type, entity_extract_ids($entity_type, $entity));
-      if (isset($field_name)) {
-        $stub->{$field_name} = $entity->{$field_name};
-      }
-      $stubs[$id] = $stub;
-    }
-    return $stubs;
-  }
-
-  /**
-   * Tests that the expected hooks have been invoked on the expected entities.
-   *
-   * @param $expected_hooks
-   *   An array keyed by hook name, with one entry per expected invocation.
-   *   Each entry is the value of the "$entity" parameter the hook is expected
-   *   to have been passed.
-   * @param $actual_hooks
-   *   The array of actual hook invocations recorded by field_test_memorize().
-   */
-  function checkHooksInvocations($expected_hooks, $actual_hooks) {
-    foreach ($expected_hooks as $hook => $invocations) {
-      $actual_invocations = $actual_hooks[$hook];
-
-      // Check that the number of invocations is correct.
-      $this->assertEqual(count($actual_invocations), count($invocations), "$hook() was called the expected number of times.");
-
-      // Check that the hook was called for each expected argument.
-      foreach ($invocations as $argument) {
-        $found = FALSE;
-        foreach ($actual_invocations as $actual_arguments) {
-          if ($actual_arguments[1] == $argument) {
-            $found = TRUE;
-            break;
-          }
-        }
-        $this->assertTrue($found, "$hook() was called on expected argument");
-      }
-    }
-  }
-
-  function setUp() {
-    parent::setUp('field_test');
-
-    $this->fields = array();
-    $this->instances = array();
-    $this->entities = array();
-    $this->entities_by_bundles = array();
-
-    // Create two bundles.
-    $this->bundles = array('bb_1' => 'bb_1', 'bb_2' => 'bb_2');
-    foreach ($this->bundles as $name => $desc) {
-      field_test_create_bundle($name, $desc);
-    }
-
-    // Create two fields.
-    $field = array('field_name' => 'bf_1', 'type' => 'test_field', 'cardinality' => 1);
-    $this->fields[] = field_create_field($field);
-    $field = array('field_name' => 'bf_2', 'type' => 'test_field', 'cardinality' => 4);
-    $this->fields[] = field_create_field($field);
-
-    // For each bundle, create an instance of each field, and 10
-    // entities with values for each field.
-    $id = 0;
-    $this->entity_type = 'test_entity';
-    foreach ($this->bundles as $bundle) {
-      foreach ($this->fields as $field) {
-        $instance = array(
-          'field_name' => $field['field_name'],
-          'entity_type' => $this->entity_type,
-          'bundle' => $bundle,
-          'widget' => array(
-            'type' => 'test_field_widget',
-          )
-        );
-        $this->instances[] = field_create_instance($instance);
-      }
-
-      for ($i = 0; $i < 10; $i++) {
-        $entity = field_test_create_stub_entity($id, $id, $bundle);
-        foreach ($this->fields as $field) {
-          $entity->{$field['field_name']}[LANGUAGE_NONE] = $this->_generateTestFieldValues($field['cardinality']);
-        }
-
-        $this->entities[$id] = $entity;
-        // Also keep track of the entities per bundle.
-        $this->entities_by_bundles[$bundle][$id] = $entity;
-        field_attach_insert($this->entity_type, $entity);
-        $id++;
-      }
-    }
-  }
-
-  /**
-   * Verify that deleting an instance leaves the field data items in
-   * the database and that the appropriate Field API functions can
-   * operate on the deleted data and instance.
-   *
-   * This tests how EntityFieldQuery interacts with
-   * field_delete_instance() and could be moved to FieldCrudTestCase,
-   * but depends on this class's setUp().
-   */
-  function testDeleteFieldInstance() {
-    $bundle = reset($this->bundles);
-    $field = reset($this->fields);
-
-    // There are 10 entities of this bundle.
-    $query = new EntityFieldQuery();
-    $found = $query
-      ->fieldCondition($field)
-      ->entityCondition('bundle', $bundle)
-      ->execute();
-    $this->assertEqual(count($found['test_entity']), 10, 'Correct number of entities found before deleting');
-
-    // Delete the instance.
-    $instance = field_info_instance($this->entity_type, $field['field_name'], $bundle);
-    field_delete_instance($instance);
-
-    // The instance still exists, deleted.
-    $instances = field_read_instances(array('field_id' => $field['id'], 'deleted' => 1), array('include_deleted' => 1, 'include_inactive' => 1));
-    $this->assertEqual(count($instances), 1, 'There is one deleted instance');
-    $this->assertEqual($instances[0]['bundle'], $bundle, 'The deleted instance is for the correct bundle');
-
-    // There are 0 entities of this bundle with non-deleted data.
-    $query = new EntityFieldQuery();
-    $found = $query
-      ->fieldCondition($field)
-      ->entityCondition('bundle', $bundle)
-      ->execute();
-    $this->assertTrue(!isset($found['test_entity']), 'No entities found after deleting');
-
-    // There are 10 entities of this bundle when deleted fields are allowed, and
-    // their values are correct.
-    $query = new EntityFieldQuery();
-    $found = $query
-      ->fieldCondition($field)
-      ->entityCondition('bundle', $bundle)
-      ->deleted(TRUE)
-      ->execute();
-    field_attach_load($this->entity_type, $found[$this->entity_type], FIELD_LOAD_CURRENT, array('field_id' => $field['id'], 'deleted' => 1));
-    $this->assertEqual(count($found['test_entity']), 10, 'Correct number of entities found after deleting');
-    foreach ($found['test_entity'] as $id => $entity) {
-      $this->assertEqual($this->entities[$id]->{$field['field_name']}, $entity->{$field['field_name']}, "Entity $id with deleted data loaded correctly");
-    }
-  }
-
-  /**
-   * Verify that field data items and instances are purged when an
-   * instance is deleted.
-   */
-  function testPurgeInstance() {
-    // Start recording hook invocations.
-    field_test_memorize();
-
-    $bundle = reset($this->bundles);
-    $field = reset($this->fields);
-
-    // Delete the instance.
-    $instance = field_info_instance($this->entity_type, $field['field_name'], $bundle);
-    field_delete_instance($instance);
-
-    // No field hooks were called.
-    $mem = field_test_memorize();
-    $this->assertEqual(count($mem), 0, 'No field hooks were called');
-
-    $batch_size = 2;
-    for ($count = 8; $count >= 0; $count -= $batch_size) {
-      // Purge two entities.
-      field_purge_batch($batch_size);
-
-      // There are $count deleted entities left.
-      $query = new EntityFieldQuery();
-      $found = $query
-        ->fieldCondition($field)
-        ->entityCondition('bundle', $bundle)
-        ->deleted(TRUE)
-        ->execute();
-      $this->assertEqual($count ? count($found['test_entity']) : count($found), $count, 'Correct number of entities found after purging 2');
-    }
-
-    // Check hooks invocations.
-    // - hook_field_load() (multiple hook) should have been called on all
-    // entities by pairs of two.
-    // - hook_field_delete() should have been called once for each entity in the
-    // bundle.
-    $actual_hooks = field_test_memorize();
-    $hooks = array();
-    $stubs = $this->_generateStubEntities($this->entity_type, $this->entities_by_bundles[$bundle], $field['field_name']);
-    foreach (array_chunk($stubs, $batch_size, TRUE) as $chunk) {
-      $hooks['field_test_field_load'][] = $chunk;
-    }
-    foreach ($stubs as $stub) {
-      $hooks['field_test_field_delete'][] = $stub;
-    }
-    $this->checkHooksInvocations($hooks, $actual_hooks);
-
-    // The instance still exists, deleted.
-    $instances = field_read_instances(array('field_id' => $field['id'], 'deleted' => 1), array('include_deleted' => 1, 'include_inactive' => 1));
-    $this->assertEqual(count($instances), 1, 'There is one deleted instance');
-
-    // Purge the instance.
-    field_purge_batch($batch_size);
-
-    // The instance is gone.
-    $instances = field_read_instances(array('field_id' => $field['id'], 'deleted' => 1), array('include_deleted' => 1, 'include_inactive' => 1));
-    $this->assertEqual(count($instances), 0, 'The instance is gone');
-
-    // The field still exists, not deleted, because it has a second instance.
-    $fields = field_read_fields(array('id' => $field['id']), array('include_deleted' => 1, 'include_inactive' => 1));
-    $this->assertTrue(isset($fields[$field['id']]), 'The field exists and is not deleted');
-  }
-
-  /**
-   * Verify that fields are preserved and purged correctly as multiple
-   * instances are deleted and purged.
-   */
-  function testPurgeField() {
-    // Start recording hook invocations.
-    field_test_memorize();
-
-    $field = reset($this->fields);
-
-    // Delete the first instance.
-    $bundle = reset($this->bundles);
-    $instance = field_info_instance($this->entity_type, $field['field_name'], $bundle);
-    field_delete_instance($instance);
-
-    // Assert that hook_field_delete() was not called yet.
-    $mem = field_test_memorize();
-    $this->assertEqual(count($mem), 0, 'No field hooks were called.');
-
-    // Purge the data.
-    field_purge_batch(10);
-
-    // Check hooks invocations.
-    // - hook_field_load() (multiple hook) should have been called once, for all
-    // entities in the bundle.
-    // - hook_field_delete() should have been called once for each entity in the
-    // bundle.
-    $actual_hooks = field_test_memorize();
-    $hooks = array();
-    $stubs = $this->_generateStubEntities($this->entity_type, $this->entities_by_bundles[$bundle], $field['field_name']);
-    $hooks['field_test_field_load'][] = $stubs;
-    foreach ($stubs as $stub) {
-      $hooks['field_test_field_delete'][] = $stub;
-    }
-    $this->checkHooksInvocations($hooks, $actual_hooks);
-
-    // Purge again to purge the instance.
-    field_purge_batch(0);
-
-    // The field still exists, not deleted.
-    $fields = field_read_fields(array('id' => $field['id']), array('include_deleted' => 1));
-    $this->assertTrue(isset($fields[$field['id']]) && !$fields[$field['id']]['deleted'], 'The field exists and is not deleted');
-
-    // Delete the second instance.
-    $bundle = next($this->bundles);
-    $instance = field_info_instance($this->entity_type, $field['field_name'], $bundle);
-    field_delete_instance($instance);
-
-    // Assert that hook_field_delete() was not called yet.
-    $mem = field_test_memorize();
-    $this->assertEqual(count($mem), 0, 'No field hooks were called.');
-
-    // Purge the data.
-    field_purge_batch(10);
-
-    // Check hooks invocations (same as above, for the 2nd bundle).
-    $actual_hooks = field_test_memorize();
-    $hooks = array();
-    $stubs = $this->_generateStubEntities($this->entity_type, $this->entities_by_bundles[$bundle], $field['field_name']);
-    $hooks['field_test_field_load'][] = $stubs;
-    foreach ($stubs as $stub) {
-      $hooks['field_test_field_delete'][] = $stub;
-    }
-    $this->checkHooksInvocations($hooks, $actual_hooks);
-
-    // The field still exists, deleted.
-    $fields = field_read_fields(array('id' => $field['id']), array('include_deleted' => 1));
-    $this->assertTrue(isset($fields[$field['id']]) && $fields[$field['id']]['deleted'], 'The field exists and is deleted');
-
-    // Purge again to purge the instance and the field.
-    field_purge_batch(0);
-
-    // The field is gone.
-    $fields = field_read_fields(array('id' => $field['id']), array('include_deleted' => 1, 'include_inactive' => 1));
-    $this->assertEqual(count($fields), 0, 'The field is purged.');
-  }
-}
-
-/**
- * Tests entity properties.
- */
-class EntityPropertiesTestCase extends FieldTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Entity properties',
-      'description' => 'Tests entity properties.',
-      'group' => 'Entity API',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('field_test');
-  }
-
-  /**
-   * Tests label key and label callback of an entity.
-   */
-  function testEntityLabel() {
-    $entity_types = array(
-      'test_entity_no_label',
-      'test_entity_label',
-      'test_entity_label_callback',
-    );
-
-    $entity = field_test_create_stub_entity();
-
-    foreach ($entity_types as $entity_type) {
-      $label = entity_label($entity_type, $entity);
-
-      switch ($entity_type) {
-        case 'test_entity_no_label':
-          $this->assertFalse($label, 'Entity with no label property or callback returned FALSE.');
-          break;
-
-        case 'test_entity_label':
-          $this->assertEqual($label, $entity->ftlabel, 'Entity with label key returned correct label.');
-          break;
-
-        case 'test_entity_label_callback':
-          $this->assertEqual($label, 'label callback ' . $entity->ftlabel, 'Entity with label callback returned correct label.');
-          break;
-      }
-    }
-  }
-}
diff --git a/modules/field/tests/field_test.entity.inc b/modules/field/tests/field_test.entity.inc
deleted file mode 100644
index c6686eb..0000000
--- a/modules/field/tests/field_test.entity.inc
+++ /dev/null
@@ -1,500 +0,0 @@
-<?php
-
-/**
- * @file
- * Defines an entity type.
- */
-
-/**
- * Implements hook_entity_info().
- */
-function field_test_entity_info() {
-  // If requested, clear the field cache while this hook is being called. See
-  // testFieldInfoCache().
-  if (variable_get('field_test_clear_info_cache_in_hook_entity_info', FALSE)) {
-    field_info_cache_clear();
-  }
-
-  $bundles = variable_get('field_test_bundles', array('test_bundle' => array('label' => 'Test Bundle')));
-  $test_entity_modes = array(
-    'full' => array(
-      'label' => t('Full object'),
-      'custom settings' => TRUE,
-    ),
-    'teaser' => array(
-      'label' => t('Teaser'),
-      'custom settings' => TRUE,
-    ),
-  );
-
-  return array(
-    'test_entity' => array(
-      'label' => t('Test Entity'),
-      'fieldable' => TRUE,
-      'field cache' => FALSE,
-      'base table' => 'test_entity',
-      'revision table' => 'test_entity_revision',
-      'entity keys' => array(
-        'id' => 'ftid',
-        'revision' => 'ftvid',
-        'bundle' => 'fttype',
-      ),
-      'bundles' => $bundles,
-      'view modes' => $test_entity_modes,
-    ),
-    // This entity type doesn't get form handling for now...
-    'test_cacheable_entity' => array(
-      'label' => t('Test Entity, cacheable'),
-      'fieldable' => TRUE,
-      'field cache' => TRUE,
-      'entity keys' => array(
-        'id' => 'ftid',
-        'revision' => 'ftvid',
-        'bundle' => 'fttype',
-      ),
-      'bundles' => $bundles,
-      'view modes' => $test_entity_modes,
-    ),
-    'test_entity_bundle_key' => array(
-      'label' => t('Test Entity with a bundle key.'),
-      'base table' => 'test_entity_bundle_key',
-      'fieldable' => TRUE,
-      'field cache' => FALSE,
-      'entity keys' => array(
-        'id' => 'ftid',
-        'bundle' => 'fttype',
-      ),
-      'bundles' => array('bundle1' => array('label' => 'Bundle1'), 'bundle2' => array('label' => 'Bundle2')) + $bundles,
-      'view modes' => $test_entity_modes,
-    ),
-    // In this case, the bundle key is not stored in the database.
-    'test_entity_bundle' => array(
-      'label' => t('Test Entity with a specified bundle.'),
-      'base table' => 'test_entity_bundle',
-      'fieldable' => TRUE,
-      'controller class' => 'TestEntityBundleController',
-      'field cache' => FALSE,
-      'entity keys' => array(
-        'id' => 'ftid',
-        'bundle' => 'fttype',
-      ),
-      'bundles' => array('test_entity_2' => array('label' => 'Test entity 2')) + $bundles,
-      'view modes' => $test_entity_modes,
-    ),
-    // @see EntityPropertiesTestCase::testEntityLabel()
-    'test_entity_no_label' => array(
-      'label' => t('Test entity without label'),
-      'fieldable' => TRUE,
-      'field cache' => FALSE,
-      'base table' => 'test_entity',
-      'entity keys' => array(
-        'id' => 'ftid',
-        'revision' => 'ftvid',
-        'bundle' => 'fttype',
-      ),
-      'bundles' => $bundles,
-      'view modes' => $test_entity_modes,
-    ),
-    'test_entity_label' => array(
-      'label' => t('Test entity label'),
-      'fieldable' => TRUE,
-      'field cache' => FALSE,
-      'base table' => 'test_entity',
-      'entity keys' => array(
-        'id' => 'ftid',
-        'revision' => 'ftvid',
-        'bundle' => 'fttype',
-        'label' => 'ftlabel',
-      ),
-      'bundles' => $bundles,
-      'view modes' => $test_entity_modes,
-    ),
-    'test_entity_label_callback' => array(
-      'label' => t('Test entity label callback'),
-      'fieldable' => TRUE,
-      'field cache' => FALSE,
-      'base table' => 'test_entity',
-      'label callback' => 'field_test_entity_label_callback',
-      'entity keys' => array(
-        'id' => 'ftid',
-        'revision' => 'ftvid',
-        'bundle' => 'fttype',
-      ),
-      'bundles' => $bundles,
-      'view modes' => $test_entity_modes,
-    ),
-  );
-}
-
-/**
- * Implements hook_entity_info_alter().
- */
-function field_test_entity_info_alter(&$entity_info) {
-  // Enable/disable field_test as a translation handler.
-  foreach (field_test_entity_info_translatable() as $entity_type => $translatable) {
-    $entity_info[$entity_type]['translation']['field_test'] = $translatable;
-  }
-  // Disable locale as a translation handler.
-  foreach ($entity_info as $entity_type => $info) {
-    $entity_info[$entity_type]['translation']['locale'] = FALSE;
-  }
-}
-
-/**
- * Helper function to enable entity translations.
- */
-function field_test_entity_info_translatable($entity_type = NULL, $translatable = NULL) {
-  drupal_static_reset('field_has_translation_handler');
-  $stored_value = &drupal_static(__FUNCTION__, array());
-  if (isset($entity_type)) {
-    $stored_value[$entity_type] = $translatable;
-    entity_info_cache_clear();
-  }
-  return $stored_value;
-}
-
-/**
- * Creates a new bundle for test_entity entities.
- *
- * @param $bundle
- *   The machine-readable name of the bundle.
- * @param $text
- *   The human-readable name of the bundle. If none is provided, the machine
- *   name will be used.
- */
-function field_test_create_bundle($bundle, $text = NULL) {
-  $bundles = variable_get('field_test_bundles', array('test_bundle' => array('label' => 'Test Bundle')));
-  $bundles += array($bundle => array('label' => $text ? $text : $bundle));
-  variable_set('field_test_bundles', $bundles);
-
-  $info = field_test_entity_info();
-  foreach ($info as $type => $type_info) {
-    field_attach_create_bundle($type, $bundle);
-  }
-}
-
-/**
- * Renames a bundle for test_entity entities.
- *
- * @param $bundle_old
- *   The machine-readable name of the bundle to rename.
- * @param $bundle_new
- *   The new machine-readable name of the bundle.
- */
-function field_test_rename_bundle($bundle_old, $bundle_new) {
-  $bundles = variable_get('field_test_bundles', array('test_bundle' => array('label' => 'Test Bundle')));
-  $bundles[$bundle_new] = $bundles[$bundle_old];
-  unset($bundles[$bundle_old]);
-  variable_set('field_test_bundles', $bundles);
-
-  $info = field_test_entity_info();
-  foreach ($info as $type => $type_info) {
-    field_attach_rename_bundle($type, $bundle_old, $bundle_new);
-  }
-}
-
-/**
- * Deletes a bundle for test_entity objects.
- *
- * @param $bundle
- *   The machine-readable name of the bundle to delete.
- */
-function field_test_delete_bundle($bundle) {
-  $bundles = variable_get('field_test_bundles', array('test_bundle' => array('label' => 'Test Bundle')));
-  unset($bundles[$bundle]);
-  variable_set('field_test_bundles', $bundles);
-
-  $info = field_test_entity_info();
-  foreach ($info as $type => $type_info) {
-    field_attach_delete_bundle($type, $bundle);
-  }
-}
-
-/**
- * Creates a basic test_entity entity.
- */
-function field_test_create_stub_entity($id = 1, $vid = 1, $bundle = 'test_bundle', $label = '') {
-  $entity = new stdClass();
-  // Only set id and vid properties if they don't come as NULL (creation form).
-  if (isset($id)) {
-    $entity->ftid = $id;
-  }
-  if (isset($vid)) {
-    $entity->ftvid = $vid;
-  }
-  $entity->fttype = $bundle;
-
-  $label = !empty($label) ? $label : $bundle . ' label';
-  $entity->ftlabel = $label;
-
-  return $entity;
-}
-
-/**
- * Loads a test_entity.
- *
- * @param $ftid
- *   The id of the entity to load.
- * @param $ftvid
- *   (Optional) The revision id of the entity to load. If not specified, the
- *   current revision will be used.
- * @return
- *   The loaded entity.
- */
-function field_test_entity_test_load($ftid, $ftvid = NULL) {
-  // Load basic strucure.
-  $query = db_select('test_entity', 'fte', array())
-    ->condition('fte.ftid', $ftid);
-
-  if ($ftvid) {
-    $query->join('test_entity_revision', 'fter', 'fte.ftid = fter.ftid');
-    $query->addField('fte', 'ftid');
-    $query->addField('fte', 'fttype');
-    $query->addField('fter', 'ftvid');
-    $query->condition('fter.ftvid', $ftvid);
-  }
-  else {
-    $query->fields('fte');
-  }
-
-  $entities = $query->execute()->fetchAllAssoc('ftid');
-
-  // Attach fields.
-  if ($ftvid) {
-    field_attach_load_revision('test_entity', $entities);
-  }
-  else {
-    field_attach_load('test_entity', $entities);
-  }
-
-  return $entities[$ftid];
-}
-
-/**
- * Saves a test_entity.
- *
- * A new entity is created if $entity->ftid and $entity->is_new are both empty.
- * A new revision is created if $entity->revision is not empty.
- *
- * @param $entity
- *   The entity to save.
- */
-function field_test_entity_save(&$entity) {
-  field_attach_presave('test_entity', $entity);
-
-  if (!isset($entity->is_new)) {
-    $entity->is_new = empty($entity->ftid);
-  }
-
-  if (!$entity->is_new && !empty($entity->revision)) {
-    $entity->old_ftvid = $entity->ftvid;
-    unset($entity->ftvid);
-  }
-
-  $update_entity = TRUE;
-  if ($entity->is_new) {
-    drupal_write_record('test_entity', $entity);
-    drupal_write_record('test_entity_revision', $entity);
-    $op = 'insert';
-  }
-  else {
-    drupal_write_record('test_entity', $entity, 'ftid');
-    if (!empty($entity->revision)) {
-      drupal_write_record('test_entity_revision', $entity);
-    }
-    else {
-      drupal_write_record('test_entity_revision', $entity, 'ftvid');
-      $update_entity = FALSE;
-    }
-    $op = 'update';
-  }
-  if ($update_entity) {
-    db_update('test_entity')
-      ->fields(array('ftvid' => $entity->ftvid))
-      ->condition('ftid', $entity->ftid)
-      ->execute();
-  }
-
-  // Save fields.
-  $function = "field_attach_$op";
-  $function('test_entity', $entity);
-}
-
-/**
- * Menu callback: displays the 'Add new test_entity' form.
- */
-function field_test_entity_add($fttype) {
-  $fttype = str_replace('-', '_', $fttype);
-  $entity = (object)array('fttype' => $fttype);
-  drupal_set_title(t('Create test_entity @bundle', array('@bundle' => $fttype)), PASS_THROUGH);
-  return drupal_get_form('field_test_entity_form', $entity, TRUE);
-}
-
-/**
- * Menu callback: displays the 'Edit exiisting test_entity' form.
- */
-function field_test_entity_edit($entity) {
-  drupal_set_title(t('test_entity @ftid revision @ftvid', array('@ftid' => $entity->ftid, '@ftvid' => $entity->ftvid)), PASS_THROUGH);
-  return drupal_get_form('field_test_entity_form', $entity);
-}
-
-/**
- * Test_entity form.
- */
-function field_test_entity_form($form, &$form_state, $entity, $add = FALSE) {
-  // During initial form build, add the entity to the form state for use during
-  // form building and processing. During a rebuild, use what is in the form
-  // state.
-  if (!isset($form_state['test_entity'])) {
-    $form_state['test_entity'] = $entity;
-  }
-  else {
-    $entity = $form_state['test_entity'];
-  }
-
-  foreach (array('ftid', 'ftvid', 'fttype') as $key) {
-    $form[$key] = array(
-      '#type' => 'value',
-      '#value' => isset($entity->$key) ? $entity->$key : NULL,
-    );
-  }
-
-  // Add field widgets.
-  field_attach_form('test_entity', $entity, $form, $form_state);
-
-  if (!$add) {
-    $form['revision'] = array(
-      '#access' => user_access('administer field_test content'),
-      '#type' => 'checkbox',
-      '#title' => t('Create new revision'),
-      '#default_value' => FALSE,
-      '#weight' => 100,
-    );
-  }
-  $form['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Save'),
-    '#weight' => 101,
-  );
-
-  return $form;
-}
-
-/**
- * Validate handler for field_test_entity_form().
- */
-function field_test_entity_form_validate($form, &$form_state) {
-  entity_form_field_validate('test_entity', $form, $form_state);
-}
-
-/**
- * Submit handler for field_test_entity_form().
- */
-function field_test_entity_form_submit($form, &$form_state) {
-  $entity = field_test_entity_form_submit_build_test_entity($form, $form_state);
-  $insert = empty($entity->ftid);
-  field_test_entity_save($entity);
-
-  $message = $insert ? t('test_entity @id has been created.', array('@id' => $entity->ftid)) : t('test_entity @id has been updated.', array('@id' => $entity->ftid));
-  drupal_set_message($message);
-
-  if ($entity->ftid) {
-    $form_state['redirect'] = 'test-entity/manage/' . $entity->ftid . '/edit';
-  }
-  else {
-    // Error on save.
-    drupal_set_message(t('The entity could not be saved.'), 'error');
-    $form_state['rebuild'] = TRUE;
-  }
-}
-
-/**
- * Updates the form state's entity by processing this submission's values.
- */
-function field_test_entity_form_submit_build_test_entity($form, &$form_state) {
-  $entity = $form_state['test_entity'];
-  entity_form_submit_build_entity('test_entity', $entity, $form, $form_state);
-  return $entity;
-}
-
-/**
- * Form combining two separate entities.
- */
-function field_test_entity_nested_form($form, &$form_state, $entity_1, $entity_2) {
-  // First entity.
-  foreach (array('ftid', 'ftvid', 'fttype') as $key) {
-    $form[$key] = array(
-      '#type' => 'value',
-      '#value' => $entity_1->$key,
-    );
-  }
-  field_attach_form('test_entity', $entity_1, $form, $form_state);
-
-  // Second entity.
-  $form['entity_2'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Second entity'),
-    '#tree' => TRUE,
-    '#parents' => array('entity_2'),
-    '#weight' => 50,
-  );
-  foreach (array('ftid', 'ftvid', 'fttype') as $key) {
-    $form['entity_2'][$key] = array(
-      '#type' => 'value',
-      '#value' => $entity_2->$key,
-    );
-  }
-  field_attach_form('test_entity', $entity_2, $form['entity_2'], $form_state);
-
-  $form['save'] = array(
-    '#type' => 'submit',
-    '#value' => t('Save'),
-    '#weight' => 100,
-  );
-
-  return $form;
-}
-
-/**
- * Validate handler for field_test_entity_nested_form().
- */
-function field_test_entity_nested_form_validate($form, &$form_state) {
-  $entity_1 = (object) $form_state['values'];
-  field_attach_form_validate('test_entity', $entity_1, $form, $form_state);
-
-  $entity_2 = (object) $form_state['values']['entity_2'];
-  field_attach_form_validate('test_entity', $entity_2, $form['entity_2'], $form_state);
-}
-
-/**
- * Submit handler for field_test_entity_nested_form().
- */
-function field_test_entity_nested_form_submit($form, &$form_state) {
-  $entity_1 = (object) $form_state['values'];
-  field_attach_submit('test_entity', $entity_1, $form, $form_state);
-  field_test_entity_save($entity_1);
-
-  $entity_2 = (object) $form_state['values']['entity_2'];
-  field_attach_submit('test_entity', $entity_2, $form['entity_2'], $form_state);
-  field_test_entity_save($entity_2);
-
-  drupal_set_message(t('test_entities @id_1 and @id_2 have been updated.', array('@id_1' => $entity_1->ftid, '@id_2' => $entity_2->ftid)));
-}
-
-/**
- * Controller class for the test_entity_bundle entity type.
- *
- * This extends the DrupalDefaultEntityController class, adding required
- * special handling for bundles (since they are not stored in the database).
- */
-class TestEntityBundleController extends DrupalDefaultEntityController {
-
-  protected function attachLoad(&$entities, $revision_id = FALSE) {
-    // Add bundle information.
-    foreach ($entities as $key => $entity) {
-      $entity->fttype = 'test_entity_bundle';
-      $entities[$key] = $entity;
-    }
-    parent::attachLoad($entities, $revision_id);
-  }
-}
diff --git a/modules/field/tests/field_test.field.inc b/modules/field/tests/field_test.field.inc
deleted file mode 100644
index 1cab773..0000000
--- a/modules/field/tests/field_test.field.inc
+++ /dev/null
@@ -1,413 +0,0 @@
-<?php
-
-/**
- * @file
- * Defines a field type and its formatters and widgets.
- */
-
-/**
- * Implements hook_field_info().
- */
-function field_test_field_info() {
-  return array(
-    'test_field' => array(
-      'label' => t('Test field'),
-      'description' => t('Dummy field type used for tests.'),
-      'settings' => array(
-        'test_field_setting' => 'dummy test string',
-        'changeable' => 'a changeable field setting',
-        'unchangeable' => 'an unchangeable field setting',
-      ),
-      'instance_settings' => array(
-        'test_instance_setting' => 'dummy test string',
-        'test_hook_field_load' => FALSE,
-      ),
-      'default_widget' => 'test_field_widget',
-      'default_formatter' => 'field_test_default',
-    ),
-    'shape' => array(
-      'label' => t('Shape'),
-      'description' => t('Another dummy field type.'),
-      'settings' => array(
-        'foreign_key_name' => 'shape',
-      ),
-      'instance_settings' => array(),
-      'default_widget' => 'test_field_widget',
-      'default_formatter' => 'field_test_default',
-    ),
-    'hidden_test_field' => array(
-      'no_ui' => TRUE,
-      'label' => t('Hidden from UI test field'),
-      'description' => t('Dummy hidden field type used for tests.'),
-      'settings' => array(),
-      'instance_settings' => array(),
-      'default_widget' => 'test_field_widget',
-      'default_formatter' => 'field_test_default',
-    ),
-  );
-}
-
-/**
- * Implements hook_field_update_forbid().
- */
-function field_test_field_update_forbid($field, $prior_field, $has_data) {
-  if ($field['type'] == 'test_field' && $field['settings']['unchangeable'] != $prior_field['settings']['unchangeable']) {
-    throw new FieldException("field_test 'unchangeable' setting cannot be changed'");
-  }
-}
-
-/**
- * Implements hook_field_load().
- */
-function field_test_field_load($entity_type, $entities, $field, $instances, $langcode, &$items, $age) {
-  $args = func_get_args();
-  field_test_memorize(__FUNCTION__, $args);
-
-  foreach ($items as $id => $item) {
-    // To keep the test non-intrusive, only act for instances with the
-    // test_hook_field_load setting explicitly set to TRUE.
-    if ($instances[$id]['settings']['test_hook_field_load']) {
-      foreach ($item as $delta => $value) {
-        // Don't add anything on empty values.
-        if ($value) {
-          $items[$id][$delta]['additional_key'] = 'additional_value';
-        }
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_field_insert().
- */
-function field_test_field_insert($entity_type, $entity, $field, $instance, $items) {
-  $args = func_get_args();
-  field_test_memorize(__FUNCTION__, $args);
-}
-
-/**
- * Implements hook_field_update().
- */
-function field_test_field_update($entity_type, $entity, $field, $instance, $items) {
-  $args = func_get_args();
-  field_test_memorize(__FUNCTION__, $args);
-}
-
-/**
- * Implements hook_field_delete().
- */
-function field_test_field_delete($entity_type, $entity, $field, $instance, $items) {
-  $args = func_get_args();
-  field_test_memorize(__FUNCTION__, $args);
-}
-
-/**
- * Implements hook_field_validate().
- *
- * Possible error codes:
- * - 'field_test_invalid': The value is invalid.
- */
-function field_test_field_validate($entity_type, $entity, $field, $instance, $langcode, $items, &$errors) {
-  $args = func_get_args();
-  field_test_memorize(__FUNCTION__, $args);
-
-  foreach ($items as $delta => $item) {
-    if ($item['value'] == -1) {
-      $errors[$field['field_name']][$langcode][$delta][] = array(
-        'error' => 'field_test_invalid',
-        'message' => t('%name does not accept the value -1.', array('%name' => $instance['label'])),
-      );
-    }
-  }
-}
-
-/**
- * Implements hook_field_is_empty().
- */
-function field_test_field_is_empty($item, $field) {
-  return empty($item['value']);
-}
-
-/**
- * Implements hook_field_settings_form().
- */
-function field_test_field_settings_form($field, $instance, $has_data) {
-  $settings = $field['settings'];
-
-  $form['test_field_setting'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Field test field setting'),
-    '#default_value' => $settings['test_field_setting'],
-    '#required' => FALSE,
-    '#description' => t('A dummy form element to simulate field setting.'),
-  );
-
-  return $form;
-}
-
-/**
- * Implements hook_field_instance_settings_form().
- */
-function field_test_field_instance_settings_form($field, $instance) {
-  $settings = $instance['settings'];
-
-  $form['test_instance_setting'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Field test field instance setting'),
-    '#default_value' => $settings['test_instance_setting'],
-    '#required' => FALSE,
-    '#description' => t('A dummy form element to simulate field instance setting.'),
-  );
-
-  return $form;
-}
-
-/**
- * Implements hook_field_widget_info().
- */
-function field_test_field_widget_info() {
-  return array(
-    'test_field_widget' => array(
-      'label' => t('Test field'),
-      'field types' => array('test_field', 'hidden_test_field'),
-      'settings' => array('test_widget_setting' => 'dummy test string'),
-    ),
-    'test_field_widget_multiple' => array(
-      'label' => t('Test field 1'),
-      'field types' => array('test_field'),
-      'settings' => array('test_widget_setting_multiple' => 'dummy test string'),
-      'behaviors' => array(
-        'multiple values' => FIELD_BEHAVIOR_CUSTOM,
-      ),
-    ),
-  );
-}
-
-/**
- * Implements hook_field_widget_form().
- */
-function field_test_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
-  switch ($instance['widget']['type']) {
-    case 'test_field_widget':
-      $element += array(
-        '#type' => 'textfield',
-        '#default_value' => isset($items[$delta]['value']) ? $items[$delta]['value'] : '',
-      );
-      return array('value' => $element);
-
-    case 'test_field_widget_multiple':
-      $values = array();
-      foreach ($items as $delta => $value) {
-        $values[] = $value['value'];
-      }
-      $element += array(
-        '#type' => 'textfield',
-        '#default_value' => implode(', ', $values),
-        '#element_validate' => array('field_test_widget_multiple_validate'),
-      );
-      return $element;
-  }
-}
-
-/**
- * Form element validation handler for 'test_field_widget_multiple' widget.
- */
-function field_test_widget_multiple_validate($element, &$form_state) {
-  $values = array_map('trim', explode(',', $element['#value']));
-  $items = array();
-  foreach ($values as $value) {
-    $items[] = array('value' => $value);
-  }
-  form_set_value($element, $items, $form_state);
-}
-
-/**
- * Implements hook_field_widget_error().
- */
-function field_test_field_widget_error($element, $error, $form, &$form_state) {
-  // @todo No easy way to differenciate widget types, we should receive it as a
-  // parameter.
-  if (isset($element['value'])) {
-    // Widget is test_field_widget.
-    $error_element = $element['value'];
-  }
-  else {
-    // Widget is test_field_widget_multiple.
-    $error_element = $element;
-  }
-
-  form_error($error_element, $error['message']);
-}
-
-/**
- * Implements hook_field_widget_settings_form().
- */
-function field_test_field_widget_settings_form($field, $instance) {
-  $widget = $instance['widget'];
-  $settings = $widget['settings'];
-
-  $form['test_widget_setting'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Field test field widget setting'),
-    '#default_value' => $settings['test_widget_setting'],
-    '#required' => FALSE,
-    '#description' => t('A dummy form element to simulate field widget setting.'),
-  );
-
-  return $form;
-}
-
-/**
- * Implements hook_field_formatter_info().
- */
-function field_test_field_formatter_info() {
-  return array(
-    'field_test_default' => array(
-      'label' => t('Default'),
-      'description' => t('Default formatter'),
-      'field types' => array('test_field'),
-      'settings' => array(
-        'test_formatter_setting' => 'dummy test string',
-      ),
-    ),
-    'field_test_multiple' => array(
-      'label' => t('Multiple'),
-      'description' => t('Multiple formatter'),
-      'field types' => array('test_field'),
-      'settings' => array(
-        'test_formatter_setting_multiple' => 'dummy test string',
-      ),
-    ),
-    'field_test_with_prepare_view' => array(
-      'label' => t('Tests hook_field_formatter_prepare_view()'),
-      'field types' => array('test_field'),
-      'settings' => array(
-        'test_formatter_setting_additional' => 'dummy test string',
-      ),
-    ),
-  );
-}
-
-/**
- * Implements hook_field_formatter_settings_form().
- */
-function field_test_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
-  $display = $instance['display'][$view_mode];
-  $settings = $display['settings'];
-
-  $element = array();
-
-  // The name of the setting depends on the formatter type.
-  $map = array(
-    'field_test_default' => 'test_formatter_setting',
-    'field_test_multiple' => 'test_formatter_setting_multiple',
-    'field_test_with_prepare_view' => 'test_formatter_setting_additional',
-  );
-
-  if (isset($map[$display['type']])) {
-    $name = $map[$display['type']];
-
-    $element[$name] = array(
-      '#title' => t('Setting'),
-      '#type' => 'textfield',
-      '#size' => 20,
-      '#default_value' => $settings[$name],
-      '#required' => TRUE,
-    );
-  }
-
-  return $element;
-}
-
-/**
- * Implements hook_field_formatter_settings_summary().
- */
-function field_test_field_formatter_settings_summary($field, $instance, $view_mode) {
-  $display = $instance['display'][$view_mode];
-  $settings = $display['settings'];
-
-  $summary = '';
-
-  // The name of the setting depends on the formatter type.
-  $map = array(
-    'field_test_default' => 'test_formatter_setting',
-    'field_test_multiple' => 'test_formatter_setting_multiple',
-    'field_test_with_prepare_view' => 'test_formatter_setting_additional',
-  );
-
-  if (isset($map[$display['type']])) {
-    $name = $map[$display['type']];
-    $summary = t('@setting: @value', array('@setting' => $name, '@value' => $settings[$name]));
-  }
-
-  return $summary;
-}
-
-/**
- * Implements hook_field_formatter_prepare_view().
- */
-function field_test_field_formatter_prepare_view($entity_type, $entities, $field, $instances, $langcode, &$items, $displays) {
-  foreach ($items as $id => $item) {
-    // To keep the test non-intrusive, only act on the
-    // 'field_test_with_prepare_view' formatter.
-    if ($displays[$id]['type'] == 'field_test_with_prepare_view') {
-      foreach ($item as $delta => $value) {
-        // Don't add anything on empty values.
-        if ($value) {
-          $items[$id][$delta]['additional_formatter_value'] = $value['value'] + 1;
-        }
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_field_formatter_view().
- */
-function field_test_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
-  $element = array();
-  $settings = $display['settings'];
-
-  switch ($display['type']) {
-    case 'field_test_default':
-      foreach ($items as $delta => $item) {
-        $element[$delta] = array('#markup' => $settings['test_formatter_setting'] . '|' . $item['value']);
-      }
-      break;
-
-    case 'field_test_with_prepare_view':
-      foreach ($items as $delta => $item) {
-        $element[$delta] = array('#markup' => $settings['test_formatter_setting_additional'] . '|' . $item['value'] . '|' . $item['additional_formatter_value']);
-      }
-      break;
-
-    case 'field_test_multiple':
-      if (!empty($items)) {
-        $array = array();
-        foreach ($items as $delta => $item) {
-          $array[] = $delta . ':' . $item['value'];
-        }
-        $element[0] = array('#markup' => $settings['test_formatter_setting_multiple'] . '|' . implode('|', $array));
-      }
-      break;
-  }
-
-  return $element;
-}
-
-/**
- * Sample 'default value' callback.
- */
-function field_test_default_value($entity_type, $entity, $field, $instance) {
-  return array(array('value' => 99));
-}
-
-/**
- * Implements hook_field_access().
- */
-function field_test_field_access($op, $field, $entity_type, $entity, $account) {
-  if ($field['field_name'] == "field_no_{$op}_access") {
-    return FALSE;
-  }
-  return TRUE;
-}
diff --git a/modules/field/tests/field_test.info b/modules/field/tests/field_test.info
deleted file mode 100644
index 6d11706..0000000
--- a/modules/field/tests/field_test.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = "Field API Test"
-description = "Support module for the Field API tests."
-core = 7.x
-package = Testing
-files[] = field_test.entity.inc
-version = VERSION
-hidden = TRUE
diff --git a/modules/field/tests/field_test.module b/modules/field/tests/field_test.module
deleted file mode 100644
index dc2023a..0000000
--- a/modules/field/tests/field_test.module
+++ /dev/null
@@ -1,269 +0,0 @@
-<?php
-
-/**
- * @file
- * Helper module for the Field API tests.
- *
- * The module defines
- * - an entity type (field_test.entity.inc)
- * - a field type and its formatters and widgets (field_test.field.inc)
- * - a field storage backend (field_test.storage.inc)
- *
- * The main field_test.module file implements generic hooks and provides some
- * test helper functions
- */
-
-require_once DRUPAL_ROOT . '/modules/field/tests/field_test.entity.inc';
-require_once DRUPAL_ROOT . '/modules/field/tests/field_test.field.inc';
-require_once DRUPAL_ROOT . '/modules/field/tests/field_test.storage.inc';
-
-/**
- * Implements hook_permission().
- */
-function field_test_permission() {
-  $perms = array(
-    'access field_test content' => array(
-      'title' => t('Access field_test content'),
-      'description' => t('View published field_test content.'),
-    ),
-    'administer field_test content' => array(
-      'title' => t('Administer field_test content'),
-      'description' => t('Manage field_test content'),
-    ),
-  );
-  return $perms;
-}
-
-/**
- * Implements hook_menu().
- */
-function field_test_menu() {
-  $items = array();
-  $bundles = field_info_bundles('test_entity');
-
-  foreach ($bundles as $bundle_name => $bundle_info) {
-    $bundle_url_str = str_replace('_', '-', $bundle_name);
-    $items['test-entity/add/' . $bundle_url_str] = array(
-      'title' => t('Add %bundle test_entity', array('%bundle' => $bundle_info['label'])),
-      'page callback' => 'field_test_entity_add',
-      'page arguments' => array(2),
-      'access arguments' => array('administer field_test content'),
-      'type' => MENU_NORMAL_ITEM,
-    );
-  }
-  $items['test-entity/manage/%field_test_entity_test/edit'] = array(
-    'title' => 'Edit test entity',
-    'page callback' => 'field_test_entity_edit',
-    'page arguments' => array(2),
-    'access arguments' => array('administer field_test content'),
-    'type' => MENU_NORMAL_ITEM,
-  );
-
-  $items['test-entity/nested/%field_test_entity_test/%field_test_entity_test'] = array(
-    'title' => 'Nested entity form',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('field_test_entity_nested_form', 2, 3),
-    'access arguments' => array('administer field_test content'),
-    'type' => MENU_NORMAL_ITEM,
-  );
-
-  return $items;
-}
-
-/**
- * Generic op to test _field_invoke behavior.
- *
- * This simulates a field operation callback to be invoked by _field_invoke().
- */
-function field_test_field_test_op($entity_type, $entity, $field, $instance, $langcode, &$items) {
-  return array($langcode => hash('sha256', serialize(array($entity_type, $entity, $field['field_name'], $langcode, $items))));
-}
-
-/**
- * Generic op to test _field_invoke_multiple behavior.
- *
- * This simulates a multiple field operation callback to be invoked by
- * _field_invoke_multiple().
- */
-function field_test_field_test_op_multiple($entity_type, $entities, $field, $instances, $langcode, &$items) {
-  $result = array();
-  foreach ($entities as $id => $entity) {
-    // Entities, instances and items are assumed to be consistently grouped by
-    // language. To verify this we try to access all the passed data structures
-    // by entity id. If they are grouped correctly, one entity, one instance and
-    // one array of items should be available for each entity id.
-    $field_name = $instances[$id]['field_name'];
-    $result[$id] = array($langcode => hash('sha256', serialize(array($entity_type, $entity, $field_name, $langcode, $items[$id]))));
-  }
-  return $result;
-}
-
-/**
- * Implements hook_field_available_languages_alter().
- */
-function field_test_field_available_languages_alter(&$languages, $context) {
-  if (variable_get('field_test_field_available_languages_alter', FALSE)) {
-    // Add an unavailable language.
-    $languages[] = 'xx';
-    // Remove an available language.
-    $index = array_search('en', $languages);
-    unset($languages[$index]);
-  }
-}
-
-/**
- * Implements hook_field_language_alter().
- */
-function field_test_field_language_alter(&$display_language, $context) {
-  if (variable_get('field_test_language_fallback', TRUE)) {
-    locale_field_language_fallback($display_language, $context['entity'], $context['language']);
-  }
-}
-
-/**
- * Store and retrieve keyed data for later verification by unit tests.
- *
- * This function is a simple in-memory key-value store with the
- * distinction that it stores all values for a given key instead of
- * just the most recently set value. field_test module hooks call
- * this function to record their arguments, keyed by hook name. The
- * unit tests later call this function to verify that the correct
- * hooks were called and were passed the correct arguments.
- *
- * This function ignores all calls until the first time it is called
- * with $key of NULL. Each time it is called with $key of NULL, it
- * erases all previously stored data from its internal cache, but also
- * returns the previously stored data to the caller. A typical usage
- * scenario is:
- *
- * @code
- *   // calls to field_test_memorize() here are ignored
- *
- *   // turn on memorization
- *   field_test_memorize();
- *
- *   // call some Field API functions that invoke field_test hooks
- *   $field = field_create_field(...);
- *
- *   // retrieve and reset the memorized hook call data
- *   $mem = field_test_memorize();
- *
- *   // make sure hook_field_create_field() is invoked correctly
- *   assertEqual(count($mem['field_test_field_create_field']), 1);
- *   assertEqual($mem['field_test_field_create_field'][0], array($field));
- * @endcode
- *
- * @param $key
- *   The key under which to store to $value, or NULL as described above.
- * @param $value
- *   A value to store for $key.
- * @return
- *   An array mapping each $key to an array of each $value passed in
- *   for that key.
- */
-function field_test_memorize($key = NULL, $value = NULL) {
-  $memorize = &drupal_static(__FUNCTION__, NULL);
-
-  if (!isset($key)) {
-    $return = $memorize;
-    $memorize = array();
-    return $return;
-  }
-  if (is_array($memorize)) {
-    $memorize[$key][] = $value;
-  }
-}
-
-/**
- * Memorize calls to hook_field_create_field().
- */
-function field_test_field_create_field($field) {
-  $args = func_get_args();
-  field_test_memorize(__FUNCTION__, $args);
-}
-
-/**
- * Implements hook_entity_query_alter().
- */
-function field_test_entity_query_alter(&$query) {
-  if (!empty($query->alterMyExecuteCallbackPlease)) {
-    $query->executeCallback = 'field_test_dummy_field_storage_query';
-  }
-}
-
-/**
- * Pseudo-implements hook_field_storage_query().
- */
-function field_test_dummy_field_storage_query(EntityFieldQuery $query) {
-  // Return dummy values that will be checked by the test.
-  return array(
-    'user' => array(
-      1 => entity_create_stub_entity('user', array(1, NULL, NULL)),
-    ),
-  );
-}
-
-/**
- * Implements callback_entity_info_label().
- *
- * @return
- *   The label of the entity prefixed with "label callback".
- */
-function field_test_entity_label_callback($entity) {
-  return 'label callback ' . $entity->ftlabel;
-}
-
-/**
- * Implements hook_field_attach_view_alter().
- */
-function field_test_field_attach_view_alter(&$output, $context) {
-  if (!empty($context['display']['settings']['alter'])) {
-    $output['test_field'][] = array('#markup' => 'field_test_field_attach_view_alter');
-  }
-}
-
-/**
- * Implements hook_field_widget_properties_alter().
- */
-function field_test_field_widget_properties_alter(&$widget, $context) {
-  // Make the alter_test_text field 42 characters for nodes and comments.
-  if (in_array($context['entity_type'], array('node', 'comment')) && ($context['field']['field_name'] == 'alter_test_text')) {
-    $widget['settings']['size'] = 42;
-  }
-}
-
-/**
- * Implements hook_field_widget_properties_ENTITY_TYPE_alter().
- */
-function field_test_field_widget_properties_user_alter(&$widget, $context) {
-  // Always use buttons for the alter_test_options field on user forms.
-  if ($context['field']['field_name'] == 'alter_test_options') {
-    $widget['type'] = 'options_buttons';
-  }
-}
-
-/**
- * Implements hook_field_widget_form_alter().
- */
-function field_test_field_widget_form_alter(&$element, &$form_state, $context) {
-  switch ($context['field']['field_name']) {
-    case 'alter_test_text':
-      drupal_set_message('Field size: ' . $context['instance']['widget']['settings']['size']);
-      break;
-
-    case 'alter_test_options':
-      drupal_set_message('Widget type: ' . $context['instance']['widget']['type']);
-      break;
-  }
-}
-
-/**
- * Implements hook_query_TAG_alter() for tag 'efq_table_prefixing_test'.
- *
- * @see EntityFieldQueryTestCase::testTablePrefixing()
- */
-function field_test_query_efq_table_prefixing_test_alter(&$query) {
-  // Add an additional join onto the entity base table. This will cause an
-  // exception if the EFQ does not properly prefix the base table.
-  $query->join('test_entity','te2','%alias.ftid = test_entity.ftid');
-}
diff --git a/modules/field/tests/field_test.storage.inc b/modules/field/tests/field_test.storage.inc
deleted file mode 100644
index a26af17..0000000
--- a/modules/field/tests/field_test.storage.inc
+++ /dev/null
@@ -1,473 +0,0 @@
-<?php
-
-/**
- * @file
- * Defines a field storage backend.
- */
-
-
-/**
- * Implements hook_field_storage_info().
- */
-function field_test_field_storage_info() {
-  return array(
-    'field_test_storage' => array(
-      'label' => t('Test storage'),
-      'description' => t('Dummy test storage backend. Stores field values in the variable table.'),
-    ),
-    'field_test_storage_failure' => array(
-      'label' => t('Test storage failure'),
-      'description' => t('Dummy test storage backend. Always fails to create fields.'),
-    ),
-  );
-}
-
-/**
- * Implements hook_field_storage_details().
- */
-function field_test_field_storage_details($field) {
-  $details = array();
-
-  // Add field columns.
-  $columns = array();
-  foreach ((array) $field['columns'] as $column_name => $attributes) {
-    $columns[$column_name] = $column_name;
-  }
-  return array(
-    'drupal_variables' => array(
-      'field_test_storage_data[FIELD_LOAD_CURRENT]' => $columns,
-      'field_test_storage_data[FIELD_LOAD_REVISION]' => $columns,
-    ),
-  );
-}
-
-/**
- * Implements hook_field_storage_details_alter().
- *
- * @see FieldAttachStorageTestCase::testFieldStorageDetailsAlter()
- */
-function field_test_field_storage_details_alter(&$details, $field) {
-
-  // For testing, storage details are changed only because of the field name.
-  if ($field['field_name'] == 'field_test_change_my_details') {
-    $columns = array();
-    foreach ((array) $field['columns'] as $column_name => $attributes) {
-      $columns[$column_name] = $column_name;
-    }
-    $details['drupal_variables'] = array(
-      FIELD_LOAD_CURRENT => array(
-        'moon' => $columns,
-      ),
-      FIELD_LOAD_REVISION => array(
-        'mars' => $columns,
-      ),
-    );
-  }
-}
-
-/**
- * Helper function: stores or retrieves data from the 'storage backend'.
- */
-function _field_test_storage_data($data = NULL) {
-  if (!isset($data)) {
-    return variable_get('field_test_storage_data', array());
-  }
-  else {
-    variable_set('field_test_storage_data', $data);
-  }
-}
-
-/**
- * Implements hook_field_storage_load().
- */
-function field_test_field_storage_load($entity_type, $entities, $age, $fields, $options) {
-  $data = _field_test_storage_data();
-
-  $load_current = $age == FIELD_LOAD_CURRENT;
-
-  foreach ($fields as $field_id => $ids) {
-    $field = field_info_field_by_id($field_id);
-    $field_name = $field['field_name'];
-    $field_data = $data[$field['id']];
-    $sub_table = $load_current ? 'current' : 'revisions';
-    $delta_count = array();
-    foreach ($field_data[$sub_table] as $row) {
-      if ($row->type == $entity_type && (!$row->deleted || $options['deleted'])) {
-        if (($load_current && in_array($row->entity_id, $ids)) || (!$load_current && in_array($row->revision_id, $ids))) {
-          if (in_array($row->language, field_available_languages($entity_type, $field))) {
-            if (!isset($delta_count[$row->entity_id][$row->language])) {
-              $delta_count[$row->entity_id][$row->language] = 0;
-            }
-            if ($field['cardinality'] == FIELD_CARDINALITY_UNLIMITED || $delta_count[$row->entity_id][$row->language] < $field['cardinality']) {
-              $item = array();
-              foreach ($field['columns'] as $column => $attributes) {
-                $item[$column] = $row->{$column};
-              }
-              $entities[$row->entity_id]->{$field_name}[$row->language][] = $item;
-              $delta_count[$row->entity_id][$row->language]++;
-            }
-          }
-        }
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_field_storage_write().
- */
-function field_test_field_storage_write($entity_type, $entity, $op, $fields) {
-  $data = _field_test_storage_data();
-
-  list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
-
-  foreach ($fields as $field_id) {
-    $field = field_info_field_by_id($field_id);
-    $field_name = $field['field_name'];
-    $field_data = &$data[$field_id];
-
-    $all_languages = field_available_languages($entity_type, $field);
-    $field_languages = array_intersect($all_languages, array_keys((array) $entity->$field_name));
-
-    // Delete and insert, rather than update, in case a value was added.
-    if ($op == FIELD_STORAGE_UPDATE) {
-      // Delete languages present in the incoming $entity->$field_name.
-      // Delete all languages if $entity->$field_name is empty.
-      $languages = !empty($entity->$field_name) ? $field_languages : $all_languages;
-      if ($languages) {
-        foreach ($field_data['current'] as $key => $row) {
-          if ($row->type == $entity_type && $row->entity_id == $id && in_array($row->language, $languages)) {
-            unset($field_data['current'][$key]);
-          }
-        }
-        if (isset($vid)) {
-          foreach ($field_data['revisions'] as $key => $row) {
-            if ($row->type == $entity_type && $row->revision_id == $vid) {
-              unset($field_data['revisions'][$key]);
-            }
-          }
-        }
-      }
-    }
-
-    foreach ($field_languages as $langcode) {
-      $items = (array) $entity->{$field_name}[$langcode];
-      $delta_count = 0;
-      foreach ($items as $delta => $item) {
-        $row = (object) array(
-          'field_id' => $field_id,
-          'type' => $entity_type,
-          'entity_id' => $id,
-          'revision_id' => $vid,
-          'bundle' => $bundle,
-          'delta' => $delta,
-          'deleted' => FALSE,
-          'language' => $langcode,
-        );
-        foreach ($field['columns'] as $column => $attributes) {
-          $row->{$column} = isset($item[$column]) ? $item[$column] : NULL;
-        }
-
-        $field_data['current'][] = $row;
-        if (isset($vid)) {
-          $field_data['revisions'][] = $row;
-        }
-
-        if ($field['cardinality'] != FIELD_CARDINALITY_UNLIMITED && ++$delta_count == $field['cardinality']) {
-          break;
-        }
-      }
-    }
-  }
-
-  _field_test_storage_data($data);
-}
-
-/**
- * Implements hook_field_storage_delete().
- */
-function field_test_field_storage_delete($entity_type, $entity, $fields) {
-  list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
-
-  // Note: reusing field_test_storage_purge(), like field_sql_storage.module
-  // does, is highly inefficient in our case...
-  foreach (field_info_instances($bundle) as $instance) {
-    if (isset($fields[$instance['field_id']])) {
-      $field = field_info_field_by_id($instance['field_id']);
-      field_test_field_storage_purge($entity_type, $entity, $field, $instance);
-    }
-  }
-}
-
-/**
- * Implements hook_field_storage_purge().
- */
-function field_test_field_storage_purge($entity_type, $entity, $field, $instance) {
-  $data = _field_test_storage_data();
-
-  list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
-
-  $field_data = &$data[$field['id']];
-  foreach (array('current', 'revisions') as $sub_table) {
-    foreach ($field_data[$sub_table] as $key => $row) {
-      if ($row->type == $entity_type && $row->entity_id == $id) {
-        unset($field_data[$sub_table][$key]);
-      }
-    }
-  }
-
-  _field_test_storage_data($data);
-}
-
-/**
- * Implements hook_field_storage_delete_revision().
- */
-function field_test_field_storage_delete_revision($entity_type, $entity, $fields) {
-  $data = _field_test_storage_data();
-
-  list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
-  foreach ($fields as $field_id) {
-    $field_data = &$data[$field_id];
-    foreach (array('current', 'revisions') as $sub_table) {
-      foreach ($field_data[$sub_table] as $key => $row) {
-        if ($row->type == $entity_type && $row->entity_id == $id && $row->revision_id == $vid) {
-          unset($field_data[$sub_table][$key]);
-        }
-      }
-    }
-  }
-
-  _field_test_storage_data($data);
-}
-
-/**
- * Implements hook_field_storage_query().
- */
-function field_test_field_storage_query($field_id, $conditions, $count, &$cursor = NULL, $age) {
-  $data = _field_test_storage_data();
-
-  $load_current = $age == FIELD_LOAD_CURRENT;
-
-  $field = field_info_field_by_id($field_id);
-  $field_columns = array_keys($field['columns']);
-
-  $field_data = $data[$field['id']];
-  $sub_table = $load_current ? 'current' : 'revisions';
-  // We need to sort records by entity type and entity id.
-  usort($field_data[$sub_table], '_field_test_field_storage_query_sort_helper');
-
-    // Initialize results array.
-  $return = array();
-  $entity_count = 0;
-  $rows_count = 0;
-  $rows_total = count($field_data[$sub_table]);
-  $skip = $cursor;
-  $skipped = 0;
-
-  foreach ($field_data[$sub_table] as $row) {
-    if ($count != FIELD_QUERY_NO_LIMIT && $entity_count >= $count) {
-      break;
-    }
-
-    if ($row->field_id == $field['id']) {
-      $match = TRUE;
-      $condition_deleted = FALSE;
-      // Add conditions.
-      foreach ($conditions as $condition) {
-        @list($column, $value, $operator) = $condition;
-        if (empty($operator)) {
-          $operator = is_array($value) ? 'IN' : '=';
-        }
-        switch ($operator) {
-          case '=':
-            $match = $match && $row->{$column} == $value;
-            break;
-          case '<>':
-          case '<':
-          case '<=':
-          case '>':
-          case '>=':
-            eval('$match = $match && ' . $row->{$column} . ' ' . $operator . ' '. $value);
-            break;
-          case 'IN':
-            $match = $match && in_array($row->{$column}, $value);
-            break;
-          case 'NOT IN':
-            $match = $match && !in_array($row->{$column}, $value);
-            break;
-          case 'BETWEEN':
-            $match = $match && $row->{$column} >= $value[0] && $row->{$column} <= $value[1];
-            break;
-          case 'STARTS_WITH':
-          case 'ENDS_WITH':
-          case 'CONTAINS':
-            // Not supported.
-            $match = FALSE;
-            break;
-        }
-        // Track condition on 'deleted'.
-        if ($column == 'deleted') {
-          $condition_deleted = TRUE;
-        }
-      }
-
-      // Exclude deleted data unless we have a condition on it.
-      if (!$condition_deleted && $row->deleted) {
-        $match = FALSE;
-      }
-
-      if ($match) {
-        if (!isset($skip) || $skipped >= $skip) {
-          $cursor++;
-          // If querying all revisions and the entity type has revisions, we need
-          // to key the results by revision_ids.
-          $entity_type = entity_get_info($row->type);
-          $id = ($load_current || empty($entity_type['entity keys']['revision'])) ? $row->entity_id : $row->revision_id;
-
-          if (!isset($return[$row->type][$id])) {
-            $return[$row->type][$id] = entity_create_stub_entity($row->type, array($row->entity_id, $row->revision_id, $row->bundle));
-            $entity_count++;
-          }
-        }
-        else {
-          $skipped++;
-        }
-      }
-    }
-    $rows_count++;
-
-    // The query is complete if we walked the whole array.
-    if ($count != FIELD_QUERY_NO_LIMIT && $rows_count >= $rows_total) {
-      $cursor = FIELD_QUERY_COMPLETE;
-    }
-  }
-
-  return $return;
-}
-
-/**
- * Sort helper for field_test_field_storage_query().
- *
- * Sorts by entity type and entity id.
- */
-function _field_test_field_storage_query_sort_helper($a, $b) {
-  if ($a->type == $b->type) {
-    if ($a->entity_id == $b->entity_id) {
-      return 0;
-    }
-    else {
-      return $a->entity_id < $b->entity_id ? -1 : 1;
-    }
-  }
-  else {
-    return $a->type < $b->type ? -1 : 1;
-  }
-}
-
-/**
- * Implements hook_field_storage_create_field().
- */
-function field_test_field_storage_create_field($field) {
-  if ($field['storage']['type'] == 'field_test_storage_failure') {
-    throw new Exception('field_test_storage_failure engine always fails to create fields');
-  }
-
-  $data = _field_test_storage_data();
-
-  $data[$field['id']] = array(
-    'current' => array(),
-    'revisions' => array(),
-  );
-
-  _field_test_storage_data($data);
-}
-
-/**
- * Implements hook_field_storage_delete_field().
- */
-function field_test_field_storage_delete_field($field) {
-  $data = _field_test_storage_data();
-
-  $field_data = &$data[$field['id']];
-  foreach (array('current', 'revisions') as $sub_table) {
-    foreach ($field_data[$sub_table] as &$row) {
-      $row->deleted = TRUE;
-    }
-  }
-
-  _field_test_storage_data($data);
-}
-
-/**
- * Implements hook_field_storage_delete_instance().
- */
-function field_test_field_storage_delete_instance($instance) {
-  $data = _field_test_storage_data();
-
-  $field = field_info_field($instance['field_name']);
-  $field_data = &$data[$field['id']];
-  foreach (array('current', 'revisions') as $sub_table) {
-    foreach ($field_data[$sub_table] as &$row) {
-      if ($row->bundle == $instance['bundle']) {
-        $row->deleted = TRUE;
-      }
-    }
-  }
-
-  _field_test_storage_data($data);
-}
-
-/**
- * Implements hook_field_attach_create_bundle().
- */
-function field_test_field_attach_create_bundle($bundle) {
-  // We don't need to do anything here.
-}
-
-/**
- * Implements hook_field_attach_rename_bundle().
- */
-function field_test_field_attach_rename_bundle($bundle_old, $bundle_new) {
-  $data = _field_test_storage_data();
-
-  // We need to account for deleted or inactive fields and instances.
-  $instances = field_read_instances(array('bundle' => $bundle_new), array('include_deleted' => TRUE, 'include_inactive' => TRUE));
-  foreach ($instances as $field_name => $instance) {
-    $field = field_info_field_by_id($instance['field_id']);
-    if ($field['storage']['type'] == 'field_test_storage') {
-      $field_data = &$data[$field['id']];
-      foreach (array('current', 'revisions') as $sub_table) {
-        foreach ($field_data[$sub_table] as &$row) {
-          if ($row->bundle == $bundle_old) {
-            $row->bundle = $bundle_new;
-          }
-        }
-      }
-    }
-  }
-
-  _field_test_storage_data($data);
-}
-
-/**
- * Implements hook_field_attach_delete_bundle().
- */
-function field_test_field_attach_delete_bundle($entity_type, $bundle, $instances) {
-  $data = _field_test_storage_data();
-
-  foreach ($instances as $field_name => $instance) {
-    $field = field_info_field($field_name);
-    if ($field['storage']['type'] == 'field_test_storage') {
-      $field_data = &$data[$field['id']];
-      foreach (array('current', 'revisions') as $sub_table) {
-        foreach ($field_data[$sub_table] as &$row) {
-          if ($row->bundle == $bundle_old) {
-            $row->deleted = TRUE;
-          }
-        }
-      }
-    }
-  }
-
-  _field_test_storage_data($data);
-}
diff --git a/modules/field/theme/field-rtl.css b/modules/field/theme/field-rtl.css
deleted file mode 100644
index 5d35a86..0000000
--- a/modules/field/theme/field-rtl.css
+++ /dev/null
@@ -1,14 +0,0 @@
-
-form .field-multiple-table th.field-label {
-  padding-right: 0;
-}
-form .field-multiple-table td.field-multiple-drag {
-  padding-left: 0;
-}
-form .field-multiple-table td.field-multiple-drag a.tabledrag-handle{
-  padding-left: .5em;
-}
-.field-label-inline .field-label,
-.field-label-inline .field-items {
-  float: right;
-}
diff --git a/modules/field/theme/field.css b/modules/field/theme/field.css
deleted file mode 100644
index 9eba32f..0000000
--- a/modules/field/theme/field.css
+++ /dev/null
@@ -1,28 +0,0 @@
-
-/* Field display */
-.field .field-label {
-  font-weight: bold;
-}
-.field-label-inline .field-label,
-.field-label-inline .field-items {
-  float:left; /*LTR*/
-}
-
-/* Form display */
-form .field-multiple-table {
-  margin: 0;
-}
-form .field-multiple-table th.field-label {
-  padding-left: 0; /*LTR*/
-}
-form .field-multiple-table td.field-multiple-drag {
-  width: 30px;
-  padding-right: 0; /*LTR*/
-}
-form .field-multiple-table td.field-multiple-drag a.tabledrag-handle {
-  padding-right: .5em; /*LTR*/
-}
-
-form .field-add-more-submit {
-  margin: .5em 0 0;
-}
diff --git a/modules/field/theme/field.tpl.php b/modules/field/theme/field.tpl.php
deleted file mode 100644
index f0f9d58..0000000
--- a/modules/field/theme/field.tpl.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-
-/**
- * @file field.tpl.php
- * Default template implementation to display the value of a field.
- *
- * This file is not used and is here as a starting point for customization only.
- * @see theme_field()
- *
- * Available variables:
- * - $items: An array of field values. Use render() to output them.
- * - $label: The item label.
- * - $label_hidden: Whether the label display is set to 'hidden'.
- * - $classes: String of classes that can be used to style contextually through
- *   CSS. It can be manipulated through the variable $classes_array from
- *   preprocess functions. The default values can be one or more of the
- *   following:
- *   - field: The current template type, i.e., "theming hook".
- *   - field-name-[field_name]: The current field name. For example, if the
- *     field name is "field_description" it would result in
- *     "field-name-field-description".
- *   - field-type-[field_type]: The current field type. For example, if the
- *     field type is "text" it would result in "field-type-text".
- *   - field-label-[label_display]: The current label position. For example, if
- *     the label position is "above" it would result in "field-label-above".
- *
- * Other variables:
- * - $element['#object']: The entity to which the field is attached.
- * - $element['#view_mode']: View mode, e.g. 'full', 'teaser'...
- * - $element['#field_name']: The field name.
- * - $element['#field_type']: The field type.
- * - $element['#field_language']: The field language.
- * - $element['#field_translatable']: Whether the field is translatable or not.
- * - $element['#label_display']: Position of label display, inline, above, or
- *   hidden.
- * - $field_name_css: The css-compatible field name.
- * - $field_type_css: The css-compatible field type.
- * - $classes_array: Array of html class attribute values. It is flattened
- *   into a string within the variable $classes.
- *
- * @see template_preprocess_field()
- * @see theme_field()
- *
- * @ingroup themeable
- */
-?>
-<!--
-THIS FILE IS NOT USED AND IS HERE AS A STARTING POINT FOR CUSTOMIZATION ONLY.
-See http://api.drupal.org/api/function/theme_field/7 for details.
-After copying this file to your theme's folder and customizing it, remove this
-HTML comment.
--->
-<div class="<?php print $classes; ?>"<?php print $attributes; ?>>
-  <?php if (!$label_hidden): ?>
-    <div class="field-label"<?php print $title_attributes; ?>><?php print $label ?>:&nbsp;</div>
-  <?php endif; ?>
-  <div class="field-items"<?php print $content_attributes; ?>>
-    <?php foreach ($items as $delta => $item): ?>
-      <div class="field-item <?php print $delta % 2 ? 'odd' : 'even'; ?>"<?php print $item_attributes[$delta]; ?>><?php print render($item); ?></div>
-    <?php endforeach; ?>
-  </div>
-</div>
diff --git a/modules/field_ui/field_ui-rtl.css b/modules/field_ui/field_ui-rtl.css
deleted file mode 100644
index 1066baa..0000000
--- a/modules/field_ui/field_ui-rtl.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * @file
- * Right-to-left specific stylesheet for the Field UI module.
- */
-
-/* 'Manage fields' overview */
-table.field-ui-overview tr.add-new .label-input {
-  float: right;
-}
diff --git a/modules/field_ui/field_ui.css b/modules/field_ui/field_ui.css
deleted file mode 100644
index 2184023..0000000
--- a/modules/field_ui/field_ui.css
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * @file
- * Stylesheet for the Field UI module.
- */
- 
-/* 'Manage fields' and 'Manage display' overviews */
-table.field-ui-overview tr.add-new .label-input {
-  float: left; /* LTR */
-}
-table.field-ui-overview tr.add-new .tabledrag-changed {
-  display: none;
-}
-table.field-ui-overview tr.add-new .description {
-  margin-bottom: 0;
-  max-width: 250px;
-}
-table.field-ui-overview tr.add-new .form-type-machine-name .description {
-  white-space: normal;
-}
-table.field-ui-overview tr.add-new .add-new-placeholder {
-  font-weight: bold;
-  padding-bottom: .5em;
-}
-table.field-ui-overview tr.region-title td {
-  font-weight: bold;
-}
-table.field-ui-overview tr.region-message td {
-  font-style: italic;
-}
-table.field-ui-overview tr.region-populated {
-  display: none;
-}
-table.field-ui-overview tr.region-add-new-title {
-  display: none;
-}
-table.field-ui-overview tr.add-new td {
-  vertical-align: top;
-  white-space: nowrap;
-}
-
-/* 'Manage display' overview */
-#field-display-overview .field-formatter-summary-cell {
-  line-height: 1em;
-}
-#field-display-overview .field-formatter-summary {
-  float: left;
-  font-size: 0.9em;
-}
-#field-display-overview td.field-formatter-summary-cell span.warning {
-  display: block;
-  float: left;
-  margin-right: .5em;
-}
-#field-display-overview .field-formatter-settings-edit-wrapper {
-  float: right;
-}
-#field-display-overview .field-formatter-settings-edit {
-  float: right;
-}
-#field-display-overview tr.field-formatter-settings-editing td {
-  vertical-align: top;
-}
-#field-display-overview tr.field-formatter-settings-editing .field-formatter-type {
-  display: none;
-}
-#field-display-overview .field-formatter-settings-edit-form .formatter-name{
-  font-weight: bold;
-}
-#field-ui-display-overview-form #edit-refresh {
-  display:none;
-}
diff --git a/modules/field_ui/field_ui.info b/modules/field_ui/field_ui.info
deleted file mode 100644
index 41d0999..0000000
--- a/modules/field_ui/field_ui.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Field UI
-description = User interface for the Field API.
-package = Core
-version = VERSION
-core = 7.x
-dependencies[] = field
-files[] = field_ui.test
diff --git a/modules/field_ui/field_ui.js b/modules/field_ui/field_ui.js
deleted file mode 100644
index 65b28d0..0000000
--- a/modules/field_ui/field_ui.js
+++ /dev/null
@@ -1,341 +0,0 @@
-/**
- * @file
- * Attaches the behaviors for the Field UI module.
- */
- 
-(function($) {
-
-Drupal.behaviors.fieldUIFieldOverview = {
-  attach: function (context, settings) {
-    $('table#field-overview', context).once('field-overview', function () {
-      Drupal.fieldUIFieldOverview.attachUpdateSelects(this, settings);
-    });
-  }
-};
-
-Drupal.fieldUIFieldOverview = {
-  /**
-   * Implements dependent select dropdowns on the 'Manage fields' screen.
-   */
-  attachUpdateSelects: function(table, settings) {
-    var widgetTypes = settings.fieldWidgetTypes;
-    var fields = settings.fields;
-
-    // Store the default text of widget selects.
-    $('.widget-type-select', table).each(function () {
-      this.initialValue = this.options[0].text;
-    });
-
-    // 'Field type' select updates its 'Widget' select.
-    $('.field-type-select', table).each(function () {
-      this.targetSelect = $('.widget-type-select', $(this).closest('tr'));
-
-      $(this).bind('change keyup', function () {
-        var selectedFieldType = this.options[this.selectedIndex].value;
-        var options = (selectedFieldType in widgetTypes ? widgetTypes[selectedFieldType] : []);
-        this.targetSelect.fieldUIPopulateOptions(options);
-      });
-
-      // Trigger change on initial pageload to get the right widget options
-      // when field type comes pre-selected (on failed validation).
-      $(this).trigger('change', false);
-    });
-
-    // 'Existing field' select updates its 'Widget' select and 'Label' textfield.
-    $('.field-select', table).each(function () {
-      this.targetSelect = $('.widget-type-select', $(this).closest('tr'));
-      this.targetTextfield = $('.label-textfield', $(this).closest('tr'));
-      this.targetTextfield
-        .data('field_ui_edited', false)
-        .bind('keyup', function (e) {
-          $(this).data('field_ui_edited', $(this).val() != '');
-        });
-
-      $(this).bind('change keyup', function (e, updateText) {
-        var updateText = (typeof updateText == 'undefined' ? true : updateText);
-        var selectedField = this.options[this.selectedIndex].value;
-        var selectedFieldType = (selectedField in fields ? fields[selectedField].type : null);
-        var selectedFieldWidget = (selectedField in fields ? fields[selectedField].widget : null);
-        var options = (selectedFieldType && (selectedFieldType in widgetTypes) ? widgetTypes[selectedFieldType] : []);
-        this.targetSelect.fieldUIPopulateOptions(options, selectedFieldWidget);
-
-        // Only overwrite the "Label" input if it has not been manually
-        // changed, or if it is empty.
-        if (updateText && !this.targetTextfield.data('field_ui_edited')) {
-          this.targetTextfield.val(selectedField in fields ? fields[selectedField].label : '');
-        }
-      });
-
-      // Trigger change on initial pageload to get the right widget options
-      // and label when field type comes pre-selected (on failed validation).
-      $(this).trigger('change', false);
-    });
-  }
-};
-
-/**
- * Populates options in a select input.
- */
-jQuery.fn.fieldUIPopulateOptions = function (options, selected) {
-  return this.each(function () {
-    var disabled = false;
-    if (options.length == 0) {
-      options = [this.initialValue];
-      disabled = true;
-    }
-
-    // If possible, keep the same widget selected when changing field type.
-    // This is based on textual value, since the internal value might be
-    // different (options_buttons vs. node_reference_buttons).
-    var previousSelectedText = this.options[this.selectedIndex].text;
-
-    var html = '';
-    jQuery.each(options, function (value, text) {
-      // Figure out which value should be selected. The 'selected' param
-      // takes precedence.
-      var is_selected = ((typeof selected != 'undefined' && value == selected) || (typeof selected == 'undefined' && text == previousSelectedText));
-      html += '<option value="' + value + '"' + (is_selected ? ' selected="selected"' : '') + '>' + text + '</option>';
-    });
-
-    $(this).html(html).attr('disabled', disabled ? 'disabled' : false);
-  });
-};
-
-Drupal.behaviors.fieldUIDisplayOverview = {
-  attach: function (context, settings) {
-    $('table#field-display-overview', context).once('field-display-overview', function() {
-      Drupal.fieldUIOverview.attach(this, settings.fieldUIRowsData, Drupal.fieldUIDisplayOverview);
-    });
-  }
-};
-
-Drupal.fieldUIOverview = {
-  /**
-   * Attaches the fieldUIOverview behavior.
-   */
-  attach: function (table, rowsData, rowHandlers) {
-    var tableDrag = Drupal.tableDrag[table.id];
-
-    // Add custom tabledrag callbacks.
-    tableDrag.onDrop = this.onDrop;
-    tableDrag.row.prototype.onSwap = this.onSwap;
-
-    // Create row handlers.
-    $('tr.draggable', table).each(function () {
-      // Extract server-side data for the row.
-      var row = this;
-      if (row.id in rowsData) {
-        var data = rowsData[row.id];
-        data.tableDrag = tableDrag;
-
-        // Create the row handler, make it accessible from the DOM row element.
-        var rowHandler = new rowHandlers[data.rowHandler](row, data);
-        $(row).data('fieldUIRowHandler', rowHandler);
-      }
-    });
-  },
-
-  /**
-   * Event handler to be attached to form inputs triggering a region change.
-   */
-  onChange: function () {
-    var $trigger = $(this);
-    var row = $trigger.closest('tr').get(0);
-    var rowHandler = $(row).data('fieldUIRowHandler');
-
-    var refreshRows = {};
-    refreshRows[rowHandler.name] = $trigger.get(0);
-
-    // Handle region change.
-    var region = rowHandler.getRegion();
-    if (region != rowHandler.region) {
-      // Remove parenting.
-      $('select.field-parent', row).val('');
-      // Let the row handler deal with the region change.
-      $.extend(refreshRows, rowHandler.regionChange(region));
-      // Update the row region.
-      rowHandler.region = region;
-    }
-
-    // Ajax-update the rows.
-    Drupal.fieldUIOverview.AJAXRefreshRows(refreshRows);
-  },
-
-  /**
-   * Lets row handlers react when a row is dropped into a new region.
-   */
-  onDrop: function () {
-    var dragObject = this;
-    var row = dragObject.rowObject.element;
-    var rowHandler = $(row).data('fieldUIRowHandler');
-    if (rowHandler !== undefined) {
-      var regionRow = $(row).prevAll('tr.region-message').get(0);
-      var region = regionRow.className.replace(/([^ ]+[ ]+)*region-([^ ]+)-message([ ]+[^ ]+)*/, '$2');
-
-      if (region != rowHandler.region) {
-        // Let the row handler deal with the region change.
-        refreshRows = rowHandler.regionChange(region);
-        // Update the row region.
-        rowHandler.region = region;
-        // Ajax-update the rows.
-        Drupal.fieldUIOverview.AJAXRefreshRows(refreshRows);
-      }
-    }
-  },
-
-  /**
-   * Refreshes placeholder rows in empty regions while a row is being dragged.
-   *
-   * Copied from block.js.
-   *
-   * @param table
-   *   The table DOM element.
-   * @param rowObject
-   *   The tableDrag rowObject for the row being dragged.
-   */
-  onSwap: function (draggedRow) {
-    var rowObject = this;
-    $('tr.region-message', rowObject.table).each(function () {
-      // If the dragged row is in this region, but above the message row, swap
-      // it down one space.
-      if ($(this).prev('tr').get(0) == rowObject.group[rowObject.group.length - 1]) {
-        // Prevent a recursion problem when using the keyboard to move rows up.
-        if ((rowObject.method != 'keyboard' || rowObject.direction == 'down')) {
-          rowObject.swap('after', this);
-        }
-      }
-      // This region has become empty.
-      if ($(this).next('tr').is(':not(.draggable)') || $(this).next('tr').length == 0) {
-        $(this).removeClass('region-populated').addClass('region-empty');
-      }
-      // This region has become populated.
-      else if ($(this).is('.region-empty')) {
-        $(this).removeClass('region-empty').addClass('region-populated');
-      }
-    });
-  },
-
-  /**
-   * Triggers Ajax refresh of selected rows.
-   *
-   * The 'format type' selects can trigger a series of changes in child rows.
-   * The #ajax behavior is therefore not attached directly to the selects, but
-   * triggered manually through a hidden #ajax 'Refresh' button.
-   *
-   * @param rows
-   *   A hash object, whose keys are the names of the rows to refresh (they
-   *   will receive the 'ajax-new-content' effect on the server side), and
-   *   whose values are the DOM element in the row that should get an Ajax
-   *   throbber.
-   */
-  AJAXRefreshRows: function (rows) {
-    // Separate keys and values.
-    var rowNames = [];
-    var ajaxElements = [];
-    $.each(rows, function (rowName, ajaxElement) {
-      rowNames.push(rowName);
-      ajaxElements.push(ajaxElement);
-    });
-
-    if (rowNames.length) {
-      // Add a throbber next each of the ajaxElements.
-      var $throbber = $('<div class="ajax-progress ajax-progress-throbber"><div class="throbber">&nbsp;</div></div>');
-      $(ajaxElements)
-        .addClass('progress-disabled')
-        .after($throbber);
-
-      // Fire the Ajax update.
-      $('input[name=refresh_rows]').val(rowNames.join(' '));
-      $('input#edit-refresh').mousedown();
-
-      // Disabled elements do not appear in POST ajax data, so we mark the
-      // elements disabled only after firing the request.
-      $(ajaxElements).attr('disabled', true);
-    }
-  }
-};
-
-
-/**
- * Row handlers for the 'Manage display' screen.
- */
-Drupal.fieldUIDisplayOverview = {};
-
-/**
- * Constructor for a 'field' row handler.
- *
- * This handler is used for both fields and 'extra fields' rows.
- *
- * @param row
- *   The row DOM element.
- * @param data
- *   Additional data to be populated in the constructed object.
- */
-Drupal.fieldUIDisplayOverview.field = function (row, data) {
-  this.row = row;
-  this.name = data.name;
-  this.region = data.region;
-  this.tableDrag = data.tableDrag;
-
-  // Attach change listener to the 'formatter type' select.
-  this.$formatSelect = $('select.field-formatter-type', row);
-  this.$formatSelect.change(Drupal.fieldUIOverview.onChange);
-
-  return this;
-};
-
-Drupal.fieldUIDisplayOverview.field.prototype = {
-  /**
-   * Returns the region corresponding to the current form values of the row.
-   */
-  getRegion: function () {
-    return (this.$formatSelect.val() == 'hidden') ? 'hidden' : 'visible';
-  },
-
-  /**
-   * Reacts to a row being changed regions.
-   *
-   * This function is called when the row is moved to a different region, as a
-   * result of either :
-   * - a drag-and-drop action (the row's form elements then probably need to be
-   *   updated accordingly)
-   * - user input in one of the form elements watched by the
-   *   Drupal.fieldUIOverview.onChange change listener.
-   *
-   * @param region
-   *   The name of the new region for the row.
-   * @return
-   *   A hash object indicating which rows should be Ajax-updated as a result
-   *   of the change, in the format expected by
-   *   Drupal.displayOverview.AJAXRefreshRows().
-   */
-  regionChange: function (region) {
-
-    // When triggered by a row drag, the 'format' select needs to be adjusted
-    // to the new region.
-    var currentValue = this.$formatSelect.val();
-    switch (region) {
-      case 'visible':
-        if (currentValue == 'hidden') {
-          // Restore the formatter back to the default formatter. Pseudo-fields do
-          // not have default formatters, we just return to 'visible' for those.
-          var value = (this.defaultFormatter != undefined) ? this.defaultFormatter : 'visible';
-        }
-        break;
-
-      default:
-        var value = 'hidden';
-        break;
-    }
-    if (value != undefined) {
-      this.$formatSelect.val(value);
-    }
-
-    var refreshRows = {};
-    refreshRows[this.name] = this.$formatSelect.get(0);
-
-    return refreshRows;
-  }
-};
-
-})(jQuery);
diff --git a/modules/field_ui/field_ui.test b/modules/field_ui/field_ui.test
deleted file mode 100644
index 21767d6..0000000
--- a/modules/field_ui/field_ui.test
+++ /dev/null
@@ -1,751 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for field_ui.module.
- */
-
-/**
- * Provides common functionality for the Field UI test classes.
- */
-class FieldUITestCase extends DrupalWebTestCase {
-
-  function setUp() {
-    // Since this is a base class for many test cases, support the same
-    // flexibility that DrupalWebTestCase::setUp() has for the modules to be
-    // passed in as either an array or a variable number of string arguments.
-    $modules = func_get_args();
-    if (isset($modules[0]) && is_array($modules[0])) {
-      $modules = $modules[0];
-    }
-    $modules[] = 'field_test';
-    parent::setUp($modules);
-
-    // Create test user.
-    $admin_user = $this->drupalCreateUser(array('access content', 'administer content types', 'administer taxonomy'));
-    $this->drupalLogin($admin_user);
-
-    // Create content type, with underscores.
-    $type_name = strtolower($this->randomName(8)) . '_test';
-    $type = $this->drupalCreateContentType(array('name' => $type_name, 'type' => $type_name));
-    $this->type = $type->type;
-    // Store a valid URL name, with hyphens instead of underscores.
-    $this->hyphen_type = str_replace('_', '-', $this->type);
-  }
-
-  /**
-   * Creates a new field through the Field UI.
-   *
-   * @param $bundle_path
-   *   Admin path of the bundle that the new field is to be attached to.
-   * @param $initial_edit
-   *   $edit parameter for drupalPost() on the first step ('Manage fields'
-   *   screen).
-   * @param $field_edit
-   *   $edit parameter for drupalPost() on the second step ('Field settings'
-   *   form).
-   * @param $instance_edit
-   *   $edit parameter for drupalPost() on the third step ('Instance settings'
-   *   form).
-   */
-  function fieldUIAddNewField($bundle_path, $initial_edit, $field_edit = array(), $instance_edit = array()) {
-    // Use 'test_field' field type by default.
-    $initial_edit += array(
-      'fields[_add_new_field][type]' => 'test_field',
-      'fields[_add_new_field][widget_type]' => 'test_field_widget',
-    );
-    $label = $initial_edit['fields[_add_new_field][label]'];
-    $field_name = $initial_edit['fields[_add_new_field][field_name]'];
-
-    // First step : 'Add new field' on the 'Manage fields' page.
-    $this->drupalPost("$bundle_path/fields",  $initial_edit, t('Save'));
-    $this->assertRaw(t('These settings apply to the %label field everywhere it is used.', array('%label' => $label)), 'Field settings page was displayed.');
-
-    // Second step : 'Field settings' form.
-    $this->drupalPost(NULL, $field_edit, t('Save field settings'));
-    $this->assertRaw(t('Updated field %label field settings.', array('%label' => $label)), 'Redirected to instance and widget settings page.');
-
-    // Third step : 'Instance settings' form.
-    $this->drupalPost(NULL, $instance_edit, t('Save settings'));
-    $this->assertRaw(t('Saved %label configuration.', array('%label' => $label)), 'Redirected to "Manage fields" page.');
-
-    // Check that the field appears in the overview form.
-    $this->assertFieldByXPath('//table[@id="field-overview"]//td[1]', $label, 'Field was created and appears in the overview page.');
-  }
-
-  /**
-   * Adds an existing field through the Field UI.
-   *
-   * @param $bundle_path
-   *   Admin path of the bundle that the field is to be attached to.
-   * @param $initial_edit
-   *   $edit parameter for drupalPost() on the first step ('Manage fields'
-   *   screen).
-   * @param $instance_edit
-   *   $edit parameter for drupalPost() on the second step ('Instance settings'
-   *   form).
-   */
-  function fieldUIAddExistingField($bundle_path, $initial_edit, $instance_edit = array()) {
-    // Use 'test_field_widget' by default.
-    $initial_edit += array(
-      'fields[_add_existing_field][widget_type]' => 'test_field_widget',
-    );
-    $label = $initial_edit['fields[_add_existing_field][label]'];
-    $field_name = $initial_edit['fields[_add_existing_field][field_name]'];
-
-    // First step : 'Add existing field' on the 'Manage fields' page.
-    $this->drupalPost("$bundle_path/fields", $initial_edit, t('Save'));
-
-    // Second step : 'Instance settings' form.
-    $this->drupalPost(NULL, $instance_edit, t('Save settings'));
-    $this->assertRaw(t('Saved %label configuration.', array('%label' => $label)), 'Redirected to "Manage fields" page.');
-
-    // Check that the field appears in the overview form.
-    $this->assertFieldByXPath('//table[@id="field-overview"]//td[1]', $label, 'Field was created and appears in the overview page.');
-  }
-
-  /**
-   * Deletes a field instance through the Field UI.
-   *
-   * @param $bundle_path
-   *   Admin path of the bundle that the field instance is to be deleted from.
-   * @param $field_name
-   *   The name of the field.
-   * @param $label
-   *   The label of the field.
-   * @param $bundle_label
-   *   The label of the bundle.
-   */
-  function fieldUIDeleteField($bundle_path, $field_name, $label, $bundle_label) {
-    // Display confirmation form.
-    $this->drupalGet("$bundle_path/fields/$field_name/delete");
-    $this->assertRaw(t('Are you sure you want to delete the field %label', array('%label' => $label)), 'Delete confirmation was found.');
-
-    // Submit confirmation form.
-    $this->drupalPost(NULL, array(), t('Delete'));
-    $this->assertRaw(t('The field %label has been deleted from the %type content type.', array('%label' => $label, '%type' => $bundle_label)), 'Delete message was found.');
-
-    // Check that the field does not appear in the overview form.
-    $this->assertNoFieldByXPath('//table[@id="field-overview"]//span[@class="label-field"]', $label, 'Field does not appear in the overview page.');
-  }
-}
-
-/**
- * Tests the functionality of the 'Manage fields' screen.
- */
-class FieldUIManageFieldsTestCase extends FieldUITestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Manage fields',
-      'description' => 'Test the Field UI "Manage fields" screen.',
-      'group' => 'Field UI',
-    );
-  }
-
-  function setUp() {
-    parent::setUp();
-
-    // Create random field name.
-    $this->field_label = $this->randomName(8);
-    $this->field_name_input =  strtolower($this->randomName(8));
-    $this->field_name = 'field_'. $this->field_name_input;
-  }
-
-  /**
-   * Runs the field CRUD tests.
-   *
-   * In order to act on the same fields, and not create the fields over and over
-   * again the following tests create, update and delete the same fields.
-   */
-  function testCRUDFields() {
-    $this->manageFieldsPage();
-    $this->createField();
-    $this->updateField();
-    $this->addExistingField();
-  }
-
-  /**
-   * Tests the manage fields page.
-   */
-  function manageFieldsPage() {
-    $this->drupalGet('admin/structure/types/manage/' . $this->hyphen_type . '/fields');
-    // Check all table columns.
-    $table_headers = array(
-      t('Label'),
-      t('Machine name'),
-      t('Field type'),
-      t('Widget'),
-      t('Operations'),
-    );
-    foreach ($table_headers as $table_header) {
-      // We check that the label appear in the table headings.
-      $this->assertRaw($table_header . '</th>', format_string('%table_header table header was found.', array('%table_header' => $table_header)));
-    }
-
-    // "Add new field" and "Add existing field" aren't a table heading so just
-    // test the text.
-    foreach (array('Add new field', 'Add existing field') as $element) {
-      $this->assertText($element, format_string('"@element" was found.', array('@element' => $element)));
-    }
-  }
-
-  /**
-   * Tests adding a new field.
-   *
-   * @todo Assert properties can bet set in the form and read back in $field and
-   * $instances.
-   */
-  function createField() {
-    // Create a test field.
-    $edit = array(
-      'fields[_add_new_field][label]' => $this->field_label,
-      'fields[_add_new_field][field_name]' => $this->field_name_input,
-    );
-    $this->fieldUIAddNewField('admin/structure/types/manage/' . $this->hyphen_type, $edit);
-
-    // Assert the field appears in the "add existing field" section for
-    // different entity types; e.g. if a field was added in a node entity, it
-    // should also appear in the 'taxonomy term' entity.
-    $vocabulary = taxonomy_vocabulary_load(1);
-    $this->drupalGet('admin/structure/taxonomy/' . $vocabulary->machine_name . '/fields');
-    $this->assertTrue($this->xpath('//select[@name="fields[_add_existing_field][field_name]"]//option[@value="' . $this->field_name . '"]'), 'Existing field was found in account settings.');
-  }
-
-  /**
-   * Tests editing an existing field.
-   */
-  function updateField() {
-    // Go to the field edit page.
-    $this->drupalGet('admin/structure/types/manage/' . $this->hyphen_type . '/fields/' . $this->field_name);
-
-    // Populate the field settings with new settings.
-    $string = 'updated dummy test string';
-    $edit = array(
-      'field[settings][test_field_setting]' => $string,
-      'instance[settings][test_instance_setting]' => $string,
-      'instance[widget][settings][test_widget_setting]' => $string,
-    );
-    $this->drupalPost(NULL, $edit, t('Save settings'));
-
-    // Assert the field settings are correct.
-    $this->assertFieldSettings($this->type, $this->field_name, $string);
-
-    // Assert redirection back to the "manage fields" page.
-    $this->assertText(t('Saved @label configuration.', array('@label' => $this->field_label)), 'Redirected to "Manage fields" page.');
-  }
-
-  /**
-   * Tests adding an existing field in another content type.
-   */
-  function addExistingField() {
-    // Check "Add existing field" appears.
-    $this->drupalGet('admin/structure/types/manage/page/fields');
-    $this->assertRaw(t('Add existing field'), '"Add existing field" was found.');
-
-    // Check that the list of options respects entity type restrictions on
-    // fields. The 'comment' field is restricted to the 'comment' entity type
-    // and should not appear in the list.
-    $this->assertFalse($this->xpath('//select[@id="edit-add-existing-field-field-name"]//option[@value="comment"]'), 'The list of options respects entity type restrictions.');
-
-    // Add a new field based on an existing field.
-    $edit = array(
-      'fields[_add_existing_field][label]' => $this->field_label . '_2',
-      'fields[_add_existing_field][field_name]' => $this->field_name,
-    );
-    $this->fieldUIAddExistingField("admin/structure/types/manage/page", $edit);
-  }
-
-  /**
-   * Asserts field settings are as expected.
-   *
-   * @param $bundle
-   *   The bundle name for the instance.
-   * @param $field_name
-   *   The field name for the instance.
-   * @param $string
-   *   The settings text.
-   * @param $entity_type
-   *   The entity type for the instance.
-   */
-  function assertFieldSettings($bundle, $field_name, $string = 'dummy test string', $entity_type = 'node') {
-    // Reset the fields info.
-    field_info_cache_clear();
-    // Assert field settings.
-    $field = field_info_field($field_name);
-    $this->assertTrue($field['settings']['test_field_setting'] == $string, 'Field settings were found.');
-
-    // Assert instance and widget settings.
-    $instance = field_info_instance($entity_type, $field_name, $bundle);
-    $this->assertTrue($instance['settings']['test_instance_setting'] == $string, 'Field instance settings were found.');
-    $this->assertTrue($instance['widget']['settings']['test_widget_setting'] == $string, 'Field widget settings were found.');
-  }
-
-  /**
-   * Tests that default value is correctly validated and saved.
-   */
-  function testDefaultValue() {
-    // Create a test field and instance.
-    $field_name = 'test';
-    $field = array(
-      'field_name' => $field_name,
-      'type' => 'test_field'
-    );
-    field_create_field($field);
-    $instance = array(
-      'field_name' => $field_name,
-      'entity_type' => 'node',
-      'bundle' => $this->type,
-    );
-    field_create_instance($instance);
-
-    $langcode = LANGUAGE_NONE;
-    $admin_path = 'admin/structure/types/manage/' . $this->hyphen_type . '/fields/' . $field_name;
-    $element_id = "edit-$field_name-$langcode-0-value";
-    $element_name = "{$field_name}[$langcode][0][value]";
-    $this->drupalGet($admin_path);
-    $this->assertFieldById($element_id, '', 'The default value widget was empty.');
-
-    // Check that invalid default values are rejected.
-    $edit = array($element_name => '-1');
-    $this->drupalPost($admin_path, $edit, t('Save settings'));
-    $this->assertText("$field_name does not accept the value -1", 'Form vaildation failed.');
-
-    // Check that the default value is saved.
-    $edit = array($element_name => '1');
-    $this->drupalPost($admin_path, $edit, t('Save settings'));
-    $this->assertText("Saved $field_name configuration", 'The form was successfully submitted.');
-    $instance = field_info_instance('node', $field_name, $this->type);
-    $this->assertEqual($instance['default_value'], array(array('value' => 1)), 'The default value was correctly saved.');
-
-    // Check that the default value shows up in the form
-    $this->drupalGet($admin_path);
-    $this->assertFieldById($element_id, '1', 'The default value widget was displayed with the correct value.');
-
-    // Check that the default value can be emptied.
-    $edit = array($element_name => '');
-    $this->drupalPost(NULL, $edit, t('Save settings'));
-    $this->assertText("Saved $field_name configuration", 'The form was successfully submitted.');
-    field_info_cache_clear();
-    $instance = field_info_instance('node', $field_name, $this->type);
-    $this->assertEqual($instance['default_value'], NULL, 'The default value was correctly saved.');
-  }
-
-  /**
-   * Tests that deletion removes fields and instances as expected.
-   */
-  function testDeleteField() {
-    // Create a new field.
-    $bundle_path1 = 'admin/structure/types/manage/' . $this->hyphen_type;
-    $edit1 = array(
-      'fields[_add_new_field][label]' => $this->field_label,
-      'fields[_add_new_field][field_name]' => $this->field_name_input,
-    );
-    $this->fieldUIAddNewField($bundle_path1, $edit1);
-
-    // Create an additional node type.
-    $type_name2 = strtolower($this->randomName(8)) . '_test';
-    $type2 = $this->drupalCreateContentType(array('name' => $type_name2, 'type' => $type_name2));
-    $type_name2 = $type2->type;
-    $hyphen_type2 = str_replace('_', '-', $type_name2);
-
-    // Add an instance to the second node type.
-    $bundle_path2 = 'admin/structure/types/manage/' . $hyphen_type2;
-    $edit2 = array(
-      'fields[_add_existing_field][label]' => $this->field_label,
-      'fields[_add_existing_field][field_name]' => $this->field_name,
-    );
-    $this->fieldUIAddExistingField($bundle_path2, $edit2);
-
-    // Delete the first instance.
-    $this->fieldUIDeleteField($bundle_path1, $this->field_name, $this->field_label, $this->type);
-
-    // Reset the fields info.
-    field_info_cache_clear();
-    // Check that the field instance was deleted.
-    $this->assertNull(field_info_instance('node', $this->field_name, $this->type), 'Field instance was deleted.');
-    // Check that the field was not deleted
-    $this->assertNotNull(field_info_field($this->field_name), 'Field was not deleted.');
-
-    // Delete the second instance.
-    $this->fieldUIDeleteField($bundle_path2, $this->field_name, $this->field_label, $type_name2);
-
-    // Reset the fields info.
-    field_info_cache_clear();
-    // Check that the field instance was deleted.
-    $this->assertNull(field_info_instance('node', $this->field_name, $type_name2), 'Field instance was deleted.');
-    // Check that the field was deleted too.
-    $this->assertNull(field_info_field($this->field_name), 'Field was deleted.');
-  }
-
-  /**
-   * Tests that Field UI respects the 'no_ui' option in hook_field_info().
-   */
-  function testHiddenFields() {
-    $bundle_path = 'admin/structure/types/manage/' . $this->hyphen_type . '/fields/';
-
-    // Check that the field type is not available in the 'add new field' row.
-    $this->drupalGet($bundle_path);
-    $this->assertFalse($this->xpath('//select[@id="edit-add-new-field-type"]//option[@value="hidden_test_field"]'), "The 'add new field' select respects field types 'no_ui' property.");
-
-    // Create a field and an instance programmatically.
-    $field_name = 'hidden_test_field';
-    field_create_field(array('field_name' => $field_name, 'type' => $field_name));
-    $instance = array(
-      'field_name' => $field_name,
-      'bundle' => $this->type,
-      'entity_type' => 'node',
-      'label' => t('Hidden field'),
-      'widget' => array('type' => 'test_field_widget'),
-    );
-    field_create_instance($instance);
-    $this->assertTrue(field_read_instance('node', $field_name, $this->type), format_string('An instance of the field %field was created programmatically.', array('%field' => $field_name)));
-
-    // Check that the newly added instance appears on the 'Manage Fields'
-    // screen.
-    $this->drupalGet($bundle_path);
-    $this->assertFieldByXPath('//table[@id="field-overview"]//td[1]', $instance['label'], 'Field was created and appears in the overview page.');
-
-    // Check that the instance does not appear in the 'add existing field' row
-    // on other bundles.
-    $bundle_path = 'admin/structure/types/manage/article/fields/';
-    $this->drupalGet($bundle_path);
-    $this->assertFalse($this->xpath('//select[@id="edit-add-existing-field-field-name"]//option[@value=:field_name]', array(':field_name' => $field_name)), "The 'add existing field' select respects field types 'no_ui' property.");
-  }
-
-  /**
-   * Tests renaming a bundle.
-   */
-  function testRenameBundle() {
-    $type2 = strtolower($this->randomName(8)) . '_' .'test';
-    $hyphen_type2 = str_replace('_', '-', $type2);
-
-    $options = array(
-      'type' => $type2,
-    );
-    $this->drupalPost('admin/structure/types/manage/' . $this->hyphen_type, $options, t('Save content type'));
-
-    $this->drupalGet('admin/structure/types/manage/' . $hyphen_type2 . '/fields');
-  }
-
-  /**
-   * Tests that a duplicate field name is caught by validation.
-   */
-  function testDuplicateFieldName() {
-    // field_tags already exists, so we're expecting an error when trying to
-    // create a new field with the same name.
-    $edit = array(
-      'fields[_add_new_field][field_name]' => 'tags',
-      'fields[_add_new_field][label]' => $this->randomName(),
-      'fields[_add_new_field][type]' => 'taxonomy_term_reference',
-      'fields[_add_new_field][widget_type]' => 'options_select',
-    );
-    $url = 'admin/structure/types/manage/' . $this->hyphen_type . '/fields';
-    $this->drupalPost($url, $edit, t('Save'));
-
-    $this->assertText(t('The machine-readable name is already in use. It must be unique.'));
-    $this->assertUrl($url, array(), 'Stayed on the same page.');
-  }
-}
-
-/**
- * Tests the functionality of the 'Manage display' screens.
- */
-class FieldUIManageDisplayTestCase extends FieldUITestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Manage display',
-      'description' => 'Test the Field UI "Manage display" screens.',
-      'group' => 'Field UI',
-    );
-  }
-
-  function setUp() {
-    parent::setUp(array('search'));
-  }
-
-  /**
-   * Tests formatter settings.
-   */
-  function testFormatterUI() {
-    $manage_fields = 'admin/structure/types/manage/' . $this->hyphen_type;
-    $manage_display = $manage_fields . '/display';
-
-    // Create a field, and a node with some data for the field.
-    $edit = array(
-      'fields[_add_new_field][label]' => 'Test field',
-      'fields[_add_new_field][field_name]' => 'test',
-    );
-    $this->fieldUIAddNewField($manage_fields, $edit);
-
-    // Clear the test-side cache and get the saved field instance.
-    field_info_cache_clear();
-    $instance = field_info_instance('node', 'field_test', $this->type);
-    $format = $instance['display']['default']['type'];
-    $default_settings = field_info_formatter_settings($format);
-    $setting_name = key($default_settings);
-    $setting_value = $instance['display']['default']['settings'][$setting_name];
-
-    // Display the "Manage display" screen and check that the expected formatter is
-    // selected.
-    $this->drupalGet($manage_display);
-    $this->assertFieldByName('fields[field_test][type]', $format, 'The expected formatter is selected.');
-    $this->assertText("$setting_name: $setting_value", 'The expected summary is displayed.');
-
-    // Change the formatter and check that the summary is updated.
-    $edit = array('fields[field_test][type]' => 'field_test_multiple', 'refresh_rows' => 'field_test');
-    $this->drupalPostAJAX(NULL, $edit, array('op' => t('Refresh')));
-    $format = 'field_test_multiple';
-    $default_settings = field_info_formatter_settings($format);
-    $setting_name = key($default_settings);
-    $setting_value = $default_settings[$setting_name];
-    $this->assertFieldByName('fields[field_test][type]', $format, 'The expected formatter is selected.');
-    $this->assertText("$setting_name: $setting_value", 'The expected summary is displayed.');
-
-    // Submit the form and check that the instance is updated.
-    $this->drupalPost(NULL, array(), t('Save'));
-    field_info_cache_clear();
-    $instance = field_info_instance('node', 'field_test', $this->type);
-    $current_format = $instance['display']['default']['type'];
-    $current_setting_value = $instance['display']['default']['settings'][$setting_name];
-    $this->assertEqual($current_format, $format, 'The formatter was updated.');
-    $this->assertEqual($current_setting_value, $setting_value, 'The setting was updated.');
-  }
-
-  /**
-   * Tests switching view modes to use custom or 'default' settings'.
-   */
-  function testViewModeCustom() {
-    // Create a field, and a node with some data for the field.
-    $edit = array(
-      'fields[_add_new_field][label]' => 'Test field',
-      'fields[_add_new_field][field_name]' => 'test',
-    );
-    $this->fieldUIAddNewField('admin/structure/types/manage/' . $this->hyphen_type, $edit);
-    // For this test, use a formatter setting value that is an integer unlikely
-    // to appear in a rendered node other than as part of the field being tested
-    // (for example, unlikely to be part of the "Submitted by ... on ..." line).
-    $value = 12345;
-    $settings = array(
-      'type' => $this->type,
-      'field_test' => array(LANGUAGE_NONE => array(array('value' => $value))),
-    );
-    $node = $this->drupalCreateNode($settings);
-
-    // Gather expected output values with the various formatters.
-    $formatters = field_info_formatter_types();
-    $output = array(
-      'field_test_default' => $formatters['field_test_default']['settings']['test_formatter_setting'] . '|' . $value,
-      'field_test_with_prepare_view' => $formatters['field_test_with_prepare_view']['settings']['test_formatter_setting_additional'] . '|' . $value. '|' . ($value + 1),
-    );
-
-    // Check that the field is displayed with the default formatter in 'rss'
-    // mode (uses 'default'), and hidden in 'teaser' mode (uses custom settings).
-    $this->assertNodeViewText($node, 'rss', $output['field_test_default'], "The field is displayed as expected in view modes that use 'default' settings.");
-    $this->assertNodeViewNoText($node, 'teaser', $value, "The field is hidden in view modes that use custom settings.");
-
-    // Change fomatter for 'default' mode, check that the field is displayed
-    // accordingly in 'rss' mode.
-    $edit = array(
-      'fields[field_test][type]' => 'field_test_with_prepare_view',
-    );
-    $this->drupalPost('admin/structure/types/manage/' . $this->hyphen_type . '/display', $edit, t('Save'));
-    $this->assertNodeViewText($node, 'rss', $output['field_test_with_prepare_view'], "The field is displayed as expected in view modes that use 'default' settings.");
-
-    // Specialize the 'rss' mode, check that the field is displayed the same.
-    $edit = array(
-      "view_modes_custom[rss]" => TRUE,
-    );
-    $this->drupalPost('admin/structure/types/manage/' . $this->hyphen_type . '/display', $edit, t('Save'));
-    $this->assertNodeViewText($node, 'rss', $output['field_test_with_prepare_view'], "The field is displayed as expected in newly specialized 'rss' mode.");
-
-    // Set the field to 'hidden' in the view mode, check that the field is
-    // hidden.
-    $edit = array(
-      'fields[field_test][type]' => 'hidden',
-    );
-    $this->drupalPost('admin/structure/types/manage/' . $this->hyphen_type . '/display/rss', $edit, t('Save'));
-    $this->assertNodeViewNoText($node, 'rss', $value, "The field is hidden in 'rss' mode.");
-
-    // Set the view mode back to 'default', check that the field is displayed
-    // accordingly.
-    $edit = array(
-      "view_modes_custom[rss]" => FALSE,
-    );
-    $this->drupalPost('admin/structure/types/manage/' . $this->hyphen_type . '/display', $edit, t('Save'));
-    $this->assertNodeViewText($node, 'rss', $output['field_test_with_prepare_view'], "The field is displayed as expected when 'rss' mode is set back to 'default' settings.");
-
-    // Specialize the view mode again.
-    $edit = array(
-      "view_modes_custom[rss]" => TRUE,
-    );
-    $this->drupalPost('admin/structure/types/manage/' . $this->hyphen_type . '/display', $edit, t('Save'));
-    // Check that the previous settings for the view mode have been kept.
-    $this->assertNodeViewNoText($node, 'rss', $value, "The previous settings are kept when 'rss' mode is specialized again.");
-  }
-
-  /**
-   * Asserts that a string is found in the rendered node in a view mode.
-   *
-   * @param $node
-   *   The node.
-   * @param $view_mode
-   *   The view mode in which the node should be displayed.
-   * @param $text
-   *   Plain text to look for.
-   * @param $message
-   *   Message to display.
-   *
-   * @return
-   *   TRUE on pass, FALSE on fail.
-   */
-  function assertNodeViewText($node, $view_mode, $text, $message) {
-    return $this->assertNodeViewTextHelper($node, $view_mode, $text, $message, FALSE);
-  }
-
-  /**
-   * Asserts that a string is not found in the rendered node in a view mode.
-   *
-   * @param $node
-   *   The node.
-   * @param $view_mode
-   *   The view mode in which the node should be displayed.
-   * @param $text
-   *   Plain text to look for.
-   * @param $message
-   *   Message to display.
-   * @return
-   *   TRUE on pass, FALSE on fail.
-   */
-  function assertNodeViewNoText($node, $view_mode, $text, $message) {
-    return $this->assertNodeViewTextHelper($node, $view_mode, $text, $message, TRUE);
-  }
-
-  /**
-   * Asserts that a string is (not) found in the rendered nodein a view mode.
-   *
-   * This helper function is used by assertNodeViewText() and
-   * assertNodeViewNoText().
-   *
-   * @param $node
-   *   The node.
-   * @param $view_mode
-   *   The view mode in which the node should be displayed.
-   * @param $text
-   *   Plain text to look for.
-   * @param $message
-   *   Message to display.
-   * @param $not_exists
-   *   TRUE if this text should not exist, FALSE if it should.
-   *
-   * @return
-   *   TRUE on pass, FALSE on fail.
-   */
-  function assertNodeViewTextHelper($node, $view_mode, $text, $message, $not_exists) {
-    // Make sure caches on the tester side are refreshed after changes
-    // submitted on the tested side.
-    field_info_cache_clear();
-
-    // Save current content so that we can restore it when we're done.
-    $old_content = $this->drupalGetContent();
-
-    // Render a cloned node, so that we do not alter the original.
-    $clone = clone $node;
-    $element = node_view($clone, $view_mode);
-    $output = drupal_render($element);
-    $this->verbose(t('Rendered node - view mode: @view_mode', array('@view_mode' => $view_mode)) . '<hr />'. $output);
-
-    // Assign content so that DrupalWebTestCase functions can be used.
-    $this->drupalSetContent($output);
-    $method = ($not_exists ? 'assertNoText' : 'assertText');
-    $return = $this->{$method}((string) $text, $message);
-
-    // Restore previous content.
-    $this->drupalSetContent($old_content);
-
-    return $return;
-  }
-}
-
-/**
- * Tests custom widget hooks and callbacks on the field administration pages.
- */
-class FieldUIAlterTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Widget customization',
-      'description' => 'Test custom field widget hooks and callbacks on field administration pages.',
-      'group' => 'Field UI',
-    );
-  }
-
-  function setUp() {
-    parent::setUp(array('field_test'));
-
-    // Create test user.
-    $admin_user = $this->drupalCreateUser(array('access content', 'administer content types', 'administer users'));
-    $this->drupalLogin($admin_user);
-  }
-
-  /**
-   * Tests hook_field_widget_properties_alter() on the default field widget.
-   *
-   * @see field_test_field_widget_properties_alter()
-   * @see field_test_field_widget_properties_user_alter()
-   * @see field_test_field_widget_form_alter()
-   */
-  function testDefaultWidgetPropertiesAlter() {
-    // Create the alter_test_text field and an instance on article nodes.
-    field_create_field(array(
-      'field_name' => 'alter_test_text',
-      'type' => 'text',
-    ));
-    field_create_instance(array(
-      'field_name' => 'alter_test_text',
-      'entity_type' => 'node',
-      'bundle' => 'article',
-      'widget' => array(
-        'type' => 'text_textfield',
-        'size' => 60,
-      ),
-    ));
-
-    // Test that field_test_field_widget_properties_alter() sets the size to
-    // 42 and that field_test_field_widget_form_alter() reports the correct
-    // size when the form is displayed.
-    $this->drupalGet('admin/structure/types/manage/article/fields/alter_test_text');
-    $this->assertText('Field size: 42', 'Altered field size is found in hook_field_widget_form_alter().');
-
-    // Create the alter_test_options field.
-    field_create_field(array(
-      'field_name' => 'alter_test_options',
-      'type' => 'list_text'
-    ));
-    // Create instances on users and page nodes.
-    field_create_instance(array(
-      'field_name' => 'alter_test_options',
-      'entity_type' => 'user',
-      'bundle' => 'user',
-      'widget' => array(
-        'type' => 'options_select',
-      )
-    ));
-    field_create_instance(array(
-      'field_name' => 'alter_test_options',
-      'entity_type' => 'node',
-      'bundle' => 'page',
-      'widget' => array(
-        'type' => 'options_select',
-      )
-    ));
-
-    // Test that field_test_field_widget_properties_user_alter() replaces
-    // the widget and that field_test_field_widget_form_alter() reports the
-    // correct widget name when the form is displayed.
-    $this->drupalGet('admin/config/people/accounts/fields/alter_test_options');
-    $this->assertText('Widget type: options_buttons', 'Widget type is altered for users in hook_field_widget_form_alter().');
-
-    // Test that the widget is not altered on page nodes.
-    $this->drupalGet('admin/structure/types/manage/page/fields/alter_test_options');
-    $this->assertText('Widget type: options_select', 'Widget type is not altered for pages in hook_field_widget_form_alter().');
-  }
-}
diff --git a/modules/file/file.api.php b/modules/file/file.api.php
deleted file mode 100644
index df178c6..0000000
--- a/modules/file/file.api.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-/**
- * @file
- * Hooks for file module.
- */
-
-/**
- * Control download access to files.
- *
- * The hook is typically implemented to limit access based on the entity the
- * file is referenced, e.g., only users with access to a node should be allowed
- * to download files attached to that node.
- *
- * @param array $file_item
- *   The array of information about the file to check access for.
- * @param $entity_type
- *   The type of $entity; for example, 'node' or 'user'.
- * @param $entity
- *   The $entity to which $file is referenced.
- *
- * @return
- *   TRUE is access should be allowed by this entity or FALSE if denied. Note
- *   that denial may be overridden by another entity controller, making this
- *   grant permissive rather than restrictive.
- *
- * @see hook_field_access().
- */
-function hook_file_download_access($file_item, $entity_type, $entity) {
-  if ($entity_type == 'node') {
-    return node_access('view', $entity);
-  }
-}
-
-/**
- * Alter the access rules applied to a file download.
- *
- * Entities that implement file management set the access rules for their
- * individual files. Module may use this hook to create custom access rules
- * for file downloads.
- *
- * @see hook_file_download_access().
- *
- * @param $grants
- *   An array of grants gathered by hook_file_download_access(). The array is
- *   keyed by the module that defines the entity type's access control; the
- *   values are Boolean grant responses for each module.
- * @param array $file_item
- *   The array of information about the file to alter access for.
- * @param $entity_type
- *   The type of $entity; for example, 'node' or 'user'.
- * @param $entity
- *   The $entity to which $file is referenced.
- */
-function hook_file_download_access_alter(&$grants, $file_item, $entity_type, $entity) {
-  // For our example module, we always enforce the rules set by node module.
-  if (isset($grants['node'])) {
-    $grants = array('node' => $grants['node']);
-  }
-}
diff --git a/modules/file/file.css b/modules/file/file.css
deleted file mode 100644
index bd4a059..0000000
--- a/modules/file/file.css
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * @file
- * Admin stylesheet for file module.
- */
-
-/**
- * Managed file element styles.
- */
-.form-managed-file .form-file,
-.form-managed-file .form-submit {
-  margin: 0;
-}
-
-.form-managed-file input.progress-disabled {
-  float: none;
-  display: inline;
-}
-
-.form-managed-file div.ajax-progress,
-.form-managed-file div.throbber {
-  display: inline;
-  float: none;
-  padding: 1px 5px 2px 5px;
-}
-
-.form-managed-file div.ajax-progress-bar {
-  display: none;
-  margin-top: 4px;
-  width: 28em;
-  padding: 0;
-}
-
-.form-managed-file div.ajax-progress-bar div.bar {
-  margin: 0;
-}
diff --git a/modules/file/file.info b/modules/file/file.info
deleted file mode 100644
index eda79f9..0000000
--- a/modules/file/file.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = File
-description = Defines a file field type.
-package = Core
-version = VERSION
-core = 7.x
-dependencies[] = field
-files[] = tests/file.test
diff --git a/modules/file/file.install b/modules/file/file.install
deleted file mode 100644
index 47ee4fd..0000000
--- a/modules/file/file.install
+++ /dev/null
@@ -1,98 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for File module.
- */
-
-/**
- * Implements hook_field_schema().
- */
-function file_field_schema($field) {
-  return array(
-    'columns' => array(
-      'fid' => array(
-        'description' => 'The {file_managed}.fid being referenced in this field.',
-        'type' => 'int',
-        'not null' => FALSE,
-        'unsigned' => TRUE,
-      ),
-      'display' => array(
-        'description' => 'Flag to control whether this file should be displayed when viewing content.',
-        'type' => 'int',
-        'size' => 'tiny',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 1,
-      ),
-      'description' => array(
-        'description' => 'A description of the file.',
-        'type' => 'text',
-        'not null' => FALSE,
-      ),
-    ),
-    'indexes' => array(
-      'fid' => array('fid'),
-    ),
-    'foreign keys' => array(
-      'fid' => array(
-        'table' => 'file_managed',
-        'columns' => array('fid' => 'fid'),
-      ),
-    ),
-  );
-}
-
-/**
- * Implements hook_requirements().
- *
- * Display information about getting upload progress bars working.
- */
-function file_requirements($phase) {
-  $requirements = array();
-
-  // Check the server's ability to indicate upload progress.
-  if ($phase == 'runtime') {
-    $implementation = file_progress_implementation();
-    $apache = strpos($_SERVER['SERVER_SOFTWARE'], 'Apache') !== FALSE;
-    $fastcgi = strpos($_SERVER['SERVER_SOFTWARE'], 'mod_fastcgi') !== FALSE || strpos($_SERVER["SERVER_SOFTWARE"], 'mod_fcgi') !== FALSE;
-    $description = NULL;
-    if (!$apache) {
-      $value = t('Not enabled');
-      $description = t('Your server is not capable of displaying file upload progress. File upload progress requires an Apache server running PHP with mod_php.');
-      $severity = REQUIREMENT_INFO;
-    }
-    elseif ($fastcgi) {
-      $value = t('Not enabled');
-      $description = t('Your server is not capable of displaying file upload progress. File upload progress requires PHP be run with mod_php and not as FastCGI.');
-      $severity = REQUIREMENT_INFO;
-    }
-    elseif (!$implementation && extension_loaded('apc')) {
-      $value = t('Not enabled');
-      $description = t('Your server is capable of displaying file upload progress through APC, but it is not enabled. Add <code>apc.rfc1867 = 1</code> to your php.ini configuration. Alternatively, it is recommended to use <a href="http://pecl.php.net/package/uploadprogress">PECL uploadprogress</a>, which supports more than one simultaneous upload.');
-      $severity = REQUIREMENT_INFO;
-    }
-    elseif (!$implementation) {
-      $value = t('Not enabled');
-      $description = t('Your server is capable of displaying file upload progress, but does not have the required libraries. It is recommended to install the <a href="http://pecl.php.net/package/uploadprogress">PECL uploadprogress library</a> (preferred) or to install <a href="http://us2.php.net/apc">APC</a>.');
-      $severity = REQUIREMENT_INFO;
-    }
-    elseif ($implementation == 'apc') {
-      $value = t('Enabled (<a href="http://php.net/manual/en/apc.configuration.php#ini.apc.rfc1867">APC RFC1867</a>)');
-      $description = t('Your server is capable of displaying file upload progress using APC RFC1867. Note that only one upload at a time is supported. It is recommended to use the <a href="http://pecl.php.net/package/uploadprogress">PECL uploadprogress library</a> if possible.');
-      $severity = REQUIREMENT_OK;
-    }
-    elseif ($implementation == 'uploadprogress') {
-      $value = t('Enabled (<a href="http://pecl.php.net/package/uploadprogress">PECL uploadprogress</a>)');
-      $severity = REQUIREMENT_OK;
-    }
-    $requirements['file_progress'] = array(
-      'title' => t('Upload progress'),
-      'value' => $value,
-      'severity' => $severity,
-      'description' => $description,
-    );
-  }
-
-  return $requirements;
-}
diff --git a/modules/file/icons/application-octet-stream.png b/modules/file/icons/application-octet-stream.png
deleted file mode 100644
index d545321..0000000
Binary files a/modules/file/icons/application-octet-stream.png and /dev/null differ
diff --git a/modules/file/icons/application-pdf.png b/modules/file/icons/application-pdf.png
deleted file mode 100644
index 36107d6..0000000
Binary files a/modules/file/icons/application-pdf.png and /dev/null differ
diff --git a/modules/file/icons/application-x-executable.png b/modules/file/icons/application-x-executable.png
deleted file mode 100644
index d545321..0000000
Binary files a/modules/file/icons/application-x-executable.png and /dev/null differ
diff --git a/modules/file/icons/audio-x-generic.png b/modules/file/icons/audio-x-generic.png
deleted file mode 100644
index 28d7f50..0000000
Binary files a/modules/file/icons/audio-x-generic.png and /dev/null differ
diff --git a/modules/file/icons/image-x-generic.png b/modules/file/icons/image-x-generic.png
deleted file mode 100644
index c1b814f..0000000
Binary files a/modules/file/icons/image-x-generic.png and /dev/null differ
diff --git a/modules/file/icons/package-x-generic.png b/modules/file/icons/package-x-generic.png
deleted file mode 100644
index 21fc382..0000000
Binary files a/modules/file/icons/package-x-generic.png and /dev/null differ
diff --git a/modules/file/icons/text-html.png b/modules/file/icons/text-html.png
deleted file mode 100644
index 9c7c793..0000000
Binary files a/modules/file/icons/text-html.png and /dev/null differ
diff --git a/modules/file/icons/text-plain.png b/modules/file/icons/text-plain.png
deleted file mode 100644
index 0680484..0000000
Binary files a/modules/file/icons/text-plain.png and /dev/null differ
diff --git a/modules/file/icons/text-x-generic.png b/modules/file/icons/text-x-generic.png
deleted file mode 100644
index 0680484..0000000
Binary files a/modules/file/icons/text-x-generic.png and /dev/null differ
diff --git a/modules/file/icons/text-x-script.png b/modules/file/icons/text-x-script.png
deleted file mode 100644
index f9ecca8..0000000
Binary files a/modules/file/icons/text-x-script.png and /dev/null differ
diff --git a/modules/file/icons/video-x-generic.png b/modules/file/icons/video-x-generic.png
deleted file mode 100644
index a2b71f9..0000000
Binary files a/modules/file/icons/video-x-generic.png and /dev/null differ
diff --git a/modules/file/icons/x-office-document.png b/modules/file/icons/x-office-document.png
deleted file mode 100644
index 40db538..0000000
Binary files a/modules/file/icons/x-office-document.png and /dev/null differ
diff --git a/modules/file/icons/x-office-presentation.png b/modules/file/icons/x-office-presentation.png
deleted file mode 100644
index fb119e5..0000000
Binary files a/modules/file/icons/x-office-presentation.png and /dev/null differ
diff --git a/modules/file/icons/x-office-spreadsheet.png b/modules/file/icons/x-office-spreadsheet.png
deleted file mode 100644
index 9af7b61..0000000
Binary files a/modules/file/icons/x-office-spreadsheet.png and /dev/null differ
diff --git a/modules/file/tests/file_module_test.info b/modules/file/tests/file_module_test.info
deleted file mode 100644
index 8db907b..0000000
--- a/modules/file/tests/file_module_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = File test
-description = Provides hooks for testing File module functionality.
-package = Core
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/file/tests/file_module_test.module b/modules/file/tests/file_module_test.module
deleted file mode 100644
index f66c749..0000000
--- a/modules/file/tests/file_module_test.module
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-
-/**
- * @file
- * Provides File module pages for testing purposes.
- */
-
-/**
- * Implements hook_menu().
- */
-function file_module_test_menu() {
-  $items = array();
-
-  $items['file/test'] = array(
-    'title' => 'Managed file test',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('file_module_test_form'),
-    'access arguments' => array('access content'),
-  );
-
-  return $items;
-}
-
-/**
- * Form constructor for testing a 'managed_file' element.
- *
- * @see file_module_test_form_submit()
- * @ingroup forms
- */
-function file_module_test_form($form, &$form_state, $tree = TRUE, $extended = FALSE, $default_fid = NULL) {
-  $form['#tree'] = (bool) $tree;
-
-  $form['nested']['file'] = array(
-    '#type' => 'managed_file',
-    '#title' => t('Managed file'),
-    '#upload_location' => 'public://test',
-    '#progress_message' => t('Please wait...'),
-    '#extended' => (bool) $extended,
-    '#size' => 13,
-  );
-  if ($default_fid) {
-    $form['nested']['file']['#default_value'] = $extended ? array('fid' => $default_fid) : $default_fid;
-  }
-
-  $form['textfield'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Type a value and ensure it stays'),
-  );
-
-  $form['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Save'),
-  );
-
-  return $form;
-}
-
-/**
- * Form submission handler for file_module_test_form().
- */
-function file_module_test_form_submit($form, &$form_state) {
-  if ($form['#tree']) {
-    $fid = $form['nested']['file']['#extended'] ? $form_state['values']['nested']['file']['fid'] : $form_state['values']['nested']['file'];
-  }
-  else {
-    $fid = $form['nested']['file']['#extended'] ? $form_state['values']['file']['fid'] : $form_state['values']['file'];
-  }
-  drupal_set_message(t('The file id is %fid.', array('%fid' => $fid)));
-}
diff --git a/modules/filter/filter.admin.inc b/modules/filter/filter.admin.inc
deleted file mode 100644
index 60284d9..0000000
--- a/modules/filter/filter.admin.inc
+++ /dev/null
@@ -1,408 +0,0 @@
-<?php
-
-/**
- * @file
- * Administrative page callbacks for the Filter module.
- */
-
-/**
- * Page callback: Form constructor for a form to list and reorder text formats.
- *
- * @ingroup forms
- * @see filter_menu()
- * @see filter_admin_overview_submit()
- */
-function filter_admin_overview($form) {
-  // Overview of all formats.
-  $formats = filter_formats();
-  $fallback_format = filter_fallback_format();
-
-  $form['#tree'] = TRUE;
-  foreach ($formats as $id => $format) {
-    // Check whether this is the fallback text format. This format is available
-    // to all roles and cannot be disabled via the admin interface.
-    $form['formats'][$id]['#is_fallback'] = ($id == $fallback_format);
-    if ($form['formats'][$id]['#is_fallback']) {
-      $form['formats'][$id]['name'] = array('#markup' => drupal_placeholder($format->name));
-      $roles_markup = drupal_placeholder(t('All roles may use this format'));
-    }
-    else {
-      $form['formats'][$id]['name'] = array('#markup' => check_plain($format->name));
-      $roles = array_map('check_plain', filter_get_roles_by_format($format));
-      $roles_markup = $roles ? implode(', ', $roles) : t('No roles may use this format');
-    }
-    $form['formats'][$id]['roles'] = array('#markup' => $roles_markup);
-    $form['formats'][$id]['configure'] = array('#type' => 'link', '#title' => t('configure'), '#href' => 'admin/config/content/formats/' . $id);
-    $form['formats'][$id]['disable'] = array('#type' => 'link', '#title' => t('disable'), '#href' => 'admin/config/content/formats/' . $id . '/disable', '#access' => !$form['formats'][$id]['#is_fallback']);
-    $form['formats'][$id]['weight'] = array(
-      '#type' => 'weight',
-      '#title' => t('Weight for @title', array('@title' => $format->name)),
-      '#title_display' => 'invisible',
-      '#default_value' => $format->weight,
-    );
-  }
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save changes'));
-  return $form;
-}
-
-/**
- * Form submission handler for filter_admin_overview().
- */
-function filter_admin_overview_submit($form, &$form_state) {
-  foreach ($form_state['values']['formats'] as $id => $data) {
-    if (is_array($data) && isset($data['weight'])) {
-      // Only update if this is a form element with weight.
-      db_update('filter_format')
-        ->fields(array('weight' => $data['weight']))
-        ->condition('format', $id)
-        ->execute();
-    }
-  }
-  filter_formats_reset();
-  drupal_set_message(t('The text format ordering has been saved.'));
-}
-
-/**
- * Returns HTML for the text format administration overview form.
- *
- * @param $variables
- *   An associative array containing:
- *   - form: A render element representing the form.
- *
- * @ingroup themeable
- */
-function theme_filter_admin_overview($variables) {
-  $form = $variables['form'];
-
-  $rows = array();
-  foreach (element_children($form['formats']) as $id) {
-    $form['formats'][$id]['weight']['#attributes']['class'] = array('text-format-order-weight');
-    $rows[] = array(
-      'data' => array(
-        drupal_render($form['formats'][$id]['name']),
-        drupal_render($form['formats'][$id]['roles']),
-        drupal_render($form['formats'][$id]['weight']),
-        drupal_render($form['formats'][$id]['configure']),
-        drupal_render($form['formats'][$id]['disable']),
-      ),
-      'class' => array('draggable'),
-    );
-  }
-  $header = array(t('Name'), t('Roles'), t('Weight'), array('data' => t('Operations'), 'colspan' => 2));
-  $output = theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('id' => 'text-format-order')));
-  $output .= drupal_render_children($form);
-
-  drupal_add_tabledrag('text-format-order', 'order', 'sibling', 'text-format-order-weight');
-
-  return $output;
-}
-
-/**
- * Page callback: Displays the text format add/edit form.
- *
- * @param object|null $format
- *   (optional) An object representing a format, with the following properties:
- *   - format: A machine-readable name representing the ID of the text format
- *     to save. If this corresponds to an existing text format, that format
- *     will be updated; otherwise, a new format will be created.
- *   - name: The title of the text format.
- *   - cache: (optional) An integer indicating whether the text format is
- *     cacheable (1) or not (0). Defaults to 1.
- *   - status: (optional) An integer indicating whether the text format is
- *     enabled (1) or not (0). Defaults to 1.
- *   - weight: (optional) The weight of the text format, which controls its
- *     placement in text format lists. If omitted, the weight is set to 0.
- *     Defaults to NULL.
- *
- * @return
- *   A form array.
- *
- * @see filter_menu()
- */
-function filter_admin_format_page($format = NULL) {
-  if (!isset($format->name)) {
-    drupal_set_title(t('Add text format'));
-    $format = (object) array(
-      'format' => NULL,
-      'name' => '',
-    );
-  }
-  return drupal_get_form('filter_admin_format_form', $format);
-}
-
-/**
- * Form constructor for the text format add/edit form.
- *
- * @param $format
- *   A format object having the properties:
- *   - format: A machine-readable name representing the ID of the text format to
- *     save. If this corresponds to an existing text format, that format will be
- *     updated; otherwise, a new format will be created.
- *   - name: The title of the text format.
- *   - cache: An integer indicating whether the text format is cacheable (1) or
- *     not (0). Defaults to 1.
- *   - status: (optional) An integer indicating whether the text format is
- *     enabled (1) or not (0). Defaults to 1.
- *   - weight: (optional) The weight of the text format, which controls its
- *     placement in text format lists. If omitted, the weight is set to 0.
- *
- * @see filter_admin_format_form_validate()
- * @see filter_admin_format_form_submit()
- * @ingroup forms
- */
-function filter_admin_format_form($form, &$form_state, $format) {
-  $is_fallback = ($format->format == filter_fallback_format());
-
-  $form['#format'] = $format;
-  $form['#tree'] = TRUE;
-  $form['#attached']['js'][] = drupal_get_path('module', 'filter') . '/filter.admin.js';
-  $form['#attached']['css'][] = drupal_get_path('module', 'filter') . '/filter.css';
-
-  $form['name'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Name'),
-    '#default_value' => $format->name,
-    '#required' => TRUE,
-  );
-  $form['format'] = array(
-    '#type' => 'machine_name',
-    '#required' => TRUE,
-    '#default_value' => $format->format,
-    '#maxlength' => 255,
-    '#machine_name' => array(
-      'exists' => 'filter_format_exists',
-    ),
-    '#disabled' => !empty($format->format),
-  );
-
-  // Add user role access selection.
-  $form['roles'] = array(
-    '#type' => 'checkboxes',
-    '#title' => t('Roles'),
-    '#options' => array_map('check_plain', user_roles()),
-    '#disabled' => $is_fallback,
-  );
-  if ($is_fallback) {
-    $form['roles']['#description'] = t('All roles for this text format must be enabled and cannot be changed.');
-  }
-  if (!empty($format->format)) {
-    // If editing an existing text format, pre-select its current permissions.
-    $form['roles']['#default_value'] = array_keys(filter_get_roles_by_format($format));
-  }
-  elseif ($admin_role = variable_get('user_admin_role', 0)) {
-    // If adding a new text format and the site has an administrative role,
-    // pre-select that role so as to grant administrators access to the new
-    // text format permission by default.
-    $form['roles']['#default_value'] = array($admin_role);
-  }
-
-  // Retrieve available filters and load all configured filters for existing
-  // text formats.
-  $filter_info = filter_get_filters();
-  $filters = !empty($format->format) ? filter_list_format($format->format) : array();
-
-  // Prepare filters for form sections.
-  foreach ($filter_info as $name => $filter) {
-    // Create an empty filter object for new/unconfigured filters.
-    if (!isset($filters[$name])) {
-      $filters[$name] = new stdClass();
-      $filters[$name]->format = $format->format;
-      $filters[$name]->module = $filter['module'];
-      $filters[$name]->name = $name;
-      $filters[$name]->status = 0;
-      $filters[$name]->weight = $filter['weight'];
-      $filters[$name]->settings = array();
-    }
-  }
-  $form['#filters'] = $filters;
-
-  // Filter status.
-  $form['filters']['status'] = array(
-    '#type' => 'item',
-    '#title' => t('Enabled filters'),
-    '#prefix' => '<div id="filters-status-wrapper">',
-    '#suffix' => '</div>',
-  );
-  foreach ($filter_info as $name => $filter) {
-    $form['filters']['status'][$name] = array(
-      '#type' => 'checkbox',
-      '#title' => $filter['title'],
-      '#default_value' => $filters[$name]->status,
-      '#parents' => array('filters', $name, 'status'),
-      '#description' => $filter['description'],
-      '#weight' => $filter['weight'],
-    );
-  }
-
-  // Filter order (tabledrag).
-  $form['filters']['order'] = array(
-    '#type' => 'item',
-    '#title' => t('Filter processing order'),
-    '#theme' => 'filter_admin_format_filter_order',
-  );
-  foreach ($filter_info as $name => $filter) {
-    $form['filters']['order'][$name]['filter'] = array(
-      '#markup' => $filter['title'],
-    );
-    $form['filters']['order'][$name]['weight'] = array(
-      '#type' => 'weight',
-      '#title' => t('Weight for @title', array('@title' => $filter['title'])),
-      '#title_display' => 'invisible',
-      '#delta' => 50,
-      '#default_value' => $filters[$name]->weight,
-      '#parents' => array('filters', $name, 'weight'),
-    );
-    $form['filters']['order'][$name]['#weight'] = $filters[$name]->weight;
-  }
-
-  // Filter settings.
-  $form['filter_settings_title'] = array(
-    '#type' => 'item',
-    '#title' => t('Filter settings'),
-  );
-  $form['filter_settings'] = array(
-    '#type' => 'vertical_tabs',
-  );
-
-  foreach ($filter_info as $name => $filter) {
-    if (isset($filter['settings callback']) && function_exists($filter['settings callback'])) {
-      $function = $filter['settings callback'];
-      // Pass along stored filter settings and default settings, but also the
-      // format object and all filters to allow for complex implementations.
-      $defaults = (isset($filter['default settings']) ? $filter['default settings'] : array());
-      $settings_form = $function($form, $form_state, $filters[$name], $format, $defaults, $filters);
-      if (!empty($settings_form)) {
-        $form['filters']['settings'][$name] = array(
-          '#type' => 'fieldset',
-          '#title' => $filter['title'],
-          '#parents' => array('filters', $name, 'settings'),
-          '#weight' => $filter['weight'],
-          '#group' => 'filter_settings',
-        );
-        $form['filters']['settings'][$name] += $settings_form;
-      }
-    }
-  }
-
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save configuration'));
-
-  return $form;
-}
-
-/**
- * Returns HTML for a text format's filter order form.
- *
- * @param $variables
- *   An associative array containing:
- *   - element: A render element representing the form.
- *
- * @ingroup themeable
- */
-function theme_filter_admin_format_filter_order($variables) {
-  $element = $variables['element'];
-
-  // Filter order (tabledrag).
-  $rows = array();
-  foreach (element_children($element, TRUE) as $name) {
-    $element[$name]['weight']['#attributes']['class'][] = 'filter-order-weight';
-    $rows[] = array(
-      'data' => array(
-        drupal_render($element[$name]['filter']),
-        drupal_render($element[$name]['weight']),
-      ),
-      'class' => array('draggable'),
-    );
-  }
-  $output = drupal_render_children($element);
-  $output .= theme('table', array('rows' => $rows, 'attributes' => array('id' => 'filter-order')));
-  drupal_add_tabledrag('filter-order', 'order', 'sibling', 'filter-order-weight', NULL, NULL, TRUE);
-
-  return $output;
-}
-
-/**
- * Form validation handler for filter_admin_format_form().
- *
- * @see filter_admin_format_form_submit()
- */
-function filter_admin_format_form_validate($form, &$form_state) {
-  $format_format = trim($form_state['values']['format']);
-  $format_name = trim($form_state['values']['name']);
-
-  // Ensure that the values to be saved later are exactly the ones validated.
-  form_set_value($form['format'], $format_format, $form_state);
-  form_set_value($form['name'], $format_name, $form_state);
-
-  $result = db_query("SELECT format FROM {filter_format} WHERE name = :name AND format <> :format", array(':name' => $format_name, ':format' => $format_format))->fetchField();
-  if ($result) {
-    form_set_error('name', t('Text format names must be unique. A format named %name already exists.', array('%name' => $format_name)));
-  }
-}
-
-/**
- * Form submission handler for filter_admin_format_form().
- *
- * @see filter_admin_format_form_validate()
- */
-function filter_admin_format_form_submit($form, &$form_state) {
-  // Remove unnecessary values.
-  form_state_values_clean($form_state);
-
-  // Add the submitted form values to the text format, and save it.
-  $format = $form['#format'];
-  foreach ($form_state['values'] as $key => $value) {
-    $format->$key = $value;
-  }
-  $status = filter_format_save($format);
-
-  // Save user permissions.
-  if ($permission = filter_permission_name($format)) {
-    foreach ($format->roles as $rid => $enabled) {
-      user_role_change_permissions($rid, array($permission => $enabled));
-    }
-  }
-
-  switch ($status) {
-    case SAVED_NEW:
-      drupal_set_message(t('Added text format %format.', array('%format' => $format->name)));
-      break;
-
-    case SAVED_UPDATED:
-      drupal_set_message(t('The text format %format has been updated.', array('%format' => $format->name)));
-      break;
-  }
-}
-
-/**
- * Form constructor for the text format deletion confirmation form.
- *
- * @param $format
- *   An object representing a text format.
- *
- * @see filter_menu()
- * @see filter_admin_disable_submit()
- * @ingroup forms
- */
-function filter_admin_disable($form, &$form_state, $format) {
-  $form['#format'] = $format;
-
-  return confirm_form($form,
-    t('Are you sure you want to disable the text format %format?', array('%format' => $format->name)),
-    'admin/config/content/formats',
-    t('Disabled text formats are completely removed from the administrative interface, and any content stored with that format will not be displayed. This action cannot be undone.'),
-    t('Disable')
-  );
-}
-
-/**
- * Form submission handler for filter_admin_disable().
- */
-function filter_admin_disable_submit($form, &$form_state) {
-  $format = $form['#format'];
-  filter_format_disable($format);
-  drupal_set_message(t('Disabled text format %format.', array('%format' => $format->name)));
-
-  $form_state['redirect'] = 'admin/config/content/formats';
-}
diff --git a/modules/filter/filter.admin.js b/modules/filter/filter.admin.js
deleted file mode 100644
index 3bc6233..0000000
--- a/modules/filter/filter.admin.js
+++ /dev/null
@@ -1,44 +0,0 @@
-(function ($) {
-
-Drupal.behaviors.filterStatus = {
-  attach: function (context, settings) {
-    $('#filters-status-wrapper input.form-checkbox', context).once('filter-status', function () {
-      var $checkbox = $(this);
-      // Retrieve the tabledrag row belonging to this filter.
-      var $row = $('#' + $checkbox.attr('id').replace(/-status$/, '-weight'), context).closest('tr');
-      // Retrieve the vertical tab belonging to this filter.
-      var tab = $('#' + $checkbox.attr('id').replace(/-status$/, '-settings'), context).data('verticalTab');
-
-      // Bind click handler to this checkbox to conditionally show and hide the
-      // filter's tableDrag row and vertical tab pane.
-      $checkbox.bind('click.filterUpdate', function () {
-        if ($checkbox.is(':checked')) {
-          $row.show();
-          if (tab) {
-            tab.tabShow().updateSummary();
-          }
-        }
-        else {
-          $row.hide();
-          if (tab) {
-            tab.tabHide().updateSummary();
-          }
-        }
-        // Restripe table after toggling visibility of table row.
-        Drupal.tableDrag['filter-order'].restripeTable();
-      });
-
-      // Attach summary for configurable filters (only for screen-readers).
-      if (tab) {
-        tab.fieldset.drupalSetSummary(function (tabContext) {
-          return $checkbox.is(':checked') ? Drupal.t('Enabled') : Drupal.t('Disabled');
-        });
-      }
-
-      // Trigger our bound click handler to update elements to initial state.
-      $checkbox.triggerHandler('click.filterUpdate');
-    });
-  }
-};
-
-})(jQuery);
diff --git a/modules/filter/filter.api.php b/modules/filter/filter.api.php
deleted file mode 100644
index 2901eb9..0000000
--- a/modules/filter/filter.api.php
+++ /dev/null
@@ -1,323 +0,0 @@
-<?php
-
-/**
- * @file
- * Hooks provided by the Filter module.
- */
-
-/**
- * @addtogroup hooks
- * @{
- */
-
-/**
- * Define content filters.
- *
- * User submitted content is passed through a group of filters before it is
- * output in HTML, in order to remove insecure or unwanted parts, correct or
- * enhance the formatting, transform special keywords, etc. A group of filters
- * is referred to as a "text format". Administrators can create as many text
- * formats as needed. Individual filters can be enabled and configured
- * differently for each text format.
- *
- * This hook is invoked by filter_get_filters() and allows modules to register
- * input filters they provide.
- *
- * Filtering is a two-step process. First, the content is 'prepared' by calling
- * the 'prepare callback' function for every filter. The purpose of the 'prepare
- * callback' is to escape HTML-like structures. For example, imagine a filter
- * which allows the user to paste entire chunks of programming code without
- * requiring manual escaping of special HTML characters like < or &. If the
- * programming code were left untouched, then other filters could think it was
- * HTML and change it. For many filters, the prepare step is not necessary.
- *
- * The second step is the actual processing step. The result from passing the
- * text through all the filters' prepare steps gets passed to all the filters
- * again, this time with the 'process callback' function. The process callbacks
- * should then actually change the content: transform URLs into hyperlinks,
- * convert smileys into images, etc.
- *
- * For performance reasons content is only filtered once; the result is stored
- * in the cache table and retrieved from the cache the next time the same piece
- * of content is displayed. If a filter's output is dynamic, it can override the
- * cache mechanism, but obviously this should be used with caution: having one
- * filter that does not support caching in a particular text format disables
- * caching for the entire format, not just for one filter.
- *
- * Beware of the filter cache when developing your module: it is advised to set
- * your filter to 'cache' => FALSE while developing, but be sure to remove that
- * setting if it's not needed, when you are no longer in development mode.
- *
- * @return
- *   An associative array of filters, whose keys are internal filter names,
- *   which should be unique and therefore prefixed with the name of the module.
- *   Each value is an associative array describing the filter, with the
- *   following elements (all are optional except as noted):
- *   - title: (required) An administrative summary of what the filter does.
- *   - description: Additional administrative information about the filter's
- *     behavior, if needed for clarification.
- *   - settings callback: The name of a function that returns configuration form
- *     elements for the filter. See callback_filter_settings() for details.
- *   - default settings: An associative array containing default settings for
- *     the filter, to be applied when the filter has not been configured yet.
- *   - prepare callback: The name of a function that escapes the content before
- *     the actual filtering happens. See callback_filter_prepare() for
- *     details.
- *   - process callback: (required) The name the function that performs the
- *     actual filtering. See callback_filter_process() for details.
- *   - cache (default TRUE): Specifies whether the filtered text can be cached.
- *     Note that setting this to FALSE makes the entire text format not
- *     cacheable, which may have an impact on the site's overall performance.
- *     See filter_format_allowcache() for details.
- *   - tips callback: The name of a function that returns end-user-facing filter
- *     usage guidelines for the filter. See callback_filter_tips() for
- *     details.
- *   - weight: A default weight for the filter in new text formats.
- *
- * @see filter_example.module
- * @see hook_filter_info_alter()
- */
-function hook_filter_info() {
-  $filters['filter_html'] = array(
-    'title' => t('Limit allowed HTML tags'),
-    'description' => t('Allows you to restrict the HTML tags the user can use. It will also remove harmful content such as JavaScript events, JavaScript URLs and CSS styles from those tags that are not removed.'),
-    'process callback' => '_filter_html',
-    'settings callback' => '_filter_html_settings',
-    'default settings' => array(
-      'allowed_html' => '<a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>',
-      'filter_html_help' => 1,
-      'filter_html_nofollow' => 0,
-    ),
-    'tips callback' => '_filter_html_tips',
-  );
-  $filters['filter_autop'] = array(
-    'title' => t('Convert line breaks'),
-    'description' => t('Converts line breaks into HTML (i.e. &lt;br&gt; and &lt;p&gt;) tags.'),
-    'process callback' => '_filter_autop',
-    'tips callback' => '_filter_autop_tips',
-  );
-  return $filters;
-}
-
-/**
- * Perform alterations on filter definitions.
- *
- * @param $info
- *   Array of information on filters exposed by hook_filter_info()
- *   implementations.
- */
-function hook_filter_info_alter(&$info) {
-  // Replace the PHP evaluator process callback with an improved
-  // PHP evaluator provided by a module.
-  $info['php_code']['process callback'] = 'my_module_php_evaluator';
-
-  // Alter the default settings of the URL filter provided by core.
-  $info['filter_url']['default settings'] = array(
-    'filter_url_length' => 100,
-  );
-}
-
-/**
- * @} End of "addtogroup hooks".
- */
-
-/**
- * Provide a settings form for filter settings.
- *
- * Callback for hook_filter_info().
- *
- * This callback function is used to provide a settings form for filter
- * settings, for filters that need settings on a per-text-format basis. This
- * function should return the form elements for the settings; the filter
- * module will take care of saving the settings in the database.
- *
- * If the filter's behavior depends on an extensive list and/or external data
- * (e.g. a list of smileys, a list of glossary terms), then the filter module
- * can choose to provide a separate, global configuration page rather than
- * per-text-format settings. In that case, the settings callback function
- * should provide a link to the separate settings page.
- *
- * @param $form
- *   The prepopulated form array of the filter administration form.
- * @param $form_state
- *   The state of the (entire) configuration form.
- * @param $filter
- *   The filter object containing the current settings for the given format,
- *   in $filter->settings.
- * @param $format
- *   The format object being configured.
- * @param $defaults
- *   The default settings for the filter, as defined in 'default settings' in
- *   hook_filter_info(). These should be combined with $filter->settings to
- *   define the form element defaults.
- * @param $filters
- *   The complete list of filter objects that are enabled for the given format.
- *
- * @return
- *   An array of form elements defining settings for the filter. Array keys
- *   should match the array keys in $filter->settings and $defaults.
- *
- * @ingroup callbacks
- */
-function callback_filter_settings($form, &$form_state, $filter, $format, $defaults, $filters) {
-  $filter->settings += $defaults;
-
-  $elements = array();
-  $elements['nofollow'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Add rel="nofollow" to all links'),
-    '#default_value' => $filter->settings['nofollow'],
-  );
-  return $elements;
-}
-
-/**
- * Provide prepared text with special characters escaped.
- *
- * Callback for hook_filter_info().
- *
- * See hook_filter_info() for a description of the filtering process. Filters
- * should not use the 'prepare callback' step for anything other than escaping,
- * because that would short-circuit the control the user has over the order in
- * which filters are applied.
- *
- * @param $text
- *   The text string to be filtered.
- * @param $filter
- *   The filter object containing settings for the given format.
- * @param $format
- *   The text format object assigned to the text to be filtered.
- * @param $langcode
- *   The language code of the text to be filtered.
- * @param $cache
- *   A Boolean indicating whether the filtered text is going to be cached in
- *   {cache_filter}.
- * @param $cache_id
- *   The ID of the filtered text in {cache_filter}, if $cache is TRUE.
- *
- * @return
- *   The prepared, escaped text.
- *
- * @ingroup callbacks
- */
-function callback_filter_prepare($text, $filter, $format, $langcode, $cache, $cache_id) {
-  // Escape <code> and </code> tags.
-  $text = preg_replace('|<code>(.+?)</code>|se', "[codefilter_code]$1[/codefilter_code]", $text);
-  return $text;
-}
-
-/**
- * Provide text filtered to conform to the supplied format.
- *
- * Callback for hook_filter_info().
- *
- * See hook_filter_info() for a description of the filtering process. This step
- * is where the filter actually transforms the text.
- *
- * @param $text
- *   The text string to be filtered.
- * @param $filter
- *   The filter object containing settings for the given format.
- * @param $format
- *   The text format object assigned to the text to be filtered.
- * @param $langcode
- *   The language code of the text to be filtered.
- * @param $cache
- *   A Boolean indicating whether the filtered text is going to be cached in
- *   {cache_filter}.
- * @param $cache_id
- *   The ID of the filtered text in {cache_filter}, if $cache is TRUE.
- *
- * @return
- *   The filtered text.
- *
- * @ingroup callbacks
- */
-function callback_filter_process($text, $filter, $format, $langcode, $cache, $cache_id) {
-  $text = preg_replace('|\[codefilter_code\](.+?)\[/codefilter_code\]|se', "<pre>$1</pre>", $text);
-
-  return $text;
-}
-
-/**
- * Return help text for a filter.
- *
- * Callback for hook_filter_info().
- *
- * A filter's tips should be informative and to the point. Short tips are
- * preferably one-liners.
- *
- * @param $filter
- *   An object representing the filter.
- * @param $format
- *   An object representing the text format the filter is contained in.
- * @param $long
- *   Whether this callback should return a short tip to display in a form
- *   (FALSE), or whether a more elaborate filter tips should be returned for
- *   theme_filter_tips() (TRUE).
- *
- * @return
- *   Translated text to display as a tip.
- *
- * @ingroup callbacks
- */
-function callback_filter_tips($filter, $format, $long) {
- if ($long) {
-    return t('Lines and paragraphs are automatically recognized. The &lt;br /&gt; line break, &lt;p&gt; paragraph and &lt;/p&gt; close paragraph tags are inserted automatically. If paragraphs are not recognized simply add a couple blank lines.');
-  }
-  else {
-    return t('Lines and paragraphs break automatically.');
-  }
-}
-
-/**
- * @addtogroup hooks
- * @{
- */
-
-/**
- * Perform actions when a new text format has been created.
- *
- * @param $format
- *   The format object of the format being updated.
- *
- * @see hook_filter_format_update()
- * @see hook_filter_format_disable()
- */
-function hook_filter_format_insert($format) {
-  mymodule_cache_rebuild();
-}
-
-/**
- * Perform actions when a text format has been updated.
- *
- * This hook allows modules to act when a text format has been updated in any
- * way. For example, when filters have been reconfigured, disabled, or
- * re-arranged in the text format.
- *
- * @param $format
- *   The format object of the format being updated.
- *
- * @see hook_filter_format_insert()
- * @see hook_filter_format_disable()
- */
-function hook_filter_format_update($format) {
-  mymodule_cache_rebuild();
-}
-
-/**
- * Perform actions when a text format has been disabled.
- *
- * @param $format
- *   The format object of the format being disabled.
- *
- * @see hook_filter_format_insert()
- * @see hook_filter_format_update()
- */
-function hook_filter_format_disable($format) {
-  mymodule_cache_rebuild();
-}
-
-/**
- * @} End of "addtogroup hooks".
- */
diff --git a/modules/filter/filter.css b/modules/filter/filter.css
deleted file mode 100644
index f731733..0000000
--- a/modules/filter/filter.css
+++ /dev/null
@@ -1,53 +0,0 @@
-
-.text-format-wrapper .form-item {
-  margin-bottom: 0;
-}
-.filter-wrapper {
-  border-top: 0;
-  margin: 0;
-  padding: 1.5em 0 1.5em;
-}
-.filter-wrapper .form-item {
-  float: left;
-  padding: 0 0 0.5em 1.5em;
-}
-.filter-wrapper .form-item label {
-  display: inline;
-}
-.filter-help {
-  float: right;
-  padding: 0 1.5em 0.5em;
-}
-.filter-help p {
-  margin: 0;
-}
-.filter-help a {
-  background: transparent url(../../misc/help.png) right center no-repeat;
-  padding: 0 20px;
-}
-.filter-guidelines {
-  clear: left;
-  padding: 0 1.5em;
-}
-.text-format-wrapper .description {
-  margin-top: 0.5em;
-}
-
-#filter-order tr .form-item {
-  padding: 0.5em 0 0 3em;
-  white-space: normal;
-}
-#filter-order tr .form-type-checkbox .description {
-  padding: 0 0 0 2.5em;
-}
-input#edit-filters-filter-html-settings-allowed-html {
-  width: 100%;
-}
-
-.tips {
-  margin-top: 0;
-  margin-bottom: 0;
-  padding-top: 0;
-  padding-bottom: 0;
-  font-size: 0.9em;
-}
diff --git a/modules/filter/filter.info b/modules/filter/filter.info
deleted file mode 100644
index 0aebbf8..0000000
--- a/modules/filter/filter.info
+++ /dev/null
@@ -1,8 +0,0 @@
-name = Filter
-description = Filters content in preparation for display.
-package = Core
-version = VERSION
-core = 7.x
-files[] = filter.test
-required = TRUE
-configure = admin/config/content/formats
diff --git a/modules/filter/filter.install b/modules/filter/filter.install
deleted file mode 100644
index 71ba97b..0000000
--- a/modules/filter/filter.install
+++ /dev/null
@@ -1,494 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update, and uninstall functions for the Filter module.
- */
-
-/**
- * Implements hook_schema().
- */
-function filter_schema() {
-  $schema['filter'] = array(
-    'description' => 'Table that maps filters (HTML corrector) to text formats (Filtered HTML).',
-    'fields' => array(
-      'format' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'description' => 'Foreign key: The {filter_format}.format to which this filter is assigned.',
-      ),
-      'module' => array(
-        'type' => 'varchar',
-        'length' => 64,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'The origin module of the filter.',
-      ),
-      'name' => array(
-        'type' => 'varchar',
-        'length' => 32,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Name of the filter being referenced.',
-      ),
-      'weight' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Weight of filter within format.',
-      ),
-      'status' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Filter enabled status. (1 = enabled, 0 = disabled)',
-      ),
-      'settings' => array(
-        'type' => 'blob',
-        'not null' => FALSE,
-        'size' => 'big',
-        'serialize' => TRUE,
-        'description' => 'A serialized array of name value pairs that store the filter settings for the specific format.',
-      ),
-    ),
-    'primary key' => array('format', 'name'),
-    'indexes' => array(
-      'list' => array('weight', 'module', 'name'),
-    ),
-  );
-  $schema['filter_format'] = array(
-    'description' => 'Stores text formats: custom groupings of filters, such as Filtered HTML.',
-    'fields' => array(
-      'format' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'description' => 'Primary Key: Unique machine name of the format.',
-      ),
-      'name' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Name of the text format (Filtered HTML).',
-        'translatable' => TRUE,
-      ),
-      'cache' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'size' => 'tiny',
-        'description' => 'Flag to indicate whether format is cacheable. (1 = cacheable, 0 = not cacheable)',
-      ),
-      'status' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 1,
-        'size' => 'tiny',
-        'description' => 'The status of the text format. (1 = enabled, 0 = disabled)',
-      ),
-      'weight' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Weight of text format to use when listing.',
-      ),
-    ),
-    'primary key' => array('format'),
-    'unique keys' => array(
-      'name' => array('name'),
-    ),
-    'indexes' => array(
-      'status_weight' => array('status', 'weight'),
-    ),
-  );
-
-  $schema['cache_filter'] = drupal_get_schema_unprocessed('system', 'cache');
-  $schema['cache_filter']['description'] = 'Cache table for the Filter module to store already filtered pieces of text, identified by text format and hash of the text.';
-
-  return $schema;
-}
-
-/**
- * Implements hook_install().
- */
-function filter_install() {
-  // All sites require at least one text format (the fallback format) that all
-  // users have access to, so add it here. We initialize it as a simple, safe
-  // plain text format with very basic formatting, but it can be modified by
-  // installation profiles to have other properties.
-  $plain_text_format = array(
-    'format' => 'plain_text',
-    'name' => 'Plain text',
-    'weight' => 10,
-    'filters' => array(
-      // Escape all HTML.
-      'filter_html_escape' => array(
-        'weight' => 0,
-        'status' => 1,
-      ),
-      // URL filter.
-      'filter_url' => array(
-        'weight' => 1,
-        'status' => 1,
-      ),
-      // Line break filter.
-      'filter_autop' => array(
-        'weight' => 2,
-        'status' => 1,
-      ),
-    ),
-  );
-  $plain_text_format = (object) $plain_text_format;
-  filter_format_save($plain_text_format);
-
-  // Set the fallback format to plain text.
-  variable_set('filter_fallback_format', $plain_text_format->format);
-}
-
-/**
- * Implements hook_update_dependencies().
- */
-function filter_update_dependencies() {
-  // filter_update_7005() migrates role permissions and therefore must run
-  // after the {role} and {role_permission} tables are properly set up, which
-  // happens in user_update_7007().
-  $dependencies['filter'][7005] = array(
-    'user' => 7007,
-  );
-
-  return $dependencies;
-}
-/**
- * @addtogroup updates-6.x-to-7.x
- * @{
- */
-
-/**
- * Upgrade the {filter_formats} table and rename it to {filter_format}.
- */
-function filter_update_7000() {
-  db_rename_table('filter_formats', 'filter_format');
-
-  // Add the new {filter_format}.status and {filter_format}.weight column.
-  db_add_field('filter_format', 'status', array(
-    'type' => 'int',
-    'unsigned' => TRUE,
-    'not null' => TRUE,
-    'default' => 1,
-    'size' => 'tiny',
-    'description' => 'The status of the text format. (1 = enabled, 0 = disabled)',
-  ));
-  db_add_field('filter_format', 'weight', array(
-    'type' => 'int',
-    'not null' => TRUE,
-    'default' => 0,
-    'description' => 'Weight of text format to use when listing.',
-  ), array(
-    'indexes' => array(
-      'status_weight' => array('status', 'weight'),
-    ),
-  ));
-}
-
-/**
- * Break out "escape HTML filter" option to its own filter.
- */
-function filter_update_7001() {
-  $result = db_query("SELECT format FROM {filter_format}")->fetchCol();
-  $insert = db_insert('filters')->fields(array('format', 'module', 'delta', 'weight'));
-
-  foreach ($result as $format_id) {
-    // Deprecated constants FILTER_HTML_STRIP = 1 and FILTER_HTML_ESCAPE = 2.
-    if (variable_get('filter_html_' . $format_id, 1) == 2) {
-      $insert->values(array(
-        'format' => $format_id,
-        'module' => 'filter',
-        'delta' => 4,
-        'weight' => 0,
-      ));
-    }
-    variable_del('filter_html_' . $format_id);
-  }
-
-  $insert->execute();
-}
-
-/**
- * Upgrade the {filter} table for core filters.
- */
-function filter_update_7003() {
-  // Duplicates the {filters} table since core cannot take care of the potential
-  // contributed module filters.
-  db_rename_table('filters', 'd6_upgrade_filter');
-  // Creates the Drupal 7 filter table.
-  $filter_table =  array(
-    'description' => 'Table that maps filters (HTML corrector) to text formats (Filtered HTML).',
-    'fields' => array(
-      'format' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Foreign key: The {filter_format}.format to which this filter is assigned.',
-      ),
-      'module' => array(
-        'type' => 'varchar',
-        'length' => 64,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'The origin module of the filter.',
-      ),
-      'name' => array(
-        'type' => 'varchar',
-        'length' => 32,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Name of the filter being referenced.',
-      ),
-      'weight' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Weight of filter within format.',
-      ),
-      'status' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Filter enabled status. (1 = enabled, 0 = disabled)',
-      ),
-      'settings' => array(
-        'type' => 'blob',
-        'not null' => FALSE,
-        'size' => 'big',
-        'serialize' => TRUE,
-        'description' => 'A serialized array of name value pairs that store the filter settings for the specific format.',
-      ),
-    ),
-    'primary key' => array('format', 'name'),
-    'indexes' => array(
-      'list' => array('weight', 'module', 'name'),
-    ),
-  );
-  db_create_table('filter', $filter_table);
-
-  // Get an array of the renamed filter deltas, organized by module.
-  $renamed_deltas = array(
-    'filter' => array(
-      '0' => 'filter_html',
-      '1' => 'filter_autop',
-      '2' => 'filter_url',
-      '3' => 'filter_htmlcorrector',
-      '4' => 'filter_html_escape',
-    ),
-    'php' => array(
-      '0' => 'php_code',
-    ),
-  );
-
-  // Loop through each filter and make changes to the core filter table by
-  // each record from the old to the new table.
-  foreach ($renamed_deltas as $module => $deltas) {
-    foreach ($deltas as $old_delta => $new_name) {
-      $query = db_select('d6_upgrade_filter')
-        ->fields('d6_upgrade_filter', array('format', 'weight'))
-        ->condition('module', $module)
-        ->condition('delta', $old_delta)
-        ->distinct();
-
-      foreach ($query->execute() as $record) {
-        // Port the filter settings.
-        $settings = array();
-        if ($new_name == 'filter_html') {
-          if ($setting = variable_get("allowed_html_{$record->format}", NULL)) {
-            $settings['allowed_html'] = $setting;
-            variable_del("allowed_html_{$record->format}");
-          }
-          if ($setting = variable_get("filter_html_help_{$record->format}", NULL)) {
-            $settings['filter_html_help'] = $setting;
-            variable_del("filter_html_help_{$record->format}");
-          }
-          if ($setting = variable_get("filter_html_nofollow_{$record->format}", NULL)) {
-            $settings['filter_html_nofollow'] = $setting;
-            variable_del("filter_html_nofollow_{$record->format}");
-          }
-        }
-        elseif ($new_name == 'filter_url') {
-          if ($setting = variable_get("filter_url_length_{$record->format}", NULL)) {
-            $settings['filter_url_length'] = $setting;
-            variable_del("filter_url_length_{$record->format}");
-          }
-        }
-
-        db_insert('filter')
-          ->fields(array(
-            'format' => $record->format,
-            'module' => $module,
-            'name' => $new_name,
-            'weight' => $record->weight,
-            'settings' => serialize($settings),
-            'status' => 1,
-          ))
-          ->execute();
-      }
-      db_delete('d6_upgrade_filter')
-        ->condition('module', $module)
-        ->condition('delta', $old_delta)
-        ->execute();
-    }
-  }
-}
-
-/**
- * Integrate text formats with the user permissions system.
- *
- * This function converts text format role assignments to use the new text
- * format permissions introduced in Drupal 7, creates a fallback (plain text)
- * format that is available to all users, and explicitly sets the text format
- * in cases that used to rely on a single site-wide default.
- */
-function filter_update_7005() {
-  // Move role data from the filter system to the user permission system.
-  $all_roles = array_keys(user_roles());
-  $default_format = variable_get('filter_default_format', 1);
-  $result = db_query("SELECT * FROM {filter_format}");
-  foreach ($result as $format) {
-    // We need to assign the default format to all roles (regardless of what
-    // was stored in the database) to preserve the behavior of the site at the
-    // moment of the upgrade.
-    $format_roles = ($format->format == $default_format ? $all_roles : explode(',', $format->roles));
-    foreach ($format_roles as $format_role) {
-      if (in_array($format_role, $all_roles)) {
-        _update_7000_user_role_grant_permissions($format_role, array('use text format ' . $format->format), 'filter');
-      }
-    }
-  }
-
-  // Drop the roles field from the {filter_format} table.
-  db_drop_field('filter_format', 'roles');
-
-  // Add a fallback text format which outputs plain text and appears last on
-  // the list for all users. Generate a unique name for it, starting with
-  // "Plain text".
-  $start_name = 'Plain text';
-  $format_name = $start_name;
-  while ($format = db_query('SELECT format FROM {filter_format} WHERE name = :name', array(':name' => $format_name))->fetchField()) {
-    $id = empty($id) ? 2 : $id + 1;
-    $format_name = $start_name . ' ' . $id;
-  }
-
-  // Insert the filter format.
-  $format_id = db_insert('filter_format')
-    ->fields(array(
-      'name' => $format_name,
-      'cache' => 1,
-      'weight' => 1,
-      'status' => 1,
-    ))
-    ->execute();
-
-  // This format should output plain text, so we escape all HTML and apply the
-  // line break and URL filters only.
-  db_insert('filter')
-    ->fields(array(
-      'format',
-      'name',
-      'weight',
-      'status',
-      'module',
-      'settings',
-    ))
-    ->values(array(
-      'format' => $format_id,
-      'name' => 'filter_html_escape',
-      'weight' => 0,
-      'status' => 1,
-      'module' => 'filter',
-      'settings' => serialize(array()),
-    ))
-    ->values(array(
-      'format' => $format_id,
-      'name' => 'filter_url',
-      'weight' => 1,
-      'status' => 1,
-      'module' => 'filter',
-      'settings' => serialize(array()),
-    ))
-    ->values(array(
-      'format' => $format_id,
-      'name' => 'filter_autop',
-      'weight' => 2,
-      'status' => 1,
-      'module' => 'filter',
-      'settings' => serialize(array()),
-    ))
-    ->execute();
-
-  variable_set('filter_fallback_format', $format_id);
-  drupal_set_message('A new <em>Plain text</em> format has been created which will be available to all users. You can configure this text format on the <a href="' . url('admin/config/content/formats/' . $format) . '">text format configuration page</a>.');
-
-  // Move the former site-wide default text format to the top of the list, so
-  // that it continues to be the default text format for all users.
-  db_update('filter_format')
-    ->fields(array('weight' => -1))
-    ->condition('format', $default_format)
-    ->execute();
-
-  // We do not delete the 'filter_default_format' variable, since other modules
-  // need it in their update functions; for an example, see user_update_7010().
-  // @todo This variable can be deleted in Drupal 8.
-}
-
-/**
- * Grant usage of all text formats to user roles having the 'administer filters' permission.
- */
-function filter_update_7008() {
-  // Build the list of permissions to grant.
-  $permissions = array();
-  foreach (db_query('SELECT format FROM {filter_format}')->fetchCol() as $format_id) {
-    if ($format_id != variable_get('filter_fallback_format')) {
-      $permissions[] = 'use text format ' . $format_id;
-    }
-  }
-  // Grant text format permissions to all roles that can 'administer filters'.
-  // Albeit anonymous users *should not* have the permission, we cannot presume
-  // that they do not or must not.
-  if ($roles = user_roles(FALSE, 'administer filters')) {
-    foreach ($roles as $rid => $name) {
-      _update_7000_user_role_grant_permissions($rid, $permissions, 'filter');
-    }
-  }
-}
-
-/**
- * Converts fields that store serialized variables from text to blob.
- */
-function filter_update_7009() {
-  $schema = system_schema_cache_7054();
-  db_drop_table('cache_filter');
-  db_create_table('cache_filter', $schema);
-}
-
-/**
- * Change {filter_format}.format and {filter}.format into varchar.
- */
-function filter_update_7010() {
-  db_change_field('filter_format', 'format', 'format', array(
-    'type' => 'varchar',
-    'length' => 255,
-    'not null' => TRUE,
-    'description' => 'Primary Key: Unique machine name of the format.',
-  ));
-  db_change_field('filter', 'format', 'format', array(
-    'type' => 'varchar',
-    'length' => 255,
-    'not null' => TRUE,
-    'description' => 'Foreign key: The {filter_format}.format to which this filter is assigned.',
-  ));
-}
-
-/**
- * @} End of "addtogroup updates-6.x-to-7.x".
- */
diff --git a/modules/filter/filter.js b/modules/filter/filter.js
deleted file mode 100644
index c286159..0000000
--- a/modules/filter/filter.js
+++ /dev/null
@@ -1,20 +0,0 @@
-(function ($) {
-
-/**
- * Automatically display the guidelines of the selected text format.
- */
-Drupal.behaviors.filterGuidelines = {
-  attach: function (context) {
-    $('.filter-guidelines', context).once('filter-guidelines')
-      .find(':header').hide()
-      .closest('.filter-wrapper').find('select.filter-list')
-      .bind('change', function () {
-        $(this).closest('.filter-wrapper')
-          .find('.filter-guidelines-item').hide()
-          .siblings('.filter-guidelines-' + this.value).show();
-      })
-      .change();
-  }
-};
-
-})(jQuery);
diff --git a/modules/filter/filter.pages.inc b/modules/filter/filter.pages.inc
deleted file mode 100644
index 50f8117..0000000
--- a/modules/filter/filter.pages.inc
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-
-/**
- * @file
- * User page callbacks for the Filter module.
- */
-
-/**
- * Page callback: Displays a page with long filter tips.
- *
- * @return string
- *   An HTML-formatted string.
- *
- * @see filter_menu()
- * @see theme_filter_tips()
- */
-function filter_tips_long() {
-  $format_id = arg(2);
-  if ($format_id) {
-    $output = theme('filter_tips', array('tips' => _filter_tips($format_id, TRUE), 'long' => TRUE));
-  }
-  else {
-    $output = theme('filter_tips', array('tips' => _filter_tips(-1, TRUE), 'long' => TRUE));
-  }
-  return $output;
-}
-
-/**
- * Returns HTML for a set of filter tips.
- *
- * @param $variables
- *   An associative array containing:
- *   - tips: An array containing descriptions and a CSS ID in the form of
- *     'module-name/filter-id' (only used when $long is TRUE) for each
- *     filter in one or more text formats. Example:
- *     @code
- *       array(
- *         'Full HTML' => array(
- *           0 => array(
- *             'tip' => 'Web page addresses and e-mail addresses turn into links automatically.',
- *             'id' => 'filter/2',
- *           ),
- *         ),
- *       );
- *     @endcode
- *   - long: (optional) Whether the passed-in filter tips contain extended
- *     explanations, i.e. intended to be output on the path 'filter/tips'
- *     (TRUE), or are in a short format, i.e. suitable to be displayed below a
- *     form element. Defaults to FALSE.
- *
- * @see _filter_tips()
- * @ingroup themeable
- */
-function theme_filter_tips($variables) {
-  $tips = $variables['tips'];
-  $long = $variables['long'];
-  $output = '';
-
-  $multiple = count($tips) > 1;
-  if ($multiple) {
-    $output = '<h2>' . t('Text Formats') . '</h2>';
-  }
-
-  if (count($tips)) {
-    if ($multiple) {
-      $output .= '<div class="compose-tips">';
-    }
-    foreach ($tips as $name => $tiplist) {
-      if ($multiple) {
-        $output .= '<div class="filter-type filter-' . drupal_html_class($name) . '">';
-        $output .= '<h3>' . $name . '</h3>';
-      }
-
-      if (count($tiplist) > 0) {
-        $output .= '<ul class="tips">';
-        foreach ($tiplist as $tip) {
-          $output .= '<li' . ($long ? ' id="filter-' . str_replace("/", "-", $tip['id']) . '">' : '>') . $tip['tip'] . '</li>';
-        }
-        $output .= '</ul>';
-      }
-
-      if ($multiple) {
-        $output .= '</div>';
-      }
-    }
-    if ($multiple) {
-      $output .= '</div>';
-    }
-  }
-
-  return $output;
-}
diff --git a/modules/filter/filter.test b/modules/filter/filter.test
deleted file mode 100644
index cc0295b..0000000
--- a/modules/filter/filter.test
+++ /dev/null
@@ -1,1972 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for filter.module.
- */
-
-/**
- * Tests for text format and filter CRUD operations.
- */
-class FilterCRUDTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Filter CRUD operations',
-      'description' => 'Test creation, loading, updating, deleting of text formats and filters.',
-      'group' => 'Filter',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('filter_test');
-  }
-
-  /**
-   * Tests CRUD operations for text formats and filters.
-   */
-  function testTextFormatCRUD() {
-    // Add a text format with minimum data only.
-    $format = new stdClass();
-    $format->format = 'empty_format';
-    $format->name = 'Empty format';
-    filter_format_save($format);
-    $this->verifyTextFormat($format);
-    $this->verifyFilters($format);
-
-    // Add another text format specifying all possible properties.
-    $format = new stdClass();
-    $format->format = 'custom_format';
-    $format->name = 'Custom format';
-    $format->filters = array(
-      'filter_url' => array(
-        'status' => 1,
-        'settings' => array(
-          'filter_url_length' => 30,
-        ),
-      ),
-    );
-    filter_format_save($format);
-    $this->verifyTextFormat($format);
-    $this->verifyFilters($format);
-
-    // Alter some text format properties and save again.
-    $format->name = 'Altered format';
-    $format->filters['filter_url']['status'] = 0;
-    $format->filters['filter_autop']['status'] = 1;
-    filter_format_save($format);
-    $this->verifyTextFormat($format);
-    $this->verifyFilters($format);
-
-    // Add a uncacheable filter and save again.
-    $format->filters['filter_test_uncacheable']['status'] = 1;
-    filter_format_save($format);
-    $this->verifyTextFormat($format);
-    $this->verifyFilters($format);
-
-    // Disable the text format.
-    filter_format_disable($format);
-
-    $db_format = db_query("SELECT * FROM {filter_format} WHERE format = :format", array(':format' => $format->format))->fetchObject();
-    $this->assertFalse($db_format->status, 'Database: Disabled text format is marked as disabled.');
-    $formats = filter_formats();
-    $this->assertTrue(!isset($formats[$format->format]), 'filter_formats: Disabled text format no longer exists.');
-  }
-
-  /**
-   * Verifies that a text format is properly stored.
-   */
-  function verifyTextFormat($format) {
-    $t_args = array('%format' => $format->name);
-    // Verify text format database record.
-    $db_format = db_select('filter_format', 'ff')
-      ->fields('ff')
-      ->condition('format', $format->format)
-      ->execute()
-      ->fetchObject();
-    $this->assertEqual($db_format->format, $format->format, format_string('Database: Proper format id for text format %format.', $t_args));
-    $this->assertEqual($db_format->name, $format->name, format_string('Database: Proper title for text format %format.', $t_args));
-    $this->assertEqual($db_format->cache, $format->cache, format_string('Database: Proper cache indicator for text format %format.', $t_args));
-    $this->assertEqual($db_format->weight, $format->weight, format_string('Database: Proper weight for text format %format.', $t_args));
-
-    // Verify filter_format_load().
-    $filter_format = filter_format_load($format->format);
-    $this->assertEqual($filter_format->format, $format->format, format_string('filter_format_load: Proper format id for text format %format.', $t_args));
-    $this->assertEqual($filter_format->name, $format->name, format_string('filter_format_load: Proper title for text format %format.', $t_args));
-    $this->assertEqual($filter_format->cache, $format->cache, format_string('filter_format_load: Proper cache indicator for text format %format.', $t_args));
-    $this->assertEqual($filter_format->weight, $format->weight, format_string('filter_format_load: Proper weight for text format %format.', $t_args));
-
-    // Verify the 'cache' text format property according to enabled filters.
-    $filter_info = filter_get_filters();
-    $filters = filter_list_format($filter_format->format);
-    $cacheable = TRUE;
-    foreach ($filters as $name => $filter) {
-      // If this filter is not cacheable, update $cacheable accordingly, so we
-      // can verify $format->cache after iterating over all filters.
-      if ($filter->status && isset($filter_info[$name]['cache']) && !$filter_info[$name]['cache']) {
-        $cacheable = FALSE;
-        break;
-      }
-    }
-    $this->assertEqual($filter_format->cache, $cacheable, 'Text format contains proper cache property.');
-  }
-
-  /**
-   * Verifies that filters are properly stored for a text format.
-   */
-  function verifyFilters($format) {
-    // Verify filter database records.
-    $filters = db_query("SELECT * FROM {filter} WHERE format = :format", array(':format' => $format->format))->fetchAllAssoc('name');
-    $format_filters = $format->filters;
-    foreach ($filters as $name => $filter) {
-      $t_args = array('%format' => $format->name, '%filter' => $name);
-
-      // Verify that filter status is properly stored.
-      $this->assertEqual($filter->status, $format_filters[$name]['status'], format_string('Database: Proper status for %filter in text format %format.', $t_args));
-
-      // Verify that filter settings were properly stored.
-      $this->assertEqual(unserialize($filter->settings), isset($format_filters[$name]['settings']) ? $format_filters[$name]['settings'] : array(), format_string('Database: Proper filter settings for %filter in text format %format.', $t_args));
-
-      // Verify that each filter has a module name assigned.
-      $this->assertTrue(!empty($filter->module), format_string('Database: Proper module name for %filter in text format %format.', $t_args));
-
-      // Remove the filter from the copy of saved $format to check whether all
-      // filters have been processed later.
-      unset($format_filters[$name]);
-    }
-    // Verify that all filters have been processed.
-    $this->assertTrue(empty($format_filters), 'Database contains values for all filters in the saved format.');
-
-    // Verify filter_list_format().
-    $filters = filter_list_format($format->format);
-    $format_filters = $format->filters;
-    foreach ($filters as $name => $filter) {
-      $t_args = array('%format' => $format->name, '%filter' => $name);
-
-      // Verify that filter status is properly stored.
-      $this->assertEqual($filter->status, $format_filters[$name]['status'], format_string('filter_list_format: Proper status for %filter in text format %format.', $t_args));
-
-      // Verify that filter settings were properly stored.
-      $this->assertEqual($filter->settings, isset($format_filters[$name]['settings']) ? $format_filters[$name]['settings'] : array(), format_string('filter_list_format: Proper filter settings for %filter in text format %format.', $t_args));
-
-      // Verify that each filter has a module name assigned.
-      $this->assertTrue(!empty($filter->module), format_string('filter_list_format: Proper module name for %filter in text format %format.', $t_args));
-
-      // Remove the filter from the copy of saved $format to check whether all
-      // filters have been processed later.
-      unset($format_filters[$name]);
-    }
-    // Verify that all filters have been processed.
-    $this->assertTrue(empty($format_filters), 'filter_list_format: Loaded filters contain values for all filters in the saved format.');
-  }
-}
-
-/**
- * Tests the administrative functionality of the Filter module.
- */
-class FilterAdminTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Filter administration functionality',
-      'description' => 'Thoroughly test the administrative interface of the filter module.',
-      'group' => 'Filter',
-    );
-  }
-
-  function setUp() {
-    parent::setUp();
-
-    // Create users.
-    $filtered_html_format = filter_format_load('filtered_html');
-    $full_html_format = filter_format_load('full_html');
-    $this->admin_user = $this->drupalCreateUser(array(
-      'administer filters',
-      filter_permission_name($filtered_html_format),
-      filter_permission_name($full_html_format),
-    ));
-
-    $this->web_user = $this->drupalCreateUser(array('create page content', 'edit own page content'));
-    $this->drupalLogin($this->admin_user);
-  }
-
-  /**
-   * Tests the format administration functionality.
-   */
-  function testFormatAdmin() {
-    // Add text format.
-    $this->drupalGet('admin/config/content/formats');
-    $this->clickLink('Add text format');
-    $format_id = drupal_strtolower($this->randomName());
-    $name = $this->randomName();
-    $edit = array(
-      'format' => $format_id,
-      'name' => $name,
-    );
-    $this->drupalPost(NULL, $edit, t('Save configuration'));
-
-    // Verify default weight of the text format.
-    $this->drupalGet('admin/config/content/formats');
-    $this->assertFieldByName("formats[$format_id][weight]", 0, 'Text format weight was saved.');
-
-    // Change the weight of the text format.
-    $edit = array(
-      "formats[$format_id][weight]" => 5,
-    );
-    $this->drupalPost('admin/config/content/formats', $edit, t('Save changes'));
-    $this->assertFieldByName("formats[$format_id][weight]", 5, 'Text format weight was saved.');
-
-    // Edit text format.
-    $this->drupalGet('admin/config/content/formats');
-    $this->assertLinkByHref('admin/config/content/formats/' . $format_id);
-    $this->drupalGet('admin/config/content/formats/' . $format_id);
-    $this->drupalPost(NULL, array(), t('Save configuration'));
-
-    // Verify that the custom weight of the text format has been retained.
-    $this->drupalGet('admin/config/content/formats');
-    $this->assertFieldByName("formats[$format_id][weight]", 5, 'Text format weight was retained.');
-
-    // Disable text format.
-    $this->assertLinkByHref('admin/config/content/formats/' . $format_id . '/disable');
-    $this->drupalGet('admin/config/content/formats/' . $format_id . '/disable');
-    $this->drupalPost(NULL, array(), t('Disable'));
-
-    // Verify that disabled text format no longer exists.
-    $this->drupalGet('admin/config/content/formats/' . $format_id);
-    $this->assertResponse(404, 'Disabled text format no longer exists.');
-
-    // Attempt to create a format of the same machine name as the disabled
-    // format but with a different human readable name.
-    $edit = array(
-      'format' => $format_id,
-      'name' => 'New format',
-    );
-    $this->drupalPost('admin/config/content/formats/add', $edit, t('Save configuration'));
-    $this->assertText('The machine-readable name is already in use. It must be unique.');
-
-    // Attempt to create a format of the same human readable name as the
-    // disabled format but with a different machine name.
-    $edit = array(
-      'format' => 'new_format',
-      'name' => $name,
-    );
-    $this->drupalPost('admin/config/content/formats/add', $edit, t('Save configuration'));
-    $this->assertRaw(t('Text format names must be unique. A format named %name already exists.', array(
-      '%name' => $name,
-    )));
-  }
-
-  /**
-   * Tests filter administration functionality.
-   */
-  function testFilterAdmin() {
-    // URL filter.
-    $first_filter = 'filter_url';
-    // Line filter.
-    $second_filter = 'filter_autop';
-
-    $filtered = 'filtered_html';
-    $full = 'full_html';
-    $plain = 'plain_text';
-
-    // Check that the fallback format exists and cannot be disabled.
-    $this->assertTrue($plain == filter_fallback_format(), 'The fallback format is set to plain text.');
-    $this->drupalGet('admin/config/content/formats');
-    $this->assertNoRaw('admin/config/content/formats/' . $plain . '/disable', 'Disable link for the fallback format not found.');
-    $this->drupalGet('admin/config/content/formats/' . $plain . '/disable');
-    $this->assertResponse(403, 'The fallback format cannot be disabled.');
-
-    // Verify access permissions to Full HTML format.
-    $this->assertTrue(filter_access(filter_format_load($full), $this->admin_user), 'Admin user may use Full HTML.');
-    $this->assertFalse(filter_access(filter_format_load($full), $this->web_user), 'Web user may not use Full HTML.');
-
-    // Add an additional tag.
-    $edit = array();
-    $edit['filters[filter_html][settings][allowed_html]'] = '<a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <quote>';
-    $this->drupalPost('admin/config/content/formats/' . $filtered, $edit, t('Save configuration'));
-    $this->assertFieldByName('filters[filter_html][settings][allowed_html]', $edit['filters[filter_html][settings][allowed_html]'], 'Allowed HTML tag added.');
-
-    $result = db_query('SELECT * FROM {cache_filter}')->fetchObject();
-    $this->assertFalse($result, 'Cache cleared.');
-
-    $elements = $this->xpath('//select[@name=:first]/following::select[@name=:second]', array(
-      ':first' => 'filters[' . $first_filter . '][weight]',
-      ':second' => 'filters[' . $second_filter . '][weight]',
-    ));
-    $this->assertTrue(!empty($elements), 'Order confirmed in admin interface.');
-
-    // Reorder filters.
-    $edit = array();
-    $edit['filters[' . $second_filter . '][weight]'] = 1;
-    $edit['filters[' . $first_filter . '][weight]'] = 2;
-    $this->drupalPost(NULL, $edit, t('Save configuration'));
-    $this->assertFieldByName('filters[' . $second_filter . '][weight]', 1, 'Order saved successfully.');
-    $this->assertFieldByName('filters[' . $first_filter . '][weight]', 2, 'Order saved successfully.');
-
-    $elements = $this->xpath('//select[@name=:first]/following::select[@name=:second]', array(
-      ':first' => 'filters[' . $second_filter . '][weight]',
-      ':second' => 'filters[' . $first_filter . '][weight]',
-    ));
-    $this->assertTrue(!empty($elements), 'Reorder confirmed in admin interface.');
-
-    $result = db_query('SELECT * FROM {filter} WHERE format = :format ORDER BY weight ASC', array(':format' => $filtered));
-    $filters = array();
-    foreach ($result as $filter) {
-      if ($filter->name == $second_filter || $filter->name == $first_filter) {
-        $filters[] = $filter;
-      }
-    }
-    $this->assertTrue(($filters[0]->name == $second_filter && $filters[1]->name == $first_filter), 'Order confirmed in database.');
-
-    // Add format.
-    $edit = array();
-    $edit['format'] = drupal_strtolower($this->randomName());
-    $edit['name'] = $this->randomName();
-    $edit['roles[' . DRUPAL_AUTHENTICATED_RID . ']'] = 1;
-    $edit['filters[' . $second_filter . '][status]'] = TRUE;
-    $edit['filters[' . $first_filter . '][status]'] = TRUE;
-    $this->drupalPost('admin/config/content/formats/add', $edit, t('Save configuration'));
-    $this->assertRaw(t('Added text format %format.', array('%format' => $edit['name'])), 'New filter created.');
-
-    drupal_static_reset('filter_formats');
-    $format = filter_format_load($edit['format']);
-    $this->assertNotNull($format, 'Format found in database.');
-
-    $this->assertFieldByName('roles[' . DRUPAL_AUTHENTICATED_RID . ']', '', 'Role found.');
-    $this->assertFieldByName('filters[' . $second_filter . '][status]', '', 'Line break filter found.');
-    $this->assertFieldByName('filters[' . $first_filter . '][status]', '', 'Url filter found.');
-
-    // Disable new filter.
-    $this->drupalPost('admin/config/content/formats/' . $format->format . '/disable', array(), t('Disable'));
-    $this->assertRaw(t('Disabled text format %format.', array('%format' => $edit['name'])), 'Format successfully disabled.');
-
-    // Allow authenticated users on full HTML.
-    $format = filter_format_load($full);
-    $edit = array();
-    $edit['roles[' . DRUPAL_ANONYMOUS_RID . ']'] = 0;
-    $edit['roles[' . DRUPAL_AUTHENTICATED_RID . ']'] = 1;
-    $this->drupalPost('admin/config/content/formats/' . $full, $edit, t('Save configuration'));
-    $this->assertRaw(t('The text format %format has been updated.', array('%format' => $format->name)), 'Full HTML format successfully updated.');
-
-    // Switch user.
-    $this->drupalLogout();
-    $this->drupalLogin($this->web_user);
-
-    $this->drupalGet('node/add/page');
-    $this->assertRaw('<option value="' . $full . '">Full HTML</option>', 'Full HTML filter accessible.');
-
-    // Use filtered HTML and see if it removes tags that are not allowed.
-    $body = '<em>' . $this->randomName() . '</em>';
-    $extra_text = 'text';
-    $text = $body . '<random>' . $extra_text . '</random>';
-
-    $edit = array();
-    $langcode = LANGUAGE_NONE;
-    $edit["title"] = $this->randomName();
-    $edit["body[$langcode][0][value]"] = $text;
-    $edit["body[$langcode][0][format]"] = $filtered;
-    $this->drupalPost('node/add/page', $edit, t('Save'));
-    $this->assertRaw(t('Basic page %title has been created.', array('%title' => $edit["title"])), 'Filtered node created.');
-
-    $node = $this->drupalGetNodeByTitle($edit["title"]);
-    $this->assertTrue($node, 'Node found in database.');
-
-    $this->drupalGet('node/' . $node->nid);
-    $this->assertRaw($body . $extra_text, 'Filter removed invalid tag.');
-
-    // Use plain text and see if it escapes all tags, whether allowed or not.
-    $edit = array();
-    $edit["body[$langcode][0][format]"] = $plain;
-    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
-    $this->drupalGet('node/' . $node->nid);
-    $this->assertText(check_plain($text), 'The "Plain text" text format escapes all HTML tags.');
-
-    // Switch user.
-    $this->drupalLogout();
-    $this->drupalLogin($this->admin_user);
-
-    // Clean up.
-    // Allowed tags.
-    $edit = array();
-    $edit['filters[filter_html][settings][allowed_html]'] = '<a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>';
-    $this->drupalPost('admin/config/content/formats/' . $filtered, $edit, t('Save configuration'));
-    $this->assertFieldByName('filters[filter_html][settings][allowed_html]', $edit['filters[filter_html][settings][allowed_html]'], 'Changes reverted.');
-
-    // Full HTML.
-    $edit = array();
-    $edit['roles[' . DRUPAL_AUTHENTICATED_RID . ']'] = FALSE;
-    $this->drupalPost('admin/config/content/formats/' . $full, $edit, t('Save configuration'));
-    $this->assertRaw(t('The text format %format has been updated.', array('%format' => $format->name)), 'Full HTML format successfully reverted.');
-    $this->assertFieldByName('roles[' . DRUPAL_AUTHENTICATED_RID . ']', $edit['roles[' . DRUPAL_AUTHENTICATED_RID . ']'], 'Changes reverted.');
-
-    // Filter order.
-    $edit = array();
-    $edit['filters[' . $second_filter . '][weight]'] = 2;
-    $edit['filters[' . $first_filter . '][weight]'] = 1;
-    $this->drupalPost('admin/config/content/formats/' . $filtered, $edit, t('Save configuration'));
-    $this->assertFieldByName('filters[' . $second_filter . '][weight]', $edit['filters[' . $second_filter . '][weight]'], 'Changes reverted.');
-    $this->assertFieldByName('filters[' . $first_filter . '][weight]', $edit['filters[' . $first_filter . '][weight]'], 'Changes reverted.');
-  }
-
-  /**
-   * Tests the URL filter settings form is properly validated.
-   */
-  function testUrlFilterAdmin() {
-    // The form does not save with an invalid filter URL length.
-    $edit = array(
-      'filters[filter_url][settings][filter_url_length]' => $this->randomName(4),
-    );
-    $this->drupalPost('admin/config/content/formats/filtered_html', $edit, t('Save configuration'));
-    $this->assertNoRaw(t('The text format %format has been updated.', array('%format' => 'Filtered HTML')));
-  }
-}
-
-/**
- * Tests the filter format access functionality in the Filter module.
- */
-class FilterFormatAccessTestCase extends DrupalWebTestCase {
-  /**
-   * A user with administrative permissions.
-   *
-   * @var object
-   */
-  protected $admin_user;
-
-  /**
-   * A user with 'administer filters' permission.
-   *
-   * @var object
-   */
-  protected $filter_admin_user;
-
-  /**
-   * A user with permission to create and edit own content.
-   *
-   * @var object
-   */
-  protected $web_user;
-
-  /**
-   * An object representing an allowed text format.
-   *
-   * @var object
-   */
-  protected $allowed_format;
-
-  /**
-   * An object representing a disallowed text format.
-   *
-   * @var object
-   */
-  protected $disallowed_format;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Filter format access',
-      'description' => 'Tests access to text formats.',
-      'group' => 'Filter',
-    );
-  }
-
-  function setUp() {
-    parent::setUp();
-
-    // Create a user who can administer text formats, but does not have
-    // specific permission to use any of them.
-    $this->filter_admin_user = $this->drupalCreateUser(array(
-      'administer filters',
-      'create page content',
-      'edit any page content',
-    ));
-
-    // Create two text formats.
-    $this->drupalLogin($this->filter_admin_user);
-    $formats = array();
-    for ($i = 0; $i < 2; $i++) {
-      $edit = array(
-        'format' => drupal_strtolower($this->randomName()),
-        'name' => $this->randomName(),
-      );
-      $this->drupalPost('admin/config/content/formats/add', $edit, t('Save configuration'));
-      $this->resetFilterCaches();
-      $formats[] = filter_format_load($edit['format']);
-    }
-    list($this->allowed_format, $this->disallowed_format) = $formats;
-    $this->drupalLogout();
-
-    // Create a regular user with access to one of the formats.
-    $this->web_user = $this->drupalCreateUser(array(
-      'create page content',
-      'edit any page content',
-      filter_permission_name($this->allowed_format),
-    ));
-
-    // Create an administrative user who has access to use both formats.
-    $this->admin_user = $this->drupalCreateUser(array(
-      'administer filters',
-      'create page content',
-      'edit any page content',
-      filter_permission_name($this->allowed_format),
-      filter_permission_name($this->disallowed_format),
-    ));
-  }
-
-  /**
-   * Tests the Filter format access permissions functionality.
-   */
-  function testFormatPermissions() {
-    // Make sure that a regular user only has access to the text format they
-    // were granted access to, as well to the fallback format.
-    $this->assertTrue(filter_access($this->allowed_format, $this->web_user), 'A regular user has access to a text format they were granted access to.');
-    $this->assertFalse(filter_access($this->disallowed_format, $this->web_user), 'A regular user does not have access to a text format they were not granted access to.');
-    $this->assertTrue(filter_access(filter_format_load(filter_fallback_format()), $this->web_user), 'A regular user has access to the fallback format.');
-
-    // Perform similar checks as above, but now against the entire list of
-    // available formats for this user.
-    $this->assertTrue(in_array($this->allowed_format->format, array_keys(filter_formats($this->web_user))), 'The allowed format appears in the list of available formats for a regular user.');
-    $this->assertFalse(in_array($this->disallowed_format->format, array_keys(filter_formats($this->web_user))), 'The disallowed format does not appear in the list of available formats for a regular user.');
-    $this->assertTrue(in_array(filter_fallback_format(), array_keys(filter_formats($this->web_user))), 'The fallback format appears in the list of available formats for a regular user.');
-
-    // Make sure that a regular user only has permission to use the format
-    // they were granted access to.
-    $this->assertTrue(user_access(filter_permission_name($this->allowed_format), $this->web_user), 'A regular user has permission to use the allowed text format.');
-    $this->assertFalse(user_access(filter_permission_name($this->disallowed_format), $this->web_user), 'A regular user does not have permission to use the disallowed text format.');
-
-    // Make sure that the allowed format appears on the node form and that
-    // the disallowed format does not.
-    $this->drupalLogin($this->web_user);
-    $this->drupalGet('node/add/page');
-    $langcode = LANGUAGE_NONE;
-    $elements = $this->xpath('//select[@name=:name]/option', array(
-      ':name' => "body[$langcode][0][format]",
-      ':option' => $this->allowed_format->format,
-    ));
-    $options = array();
-    foreach ($elements as $element) {
-      $options[(string) $element['value']] = $element;
-    }
-    $this->assertTrue(isset($options[$this->allowed_format->format]), 'The allowed text format appears as an option when adding a new node.');
-    $this->assertFalse(isset($options[$this->disallowed_format->format]), 'The disallowed text format does not appear as an option when adding a new node.');
-    $this->assertTrue(isset($options[filter_fallback_format()]), 'The fallback format appears as an option when adding a new node.');
-  }
-
-  /**
-   * Tests if text format is available to a role.
-   */
-  function testFormatRoles() {
-    // Get the role ID assigned to the regular user; it must be the maximum.
-    $rid = max(array_keys($this->web_user->roles));
-
-    // Check that this role appears in the list of roles that have access to an
-    // allowed text format, but does not appear in the list of roles that have
-    // access to a disallowed text format.
-    $this->assertTrue(in_array($rid, array_keys(filter_get_roles_by_format($this->allowed_format))), 'A role which has access to a text format appears in the list of roles that have access to that format.');
-    $this->assertFalse(in_array($rid, array_keys(filter_get_roles_by_format($this->disallowed_format))), 'A role which does not have access to a text format does not appear in the list of roles that have access to that format.');
-
-    // Check that the correct text format appears in the list of formats
-    // available to that role.
-    $this->assertTrue(in_array($this->allowed_format->format, array_keys(filter_get_formats_by_role($rid))), 'A text format which a role has access to appears in the list of formats available to that role.');
-    $this->assertFalse(in_array($this->disallowed_format->format, array_keys(filter_get_formats_by_role($rid))), 'A text format which a role does not have access to does not appear in the list of formats available to that role.');
-
-    // Check that the fallback format is always allowed.
-    $this->assertEqual(filter_get_roles_by_format(filter_format_load(filter_fallback_format())), user_roles(), 'All roles have access to the fallback format.');
-    $this->assertTrue(in_array(filter_fallback_format(), array_keys(filter_get_formats_by_role($rid))), 'The fallback format appears in the list of allowed formats for any role.');
-  }
-
-  /**
-   * Tests editing a page using a disallowed text format.
-   *
-   * Verifies that regular users and administrators are able to edit a page, but
-   * not allowed to change the fields which use an inaccessible text format.
-   * Also verifies that fields which use a text format that does not exist can
-   * be edited by administrators only, but that the administrator is forced to
-   * choose a new format before saving the page.
-   */
-  function testFormatWidgetPermissions() {
-    $langcode = LANGUAGE_NONE;
-    $title_key = "title";
-    $body_value_key = "body[$langcode][0][value]";
-    $body_format_key = "body[$langcode][0][format]";
-
-    // Create node to edit.
-    $this->drupalLogin($this->admin_user);
-    $edit = array();
-    $edit['title'] = $this->randomName(8);
-    $edit[$body_value_key] = $this->randomName(16);
-    $edit[$body_format_key] = $this->disallowed_format->format;
-    $this->drupalPost('node/add/page', $edit, t('Save'));
-    $node = $this->drupalGetNodeByTitle($edit['title']);
-
-    // Try to edit with a less privileged user.
-    $this->drupalLogin($this->web_user);
-    $this->drupalGet('node/' . $node->nid);
-    $this->clickLink(t('Edit'));
-
-    // Verify that body field is read-only and contains replacement value.
-    $this->assertFieldByXPath("//textarea[@name='$body_value_key' and @disabled='disabled']", t('This field has been disabled because you do not have sufficient permissions to edit it.'), 'Text format access denied message found.');
-
-    // Verify that title can be changed, but preview displays original body.
-    $new_edit = array();
-    $new_edit['title'] = $this->randomName(8);
-    $this->drupalPost(NULL, $new_edit, t('Preview'));
-    $this->assertText($edit[$body_value_key], 'Old body found in preview.');
-
-    // Save and verify that only the title was changed.
-    $this->drupalPost(NULL, $new_edit, t('Save'));
-    $this->assertNoText($edit['title'], 'Old title not found.');
-    $this->assertText($new_edit['title'], 'New title found.');
-    $this->assertText($edit[$body_value_key], 'Old body found.');
-
-    // Check that even an administrator with "administer filters" permission
-    // cannot edit the body field if they do not have specific permission to
-    // use its stored format. (This must be disallowed so that the
-    // administrator is never forced to switch the text format to something
-    // else.)
-    $this->drupalLogin($this->filter_admin_user);
-    $this->drupalGet('node/' . $node->nid . '/edit');
-    $this->assertFieldByXPath("//textarea[@name='$body_value_key' and @disabled='disabled']", t('This field has been disabled because you do not have sufficient permissions to edit it.'), 'Text format access denied message found.');
-
-    // Disable the text format used above.
-    filter_format_disable($this->disallowed_format);
-    $this->resetFilterCaches();
-
-    // Log back in as the less privileged user and verify that the body field
-    // is still disabled, since the less privileged user should not be able to
-    // edit content that does not have an assigned format.
-    $this->drupalLogin($this->web_user);
-    $this->drupalGet('node/' . $node->nid . '/edit');
-    $this->assertFieldByXPath("//textarea[@name='$body_value_key' and @disabled='disabled']", t('This field has been disabled because you do not have sufficient permissions to edit it.'), 'Text format access denied message found.');
-
-    // Log back in as the filter administrator and verify that the body field
-    // can be edited.
-    $this->drupalLogin($this->filter_admin_user);
-    $this->drupalGet('node/' . $node->nid . '/edit');
-    $this->assertNoFieldByXPath("//textarea[@name='$body_value_key' and @disabled='disabled']", NULL, 'Text format access denied message not found.');
-    $this->assertFieldByXPath("//select[@name='$body_format_key']", NULL, 'Text format selector found.');
-
-    // Verify that trying to save the node without selecting a new text format
-    // produces an error message, and does not result in the node being saved.
-    $old_title = $new_edit['title'];
-    $new_title = $this->randomName(8);
-    $edit = array('title' => $new_title);
-    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
-    $this->assertText(t('!name field is required.', array('!name' => t('Text format'))), 'Error message is displayed.');
-    $this->drupalGet('node/' . $node->nid);
-    $this->assertText($old_title, 'Old title found.');
-    $this->assertNoText($new_title, 'New title not found.');
-
-    // Now select a new text format and make sure the node can be saved.
-    $edit[$body_format_key] = filter_fallback_format();
-    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
-    $this->assertUrl('node/' . $node->nid);
-    $this->assertText($new_title, 'New title found.');
-    $this->assertNoText($old_title, 'Old title not found.');
-
-    // Switch the text format to a new one, then disable that format and all
-    // other formats on the site (leaving only the fallback format).
-    $this->drupalLogin($this->admin_user);
-    $edit = array($body_format_key => $this->allowed_format->format);
-    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
-    $this->assertUrl('node/' . $node->nid);
-    foreach (filter_formats() as $format) {
-      if ($format->format != filter_fallback_format()) {
-        filter_format_disable($format);
-      }
-    }
-
-    // Since there is now only one available text format, the widget for
-    // selecting a text format would normally not display when the content is
-    // edited. However, we need to verify that the filter administrator still
-    // is forced to make a conscious choice to reassign the text to a different
-    // format.
-    $this->drupalLogin($this->filter_admin_user);
-    $old_title = $new_title;
-    $new_title = $this->randomName(8);
-    $edit = array('title' => $new_title);
-    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
-    $this->assertText(t('!name field is required.', array('!name' => t('Text format'))), 'Error message is displayed.');
-    $this->drupalGet('node/' . $node->nid);
-    $this->assertText($old_title, 'Old title found.');
-    $this->assertNoText($new_title, 'New title not found.');
-    $edit[$body_format_key] = filter_fallback_format();
-    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
-    $this->assertUrl('node/' . $node->nid);
-    $this->assertText($new_title, 'New title found.');
-    $this->assertNoText($old_title, 'Old title not found.');
-  }
-
-  /**
-   * Rebuilds text format and permission caches in the thread running the tests.
-   */
-  protected function resetFilterCaches() {
-    filter_formats_reset();
-    $this->checkPermissions(array(), TRUE);
-  }
-}
-
-/**
- * Tests the default filter functionality in the Filter module.
- */
-class FilterDefaultFormatTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Default text format functionality',
-      'description' => 'Test the default text formats for different users.',
-      'group' => 'Filter',
-    );
-  }
-
-  /**
-   * Tests if the default text format is accessible to users.
-   */
-  function testDefaultTextFormats() {
-    // Create two text formats, and two users. The first user has access to
-    // both formats, but the second user only has access to the second one.
-    $admin_user = $this->drupalCreateUser(array('administer filters'));
-    $this->drupalLogin($admin_user);
-    $formats = array();
-    for ($i = 0; $i < 2; $i++) {
-      $edit = array(
-        'format' => drupal_strtolower($this->randomName()),
-        'name' => $this->randomName(),
-      );
-      $this->drupalPost('admin/config/content/formats/add', $edit, t('Save configuration'));
-      $this->resetFilterCaches();
-      $formats[] = filter_format_load($edit['format']);
-    }
-    list($first_format, $second_format) = $formats;
-    $first_user = $this->drupalCreateUser(array(filter_permission_name($first_format), filter_permission_name($second_format)));
-    $second_user = $this->drupalCreateUser(array(filter_permission_name($second_format)));
-
-    // Adjust the weights so that the first and second formats (in that order)
-    // are the two lowest weighted formats available to any user.
-    $minimum_weight = db_query("SELECT MIN(weight) FROM {filter_format}")->fetchField();
-    $edit = array();
-    $edit['formats[' . $first_format->format . '][weight]'] = $minimum_weight - 2;
-    $edit['formats[' . $second_format->format . '][weight]'] = $minimum_weight - 1;
-    $this->drupalPost('admin/config/content/formats', $edit, t('Save changes'));
-    $this->resetFilterCaches();
-
-    // Check that each user's default format is the lowest weighted format that
-    // the user has access to.
-    $this->assertEqual(filter_default_format($first_user), $first_format->format, "The first user's default format is the lowest weighted format that the user has access to.");
-    $this->assertEqual(filter_default_format($second_user), $second_format->format, "The second user's default format is the lowest weighted format that the user has access to, and is different than the first user's.");
-
-    // Reorder the two formats, and check that both users now have the same
-    // default.
-    $edit = array();
-    $edit['formats[' . $second_format->format . '][weight]'] = $minimum_weight - 3;
-    $this->drupalPost('admin/config/content/formats', $edit, t('Save changes'));
-    $this->resetFilterCaches();
-    $this->assertEqual(filter_default_format($first_user), filter_default_format($second_user), 'After the formats are reordered, both users have the same default format.');
-  }
-
-  /**
-   * Rebuilds text format and permission caches in the thread running the tests.
-   */
-  protected function resetFilterCaches() {
-    filter_formats_reset();
-    $this->checkPermissions(array(), TRUE);
-  }
-}
-
-/**
- * Tests the behavior of check_markup() when it is called without text format.
- */
-class FilterNoFormatTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Unassigned text format functionality',
-      'description' => 'Test the behavior of check_markup() when it is called without a text format.',
-      'group' => 'Filter',
-    );
-  }
-
-  /**
-   * Tests text without format.
-   *
-   * Tests if text with no format is filtered the same way as text in the
-   * fallback format.
-   */
-  function testCheckMarkupNoFormat() {
-    // Create some text. Include some HTML and line breaks, so we get a good
-    // test of the filtering that is applied to it.
-    $text = "<strong>" . $this->randomName(32) . "</strong>\n\n<div>" . $this->randomName(32) . "</div>";
-
-    // Make sure that when this text is run through check_markup() with no text
-    // format, it is filtered as though it is in the fallback format.
-    $this->assertEqual(check_markup($text), check_markup($text, filter_fallback_format()), 'Text with no format is filtered the same as text in the fallback format.');
-  }
-}
-
-/**
- * Security tests for missing/vanished text formats or filters.
- */
-class FilterSecurityTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Security',
-      'description' => 'Test the behavior of check_markup() when a filter or text format vanishes.',
-      'group' => 'Filter',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('php', 'filter_test');
-    $this->admin_user = $this->drupalCreateUser(array('administer modules', 'administer filters', 'administer site configuration'));
-    $this->drupalLogin($this->admin_user);
-  }
-
-  /**
-   * Tests removal of filtered content when an active filter is disabled.
-   *
-   * Tests that filtered content is emptied when an actively used filter module
-   * is disabled.
-   */
-  function testDisableFilterModule() {
-    // Create a new node.
-    $node = $this->drupalCreateNode(array('promote' => 1));
-    $body_raw = $node->body[LANGUAGE_NONE][0]['value'];
-    $format_id = $node->body[LANGUAGE_NONE][0]['format'];
-    $this->drupalGet('node/' . $node->nid);
-    $this->assertText($body_raw, 'Node body found.');
-
-    // Enable the filter_test_replace filter.
-    $edit = array(
-      'filters[filter_test_replace][status]' => 1,
-    );
-    $this->drupalPost('admin/config/content/formats/' . $format_id, $edit, t('Save configuration'));
-
-    // Verify that filter_test_replace filter replaced the content.
-    $this->drupalGet('node/' . $node->nid);
-    $this->assertNoText($body_raw, 'Node body not found.');
-    $this->assertText('Filter: Testing filter', 'Testing filter output found.');
-
-    // Disable the text format entirely.
-    $this->drupalPost('admin/config/content/formats/' . $format_id . '/disable', array(), t('Disable'));
-
-    // Verify that the content is empty, because the text format does not exist.
-    $this->drupalGet('node/' . $node->nid);
-    $this->assertNoText($body_raw, 'Node body not found.');
-  }
-}
-
-/**
- * Unit tests for core filters.
- */
-class FilterUnitTestCase extends DrupalUnitTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Filter module filters',
-      'description' => 'Tests Filter module filters individually.',
-      'group' => 'Filter',
-    );
-  }
-
-  /**
-   * Tests the line break filter.
-   */
-  function testLineBreakFilter() {
-    // Setup dummy filter object.
-    $filter = new stdClass();
-    $filter->callback = '_filter_autop';
-
-    // Since the line break filter naturally needs plenty of newlines in test
-    // strings and expectations, we're using "\n" instead of regular newlines
-    // here.
-    $tests = array(
-      // Single line breaks should be changed to <br /> tags, while paragraphs
-      // separated with double line breaks should be enclosed with <p></p> tags.
-      "aaa\nbbb\n\nccc" => array(
-        "<p>aaa<br />\nbbb</p>\n<p>ccc</p>" => TRUE,
-      ),
-      // Skip contents of certain block tags entirely.
-      "<script>aaa\nbbb\n\nccc</script>
-<style>aaa\nbbb\n\nccc</style>
-<pre>aaa\nbbb\n\nccc</pre>
-<object>aaa\nbbb\n\nccc</object>
-<iframe>aaa\nbbb\n\nccc</iframe>
-" => array(
-        "<script>aaa\nbbb\n\nccc</script>" => TRUE,
-        "<style>aaa\nbbb\n\nccc</style>" => TRUE,
-        "<pre>aaa\nbbb\n\nccc</pre>" => TRUE,
-        "<object>aaa\nbbb\n\nccc</object>" => TRUE,
-        "<iframe>aaa\nbbb\n\nccc</iframe>" => TRUE,
-      ),
-      // Skip comments entirely.
-      "One. <!-- comment --> Two.\n<!--\nThree.\n-->\n" => array(
-        '<!-- comment -->' => TRUE,
-        "<!--\nThree.\n-->" => TRUE,
-      ),
-      // Resulting HTML should produce matching paragraph tags.
-      '<p><div>  </div></p>' => array(
-        "<p>\n<div>  </div>\n</p>" => TRUE,
-      ),
-      '<div><p>  </p></div>' => array(
-        "<div>\n</div>" => TRUE,
-      ),
-      '<blockquote><pre>aaa</pre></blockquote>' => array(
-        "<blockquote><pre>aaa</pre></blockquote>" => TRUE,
-      ),
-      "<pre>aaa\nbbb\nccc</pre>\nddd\neee" => array(
-        "<pre>aaa\nbbb\nccc</pre>" => TRUE,
-        "<p>ddd<br />\neee</p>" => TRUE,
-      ),
-      // Comments remain unchanged and subsequent lines/paragraphs are
-      // transformed normally.
-      "aaa<!--comment-->\n\nbbb\n\nccc\n\nddd<!--comment\nwith linebreak-->\n\neee\n\nfff" => array(
-        "<p>aaa</p>\n<!--comment--><p>\nbbb</p>\n<p>ccc</p>\n<p>ddd</p>" => TRUE,
-        "<!--comment\nwith linebreak--><p>\neee</p>\n<p>fff</p>" => TRUE,
-      ),
-      // Check that a comment in a PRE will result that the text after
-      // the comment, but still in PRE, is not transformed.
-      "<pre>aaa\nbbb<!-- comment -->\n\nccc</pre>\nddd" => array(
-        "<pre>aaa\nbbb<!-- comment -->\n\nccc</pre>" => TRUE,
-      ),
-      // Bug 810824, paragraphs were appearing around iframe tags.
-      "<iframe>aaa</iframe>\n\n" => array(
-        "<p><iframe>aaa</iframe></p>" => FALSE,
-      ),
-    );
-    $this->assertFilteredString($filter, $tests);
-
-    // Very long string hitting PCRE limits.
-    $limit = max(ini_get('pcre.backtrack_limit'), ini_get('pcre.recursion_limit'));
-    $source = $this->randomName($limit);
-    $result = _filter_autop($source);
-    $success = $this->assertEqual($result, '<p>' . $source . "</p>\n", 'Line break filter can process very long strings.');
-    if (!$success) {
-      $this->verbose("\n" . $source . "\n<hr />\n" . $result);
-    }
-  }
-
-  /**
-   * Tests limiting allowed tags and XSS prevention.
-   *
-   * XSS tests assume that script is disallowed by default and src is allowed
-   * by default, but on* and style attributes are disallowed.
-   *
-   * Script injection vectors mostly adopted from http://ha.ckers.org/xss.html.
-   *
-   * Relevant CVEs:
-   * - CVE-2002-1806, ~CVE-2005-0682, ~CVE-2005-2106, CVE-2005-3973,
-   *   CVE-2006-1226 (= rev. 1.112?), CVE-2008-0273, CVE-2008-3740.
-   */
-  function testFilterXSS() {
-    // Tag stripping, different ways to work around removal of HTML tags.
-    $f = filter_xss('<script>alert(0)</script>');
-    $this->assertNoNormalized($f, 'script', 'HTML tag stripping -- simple script without special characters.');
-
-    $f = filter_xss('<script src="http://www.example.com" />');
-    $this->assertNoNormalized($f, 'script', 'HTML tag stripping -- empty script with source.');
-
-    $f = filter_xss('<ScRipt sRc=http://www.example.com/>');
-    $this->assertNoNormalized($f, 'script', 'HTML tag stripping evasion -- varying case.');
-
-    $f = filter_xss("<script\nsrc\n=\nhttp://www.example.com/\n>");
-    $this->assertNoNormalized($f, 'script', 'HTML tag stripping evasion -- multiline tag.');
-
-    $f = filter_xss('<script/a src=http://www.example.com/a.js></script>');
-    $this->assertNoNormalized($f, 'script', 'HTML tag stripping evasion -- non whitespace character after tag name.');
-
-    $f = filter_xss('<script/src=http://www.example.com/a.js></script>');
-    $this->assertNoNormalized($f, 'script', 'HTML tag stripping evasion -- no space between tag and attribute.');
-
-    // Null between < and tag name works at least with IE6.
-    $f = filter_xss("<\0scr\0ipt>alert(0)</script>");
-    $this->assertNoNormalized($f, 'ipt', 'HTML tag stripping evasion -- breaking HTML with nulls.');
-
-    $f = filter_xss("<scrscriptipt src=http://www.example.com/a.js>");
-    $this->assertNoNormalized($f, 'script', 'HTML tag stripping evasion -- filter just removing "script".');
-
-    $f = filter_xss('<<script>alert(0);//<</script>');
-    $this->assertNoNormalized($f, 'script', 'HTML tag stripping evasion -- double opening brackets.');
-
-    $f = filter_xss('<script src=http://www.example.com/a.js?<b>');
-    $this->assertNoNormalized($f, 'script', 'HTML tag stripping evasion -- no closing tag.');
-
-    // DRUPAL-SA-2008-047: This doesn't seem exploitable, but the filter should
-    // work consistently.
-    $f = filter_xss('<script>>');
-    $this->assertNoNormalized($f, 'script', 'HTML tag stripping evasion -- double closing tag.');
-
-    $f = filter_xss('<script src=//www.example.com/.a>');
-    $this->assertNoNormalized($f, 'script', 'HTML tag stripping evasion -- no scheme or ending slash.');
-
-    $f = filter_xss('<script src=http://www.example.com/.a');
-    $this->assertNoNormalized($f, 'script', 'HTML tag stripping evasion -- no closing bracket.');
-
-    $f = filter_xss('<script src=http://www.example.com/ <');
-    $this->assertNoNormalized($f, 'script', 'HTML tag stripping evasion -- opening instead of closing bracket.');
-
-    $f = filter_xss('<nosuchtag attribute="newScriptInjectionVector">');
-    $this->assertNoNormalized($f, 'nosuchtag', 'HTML tag stripping evasion -- unknown tag.');
-
-    $f = filter_xss('<?xml:namespace ns="urn:schemas-microsoft-com:time">');
-    $this->assertTrue(stripos($f, '<?xml') === FALSE, 'HTML tag stripping evasion -- starting with a question sign (processing instructions).');
-
-    $f = filter_xss('<t:set attributeName="innerHTML" to="&lt;script defer&gt;alert(0)&lt;/script&gt;">');
-    $this->assertNoNormalized($f, 't:set', 'HTML tag stripping evasion -- colon in the tag name (namespaces\' tricks).');
-
-    $f = filter_xss('<img """><script>alert(0)</script>', array('img'));
-    $this->assertNoNormalized($f, 'script', 'HTML tag stripping evasion -- a malformed image tag.');
-
-    $f = filter_xss('<blockquote><script>alert(0)</script></blockquote>', array('blockquote'));
-    $this->assertNoNormalized($f, 'script', 'HTML tag stripping evasion -- script in a blockqoute.');
-
-    $f = filter_xss("<!--[if true]><script>alert(0)</script><![endif]-->");
-    $this->assertNoNormalized($f, 'script', 'HTML tag stripping evasion -- script within a comment.');
-
-    // Dangerous attributes removal.
-    $f = filter_xss('<p onmouseover="http://www.example.com/">', array('p'));
-    $this->assertNoNormalized($f, 'onmouseover', 'HTML filter attributes removal -- events, no evasion.');
-
-    $f = filter_xss('<li style="list-style-image: url(javascript:alert(0))">', array('li'));
-    $this->assertNoNormalized($f, 'style', 'HTML filter attributes removal -- style, no evasion.');
-
-    $f = filter_xss('<img onerror   =alert(0)>', array('img'));
-    $this->assertNoNormalized($f, 'onerror', 'HTML filter attributes removal evasion -- spaces before equals sign.');
-
-    $f = filter_xss('<img onabort!#$%&()*~+-_.,:;?@[/|\]^`=alert(0)>', array('img'));
-    $this->assertNoNormalized($f, 'onabort', 'HTML filter attributes removal evasion -- non alphanumeric characters before equals sign.');
-
-    $f = filter_xss('<img oNmediAError=alert(0)>', array('img'));
-    $this->assertNoNormalized($f, 'onmediaerror', 'HTML filter attributes removal evasion -- varying case.');
-
-    // Works at least with IE6.
-    $f = filter_xss("<img o\0nfocus\0=alert(0)>", array('img'));
-    $this->assertNoNormalized($f, 'focus', 'HTML filter attributes removal evasion -- breaking with nulls.');
-
-    // Only whitelisted scheme names allowed in attributes.
-    $f = filter_xss('<img src="javascript:alert(0)">', array('img'));
-    $this->assertNoNormalized($f, 'javascript', 'HTML scheme clearing -- no evasion.');
-
-    $f = filter_xss('<img src=javascript:alert(0)>', array('img'));
-    $this->assertNoNormalized($f, 'javascript', 'HTML scheme clearing evasion -- no quotes.');
-
-    // A bit like CVE-2006-0070.
-    $f = filter_xss('<img src="javascript:confirm(0)">', array('img'));
-    $this->assertNoNormalized($f, 'javascript', 'HTML scheme clearing evasion -- no alert ;)');
-
-    $f = filter_xss('<img src=`javascript:alert(0)`>', array('img'));
-    $this->assertNoNormalized($f, 'javascript', 'HTML scheme clearing evasion -- grave accents.');
-
-    $f = filter_xss('<img dynsrc="javascript:alert(0)">', array('img'));
-    $this->assertNoNormalized($f, 'javascript', 'HTML scheme clearing -- rare attribute.');
-
-    $f = filter_xss('<table background="javascript:alert(0)">', array('table'));
-    $this->assertNoNormalized($f, 'javascript', 'HTML scheme clearing -- another tag.');
-
-    $f = filter_xss('<base href="javascript:alert(0);//">', array('base'));
-    $this->assertNoNormalized($f, 'javascript', 'HTML scheme clearing -- one more attribute and tag.');
-
-    $f = filter_xss('<img src="jaVaSCriPt:alert(0)">', array('img'));
-    $this->assertNoNormalized($f, 'javascript', 'HTML scheme clearing evasion -- varying case.');
-
-    $f = filter_xss('<img src=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#48;&#41;>', array('img'));
-    $this->assertNoNormalized($f, 'javascript', 'HTML scheme clearing evasion -- UTF-8 decimal encoding.');
-
-    $f = filter_xss('<img src=&#00000106&#0000097&#00000118&#0000097&#00000115&#0000099&#00000114&#00000105&#00000112&#00000116&#0000058&#0000097&#00000108&#00000101&#00000114&#00000116&#0000040&#0000048&#0000041>', array('img'));
-    $this->assertNoNormalized($f, 'javascript', 'HTML scheme clearing evasion -- long UTF-8 encoding.');
-
-    $f = filter_xss('<img src=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x30&#x29>', array('img'));
-    $this->assertNoNormalized($f, 'javascript', 'HTML scheme clearing evasion -- UTF-8 hex encoding.');
-
-    $f = filter_xss("<img src=\"jav\tascript:alert(0)\">", array('img'));
-    $this->assertNoNormalized($f, 'script', 'HTML scheme clearing evasion -- an embedded tab.');
-
-    $f = filter_xss('<img src="jav&#x09;ascript:alert(0)">', array('img'));
-    $this->assertNoNormalized($f, 'script', 'HTML scheme clearing evasion -- an encoded, embedded tab.');
-
-    $f = filter_xss('<img src="jav&#x000000A;ascript:alert(0)">', array('img'));
-    $this->assertNoNormalized($f, 'script', 'HTML scheme clearing evasion -- an encoded, embedded newline.');
-
-    // With &#xD; this test would fail, but the entity gets turned into
-    // &amp;#xD;, so it's OK.
-    $f = filter_xss('<img src="jav&#x0D;ascript:alert(0)">', array('img'));
-    $this->assertNoNormalized($f, 'script', 'HTML scheme clearing evasion -- an encoded, embedded carriage return.');
-
-    $f = filter_xss("<img src=\"\n\n\nj\na\nva\ns\ncript:alert(0)\">", array('img'));
-    $this->assertNoNormalized($f, 'cript', 'HTML scheme clearing evasion -- broken into many lines.');
-
-    $f = filter_xss("<img src=\"jav\0a\0\0cript:alert(0)\">", array('img'));
-    $this->assertNoNormalized($f, 'cript', 'HTML scheme clearing evasion -- embedded nulls.');
-
-    $f = filter_xss('<img src=" &#14;  javascript:alert(0)">', array('img'));
-    $this->assertNoNormalized($f, 'javascript', 'HTML scheme clearing evasion -- spaces and metacharacters before scheme.');
-
-    $f = filter_xss('<img src="vbscript:msgbox(0)">', array('img'));
-    $this->assertNoNormalized($f, 'vbscript', 'HTML scheme clearing evasion -- another scheme.');
-
-    $f = filter_xss('<img src="nosuchscheme:notice(0)">', array('img'));
-    $this->assertNoNormalized($f, 'nosuchscheme', 'HTML scheme clearing evasion -- unknown scheme.');
-
-    // Netscape 4.x javascript entities.
-    $f = filter_xss('<br size="&{alert(0)}">', array('br'));
-    $this->assertNoNormalized($f, 'alert', 'Netscape 4.x javascript entities.');
-
-    // DRUPAL-SA-2008-006: Invalid UTF-8, these only work as reflected XSS with
-    // Internet Explorer 6.
-    $f = filter_xss("<p arg=\"\xe0\">\" style=\"background-image: url(javascript:alert(0));\"\xe0<p>", array('p'));
-    $this->assertNoNormalized($f, 'style', 'HTML filter -- invalid UTF-8.');
-
-    $f = filter_xss("\xc0aaa");
-    $this->assertEqual($f, '', 'HTML filter -- overlong UTF-8 sequences.');
-
-    $f = filter_xss("Who&#039;s Online");
-    $this->assertNormalized($f, "who's online", 'HTML filter -- html entity number');
-
-    $f = filter_xss("Who&amp;#039;s Online");
-    $this->assertNormalized($f, "who&#039;s online", 'HTML filter -- encoded html entity number');
-
-    $f = filter_xss("Who&amp;amp;#039; Online");
-    $this->assertNormalized($f, "who&amp;#039; online", 'HTML filter -- double encoded html entity number');
-  }
-
-  /**
-   * Tests filter settings, defaults, access restrictions and similar.
-   *
-   * @todo This is for functions like filter_filter and check_markup, whose
-   *   functionality is not completely focused on filtering. Some ideas:
-   *   restricting formats according to user permissions, proper cache
-   *   handling, defaults -- allowed tags/attributes/protocols.
-   *
-   * @todo It is possible to add script, iframe etc. to allowed tags, but this
-   *   makes HTML filter completely ineffective.
-   *
-   * @todo Class, id, name and xmlns should be added to disallowed attributes,
-   *   or better a whitelist approach should be used for that too.
-   */
-  function testHtmlFilter() {
-    // Setup dummy filter object.
-    $filter = new stdClass();
-    $filter->settings = array(
-      'allowed_html' => '<a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>',
-      'filter_html_help' => 1,
-      'filter_html_nofollow' => 0,
-    );
-
-    // HTML filter is not able to secure some tags, these should never be
-    // allowed.
-    $f = _filter_html('<script />', $filter);
-    $this->assertNoNormalized($f, 'script', 'HTML filter should always remove script tags.');
-
-    $f = _filter_html('<iframe />', $filter);
-    $this->assertNoNormalized($f, 'iframe', 'HTML filter should always remove iframe tags.');
-
-    $f = _filter_html('<object />', $filter);
-    $this->assertNoNormalized($f, 'object', 'HTML filter should always remove object tags.');
-
-    $f = _filter_html('<style />', $filter);
-    $this->assertNoNormalized($f, 'style', 'HTML filter should always remove style tags.');
-
-    // Some tags make CSRF attacks easier, let the user take the risk herself.
-    $f = _filter_html('<img />', $filter);
-    $this->assertNoNormalized($f, 'img', 'HTML filter should remove img tags on default.');
-
-    $f = _filter_html('<input />', $filter);
-    $this->assertNoNormalized($f, 'img', 'HTML filter should remove input tags on default.');
-
-    // Filtering content of some attributes is infeasible, these shouldn't be
-    // allowed too.
-    $f = _filter_html('<p style="display: none;" />', $filter);
-    $this->assertNoNormalized($f, 'style', 'HTML filter should remove style attribute on default.');
-
-    $f = _filter_html('<p onerror="alert(0);" />', $filter);
-    $this->assertNoNormalized($f, 'onerror', 'HTML filter should remove on* attributes on default.');
-
-    $f = _filter_html('<code onerror>&nbsp;</code>', $filter);
-    $this->assertNoNormalized($f, 'onerror', 'HTML filter should remove empty on* attributes on default.');
-  }
-
-  /**
-   * Tests the spam deterrent.
-   */
-  function testNoFollowFilter() {
-    // Setup dummy filter object.
-    $filter = new stdClass();
-    $filter->settings = array(
-      'allowed_html' => '<a>',
-      'filter_html_help' => 1,
-      'filter_html_nofollow' => 1,
-    );
-
-    // Test if the rel="nofollow" attribute is added, even if we try to prevent
-    // it.
-    $f = _filter_html('<a href="http://www.example.com/">text</a>', $filter);
-    $this->assertNormalized($f, 'rel="nofollow"', 'Spam deterrent -- no evasion.');
-
-    $f = _filter_html('<A href="http://www.example.com/">text</a>', $filter);
-    $this->assertNormalized($f, 'rel="nofollow"', 'Spam deterrent evasion -- capital A.');
-
-    $f = _filter_html("<a/href=\"http://www.example.com/\">text</a>", $filter);
-    $this->assertNormalized($f, 'rel="nofollow"', 'Spam deterrent evasion -- non whitespace character after tag name.');
-
-    $f = _filter_html("<\0a\0 href=\"http://www.example.com/\">text</a>", $filter);
-    $this->assertNormalized($f, 'rel="nofollow"', 'Spam deterrent evasion -- some nulls.');
-
-    $f = _filter_html('<a href="http://www.example.com/" rel="follow">text</a>', $filter);
-    $this->assertNoNormalized($f, 'rel="follow"', 'Spam deterrent evasion -- with rel set - rel="follow" removed.');
-    $this->assertNormalized($f, 'rel="nofollow"', 'Spam deterrent evasion -- with rel set - rel="nofollow" added.');
-  }
-
-  /**
-   * Tests the loose, admin HTML filter.
-   */
-  function testFilterXSSAdmin() {
-    // DRUPAL-SA-2008-044
-    $f = filter_xss_admin('<object />');
-    $this->assertNoNormalized($f, 'object', 'Admin HTML filter -- should not allow object tag.');
-
-    $f = filter_xss_admin('<script />');
-    $this->assertNoNormalized($f, 'script', 'Admin HTML filter -- should not allow script tag.');
-
-    $f = filter_xss_admin('<style /><iframe /><frame /><frameset /><meta /><link /><embed /><applet /><param /><layer />');
-    $this->assertEqual($f, '', 'Admin HTML filter -- should never allow some tags.');
-  }
-
-  /**
-   * Tests the HTML escaping filter.
-   *
-   * check_plain() is not tested here.
-   */
-  function testHtmlEscapeFilter() {
-    // Setup dummy filter object.
-    $filter = new stdClass();
-    $filter->callback = '_filter_html_escape';
-
-    $tests = array(
-      "   One. <!-- \"comment\" --> Two'.\n<p>Three.</p>\n    " => array(
-        "One. &lt;!-- &quot;comment&quot; --&gt; Two&#039;.\n&lt;p&gt;Three.&lt;/p&gt;" => TRUE,
-        '   One.' => FALSE,
-        "</p>\n    " => FALSE,
-      ),
-    );
-    $this->assertFilteredString($filter, $tests);
-  }
-
-  /**
-   * Tests the URL filter.
-   */
-  function testUrlFilter() {
-    // Setup dummy filter object.
-    $filter = new stdClass();
-    $filter->callback = '_filter_url';
-    $filter->settings = array(
-      'filter_url_length' => 496,
-    );
-    // @todo Possible categories:
-    // - absolute, mail, partial
-    // - characters/encoding, surrounding markup, security
-
-    // Create a e-mail that is too long.
-    $long_email = str_repeat('a', 254) . '@example.com';
-    $too_long_email = str_repeat('b', 255) . '@example.com';
-
-
-    // Filter selection/pattern matching.
-    $tests = array(
-      // HTTP URLs.
-      '
-http://example.com or www.example.com
-' => array(
-        '<a href="http://example.com">http://example.com</a>' => TRUE,
-        '<a href="http://www.example.com">www.example.com</a>' => TRUE,
-      ),
-      // MAILTO URLs.
-      '
-person@example.com or mailto:person2@example.com or ' . $long_email . ' but not ' . $too_long_email . '
-' => array(
-        '<a href="mailto:person@example.com">person@example.com</a>' => TRUE,
-        '<a href="mailto:person2@example.com">mailto:person2@example.com</a>' => TRUE,
-        '<a href="mailto:' . $long_email . '">' . $long_email . '</a>' => TRUE,
-        '<a href="mailto:' . $too_long_email . '">' . $too_long_email . '</a>' => FALSE,
-      ),
-      // URI parts and special characters.
-      '
-http://trailingslash.com/ or www.trailingslash.com/
-http://host.com/some/path?query=foo&bar[baz]=beer#fragment or www.host.com/some/path?query=foo&bar[baz]=beer#fragment
-http://twitter.com/#!/example/status/22376963142324226
-ftp://user:pass@ftp.example.com/~home/dir1
-sftp://user@nonstandardport:222/dir
-ssh://192.168.0.100/srv/git/drupal.git
-' => array(
-        '<a href="http://trailingslash.com/">http://trailingslash.com/</a>' => TRUE,
-        '<a href="http://www.trailingslash.com/">www.trailingslash.com/</a>' => TRUE,
-        '<a href="http://host.com/some/path?query=foo&amp;bar[baz]=beer#fragment">http://host.com/some/path?query=foo&amp;bar[baz]=beer#fragment</a>' => TRUE,
-        '<a href="http://www.host.com/some/path?query=foo&amp;bar[baz]=beer#fragment">www.host.com/some/path?query=foo&amp;bar[baz]=beer#fragment</a>' => TRUE,
-        '<a href="http://twitter.com/#!/example/status/22376963142324226">http://twitter.com/#!/example/status/22376963142324226</a>' => TRUE,
-        '<a href="ftp://user:pass@ftp.example.com/~home/dir1">ftp://user:pass@ftp.example.com/~home/dir1</a>' => TRUE,
-        '<a href="sftp://user@nonstandardport:222/dir">sftp://user@nonstandardport:222/dir</a>' => TRUE,
-        '<a href="ssh://192.168.0.100/srv/git/drupal.git">ssh://192.168.0.100/srv/git/drupal.git</a>' => TRUE,
-      ),
-      // Encoding.
-      '
-http://ampersand.com/?a=1&b=2
-http://encoded.com/?a=1&amp;b=2
-' => array(
-        '<a href="http://ampersand.com/?a=1&amp;b=2">http://ampersand.com/?a=1&amp;b=2</a>' => TRUE,
-        '<a href="http://encoded.com/?a=1&amp;b=2">http://encoded.com/?a=1&amp;b=2</a>' => TRUE,
-      ),
-      // Domain name length.
-      '
-www.ex.ex or www.example.example or www.toolongdomainexampledomainexampledomainexampledomainexampledomain or
-me@me.tv
-' => array(
-        '<a href="http://www.ex.ex">www.ex.ex</a>' => TRUE,
-        '<a href="http://www.example.example">www.example.example</a>' => TRUE,
-        'http://www.toolong' => FALSE,
-        '<a href="mailto:me@me.tv">me@me.tv</a>' => TRUE,
-      ),
-      // Absolute URL protocols.
-      // The list to test is found in the beginning of _filter_url() at
-      // $protocols = variable_get('filter_allowed_protocols'... (approx line 1325).
-      '
-https://example.com,
-ftp://ftp.example.com,
-news://example.net,
-telnet://example,
-irc://example.host,
-ssh://odd.geek,
-sftp://secure.host?,
-webcal://calendar,
-rtsp://127.0.0.1,
-not foo://disallowed.com.
-' => array(
-        'href="https://example.com"' => TRUE,
-        'href="ftp://ftp.example.com"' => TRUE,
-        'href="news://example.net"' => TRUE,
-        'href="telnet://example"' => TRUE,
-        'href="irc://example.host"' => TRUE,
-        'href="ssh://odd.geek"' => TRUE,
-        'href="sftp://secure.host"' => TRUE,
-        'href="webcal://calendar"' => TRUE,
-        'href="rtsp://127.0.0.1"' => TRUE,
-        'href="foo://disallowed.com"' => FALSE,
-        'not foo://disallowed.com.' => TRUE,
-      ),
-    );
-    $this->assertFilteredString($filter, $tests);
-
-    // Surrounding text/punctuation.
-    $tests = array(
-      '
-Partial URL with trailing period www.partial.com.
-E-mail with trailing comma person@example.com,
-Absolute URL with trailing question http://www.absolute.com?
-Query string with trailing exclamation www.query.com/index.php?a=!
-Partial URL with 3 trailing www.partial.periods...
-E-mail with 3 trailing exclamations@example.com!!!
-Absolute URL and query string with 2 different punctuation characters (http://www.example.com/q=abc).
-' => array(
-        'period <a href="http://www.partial.com">www.partial.com</a>.' => TRUE,
-        'comma <a href="mailto:person@example.com">person@example.com</a>,' => TRUE,
-        'question <a href="http://www.absolute.com">http://www.absolute.com</a>?' => TRUE,
-        'exclamation <a href="http://www.query.com/index.php?a=">www.query.com/index.php?a=</a>!' => TRUE,
-        'trailing <a href="http://www.partial.periods">www.partial.periods</a>...' => TRUE,
-        'trailing <a href="mailto:exclamations@example.com">exclamations@example.com</a>!!!' => TRUE,
-        'characters (<a href="http://www.example.com/q=abc">http://www.example.com/q=abc</a>).' => TRUE,
-      ),
-      '
-(www.parenthesis.com/dir?a=1&b=2#a)
-' => array(
-        '(<a href="http://www.parenthesis.com/dir?a=1&amp;b=2#a">www.parenthesis.com/dir?a=1&amp;b=2#a</a>)' => TRUE,
-      ),
-    );
-    $this->assertFilteredString($filter, $tests);
-
-    // Surrounding markup.
-    $tests = array(
-      '
-<p xmlns="www.namespace.com" />
-<p xmlns="http://namespace.com">
-An <a href="http://example.com" title="Read more at www.example.info...">anchor</a>.
-</p>
-' => array(
-        '<p xmlns="www.namespace.com" />' => TRUE,
-        '<p xmlns="http://namespace.com">' => TRUE,
-        'href="http://www.namespace.com"' => FALSE,
-        'href="http://namespace.com"' => FALSE,
-        'An <a href="http://example.com" title="Read more at www.example.info...">anchor</a>.' => TRUE,
-      ),
-      '
-Not <a href="foo">www.relative.com</a> or <a href="http://absolute.com">www.absolute.com</a>
-but <strong>http://www.strong.net</strong> or <em>www.emphasis.info</em>
-' => array(
-        '<a href="foo">www.relative.com</a>' => TRUE,
-        'href="http://www.relative.com"' => FALSE,
-        '<a href="http://absolute.com">www.absolute.com</a>' => TRUE,
-        '<strong><a href="http://www.strong.net">http://www.strong.net</a></strong>' => TRUE,
-        '<em><a href="http://www.emphasis.info">www.emphasis.info</a></em>' => TRUE,
-      ),
-      '
-Test <code>using www.example.com the code tag</code>.
-' => array(
-        'href' => FALSE,
-        'http' => FALSE,
-      ),
-      '
-Intro.
-<blockquote>
-Quoted text linking to www.example.com, written by person@example.com, originating from http://origin.example.com. <code>@see www.usage.example.com or <em>www.example.info</em> bla bla</code>.
-</blockquote>
-
-Outro.
-' => array(
-        'href="http://www.example.com"' => TRUE,
-        'href="mailto:person@example.com"' => TRUE,
-        'href="http://origin.example.com"' => TRUE,
-        'http://www.usage.example.com' => FALSE,
-        'http://www.example.info' => FALSE,
-        'Intro.' => TRUE,
-        'Outro.' => TRUE,
-      ),
-      '
-Unknown tag <x>containing x and www.example.com</x>? And a tag <pooh>beginning with p and containing www.example.pooh with p?</pooh>
-' => array(
-        'href="http://www.example.com"' => TRUE,
-        'href="http://www.example.pooh"' => TRUE,
-      ),
-      '
-<p>Test &lt;br/&gt;: This is a www.example17.com example <strong>with</strong> various http://www.example18.com tags. *<br/>
- It is important www.example19.com to *<br/>test different URLs and http://www.example20.com in the same paragraph. *<br>
-HTML www.example21.com soup by person@example22.com can litererally http://www.example23.com contain *img*<img> anything. Just a www.example24.com with http://www.example25.com thrown in. www.example26.com from person@example27.com with extra http://www.example28.com.
-' => array(
-        'href="http://www.example17.com"' => TRUE,
-        'href="http://www.example18.com"' => TRUE,
-        'href="http://www.example19.com"' => TRUE,
-        'href="http://www.example20.com"' => TRUE,
-        'href="http://www.example21.com"' => TRUE,
-        'href="mailto:person@example22.com"' => TRUE,
-        'href="http://www.example23.com"' => TRUE,
-        'href="http://www.example24.com"' => TRUE,
-        'href="http://www.example25.com"' => TRUE,
-        'href="http://www.example26.com"' => TRUE,
-        'href="mailto:person@example27.com"' => TRUE,
-        'href="http://www.example28.com"' => TRUE,
-      ),
-      '
-<script>
-<!--
-  // @see www.example.com
-  var exampleurl = "http://example.net";
--->
-<!--//--><![CDATA[//><!--
-  // @see www.example.com
-  var exampleurl = "http://example.net";
-//--><!]]>
-</script>
-' => array(
-        'href="http://www.example.com"' => FALSE,
-        'href="http://example.net"' => FALSE,
-      ),
-      '
-<style>body {
-  background: url(http://example.com/pixel.gif);
-}</style>
-' => array(
-        'href' => FALSE,
-      ),
-      '
-<!-- Skip any URLs like www.example.com in comments -->
-' => array(
-        'href' => FALSE,
-      ),
-      '
-<!-- Skip any URLs like
-www.example.com with a newline in comments -->
-' => array(
-        'href' => FALSE,
-      ),
-      '
-<!-- Skip any URLs like www.comment.com in comments. <p>Also ignore http://commented.out/markup.</p> -->
-' => array(
-        'href' => FALSE,
-      ),
-      '
-<dl>
-<dt>www.example.com</dt>
-<dd>http://example.com</dd>
-<dd>person@example.com</dd>
-<dt>Check www.example.net</dt>
-<dd>Some text around http://www.example.info by person@example.info?</dd>
-</dl>
-' => array(
-        'href="http://www.example.com"' => TRUE,
-        'href="http://example.com"' => TRUE,
-        'href="mailto:person@example.com"' => TRUE,
-        'href="http://www.example.net"' => TRUE,
-        'href="http://www.example.info"' => TRUE,
-        'href="mailto:person@example.info"' => TRUE,
-      ),
-      '
-<div>www.div.com</div>
-<ul>
-<li>http://listitem.com</li>
-<li class="odd">www.class.listitem.com</li>
-</ul>
-' => array(
-        '<div><a href="http://www.div.com">www.div.com</a></div>' => TRUE,
-        '<li><a href="http://listitem.com">http://listitem.com</a></li>' => TRUE,
-        '<li class="odd"><a href="http://www.class.listitem.com">www.class.listitem.com</a></li>' => TRUE,
-      ),
-    );
-    $this->assertFilteredString($filter, $tests);
-
-    // URL trimming.
-    $filter->settings['filter_url_length'] = 20;
-    $tests = array(
-      'www.trimmed.com/d/ff.ext?a=1&b=2#a1' => array(
-        '<a href="http://www.trimmed.com/d/ff.ext?a=1&amp;b=2#a1">www.trimmed.com/d/ff...</a>' => TRUE,
-      ),
-    );
-    $this->assertFilteredString($filter, $tests);
-  }
-
-  /**
-   * Asserts multiple filter output expectations for multiple input strings.
-   *
-   * @param $filter
-   *   A input filter object.
-   * @param $tests
-   *   An associative array, whereas each key is an arbitrary input string and
-   *   each value is again an associative array whose keys are filter output
-   *   strings and whose values are Booleans indicating whether the output is
-   *   expected or not.
-   *
-   * For example:
-   * @code
-   * $tests = array(
-   *   'Input string' => array(
-   *     '<p>Input string</p>' => TRUE,
-   *     'Input string<br' => FALSE,
-   *   ),
-   * );
-   * @endcode
-   */
-  function assertFilteredString($filter, $tests) {
-    foreach ($tests as $source => $tasks) {
-      $function = $filter->callback;
-      $result = $function($source, $filter);
-      foreach ($tasks as $value => $is_expected) {
-        // Not using assertIdentical, since combination with strpos() is hard to grok.
-        if ($is_expected) {
-          $success = $this->assertTrue(strpos($result, $value) !== FALSE, format_string('@source: @value found.', array(
-            '@source' => var_export($source, TRUE),
-            '@value' => var_export($value, TRUE),
-          )));
-        }
-        else {
-          $success = $this->assertTrue(strpos($result, $value) === FALSE, format_string('@source: @value not found.', array(
-            '@source' => var_export($source, TRUE),
-            '@value' => var_export($value, TRUE),
-          )));
-        }
-        if (!$success) {
-          $this->verbose('Source:<pre>' . check_plain(var_export($source, TRUE)) . '</pre>'
-            . '<hr />' . 'Result:<pre>' . check_plain(var_export($result, TRUE)) . '</pre>'
-            . '<hr />' . ($is_expected ? 'Expected:' : 'Not expected:')
-            . '<pre>' . check_plain(var_export($value, TRUE)) . '</pre>'
-          );
-        }
-      }
-    }
-  }
-
-  /**
-   * Tests URL filter on longer content.
-   *
-   * Filters based on regular expressions should also be tested with a more
-   * complex content than just isolated test lines.
-   * The most common errors are:
-   * - accidental '*' (greedy) match instead of '*?' (minimal) match.
-   * - only matching first occurrence instead of all.
-   * - newlines not matching '.*'.
-   *
-   * This test covers:
-   * - Document with multiple newlines and paragraphs (two newlines).
-   * - Mix of several HTML tags, invalid non-HTML tags, tags to ignore and HTML
-   *   comments.
-   * - Empty HTML tags (BR, IMG).
-   * - Mix of absolute and partial URLs, and e-mail addresses in one content.
-   */
-  function testUrlFilterContent() {
-    // Setup dummy filter object.
-    $filter = new stdClass();
-    $filter->settings = array(
-      'filter_url_length' => 496,
-    );
-    $path = drupal_get_path('module', 'filter') . '/tests';
-
-    $input = file_get_contents($path . '/filter.url-input.txt');
-    $expected = file_get_contents($path . '/filter.url-output.txt');
-    $result = _filter_url($input, $filter);
-    $this->assertIdentical($result, $expected, 'Complex HTML document was correctly processed.');
-  }
-
-  /**
-   * Tests the HTML corrector filter.
-   *
-   * @todo This test could really use some validity checking function.
-   */
-  function testHtmlCorrectorFilter() {
-    // Tag closing.
-    $f = _filter_htmlcorrector('<p>text');
-    $this->assertEqual($f, '<p>text</p>', 'HTML corrector -- tag closing at the end of input.');
-
-    $f = _filter_htmlcorrector('<p>text<p><p>text');
-    $this->assertEqual($f, '<p>text</p><p></p><p>text</p>', 'HTML corrector -- tag closing.');
-
-    $f = _filter_htmlcorrector("<ul><li>e1<li>e2");
-    $this->assertEqual($f, "<ul><li>e1</li><li>e2</li></ul>", 'HTML corrector -- unclosed list tags.');
-
-    $f = _filter_htmlcorrector('<div id="d">content');
-    $this->assertEqual($f, '<div id="d">content</div>', 'HTML corrector -- unclosed tag with attribute.');
-
-    // XHTML slash for empty elements.
-    $f = _filter_htmlcorrector('<hr><br>');
-    $this->assertEqual($f, '<hr /><br />', 'HTML corrector -- XHTML closing slash.');
-
-    $f = _filter_htmlcorrector('<P>test</P>');
-    $this->assertEqual($f, '<p>test</p>', 'HTML corrector -- Convert uppercased tags to proper lowercased ones.');
-
-    $f = _filter_htmlcorrector('<P>test</p>');
-    $this->assertEqual($f, '<p>test</p>', 'HTML corrector -- Convert uppercased tags to proper lowercased ones.');
-
-    $f = _filter_htmlcorrector('test<hr />');
-    $this->assertEqual($f, 'test<hr />', 'HTML corrector -- Let proper XHTML pass through.');
-
-    $f = _filter_htmlcorrector('test<hr/>');
-    $this->assertEqual($f, 'test<hr />', 'HTML corrector -- Let proper XHTML pass through, but ensure there is a single space before the closing slash.');
-
-    $f = _filter_htmlcorrector('test<hr    />');
-    $this->assertEqual($f, 'test<hr />', 'HTML corrector -- Let proper XHTML pass through, but ensure there are not too many spaces before the closing slash.');
-
-    $f = _filter_htmlcorrector('<span class="test" />');
-    $this->assertEqual($f, '<span class="test"></span>', 'HTML corrector -- Convert XHTML that is properly formed but that would not be compatible with typical HTML user agents.');
-
-    $f = _filter_htmlcorrector('test1<br class="test">test2');
-    $this->assertEqual($f, 'test1<br class="test" />test2', 'HTML corrector -- Automatically close single tags.');
-
-    $f = _filter_htmlcorrector('line1<hr>line2');
-    $this->assertEqual($f, 'line1<hr />line2', 'HTML corrector -- Automatically close single tags.');
-
-    $f = _filter_htmlcorrector('line1<HR>line2');
-    $this->assertEqual($f, 'line1<hr />line2', 'HTML corrector -- Automatically close single tags.');
-
-    $f = _filter_htmlcorrector('<img src="http://example.com/test.jpg">test</img>');
-    $this->assertEqual($f, '<img src="http://example.com/test.jpg" />test', 'HTML corrector -- Automatically close single tags.');
-
-    $f = _filter_htmlcorrector('<br></br>');
-    $this->assertEqual($f, '<br />', "HTML corrector -- Transform empty tags to a single closed tag if the tag's content model is EMPTY.");
-
-    $f = _filter_htmlcorrector('<div></div>');
-    $this->assertEqual($f, '<div></div>', "HTML corrector -- Do not transform empty tags to a single closed tag if the tag's content model is not EMPTY.");
-
-    $f = _filter_htmlcorrector('<p>line1<br/><hr/>line2</p>');
-    $this->assertEqual($f, '<p>line1<br /></p><hr />line2', 'HTML corrector -- Move non-inline elements outside of inline containers.');
-
-    $f = _filter_htmlcorrector('<p>line1<div>line2</div></p>');
-    $this->assertEqual($f, '<p>line1</p><div>line2</div>', 'HTML corrector -- Move non-inline elements outside of inline containers.');
-
-    $f = _filter_htmlcorrector('<p>test<p>test</p>\n');
-    $this->assertEqual($f, '<p>test</p><p>test</p>\n', 'HTML corrector -- Auto-close improperly nested tags.');
-
-    $f = _filter_htmlcorrector('<p>Line1<br><STRONG>bold stuff</b>');
-    $this->assertEqual($f, '<p>Line1<br /><strong>bold stuff</strong></p>', 'HTML corrector -- Properly close unclosed tags, and remove useless closing tags.');
-
-    $f = _filter_htmlcorrector('test <!-- this is a comment -->');
-    $this->assertEqual($f, 'test <!-- this is a comment -->', 'HTML corrector -- Do not touch HTML comments.');
-
-    $f = _filter_htmlcorrector('test <!--this is a comment-->');
-    $this->assertEqual($f, 'test <!--this is a comment-->', 'HTML corrector -- Do not touch HTML comments.');
-
-    $f = _filter_htmlcorrector('test <!-- comment <p>another
-    <strong>multiple</strong> line
-    comment</p> -->');
-    $this->assertEqual($f, 'test <!-- comment <p>another
-    <strong>multiple</strong> line
-    comment</p> -->', 'HTML corrector -- Do not touch HTML comments.');
-
-    $f = _filter_htmlcorrector('test <!-- comment <p>another comment</p> -->');
-    $this->assertEqual($f, 'test <!-- comment <p>another comment</p> -->', 'HTML corrector -- Do not touch HTML comments.');
-
-    $f = _filter_htmlcorrector('test <!--break-->');
-    $this->assertEqual($f, 'test <!--break-->', 'HTML corrector -- Do not touch HTML comments.');
-
-    $f = _filter_htmlcorrector('<p>test\n</p>\n');
-    $this->assertEqual($f, '<p>test\n</p>\n', 'HTML corrector -- New-lines are accepted and kept as-is.');
-
-    $f = _filter_htmlcorrector('<p>دروبال');
-    $this->assertEqual($f, '<p>دروبال</p>', 'HTML corrector -- Encoding is correctly kept.');
-
-    $f = _filter_htmlcorrector('<script type="text/javascript">alert("test")</script>');
-    $this->assertEqual($f, '<script type="text/javascript">
-<!--//--><![CDATA[// ><!--
-alert("test")
-//--><!]]>
-</script>', 'HTML corrector -- CDATA added to script element');
-
-    $f = _filter_htmlcorrector('<p><script type="text/javascript">alert("test")</script></p>');
-    $this->assertEqual($f, '<p><script type="text/javascript">
-<!--//--><![CDATA[// ><!--
-alert("test")
-//--><!]]>
-</script></p>', 'HTML corrector -- CDATA added to a nested script element');
-
-    $f = _filter_htmlcorrector('<p><style> /* Styling */ body {color:red}</style></p>');
-    $this->assertEqual($f, '<p><style>
-<!--/*--><![CDATA[/* ><!--*/
- /* Styling */ body {color:red}
-/*--><!]]>*/
-</style></p>', 'HTML corrector -- CDATA added to a style element.');
-
-    $filtered_data = _filter_htmlcorrector('<p><style>
-/*<![CDATA[*/
-/* Styling */
-body {color:red}
-/*]]>*/
-</style></p>');
-    $this->assertEqual($filtered_data, '<p><style>
-<!--/*--><![CDATA[/* ><!--*/
-
-/*<![CDATA[*/
-/* Styling */
-body {color:red}
-/*]]]]><![CDATA[>*/
-
-/*--><!]]>*/
-</style></p>',
-      format_string('HTML corrector -- Existing cdata section @pattern_name properly escaped', array('@pattern_name' => '/*<![CDATA[*/'))
-    );
-
-    $filtered_data = _filter_htmlcorrector('<p><style>
-  <!--/*--><![CDATA[/* ><!--*/
-  /* Styling */
-  body {color:red}
-  /*--><!]]>*/
-</style></p>');
-    $this->assertEqual($filtered_data, '<p><style>
-<!--/*--><![CDATA[/* ><!--*/
-
-  <!--/*--><![CDATA[/* ><!--*/
-  /* Styling */
-  body {color:red}
-  /*--><!]]]]><![CDATA[>*/
-
-/*--><!]]>*/
-</style></p>',
-      format_string('HTML corrector -- Existing cdata section @pattern_name properly escaped', array('@pattern_name' => '<!--/*--><![CDATA[/* ><!--*/'))
-    );
-
-    $filtered_data = _filter_htmlcorrector('<p><script type="text/javascript">
-<!--//--><![CDATA[// ><!--
-  alert("test");
-//--><!]]>
-</script></p>');
-    $this->assertEqual($filtered_data, '<p><script type="text/javascript">
-<!--//--><![CDATA[// ><!--
-
-<!--//--><![CDATA[// ><!--
-  alert("test");
-//--><!]]]]><![CDATA[>
-
-//--><!]]>
-</script></p>',
-      format_string('HTML corrector -- Existing cdata section @pattern_name properly escaped', array('@pattern_name' => '<!--//--><![CDATA[// ><!--'))
-    );
-
-    $filtered_data = _filter_htmlcorrector('<p><script type="text/javascript">
-// <![CDATA[
-  alert("test");
-// ]]>
-</script></p>');
-    $this->assertEqual($filtered_data, '<p><script type="text/javascript">
-<!--//--><![CDATA[// ><!--
-
-// <![CDATA[
-  alert("test");
-// ]]]]><![CDATA[>
-
-//--><!]]>
-</script></p>',
-      format_string('HTML corrector -- Existing cdata section @pattern_name properly escaped', array('@pattern_name' => '// <![CDATA['))
-    );
-
-  }
-
-  /**
-   * Asserts that a text transformed to lowercase with HTML entities decoded does contains a given string.
-   *
-   * Otherwise fails the test with a given message, similar to all the
-   * SimpleTest assert* functions.
-   *
-   * Note that this does not remove nulls, new lines and other characters that
-   * could be used to obscure a tag or an attribute name.
-   *
-   * @param $haystack
-   *   Text to look in.
-   * @param $needle
-   *   Lowercase, plain text to look for.
-   * @param $message
-   *   (optional) Message to display if failed. Defaults to an empty string.
-   * @param $group
-   *   (optional) The group this message belongs to. Defaults to 'Other'.
-   * @return
-   *   TRUE on pass, FALSE on fail.
-   */
-  function assertNormalized($haystack, $needle, $message = '', $group = 'Other') {
-    return $this->assertTrue(strpos(strtolower(decode_entities($haystack)), $needle) !== FALSE, $message, $group);
-  }
-
-  /**
-   * Asserts that text transformed to lowercase with HTML entities decoded does not contain a given string.
-   *
-   * Otherwise fails the test with a given message, similar to all the
-   * SimpleTest assert* functions.
-   *
-   * Note that this does not remove nulls, new lines, and other character that
-   * could be used to obscure a tag or an attribute name.
-   *
-   * @param $haystack
-   *   Text to look in.
-   * @param $needle
-   *   Lowercase, plain text to look for.
-   * @param $message
-   *   (optional) Message to display if failed. Defaults to an empty string.
-   * @param $group
-   *   (optional) The group this message belongs to. Defaults to 'Other'.
-   * @return
-   *   TRUE on pass, FALSE on fail.
-   */
-  function assertNoNormalized($haystack, $needle, $message = '', $group = 'Other') {
-    return $this->assertTrue(strpos(strtolower(decode_entities($haystack)), $needle) === FALSE, $message, $group);
-  }
-}
-
-/**
- * Tests for Filter's hook invocations.
- */
-class FilterHooksTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Filter format hooks',
-      'description' => 'Test hooks for text formats insert/update/disable.',
-      'group' => 'Filter',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('block', 'filter_test');
-    $admin_user = $this->drupalCreateUser(array('administer filters', 'administer blocks'));
-    $this->drupalLogin($admin_user);
-  }
-
-  /**
-   * Tests hooks on format management.
-   *
-   * Tests that hooks run correctly on creating, editing, and deleting a text
-   * format.
-   */
-  function testFilterHooks() {
-    // Add a text format.
-    $name = $this->randomName();
-    $edit = array();
-    $edit['format'] = drupal_strtolower($this->randomName());
-    $edit['name'] = $name;
-    $edit['roles[' . DRUPAL_ANONYMOUS_RID . ']'] = 1;
-    $this->drupalPost('admin/config/content/formats/add', $edit, t('Save configuration'));
-    $this->assertRaw(t('Added text format %format.', array('%format' => $name)), 'New format created.');
-    $this->assertText('hook_filter_format_insert invoked.', 'hook_filter_format_insert was invoked.');
-
-    $format_id = $edit['format'];
-
-    // Update text format.
-    $edit = array();
-    $edit['roles[' . DRUPAL_AUTHENTICATED_RID . ']'] = 1;
-    $this->drupalPost('admin/config/content/formats/' . $format_id, $edit, t('Save configuration'));
-    $this->assertRaw(t('The text format %format has been updated.', array('%format' => $name)), 'Format successfully updated.');
-    $this->assertText('hook_filter_format_update invoked.', 'hook_filter_format_update() was invoked.');
-
-    // Add a new custom block.
-    $custom_block = array();
-    $custom_block['info'] = $this->randomName(8);
-    $custom_block['title'] = $this->randomName(8);
-    $custom_block['body[value]'] = $this->randomName(32);
-    // Use the format created.
-    $custom_block['body[format]'] = $format_id;
-    $this->drupalPost('admin/structure/block/add', $custom_block, t('Save block'));
-    $this->assertText(t('The block has been created.'), 'New block successfully created.');
-
-    // Verify the new block is in the database.
-    $bid = db_query("SELECT bid FROM {block_custom} WHERE info = :info", array(':info' => $custom_block['info']))->fetchField();
-    $this->assertNotNull($bid, 'New block found in database');
-
-    // Disable the text format.
-    $this->drupalPost('admin/config/content/formats/' . $format_id . '/disable', array(), t('Disable'));
-    $this->assertRaw(t('Disabled text format %format.', array('%format' => $name)), 'Format successfully disabled.');
-    $this->assertText('hook_filter_format_disable invoked.', 'hook_filter_format_disable() was invoked.');
-  }
-}
-
-/**
- * Tests filter settings.
- */
-class FilterSettingsTestCase extends DrupalWebTestCase {
-  /**
-   * The installation profile to use with this test class.
-   *
-   * @var string
-   */
-  protected $profile = 'testing';
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Filter settings',
-      'description' => 'Tests filter settings.',
-      'group' => 'Filter',
-    );
-  }
-
-  /**
-   * Tests explicit and implicit default settings for filters.
-   */
-  function testFilterDefaults() {
-    $filter_info = filter_filter_info();
-    $filters = array_fill_keys(array_keys($filter_info), array());
-
-    // Create text format using filter default settings.
-    $filter_defaults_format = (object) array(
-      'format' => 'filter_defaults',
-      'name' => 'Filter defaults',
-      'filters' => $filters,
-    );
-    filter_format_save($filter_defaults_format);
-
-    // Verify that default weights defined in hook_filter_info() were applied.
-    $saved_settings = array();
-    foreach ($filter_defaults_format->filters as $name => $settings) {
-      $expected_weight = (isset($filter_info[$name]['weight']) ? $filter_info[$name]['weight'] : 0);
-      $this->assertEqual($settings['weight'], $expected_weight, format_string('@name filter weight %saved equals %default', array(
-        '@name' => $name,
-        '%saved' => $settings['weight'],
-        '%default' => $expected_weight,
-      )));
-      $saved_settings[$name]['weight'] = $expected_weight;
-    }
-
-    // Re-save the text format.
-    filter_format_save($filter_defaults_format);
-    // Reload it from scratch.
-    filter_formats_reset();
-    $filter_defaults_format = filter_format_load($filter_defaults_format->format);
-    $filter_defaults_format->filters = filter_list_format($filter_defaults_format->format);
-
-    // Verify that saved filter settings have not been changed.
-    foreach ($filter_defaults_format->filters as $name => $settings) {
-      $this->assertEqual($settings->weight, $saved_settings[$name]['weight'], format_string('@name filter weight %saved equals %previous', array(
-        '@name' => $name,
-        '%saved' => $settings->weight,
-        '%previous' => $saved_settings[$name]['weight'],
-      )));
-    }
-  }
-}
diff --git a/modules/filter/tests/filter.url-input.txt b/modules/filter/tests/filter.url-input.txt
deleted file mode 100644
index 7b33af5..0000000
--- a/modules/filter/tests/filter.url-input.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-This is just a www.test.com. paragraph with person@test.com. some http://www.test.com. urls thrown in and also <code>using www.test.com the code tag</code>.
-
-<blockquote>
-This is just a www.test.com. paragraph with person@test.com. some http://www.test.com. urls thrown in and also <code>using www.test.com the code tag</code>.
-</blockquote>
-
-<code>Testing code tag http://www.test.com abc</code>
-
-http://www.test.com
-www.test.com
-person@test.com
-<code>www.test.com</code>
-
-What about tags that don't exist <x>like x say www.test.com</x>? And what about tag <pooh>beginning www.test.com with p?</pooh>
-
-Test &lt;br/&gt;: This is just a www.test.com. paragraph <strong>with</strong> some http://www.test.com urls thrown in. *<br/> This is just a www.test.com paragraph *<br/> with some http://www.test.com urls thrown in. *<br/>This is just a www.test.com paragraph person@test.com with some http://www.test.com urls *img*<img/> thrown in. This is just a www.test.com paragraph with some http://www.test.com urls thrown in. This is just a www.test.com paragraph person@test.com with some http://www.test.com urls thrown in.
-
-This is just a www.test.com paragraph <strong>with</strong> some http://www.test.com urls thrown in. <br /> This is just a www.test.com paragraph with some http://www.test.com urls thrown in. This is just a www.test.com paragraph person@test.com with some http://www.test.com urls thrown in. This is just a www.test.com paragraph with some http://www.test.com urls thrown in. This is just a www.test.com paragraph person@test.com with some http://www.test.com urls thrown in.
-
-The old URL filter has problems with <a title="kind of link www.example.com with text" href="http://www.example.com">this kind of link</a> with www address as part of text in title. www.test.com
-
-<!-- This url www.test.com is inside a comment -->
-
-<dl>
-<dt>www.test.com</dt>
-<dd>http://www.test.com</dd>
-<dd>person@test.com</dd>
-<dt>check www.test.com</dt>
-<dd>this with some text around: http://www.test.com not so easy person@test.com now?</dd>
-</dl>
-
-<!-- <p>This url http://www.test.com is
- inside a comment containing newlines and 
-<em>html</em> tags.</p> -->
-
-This is the end!
\ No newline at end of file
diff --git a/modules/filter/tests/filter.url-output.txt b/modules/filter/tests/filter.url-output.txt
deleted file mode 100644
index 9cc5073..0000000
--- a/modules/filter/tests/filter.url-output.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-This is just a <a href="http://www.test.com">www.test.com</a>. paragraph with <a href="mailto:person@test.com">person@test.com</a>. some <a href="http://www.test.com">http://www.test.com</a>. urls thrown in and also <code>using www.test.com the code tag</code>.
-
-<blockquote>
-This is just a <a href="http://www.test.com">www.test.com</a>. paragraph with <a href="mailto:person@test.com">person@test.com</a>. some <a href="http://www.test.com">http://www.test.com</a>. urls thrown in and also <code>using www.test.com the code tag</code>.
-</blockquote>
-
-<code>Testing code tag http://www.test.com abc</code>
-
-<a href="http://www.test.com">http://www.test.com</a>
-<a href="http://www.test.com">www.test.com</a>
-<a href="mailto:person@test.com">person@test.com</a>
-<code>www.test.com</code>
-
-What about tags that don't exist <x>like x say <a href="http://www.test.com">www.test.com</a></x>? And what about tag <pooh>beginning <a href="http://www.test.com">www.test.com</a> with p?</pooh>
-
-Test &lt;br/&gt;: This is just a <a href="http://www.test.com">www.test.com</a>. paragraph <strong>with</strong> some <a href="http://www.test.com">http://www.test.com</a> urls thrown in. *<br/> This is just a <a href="http://www.test.com">www.test.com</a> paragraph *<br/> with some <a href="http://www.test.com">http://www.test.com</a> urls thrown in. *<br/>This is just a <a href="http://www.test.com">www.test.com</a> paragraph <a href="mailto:person@test.com">person@test.com</a> with some <a href="http://www.test.com">http://www.test.com</a> urls *img*<img/> thrown in. This is just a <a href="http://www.test.com">www.test.com</a> paragraph with some <a href="http://www.test.com">http://www.test.com</a> urls thrown in. This is just a <a href="http://www.test.com">www.test.com</a> paragraph <a href="mailto:person@test.com">person@test.com</a> with some <a href="http://www.test.com">http://www.test.com</a> urls thrown in.
-
-This is just a <a href="http://www.test.com">www.test.com</a> paragraph <strong>with</strong> some <a href="http://www.test.com">http://www.test.com</a> urls thrown in. <br /> This is just a <a href="http://www.test.com">www.test.com</a> paragraph with some <a href="http://www.test.com">http://www.test.com</a> urls thrown in. This is just a <a href="http://www.test.com">www.test.com</a> paragraph <a href="mailto:person@test.com">person@test.com</a> with some <a href="http://www.test.com">http://www.test.com</a> urls thrown in. This is just a <a href="http://www.test.com">www.test.com</a> paragraph with some <a href="http://www.test.com">http://www.test.com</a> urls thrown in. This is just a <a href="http://www.test.com">www.test.com</a> paragraph <a href="mailto:person@test.com">person@test.com</a> with some <a href="http://www.test.com">http://www.test.com</a> urls thrown in.
-
-The old URL filter has problems with <a title="kind of link www.example.com with text" href="http://www.example.com">this kind of link</a> with www address as part of text in title. <a href="http://www.test.com">www.test.com</a>
-
-<!-- This url www.test.com is inside a comment -->
-
-<dl>
-<dt><a href="http://www.test.com">www.test.com</a></dt>
-<dd><a href="http://www.test.com">http://www.test.com</a></dd>
-<dd><a href="mailto:person@test.com">person@test.com</a></dd>
-<dt>check <a href="http://www.test.com">www.test.com</a></dt>
-<dd>this with some text around: <a href="http://www.test.com">http://www.test.com</a> not so easy <a href="mailto:person@test.com">person@test.com</a> now?</dd>
-</dl>
-
-<!-- <p>This url http://www.test.com is
- inside a comment containing newlines and 
-<em>html</em> tags.</p> -->
-
-This is the end!
\ No newline at end of file
diff --git a/modules/forum/forum-icon.tpl.php b/modules/forum/forum-icon.tpl.php
deleted file mode 100644
index fd1cd13..0000000
--- a/modules/forum/forum-icon.tpl.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-/**
- * @file
- * Displays an appropriate icon for a forum post.
- *
- * Available variables:
- * - $new_posts: Indicates whether or not the topic contains new posts.
- * - $icon_class: The icon to display. May be one of 'hot', 'hot-new', 'new',
- *   'default', 'closed', or 'sticky'.
- * - $first_new: Indicates whether this is the first topic with new posts.
- *
- * @see template_preprocess_forum_icon()
- * @see theme_forum_icon()
- *
- * @ingroup themeable
- */
-?>
-<div class="topic-status-<?php print $icon_class ?>" title="<?php print $icon_title ?>">
-<?php if ($first_new): ?>
-  <a id="new"></a>
-<?php endif; ?>
-
-  <span class="element-invisible"><?php print $icon_title ?></span>
-
-</div>
diff --git a/modules/forum/forum-list.tpl.php b/modules/forum/forum-list.tpl.php
deleted file mode 100644
index 01c74a3..0000000
--- a/modules/forum/forum-list.tpl.php
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-
-/**
- * @file
- * Displays a list of forums and containers.
- *
- * Available variables:
- * - $forums: An array of forums and containers to display. It is keyed to the
- *   numeric IDs of all child forums and containers. Each $forum in $forums
- *   contains:
- *   - $forum->is_container: TRUE if the forum can contain other forums. FALSE
- *     if the forum can contain only topics.
- *   - $forum->depth: How deep the forum is in the current hierarchy.
- *   - $forum->zebra: 'even' or 'odd' string used for row class.
- *   - $forum->icon_class: 'default' or 'new' string used for forum icon class.
- *   - $forum->icon_title: Text alternative for the forum icon.
- *   - $forum->name: The name of the forum.
- *   - $forum->link: The URL to link to this forum.
- *   - $forum->description: The description of this forum.
- *   - $forum->new_topics: TRUE if the forum contains unread posts.
- *   - $forum->new_url: A URL to the forum's unread posts.
- *   - $forum->new_text: Text for the above URL, which tells how many new posts.
- *   - $forum->old_topics: A count of posts that have already been read.
- *   - $forum->num_posts: The total number of posts in the forum.
- *   - $forum->last_reply: Text representing the last time a forum was posted or
- *     commented in.
- * - $forum_id: Forum ID for the current forum. Parent to all items within the
- *   $forums array.
- *
- * @see template_preprocess_forum_list()
- * @see theme_forum_list()
- *
- * @ingroup themeable
- */
-?>
-<table id="forum-<?php print $forum_id; ?>">
-  <thead>
-    <tr>
-      <th><?php print t('Forum'); ?></th>
-      <th><?php print t('Topics');?></th>
-      <th><?php print t('Posts'); ?></th>
-      <th><?php print t('Last post'); ?></th>
-    </tr>
-  </thead>
-  <tbody>
-  <?php foreach ($forums as $child_id => $forum): ?>
-    <tr id="forum-list-<?php print $child_id; ?>" class="<?php print $forum->zebra; ?>">
-      <td <?php print $forum->is_container ? 'colspan="4" class="container"' : 'class="forum"'; ?>>
-        <?php /* Enclose the contents of this cell with X divs, where X is the
-               * depth this forum resides at. This will allow us to use CSS
-               * left-margin for indenting.
-               */ ?>
-        <?php print str_repeat('<div class="indent">', $forum->depth); ?>
-          <div class="icon forum-status-<?php print $forum->icon_class; ?>" title="<?php print $forum->icon_title; ?>">
-            <span class="element-invisible"><?php print $forum->icon_title; ?></span>
-          </div>
-          <div class="name"><a href="<?php print $forum->link; ?>"><?php print $forum->name; ?></a></div>
-          <?php if ($forum->description): ?>
-            <div class="description"><?php print $forum->description; ?></div>
-          <?php endif; ?>
-        <?php print str_repeat('</div>', $forum->depth); ?>
-      </td>
-      <?php if (!$forum->is_container): ?>
-        <td class="topics">
-          <?php print $forum->num_topics ?>
-          <?php if ($forum->new_topics): ?>
-            <br />
-            <a href="<?php print $forum->new_url; ?>"><?php print $forum->new_text; ?></a>
-          <?php endif; ?>
-        </td>
-        <td class="posts"><?php print $forum->num_posts ?></td>
-        <td class="last-reply"><?php print $forum->last_reply ?></td>
-      <?php endif; ?>
-    </tr>
-  <?php endforeach; ?>
-  </tbody>
-</table>
diff --git a/modules/forum/forum-rtl.css b/modules/forum/forum-rtl.css
deleted file mode 100644
index 3f2a88b..0000000
--- a/modules/forum/forum-rtl.css
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * @file
- * Right-to-left styling for the Forum module.
- */
-
-#forum td.forum .icon {
-  float: right;
-  margin: 0 0 0 9px;
-}
-#forum div.indent {
-  margin-left: 0;
-  margin-right: 20px;
-}
-.forum-topic-navigation {
-  padding: 1em 3em 0 0;
-}
-.forum-topic-navigation .topic-previous {
-  text-align: left;
-  float: right;
-}
-.forum-topic-navigation .topic-next {
-  text-align: right;
-  float: left;
-}
diff --git a/modules/forum/forum-submitted.tpl.php b/modules/forum/forum-submitted.tpl.php
deleted file mode 100644
index 18fea8f..0000000
--- a/modules/forum/forum-submitted.tpl.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
-/**
- * @file
- * Formats a forum post submission string.
- *
- * The submission string indicates when and by whom a topic was submitted.
- *
- * Available variables:
- * - $author: The author of the post.
- * - $time: How long ago the post was created.
- * - $topic: An object with the raw data of the post. Potentially unsafe. Be
- *   sure to clean this data before printing.
- *
- * @see template_preprocess_forum_submitted()
- * @see theme_forum_submitted()
- *
- * @ingroup themeable
- */
-?>
-<?php if ($time): ?>
-  <span class="submitted">
-  <?php print t('By !author @time ago', array(
-    '@time' => $time,
-    '!author' => $author,
-    )); ?>
-  </span>
-<?php else: ?>
-  <?php print t('n/a'); ?>
-<?php endif; ?>
diff --git a/modules/forum/forum-topic-list.tpl.php b/modules/forum/forum-topic-list.tpl.php
deleted file mode 100644
index 6427814..0000000
--- a/modules/forum/forum-topic-list.tpl.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-
-/**
- * @file
- * Displays a list of forum topics.
- *
- * Available variables:
- * - $header: The table header. This is pre-generated with click-sorting
- *   information. If you need to change this, see
- *   template_preprocess_forum_topic_list().
- * - $pager: The pager to display beneath the table.
- * - $topics: An array of topics to be displayed. Each $topic in $topics
- *   contains:
- *   - $topic->icon: The icon to display.
- *   - $topic->moved: A flag to indicate whether the topic has been moved to
- *     another forum.
- *   - $topic->title: The title of the topic. Safe to output.
- *   - $topic->message: If the topic has been moved, this contains an
- *     explanation and a link.
- *   - $topic->zebra: 'even' or 'odd' string used for row class.
- *   - $topic->comment_count: The number of replies on this topic.
- *   - $topic->new_replies: A flag to indicate whether there are unread
- *     comments.
- *   - $topic->new_url: If there are unread replies, this is a link to them.
- *   - $topic->new_text: Text containing the translated, properly pluralized
- *     count.
- *   - $topic->created: A string representing when the topic was posted. Safe
- *     to output.
- *   - $topic->last_reply: An outputtable string representing when the topic was
- *     last replied to.
- *   - $topic->timestamp: The raw timestamp this topic was posted.
- * - $topic_id: Numeric ID for the current forum topic.
- *
- * @see template_preprocess_forum_topic_list()
- * @see theme_forum_topic_list()
- *
- * @ingroup themeable
- */
-?>
-<table id="forum-topic-<?php print $topic_id; ?>">
-  <thead>
-    <tr><?php print $header; ?></tr>
-  </thead>
-  <tbody>
-  <?php foreach ($topics as $topic): ?>
-    <tr class="<?php print $topic->zebra;?>">
-      <td class="icon"><?php print $topic->icon; ?></td>
-      <td class="title">
-        <div>
-          <?php print $topic->title; ?>
-        </div>
-        <div>
-          <?php print $topic->created; ?>
-        </div>
-      </td>
-    <?php if ($topic->moved): ?>
-      <td colspan="3"><?php print $topic->message; ?></td>
-    <?php else: ?>
-      <td class="replies">
-        <?php print $topic->comment_count; ?>
-        <?php if ($topic->new_replies): ?>
-          <br />
-          <a href="<?php print $topic->new_url; ?>"><?php print $topic->new_text; ?></a>
-        <?php endif; ?>
-      </td>
-      <td class="last-reply"><?php print $topic->last_reply; ?></td>
-    <?php endif; ?>
-    </tr>
-  <?php endforeach; ?>
-  </tbody>
-</table>
-<?php print $pager; ?>
diff --git a/modules/forum/forum.admin.inc b/modules/forum/forum.admin.inc
deleted file mode 100644
index 712cf54..0000000
--- a/modules/forum/forum.admin.inc
+++ /dev/null
@@ -1,352 +0,0 @@
-<?php
-
-/**
- * @file
- * Administrative page callbacks for the Forum module.
- */
-
-/**
- * Page callback: Returns a form for creating a new forum or container.
- *
- * @param $type
- *   What is being added. Possible values are 'forum' and 'container'.
- * @param $edit
- *   (optional) Associative array containing a forum term to be edited.
- *   Defaults to an empty array.
- *
- * @return
- *   A form for creating a new forum or container.
- *
- * @see forum_menu()
- */
-function forum_form_main($type, $edit = array()) {
-  $edit = (array) $edit;
-  if ((isset($_POST['op']) && $_POST['op'] == t('Delete')) || !empty($_POST['confirm'])) {
-    return drupal_get_form('forum_confirm_delete', $edit['tid']);
-  }
-  switch ($type) {
-    case 'forum':
-      return drupal_get_form('forum_form_forum', $edit);
-      break;
-    case 'container':
-      return drupal_get_form('forum_form_container', $edit);
-      break;
-  }
-}
-
-/**
- * Form constructor for adding and editing a forum.
- *
- * @param $edit
- *   (optional) Associative array containing a forum term to be added or edited.
- *   Defaults to an empty array.
- *
- * @see forum_form_submit()
- * @ingroup forms
- */
-function forum_form_forum($form, &$form_state, $edit = array()) {
-  $edit += array(
-    'name' => '',
-    'description' => '',
-    'tid' => NULL,
-    'weight' => 0,
-  );
-  $form['name'] = array('#type' => 'textfield',
-    '#title' => t('Forum name'),
-    '#default_value' => $edit['name'],
-    '#maxlength' => 255,
-    '#description' => t('Short but meaningful name for this collection of threaded discussions.'),
-    '#required' => TRUE,
-  );
-  $form['description'] = array('#type' => 'textarea',
-    '#title' => t('Description'),
-    '#default_value' => $edit['description'],
-    '#description' => t('Description and guidelines for discussions within this forum.'),
-  );
-  $form['parent']['#tree'] = TRUE;
-  $form['parent'][0] = _forum_parent_select($edit['tid'], t('Parent'), 'forum');
-  $form['weight'] = array('#type' => 'weight',
-    '#title' => t('Weight'),
-    '#default_value' => $edit['weight'],
-    '#description' => t('Forums are displayed in ascending order by weight (forums with equal weights are displayed alphabetically).'),
-  );
-
-  $form['vid'] = array('#type' => 'hidden', '#value' => variable_get('forum_nav_vocabulary', ''));
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save'));
-  if ($edit['tid']) {
-    $form['actions']['delete'] = array('#type' => 'submit', '#value' => t('Delete'));
-    $form['tid'] = array('#type' => 'hidden', '#value' => $edit['tid']);
-  }
-  $form['#submit'][] = 'forum_form_submit';
-  $form['#theme'] = 'forum_form';
-
-  return $form;
-}
-
-/**
- * Form submission handler for forum_form_forum() and forum_form_container().
- */
-function forum_form_submit($form, &$form_state) {
-  if ($form['form_id']['#value'] == 'forum_form_container') {
-    $container = TRUE;
-    $type = t('forum container');
-  }
-  else {
-    $container = FALSE;
-    $type = t('forum');
-  }
-
-  $term = (object) $form_state['values'];
-  $status = taxonomy_term_save($term);
-  switch ($status) {
-    case SAVED_NEW:
-      if ($container) {
-        $containers = variable_get('forum_containers', array());
-        $containers[] = $term->tid;
-        variable_set('forum_containers', $containers);
-      }
-      $form_state['values']['tid'] = $term->tid;
-      drupal_set_message(t('Created new @type %term.', array('%term' => $form_state['values']['name'], '@type' => $type)));
-      break;
-    case SAVED_UPDATED:
-      drupal_set_message(t('The @type %term has been updated.', array('%term' => $form_state['values']['name'], '@type' => $type)));
-      // Clear the page and block caches to avoid stale data.
-      cache_clear_all();
-      break;
-  }
-  $form_state['redirect'] = 'admin/structure/forum';
-  return;
-}
-
-/**
- * Returns HTML for a forum form.
- *
- * By default this does not alter the appearance of a form at all, but is
- * provided as a convenience for themers.
- *
- * @param $variables
- *   An associative array containing:
- *   - form: A render element representing the form.
- *
- * @ingroup themeable
- */
-function theme_forum_form($variables) {
-  return drupal_render_children($variables['form']);
-}
-
-/**
- * Form constructor for adding and editing forum containers.
- *
- * @param $edit
- *   (optional) Associative array containing a container term to be added or edited.
- *   Defaults to an empty array.
- *
- * @see forum_form_submit()
- * @ingroup forms
- */
-function forum_form_container($form, &$form_state, $edit = array()) {
-  $edit += array(
-    'name' => '',
-    'description' => '',
-    'tid' => NULL,
-    'weight' => 0,
-  );
-  // Handle a delete operation.
-  $form['name'] = array(
-    '#title' => t('Container name'),
-    '#type' => 'textfield',
-    '#default_value' => $edit['name'],
-    '#maxlength' => 255,
-    '#description' => t('Short but meaningful name for this collection of related forums.'),
-    '#required' => TRUE
-  );
-
-  $form['description'] = array(
-    '#type' => 'textarea',
-    '#title' => t('Description'),
-    '#default_value' => $edit['description'],
-    '#description' => t('Description and guidelines for forums within this container.')
-  );
-  $form['parent']['#tree'] = TRUE;
-  $form['parent'][0] = _forum_parent_select($edit['tid'], t('Parent'), 'container');
-  $form['weight'] = array(
-    '#type' => 'weight',
-    '#title' => t('Weight'),
-    '#default_value' => $edit['weight'],
-    '#description' => t('Containers are displayed in ascending order by weight (containers with equal weights are displayed alphabetically).')
-  );
-
-  $form['vid'] = array(
-    '#type' => 'hidden',
-    '#value' => variable_get('forum_nav_vocabulary', ''),
-  );
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Save')
-  );
-  if ($edit['tid']) {
-    $form['actions']['delete'] = array('#type' => 'submit', '#value' => t('Delete'));
-    $form['tid'] = array('#type' => 'value', '#value' => $edit['tid']);
-  }
-  $form['#submit'][] = 'forum_form_submit';
-  $form['#theme'] = 'forum_form';
-
-  return $form;
-}
-
-/**
- * Form constructor for confirming deletion of a forum taxonomy term.
- *
- * @param $tid
- *   ID of the term to be deleted.
- *
- * @see forum_confirm_delete_submit()
- * @ingroup forms
- */
-function forum_confirm_delete($form, &$form_state, $tid) {
-  $term = taxonomy_term_load($tid);
-
-  $form['tid'] = array('#type' => 'value', '#value' => $tid);
-  $form['name'] = array('#type' => 'value', '#value' => $term->name);
-
-  return confirm_form($form, t('Are you sure you want to delete the forum %name?', array('%name' => $term->name)), 'admin/structure/forum', t('Deleting a forum or container will also delete its sub-forums, if any. To delete posts in this forum, visit <a href="@content">content administration</a> first. This action cannot be undone.', array('@content' => url('admin/content'))), t('Delete'), t('Cancel'));
-}
-
-/**
- * Form submission handler for forum_confirm_delete().
- */
-function forum_confirm_delete_submit($form, &$form_state) {
-  taxonomy_term_delete($form_state['values']['tid']);
-  drupal_set_message(t('The forum %term and all sub-forums have been deleted.', array('%term' => $form_state['values']['name'])));
-  watchdog('content', 'forum: deleted %term and all its sub-forums.', array('%term' => $form_state['values']['name']));
-
-  $form_state['redirect'] = 'admin/structure/forum';
-  return;
-}
-
-/**
- * Form constructor for the forum settings page.
- *
- * @see forum_menu()
- * @see system_settings_form()
- * @ingroup forms
- */
-function forum_admin_settings($form) {
-  $number = drupal_map_assoc(array(5, 10, 15, 20, 25, 30, 35, 40, 50, 60, 80, 100, 150, 200, 250, 300, 350, 400, 500));
-  $form['forum_hot_topic'] = array('#type' => 'select',
-    '#title' => t('Hot topic threshold'),
-    '#default_value' => variable_get('forum_hot_topic', 15),
-    '#options' => $number,
-    '#description' => t('The number of replies a topic must have to be considered "hot".'),
-  );
-  $number = drupal_map_assoc(array(10, 25, 50, 75, 100));
-  $form['forum_per_page'] = array('#type' => 'select',
-    '#title' => t('Topics per page'),
-    '#default_value' => variable_get('forum_per_page', 25),
-    '#options' => $number,
-    '#description' => t('Default number of forum topics displayed per page.'),
-  );
-  $forder = array(1 => t('Date - newest first'), 2 => t('Date - oldest first'), 3 => t('Posts - most active first'), 4 => t('Posts - least active first'));
-  $form['forum_order'] = array('#type' => 'radios',
-    '#title' => t('Default order'),
-    '#default_value' => variable_get('forum_order', 1),
-    '#options' => $forder,
-    '#description' => t('Default display order for topics.'),
-  );
-  return system_settings_form($form);
-}
-
-/**
- * Form constructor for the forum overview form.
- *
- * Returns a form for controlling the hierarchy of existing forums and
- * containers.
- *
- * @see forum_menu()
- * @ingroup forms
- */
-function forum_overview($form, &$form_state) {
-  module_load_include('inc', 'taxonomy', 'taxonomy.admin');
-
-  $vid = variable_get('forum_nav_vocabulary', '');
-  $vocabulary = taxonomy_vocabulary_load($vid);
-  $form = taxonomy_overview_terms($form, $form_state, $vocabulary);
-
-  foreach (element_children($form) as $key) {
-    if (isset($form[$key]['#term'])) {
-      $term = $form[$key]['#term'];
-      $form[$key]['view']['#href'] = 'forum/' . $term['tid'];
-      if (in_array($form[$key]['#term']['tid'], variable_get('forum_containers', array()))) {
-        $form[$key]['edit']['#title'] = t('edit container');
-        $form[$key]['edit']['#href'] = 'admin/structure/forum/edit/container/' . $term['tid'];
-      }
-      else {
-        $form[$key]['edit']['#title'] = t('edit forum');
-        $form[$key]['edit']['#href'] = 'admin/structure/forum/edit/forum/' . $term['tid'];
-      }
-    }
-  }
-
-  // Remove the alphabetical reset.
-  unset($form['actions']['reset_alphabetical']);
-
-  // The form needs to have submit and validate handlers set explicitly.
-  $form['#theme'] = 'taxonomy_overview_terms';
-  $form['#submit'] = array('taxonomy_overview_terms_submit'); // Use the existing taxonomy overview submit handler.
-  $form['#empty_text'] = t('No containers or forums available. <a href="@container">Add container</a> or <a href="@forum">Add forum</a>.', array('@container' => url('admin/structure/forum/add/container'), '@forum' => url('admin/structure/forum/add/forum')));
-  return $form;
-}
-
-/**
- * Returns a select box for available parent terms.
- *
- * @param $tid
- *   ID of the term that is being added or edited.
- * @param $title
- *   Title for the select box.
- * @param $child_type
- *   Whether the child is a forum or a container.
- *
- * @return
- *   A select form element.
- */
-function _forum_parent_select($tid, $title, $child_type) {
-
-  $parents = taxonomy_get_parents($tid);
-  if ($parents) {
-    $parent = array_shift($parents);
-    $parent = $parent->tid;
-  }
-  else {
-    $parent = 0;
-  }
-
-  $vid = variable_get('forum_nav_vocabulary', '');
-  $children = taxonomy_get_tree($vid, $tid);
-
-  // A term can't be the child of itself, nor of its children.
-  foreach ($children as $child) {
-    $exclude[] = $child->tid;
-  }
-  $exclude[] = $tid;
-
-  $tree = taxonomy_get_tree($vid);
-  $options[0] = '<' . t('root') . '>';
-  if ($tree) {
-    foreach ($tree as $term) {
-      if (!in_array($term->tid, $exclude)) {
-        $options[$term->tid] = str_repeat(' -- ', $term->depth) . $term->name;
-      }
-    }
-  }
-  if ($child_type == 'container') {
-    $description = t('Containers are usually placed at the top (root) level, but may also be placed inside another container or forum.');
-  }
-  elseif ($child_type == 'forum') {
-    $description = t('Forums may be placed at the top (root) level, or inside another container or forum.');
-  }
-
-  return array('#type' => 'select', '#title' => $title, '#default_value' => $parent, '#options' => $options, '#description' => $description, '#required' => TRUE);
-}
diff --git a/modules/forum/forum.css b/modules/forum/forum.css
deleted file mode 100644
index 480e07b..0000000
--- a/modules/forum/forum.css
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * @file
- * Styling for the Forum module.
- */
-
-#forum .description {
-  font-size: 0.9em;
-  margin: 0.5em;
-}
-#forum td.created,
-#forum td.posts,
-#forum td.topics,
-#forum td.last-reply,
-#forum td.replies,
-#forum td.pager {
-  white-space: nowrap;
-}
-
-#forum td.forum .icon {
-  background-image: url(../../misc/forum-icons.png);
-  background-repeat: no-repeat;
-  float: left; /* LTR */
-  height: 24px;
-  margin: 0 9px 0 0; /* LTR */
-  width: 24px;
-}
-#forum td.forum .forum-status-new {
-  background-position: -24px 0;
-}
-
-#forum div.indent {
-  margin-left: 20px; /* LTR */
-}
-#forum .icon div {
-  background-image: url(../../misc/forum-icons.png);
-  background-repeat: no-repeat;
-  width: 24px;
-  height: 24px;
-}
-#forum .icon .topic-status-new {
-  background-position: -24px 0;
-}
-#forum .icon .topic-status-hot {
-  background-position: -48px 0;
-}
-#forum .icon .topic-status-hot-new {
-  background-position: -72px 0;
-}
-#forum .icon .topic-status-sticky {
-  background-position: -96px 0;
-}
-#forum .icon .topic-status-closed {
-  background-position: -120px 0;
-}
diff --git a/modules/forum/forum.info b/modules/forum/forum.info
deleted file mode 100644
index b18a0e5..0000000
--- a/modules/forum/forum.info
+++ /dev/null
@@ -1,10 +0,0 @@
-name = Forum
-description = Provides discussion forums.
-dependencies[] = taxonomy
-dependencies[] = comment
-package = Core
-version = VERSION
-core = 7.x
-files[] = forum.test
-configure = admin/structure/forum
-stylesheets[all][] = forum.css
diff --git a/modules/forum/forum.install b/modules/forum/forum.install
deleted file mode 100644
index 57e116b..0000000
--- a/modules/forum/forum.install
+++ /dev/null
@@ -1,467 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update, and uninstall functions for the Forum module.
- */
-
-/**
- * Implements hook_install().
- */
-function forum_install() {
-  // Set the weight of the forum.module to 1 so it is loaded after the taxonomy.module.
-  db_update('system')
-    ->fields(array('weight' => 1))
-    ->condition('name', 'forum')
-    ->execute();
-  // Forum topics are published by default, but do not have any other default
-  // options set (for example, they are not promoted to the front page).
-  variable_set('node_options_forum', array('status'));
-}
-
-/**
- * Implements hook_enable().
- */
-function forum_enable() {
-  // If we enable forum at the same time as taxonomy we need to call
-  // field_associate_fields() as otherwise the field won't be enabled until
-  // hook modules_enabled is called which takes place after hook_enable events.
-  field_associate_fields('taxonomy');
-  // Create the forum vocabulary if it does not exist.
-  $vocabulary = taxonomy_vocabulary_load(variable_get('forum_nav_vocabulary', 0));
-  if (!$vocabulary) {
-    $edit = array(
-      'name' => t('Forums'),
-      'machine_name' => 'forums',
-      'description' => t('Forum navigation vocabulary'),
-      'hierarchy' => 1,
-      'module' => 'forum',
-      'weight' => -10,
-    );
-    $vocabulary = (object) $edit;
-    taxonomy_vocabulary_save($vocabulary);
-    variable_set('forum_nav_vocabulary', $vocabulary->vid);
-  }
-
-  // Create the 'taxonomy_forums' field if it doesn't already exist.
-  if (!field_info_field('taxonomy_forums')) {
-    $field = array(
-      'field_name' => 'taxonomy_forums',
-      'type' => 'taxonomy_term_reference',
-      'settings' => array(
-        'allowed_values' => array(
-          array(
-            'vocabulary' => $vocabulary->machine_name,
-            'parent' => 0,
-          ),
-        ),
-      ),
-    );
-    field_create_field($field);
-
-    // Create a default forum so forum posts can be created.
-    $edit = array(
-      'name' => t('General discussion'),
-      'description' => '',
-      'parent' => array(0),
-      'vid' => $vocabulary->vid,
-    );
-    $term = (object) $edit;
-    taxonomy_term_save($term);
-
-    // Create the instance on the bundle.
-    $instance = array(
-      'field_name' => 'taxonomy_forums',
-      'entity_type' => 'node',
-      'label' => $vocabulary->name,
-      'bundle' => 'forum',
-      'required' => TRUE,
-      'widget' => array(
-        'type' => 'options_select',
-      ),
-      'display' => array(
-        'default' => array(
-          'type' => 'taxonomy_term_reference_link',
-         'weight' => 10,
-        ),
-        'teaser' => array(
-          'type' => 'taxonomy_term_reference_link',
-         'weight' => 10,
-        ),
-      ),
-    );
-    field_create_instance($instance);
-  }
-
-  // Ensure the forum node type is available.
-  node_types_rebuild();
-  $types = node_type_get_types();
-  node_add_body_field($types['forum']);
-}
-
-/**
- * Implements hook_uninstall().
- */
-function forum_uninstall() {
-  // Load the dependent Taxonomy module, in case it has been disabled.
-  drupal_load('module', 'taxonomy');
-
-  variable_del('forum_containers');
-  variable_del('forum_hot_topic');
-  variable_del('forum_per_page');
-  variable_del('forum_order');
-  variable_del('forum_block_num_active');
-  variable_del('forum_block_num_new');
-  variable_del('node_options_forum');
-
-  field_delete_field('taxonomy_forums');
-  // Purge field data now to allow taxonomy module to be uninstalled
-  // if this is the only field remaining.
-  field_purge_batch(10);
-}
-
-/**
- * Implements hook_schema().
- */
-function forum_schema() {
-  $schema['forum'] = array(
-    'description' => 'Stores the relationship of nodes to forum terms.',
-    'fields' => array(
-      'nid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The {node}.nid of the node.',
-      ),
-      'vid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Primary Key: The {node}.vid of the node.',
-      ),
-      'tid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The {taxonomy_term_data}.tid of the forum term assigned to the node.',
-      ),
-    ),
-    'indexes' => array(
-      'forum_topic' => array('nid', 'tid'),
-      'tid' => array('tid'),
-    ),
-    'primary key' => array('vid'),
-    'foreign keys' => array(
-      'forum_node' => array(
-        'table' => 'node',
-        'columns' => array(
-          'nid' => 'nid',
-          'vid' => 'vid',
-        ),
-      ),
-    ),
-  );
-
-  $schema['forum_index'] = array(
-    'description' => 'Maintains denormalized information about node/term relationships.',
-    'fields' => array(
-      'nid' => array(
-        'description' => 'The {node}.nid this record tracks.',
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-      'title' => array(
-        'description' => 'The title of this node, always treated as non-markup plain text.',
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'default' => '',
-      ),
-      'tid' => array(
-         'description' => 'The term ID.',
-         'type' => 'int',
-         'unsigned' => TRUE,
-         'not null' => TRUE,
-         'default' => 0,
-      ),
-      'sticky' => array(
-        'description' => 'Boolean indicating whether the node is sticky.',
-        'type' => 'int',
-        'not null' => FALSE,
-        'default' => 0,
-        'size' => 'tiny',
-      ),
-      'created' => array(
-        'description' => 'The Unix timestamp when the node was created.',
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default'=> 0,
-      ),
-      'last_comment_timestamp' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The Unix timestamp of the last comment that was posted within this node, from {comment}.timestamp.',
-      ),
-      'comment_count' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The total number of comments on this node.',
-      ),
-    ),
-    'indexes' => array(
-      'forum_topics' => array('nid', 'tid', 'sticky', 'last_comment_timestamp'),
-      'created' => array('created'),
-      'last_comment_timestamp' => array('last_comment_timestamp'),
-    ),
-    'foreign keys' => array(
-      'tracked_node' => array(
-        'table' => 'node',
-        'columns' => array('nid' => 'nid'),
-      ),
-      'term' => array(
-        'table' => 'taxonomy_term_data',
-        'columns' => array(
-          'tid' => 'tid',
-        ),
-      ),
-    ),
-  );
-
-
-  return $schema;
-}
-
-/**
- * Implements hook_update_dependencies().
- */
-function forum_update_dependencies() {
-  $dependencies['forum'][7003] = array(
-    // Forum update 7003 uses field API update functions, so must run after
-    // Field API has been enabled.
-    'system' => 7020,
-    // Forum update 7003 relies on updated taxonomy module schema. Ensure it
-    // runs after all taxonomy updates.
-    'taxonomy' => 7010,
-  );
-  return $dependencies;
-}
-
-/**
- * Add new index to forum table.
- */
-function forum_update_7000() {
-  db_drop_index('forum', 'nid');
-  db_add_index('forum', 'forum_topic', array('nid', 'tid'));
-}
-
-/**
- * Create new {forum_index} table.
- */
-function forum_update_7001() {
-  $forum_index = array(
-    'description' => 'Maintains denormalized information about node/term relationships.',
-    'fields' => array(
-      'nid' => array(
-        'description' => 'The {node}.nid this record tracks.',
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-      'title' => array(
-        'description' => 'The title of this node, always treated as non-markup plain text.',
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'default' => '',
-      ),
-      'tid' => array(
-         'description' => 'The term ID.',
-         'type' => 'int',
-         'unsigned' => TRUE,
-         'not null' => TRUE,
-         'default' => 0,
-      ),
-      'sticky' => array(
-        'description' => 'Boolean indicating whether the node is sticky.',
-        'type' => 'int',
-        'not null' => FALSE,
-        'default' => 0,
-        'size' => 'tiny',
-      ),
-      'created' => array(
-        'description' => 'The Unix timestamp when the node was created.',
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default'=> 0,
-      ),
-      'last_comment_timestamp' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The Unix timestamp of the last comment that was posted within this node, from {comment}.timestamp.',
-      ),
-      'comment_count' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The total number of comments on this node.',
-      ),
-    ),
-    'indexes' => array(
-      'forum_topics' => array('tid', 'sticky', 'last_comment_timestamp'),
-    ),
-    'foreign keys' => array(
-      'tracked_node' => array(
-        'table' => 'node',
-        'columns' => array('nid' => 'nid'),
-      ),
-      'term' => array(
-        'table' => 'taxonomy_term_data',
-        'columns' => array(
-          'tid' => 'tid',
-        ),
-      ),
-    ),
-  );
-  db_create_table('forum_index', $forum_index);
-
-  $select = db_select('node', 'n');
-  $forum_alias = $select->join('forum', 'f', 'n.vid = f.vid');
-  $ncs_alias = $select->join('node_comment_statistics', 'ncs', 'n.nid = ncs.nid');
-  $select
-    ->fields('n', array('nid', 'title', 'sticky', 'created'))
-    ->fields($forum_alias, array('tid'))
-    ->fields($ncs_alias, array('last_comment_timestamp', 'comment_count'));
-
-  db_insert('forum_index')
-    ->fields(array('nid', 'title', 'sticky', 'created', 'tid', 'last_comment_timestamp', 'comment_count'))
-    ->from($select)
-    ->execute();
-}
-
-/**
- * @addtogroup updates-7.x-extra
- * @{
- */
-
-/**
- * Add new index to forum_index table.
- */
-function forum_update_7002() {
-  db_drop_index('forum_index', 'forum_topics');
-  db_add_index('forum_index', 'forum_topics', array('nid', 'tid', 'sticky', 'last_comment_timestamp'));
-}
-
-/**
- * Rename field to 'taxonomy_forums'.
- */
-function forum_update_7003() {
-  $messages = array();
-
-  $new_field_name = 'taxonomy_forums';
-
-  // Test to see if the taxonomy_forums field exists.
-  $fields = _update_7000_field_read_fields(array('field_name' => $new_field_name));
-  if ($fields) {
-    // Since the field exists, we're done.
-    return;
-  }
-
-  // Calculate the old field name.
-  $vid = variable_get('forum_nav_vocabulary', 0);
-  $vocabulary_machine_name = db_select('taxonomy_vocabulary', 'tv')
-    ->fields('tv', array('machine_name'))
-    ->condition('vid', $vid)
-    ->execute()
-    ->fetchField();
-  $old_field_name = 'taxonomy_' . $vocabulary_machine_name;
-
-  // Read the old fields.
-  $old_fields = _update_7000_field_read_fields(array('field_name' => $old_field_name));
-  foreach ($old_fields as $old_field) {
-    if ($old_field['storage']['type'] != 'field_sql_storage') {
-      $messages[] = t('Cannot rename field %id (%old_field_name) to %new_field_name because it does not use the field_sql_storage storage type.', array(
-        '%id' => $old_field['id'],
-        '%old_field_name' => $old_field_name,
-        '%new_field_name' => $new_field_name,
-      ));
-      continue;
-    }
-
-    // Update {field_config}.
-    db_update('field_config')
-      ->fields(array('field_name' => $new_field_name))
-      ->condition('id', $old_field['id'])
-      ->execute();
-
-    // Update {field_config_instance}.
-    db_update('field_config_instance')
-      ->fields(array('field_name' => $new_field_name))
-      ->condition('field_id', $old_field['id'])
-      ->execute();
-
-    // The tables that need updating in the form 'old_name' => 'new_name'.
-    $tables = array(
-      'field_data_' . $old_field_name => 'field_data_' . $new_field_name,
-      'field_revision_' . $old_field_name => 'field_revision_' . $new_field_name,
-    );
-    foreach ($tables as $old_table => $new_table) {
-      $old_column_name = $old_field_name . '_tid';
-      $new_column_name = $new_field_name . '_tid';
-
-      // Rename the column.
-      db_drop_index($old_table, $old_column_name);
-      db_change_field($old_table, $old_column_name, $new_column_name, array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => FALSE,
-      ));
-      db_drop_index($old_table, $new_column_name);
-      db_add_index($old_table, $new_column_name, array($new_column_name));
-
-      // Rename the table.
-      db_rename_table($old_table, $new_table);
-    }
-  }
-
-  cache_clear_all('*', 'cache_field', TRUE);
-
-  return $messages;
-}
-
-/**
- * Update {forum_index} so that only published nodes are indexed.
- */
-function forum_update_7011() {
-  $select = db_select('node', 'n')
-    ->fields('n', array('nid'))
-    ->condition('status', 0 );
-
-  db_delete('forum_index')
-    ->condition('nid', $select, 'IN')
-    ->execute();
-}
-
-/**
- * Add 'created' and 'last_comment_timestamp' indexes.
- */
-function forum_update_7012() {
-  db_add_index('forum_index', 'created', array('created'));
-  db_add_index('forum_index', 'last_comment_timestamp', array('last_comment_timestamp'));
-}
-
-/**
- * @} End of "addtogroup updates-7.x-extra".
- */
diff --git a/modules/forum/forum.module b/modules/forum/forum.module
deleted file mode 100644
index 575de36..0000000
--- a/modules/forum/forum.module
+++ /dev/null
@@ -1,1396 +0,0 @@
-<?php
-
-/**
- * @file
- * Provides discussion forums.
- */
-
-/**
- * Implements hook_help().
- */
-function forum_help($path, $arg) {
-  switch ($path) {
-    case 'admin/help#forum':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Forum module lets you create threaded discussion forums with functionality similar to other message board systems. Forums are useful because they allow community members to discuss topics with one another while ensuring those conversations are archived for later reference. In a forum, users post topics and threads in nested hierarchies, allowing discussions to be categorized and grouped. The forum hierarchy consists of:') . '</p>';
-      $output .= '<ul>';
-      $output .= '<li>' . t('Optional containers (for example, <em>Support</em>), which can hold:') . '</li>';
-      $output .= '<ul><li>' . t('Forums (for example, <em>Installing Drupal</em>), which can hold:') . '</li>';
-      $output .= '<ul><li>' . t('Forum topics submitted by users (for example, <em>How to start a Drupal 6 Multisite</em>), which start discussions and are starting points for:') . '</li>';
-      $output .= '<ul><li>' . t('Threaded comments submitted by users (for example, <em>You have these options...</em>).') . '</li>';
-      $output .= '</ul>';
-      $output .= '</ul>';
-      $output .= '</ul>';
-      $output .= '</ul>';
-      $output .= '<p>' . t('For more information, see the online handbook entry for <a href="@forum">Forum module</a>.', array('@forum' => 'http://drupal.org/documentation/modules/forum')) . '</p>';
-      $output .= '<h3>' . t('Uses') . '</h3>';
-      $output .= '<dl>';
-      $output .= '<dt>' . t('Setting up forum structure') . '</dt>';
-      $output .= '<dd>' . t('Visit the <a href="@forums">Forums page</a> to set up containers and forums to hold your discussion topics.', array('@forums' => url('admin/structure/forum'))) . '</dd>';
-      $output .= '<dt>' . t('Starting a discussion') . '</dt>';
-      $output .= '<dd>' . t('The <a href="@create-topic">Forum topic</a> link on the <a href="@content-add">Add new content</a> page creates the first post of a new threaded discussion, or thread.', array('@create-topic' => url('node/add/forum'), '@content-add' => url('node/add'))) . '</dd>';
-      $output .= '<dt>' . t('Navigation') . '</dt>';
-      $output .= '<dd>' . t('Enabling the Forum module provides a default <em>Forums</em> menu item in the navigation menu that links to the <a href="@forums">Forums page</a>.', array('@forums' => url('forum'))) . '</dd>';
-      $output .= '<dt>' . t('Moving forum topics') . '</dt>';
-      $output .= '<dd>' . t('A forum topic (and all of its comments) may be moved between forums by selecting a different forum while editing a forum topic. When moving a forum topic between forums, the <em>Leave shadow copy</em> option creates a link in the original forum pointing to the new location.') . '</dd>';
-      $output .= '<dt>' . t('Locking and disabling comments') . '</dt>';
-      $output .= '<dd>' . t('Selecting <em>Closed</em> under <em>Comment settings</em> while editing a forum topic will lock (prevent new comments on) the thread. Selecting <em>Hidden</em> under <em>Comment settings</em> while editing a forum topic will hide all existing comments on the thread, and prevent new ones.') . '</dd>';
-      $output .= '</dl>';
-      return $output;
-    case 'admin/structure/forum':
-      $output = '<p>' . t('Forums contain forum topics. Use containers to group related forums.') . '</p>';
-      $output .= theme('more_help_link', array('url' => 'admin/help/forum'));
-      return $output;
-    case 'admin/structure/forum/add/container':
-      return '<p>' . t('Use containers to group related forums.') . '</p>';
-    case 'admin/structure/forum/add/forum':
-      return '<p>' . t('A forum holds related forum topics.') . '</p>';
-    case 'admin/structure/forum/settings':
-      return '<p>' . t('Adjust the display of your forum topics. Organize the forums on the <a href="@forum-structure">forum structure page</a>.', array('@forum-structure' => url('admin/structure/forum'))) . '</p>';
-  }
-}
-
-/**
- * Implements hook_theme().
- */
-function forum_theme() {
-  return array(
-    'forums' => array(
-      'template' => 'forums',
-      'variables' => array('forums' => NULL, 'topics' => NULL, 'parents' => NULL, 'tid' => NULL, 'sortby' => NULL, 'forum_per_page' => NULL),
-    ),
-    'forum_list' => array(
-      'template' => 'forum-list',
-      'variables' => array('forums' => NULL, 'parents' => NULL, 'tid' => NULL),
-    ),
-    'forum_topic_list' => array(
-      'template' => 'forum-topic-list',
-      'variables' => array('tid' => NULL, 'topics' => NULL, 'sortby' => NULL, 'forum_per_page' => NULL),
-    ),
-    'forum_icon' => array(
-      'template' => 'forum-icon',
-      'variables' => array('new_posts' => NULL, 'num_posts' => 0, 'comment_mode' => 0, 'sticky' => 0, 'first_new' => FALSE),
-    ),
-    'forum_submitted' => array(
-      'template' => 'forum-submitted',
-      'variables' => array('topic' => NULL),
-    ),
-    'forum_form' => array(
-      'render element' => 'form',
-      'file' => 'forum.admin.inc',
-    ),
-  );
-}
-
-/**
- * Implements hook_menu().
- */
-function forum_menu() {
-  $items['forum'] = array(
-    'title' => 'Forums',
-    'page callback' => 'forum_page',
-    'access arguments' => array('access content'),
-    'file' => 'forum.pages.inc',
-  );
-  $items['forum/%forum_forum'] = array(
-    'title' => 'Forums',
-    'page callback' => 'forum_page',
-    'page arguments' => array(1),
-    'access arguments' => array('access content'),
-    'file' => 'forum.pages.inc',
-  );
-  $items['admin/structure/forum'] = array(
-    'title' => 'Forums',
-    'description' => 'Control forum hierarchy settings.',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('forum_overview'),
-    'access arguments' => array('administer forums'),
-    'file' => 'forum.admin.inc',
-  );
-  $items['admin/structure/forum/list'] = array(
-    'title' => 'List',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-    'weight' => -10,
-  );
-  $items['admin/structure/forum/add/container'] = array(
-    'title' => 'Add container',
-    'page callback' => 'forum_form_main',
-    'page arguments' => array('container'),
-    'access arguments' => array('administer forums'),
-    'type' => MENU_LOCAL_ACTION,
-    'parent' => 'admin/structure/forum',
-    'file' => 'forum.admin.inc',
-  );
-  $items['admin/structure/forum/add/forum'] = array(
-    'title' => 'Add forum',
-    'page callback' => 'forum_form_main',
-    'page arguments' => array('forum'),
-    'access arguments' => array('administer forums'),
-    'type' => MENU_LOCAL_ACTION,
-    'parent' => 'admin/structure/forum',
-    'file' => 'forum.admin.inc',
-  );
-  $items['admin/structure/forum/settings'] = array(
-    'title' => 'Settings',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('forum_admin_settings'),
-    'access arguments' => array('administer forums'),
-    'weight' => 5,
-    'type' => MENU_LOCAL_TASK,
-    'parent' => 'admin/structure/forum',
-    'file' => 'forum.admin.inc',
-  );
-  $items['admin/structure/forum/edit/container/%taxonomy_term'] = array(
-    'title' => 'Edit container',
-    'page callback' => 'forum_form_main',
-    'page arguments' => array('container', 5),
-    'access arguments' => array('administer forums'),
-    'file' => 'forum.admin.inc',
-  );
-  $items['admin/structure/forum/edit/forum/%taxonomy_term'] = array(
-    'title' => 'Edit forum',
-    'page callback' => 'forum_form_main',
-    'page arguments' => array('forum', 5),
-    'access arguments' => array('administer forums'),
-    'file' => 'forum.admin.inc',
-  );
-  return $items;
-}
-
-/**
- * Implements hook_menu_local_tasks_alter().
- */
-function forum_menu_local_tasks_alter(&$data, $router_item, $root_path) {
-  global $user;
-
-  // Add action link to 'node/add/forum' on 'forum' sub-pages.
-  if ($root_path == 'forum' || $root_path == 'forum/%') {
-    $tid = (isset($router_item['page_arguments'][0]) ? $router_item['page_arguments'][0]->tid : 0);
-    $forum_term = forum_forum_load($tid);
-    if ($forum_term) {
-      $links = array();
-      // Loop through all bundles for forum taxonomy vocabulary field.
-      $field = field_info_field('taxonomy_forums');
-      foreach ($field['bundles']['node'] as $type) {
-        if (node_access('create', $type)) {
-          $links[$type] = array(
-            '#theme' => 'menu_local_action',
-            '#link' => array(
-              'title' => t('Add new @node_type', array('@node_type' => node_type_get_name($type))),
-              'href' => 'node/add/' . str_replace('_', '-', $type) . '/' . $forum_term->tid,
-            ),
-          );
-        }
-      }
-      if (empty($links)) {
-        // Authenticated user does not have access to create new topics.
-        if ($user->uid) {
-          $links['disallowed'] = array(
-            '#theme' => 'menu_local_action',
-            '#link' => array(
-              'title' => t('You are not allowed to post new content in the forum.'),
-            ),
-          );
-        }
-        // Anonymous user does not have access to create new topics.
-        else {
-          $links['login'] = array(
-            '#theme' => 'menu_local_action',
-            '#link' => array(
-              'title' => t('<a href="@login">Log in</a> to post new content in the forum.', array(
-                '@login' => url('user/login', array('query' => drupal_get_destination())),
-              )),
-              'localized_options' => array('html' => TRUE),
-            ),
-          );
-        }
-      }
-      $data['actions']['output'] = array_merge($data['actions']['output'], $links);
-    }
-  }
-}
-
-/**
- * Implements hook_entity_info_alter().
- */
-function forum_entity_info_alter(&$info) {
-  // Take over URI construction for taxonomy terms that are forums.
-  if ($vid = variable_get('forum_nav_vocabulary', 0)) {
-    // Within hook_entity_info(), we can't invoke entity_load() as that would
-    // cause infinite recursion, so we call taxonomy_vocabulary_get_names()
-    // instead of taxonomy_vocabulary_load(). All we need is the machine name
-    // of $vid, so retrieving and iterating all the vocabulary names is somewhat
-    // inefficient, but entity info is cached across page requests, and an
-    // iteration of all vocabularies once per cache clearing isn't a big deal,
-    // and is done as part of taxonomy_entity_info() anyway.
-    foreach (taxonomy_vocabulary_get_names() as $machine_name => $vocabulary) {
-      if ($vid == $vocabulary->vid) {
-        $info['taxonomy_term']['bundles'][$machine_name]['uri callback'] = 'forum_uri';
-      }
-    }
-  }
-}
-
-/**
- * Implements callback_entity_info_uri().
- *
- * Entity URI callback used in forum_entity_info_alter().
- */
-function forum_uri($forum) {
-  return array(
-    'path' => 'forum/' . $forum->tid,
-  );
-}
-
-/**
- * Checks whether a node can be used in a forum, based on its content type.
- *
- * @param $node
- *   A node object.
- *
- * @return
- *   Boolean indicating if the node can be assigned to a forum.
- */
-function _forum_node_check_node_type($node) {
-  // Fetch information about the forum field.
-  $field = field_info_instance('node', 'taxonomy_forums', $node->type);
-
-  return is_array($field);
-}
-
-/**
- * Implements hook_node_view().
- */
-function forum_node_view($node, $view_mode) {
-  $vid = variable_get('forum_nav_vocabulary', 0);
-  $vocabulary = taxonomy_vocabulary_load($vid);
-  if (_forum_node_check_node_type($node)) {
-    if ($view_mode == 'full' && node_is_page($node)) {
-      // Breadcrumb navigation
-      $breadcrumb[] = l(t('Home'), NULL);
-      $breadcrumb[] = l($vocabulary->name, 'forum');
-      if ($parents = taxonomy_get_parents_all($node->forum_tid)) {
-        $parents = array_reverse($parents);
-        foreach ($parents as $parent) {
-          $breadcrumb[] = l($parent->name, 'forum/' . $parent->tid);
-        }
-      }
-      drupal_set_breadcrumb($breadcrumb);
-
-    }
-  }
-}
-
-/**
- * Implements hook_node_validate().
- *
- * Checks in particular that the node is assigned only a "leaf" term in the
- * forum taxonomy.
- */
-function forum_node_validate($node, $form) {
-  if (_forum_node_check_node_type($node)) {
-    $langcode = $form['taxonomy_forums']['#language'];
-    // vocabulary is selected, not a "container" term.
-    if (!empty($node->taxonomy_forums[$langcode])) {
-      // Extract the node's proper topic ID.
-      $containers = variable_get('forum_containers', array());
-      foreach ($node->taxonomy_forums[$langcode] as $delta => $item) {
-        // If no term was selected (e.g. when no terms exist yet), remove the
-        // item.
-        if (empty($item['tid'])) {
-          unset($node->taxonomy_forums[$langcode][$delta]);
-          continue;
-        }
-        $term = taxonomy_term_load($item['tid']);
-        if (!$term) {
-          form_set_error('taxonomy_forums', t('Select a forum.'));
-          continue;
-        }
-        $used = db_query_range('SELECT 1 FROM {taxonomy_term_data} WHERE tid = :tid AND vid = :vid',0 , 1, array(
-          ':tid' => $term->tid,
-          ':vid' => $term->vid,
-        ))->fetchField();
-        if ($used && in_array($term->tid, $containers)) {
-          form_set_error('taxonomy_forums', t('The item %forum is a forum container, not a forum. Select one of the forums below instead.', array('%forum' => $term->name)));
-        }
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_node_presave().
- *
- * Assigns the forum taxonomy when adding a topic from within a forum.
- */
-function forum_node_presave($node) {
-  if (_forum_node_check_node_type($node)) {
-    // Make sure all fields are set properly:
-    $node->icon = !empty($node->icon) ? $node->icon : '';
-    reset($node->taxonomy_forums);
-    $langcode = key($node->taxonomy_forums);
-    if (!empty($node->taxonomy_forums[$langcode])) {
-      $node->forum_tid = $node->taxonomy_forums[$langcode][0]['tid'];
-      if (isset($node->nid)) {
-        $old_tid = db_query_range("SELECT f.tid FROM {forum} f INNER JOIN {node} n ON f.vid = n.vid WHERE n.nid = :nid ORDER BY f.vid DESC", 0, 1, array(':nid' => $node->nid))->fetchField();
-        if ($old_tid && isset($node->forum_tid) && ($node->forum_tid != $old_tid) && !empty($node->shadow)) {
-          // A shadow copy needs to be created. Retain new term and add old term.
-          $node->taxonomy_forums[$langcode][] = array('tid' => $old_tid);
-        }
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_node_update().
- */
-function forum_node_update($node) {
-  if (_forum_node_check_node_type($node)) {
-    if (empty($node->revision) && db_query('SELECT tid FROM {forum} WHERE nid=:nid', array(':nid' => $node->nid))->fetchField()) {
-      if (!empty($node->forum_tid)) {
-        db_update('forum')
-          ->fields(array('tid' => $node->forum_tid))
-          ->condition('vid', $node->vid)
-          ->execute();
-      }
-      // The node is removed from the forum.
-      else {
-        db_delete('forum')
-          ->condition('nid', $node->nid)
-          ->execute();
-      }
-    }
-    else {
-      if (!empty($node->forum_tid)) {
-        db_insert('forum')
-          ->fields(array(
-            'tid' => $node->forum_tid,
-            'vid' => $node->vid,
-            'nid' => $node->nid,
-          ))
-          ->execute();
-      }
-    }
-    // If the node has a shadow forum topic, update the record for this
-    // revision.
-    if (!empty($node->shadow)) {
-      db_delete('forum')
-        ->condition('nid', $node->nid)
-        ->condition('vid', $node->vid)
-        ->execute();
-      db_insert('forum')
-        ->fields(array(
-          'nid' => $node->nid,
-          'vid' => $node->vid,
-          'tid' => $node->forum_tid,
-        ))
-        ->execute();
-     }
-  }
-}
-
-/**
- * Implements hook_node_insert().
- */
-function forum_node_insert($node) {
-  if (_forum_node_check_node_type($node)) {
-    if (!empty($node->forum_tid)) {
-      $nid = db_insert('forum')
-        ->fields(array(
-          'tid' => $node->forum_tid,
-          'vid' => $node->vid,
-          'nid' => $node->nid,
-        ))
-        ->execute();
-    }
-  }
-}
-
-/**
- * Implements hook_node_delete().
- */
-function forum_node_delete($node) {
-  if (_forum_node_check_node_type($node)) {
-    db_delete('forum')
-      ->condition('nid', $node->nid)
-      ->execute();
-    db_delete('forum_index')
-      ->condition('nid', $node->nid)
-      ->execute();
-  }
-}
-
-/**
- * Implements hook_node_load().
- */
-function forum_node_load($nodes) {
-  $node_vids = array();
-  foreach ($nodes as $node) {
-    if (_forum_node_check_node_type($node)) {
-      $node_vids[] = $node->vid;
-    }
-  }
-  if (!empty($node_vids)) {
-    $query = db_select('forum', 'f');
-    $query
-      ->fields('f', array('nid', 'tid'))
-      ->condition('f.vid', $node_vids);
-    $result = $query->execute();
-    foreach ($result as $record) {
-      $nodes[$record->nid]->forum_tid = $record->tid;
-    }
-  }
-}
-
-/**
- * Implements hook_node_info().
- */
-function forum_node_info() {
-  return array(
-    'forum' => array(
-      'name' => t('Forum topic'),
-      'base' => 'forum',
-      'description' => t('A <em>forum topic</em> starts a new discussion thread within a forum.'),
-      'title_label' => t('Subject'),
-    )
-  );
-}
-
-/**
- * Implements hook_permission().
- */
-function forum_permission() {
-  $perms = array(
-    'administer forums' => array(
-      'title' => t('Administer forums'),
-    ),
-  );
-  return $perms;
-}
-
-/**
- * Implements hook_taxonomy_term_delete().
- */
-function forum_taxonomy_term_delete($term) {
-  // For containers, remove the tid from the forum_containers variable.
-  $containers = variable_get('forum_containers', array());
-  $key = array_search($term->tid, $containers);
-  if ($key !== FALSE) {
-    unset($containers[$key]);
-  }
-  variable_set('forum_containers', $containers);
-}
-
-/**
- * Implements hook_comment_publish().
- *
- * This actually handles the insertion and update of published nodes since
- * comment_save() calls hook_comment_publish() for all published comments.
- */
-function forum_comment_publish($comment) {
-  _forum_update_forum_index($comment->nid);
-}
-
-/**
- * Implements hook_comment_update().
- *
- * The Comment module doesn't call hook_comment_unpublish() when saving
- * individual comments, so we need to check for those here.
- */
-function forum_comment_update($comment) {
-  // comment_save() calls hook_comment_publish() for all published comments,
-  // so we need to handle all other values here.
-  if (!$comment->status) {
-    _forum_update_forum_index($comment->nid);
-  }
-}
-
-/**
- * Implements hook_comment_unpublish().
- */
-function forum_comment_unpublish($comment) {
-  _forum_update_forum_index($comment->nid);
-}
-
-/**
- * Implements hook_comment_delete().
- */
-function forum_comment_delete($comment) {
-  _forum_update_forum_index($comment->nid);
-}
-
-/**
- * Implements hook_field_storage_pre_insert().
- */
-function forum_field_storage_pre_insert($entity_type, $entity, &$skip_fields) {
-  if ($entity_type == 'node' && $entity->status && _forum_node_check_node_type($entity)) {
-    $query = db_insert('forum_index')->fields(array('nid', 'title', 'tid', 'sticky', 'created', 'comment_count', 'last_comment_timestamp'));
-    foreach ($entity->taxonomy_forums as $language) {
-      foreach ($language as $item) {
-        $query->values(array(
-          'nid' => $entity->nid,
-          'title' => $entity->title,
-          'tid' => $item['tid'],
-          'sticky' => $entity->sticky,
-          'created' => $entity->created,
-          'comment_count' => 0,
-          'last_comment_timestamp' => $entity->created,
-        ));
-      }
-    }
-    $query->execute();
-  }
-}
-
-/**
- * Implements hook_field_storage_pre_update().
- */
-function forum_field_storage_pre_update($entity_type, $entity, &$skip_fields) {
-  $first_call = &drupal_static(__FUNCTION__, array());
-
-  if ($entity_type == 'node' && _forum_node_check_node_type($entity)) {
-
-    // If the node is published, update the forum index.
-    if ($entity->status) {
-
-      // We don't maintain data for old revisions, so clear all previous values
-      // from the table. Since this hook runs once per field, per object, make
-      // sure we only wipe values once.
-      if (!isset($first_call[$entity->nid])) {
-        $first_call[$entity->nid] = FALSE;
-        db_delete('forum_index')->condition('nid', $entity->nid)->execute();
-      }
-      $query = db_insert('forum_index')->fields(array('nid', 'title', 'tid', 'sticky', 'created', 'comment_count', 'last_comment_timestamp'));
-      foreach ($entity->taxonomy_forums as $language) {
-        foreach ($language as $item) {
-          $query->values(array(
-            'nid' => $entity->nid,
-            'title' => $entity->title,
-            'tid' => $item['tid'],
-            'sticky' => $entity->sticky,
-            'created' => $entity->created,
-            'comment_count' => 0,
-            'last_comment_timestamp' => $entity->created,
-          ));
-        }
-      }
-      $query->execute();
-      // The logic for determining last_comment_count is fairly complex, so
-      // call _forum_update_forum_index() too.
-      _forum_update_forum_index($entity->nid);
-    }
-
-    // When a forum node is unpublished, remove it from the forum_index table.
-    else {
-      db_delete('forum_index')->condition('nid', $entity->nid)->execute();
-    }
-
-  }
-}
-
-/**
- * Implements hook_form_FORM_ID_alter() for taxonomy_form_vocabulary().
- */
-function forum_form_taxonomy_form_vocabulary_alter(&$form, &$form_state, $form_id) {
-  $vid = variable_get('forum_nav_vocabulary', 0);
-  if (isset($form['vid']['#value']) && $form['vid']['#value'] == $vid) {
-    $form['help_forum_vocab'] = array(
-      '#markup' => t('This is the designated forum vocabulary. Some of the normal vocabulary options have been removed.'),
-      '#weight' => -1,
-    );
-    // Forum's vocabulary always has single hierarchy. Forums and containers
-    // have only one parent or no parent for root items. By default this value
-    // is 0.
-    $form['hierarchy']['#value'] = 1;
-    // Do not allow to delete forum's vocabulary.
-    $form['actions']['delete']['#access'] = FALSE;
-  }
-}
-
-/**
- * Implements hook_form_FORM_ID_alter() for taxonomy_form_term().
- */
-function forum_form_taxonomy_form_term_alter(&$form, &$form_state, $form_id) {
-   $vid = variable_get('forum_nav_vocabulary', 0);
-   if (isset($form['vid']['#value']) && $form['vid']['#value'] == $vid) {
-    // Hide multiple parents select from forum terms.
-    $form['relations']['parent']['#access'] = FALSE;
-  }
-}
-
-/**
- * Implements hook_form_BASE_FORM_ID_alter() for node_form().
- */
-function forum_form_node_form_alter(&$form, &$form_state, $form_id) {
-  if (isset($form['taxonomy_forums'])) {
-    $langcode = $form['taxonomy_forums']['#language'];
-    // Make the vocabulary required for 'real' forum-nodes.
-    $form['taxonomy_forums'][$langcode]['#required'] = TRUE;
-    $form['taxonomy_forums'][$langcode]['#multiple'] = FALSE;
-    if (empty($form['taxonomy_forums'][$langcode]['#default_value'])) {
-      // If there is no default forum already selected, try to get the forum
-      // ID from the URL (e.g., if we are on a page like node/add/forum/2, we
-      // expect "2" to be the ID of the forum that was requested).
-      $requested_forum_id = arg(3);
-      $form['taxonomy_forums'][$langcode]['#default_value'] = is_numeric($requested_forum_id) ? $requested_forum_id : '';
-    }
-  }
-}
-
-/**
- * Implements hook_block_info().
- */
-function forum_block_info() {
-  $blocks['active'] = array(
-    'info' => t('Active forum topics'),
-    'cache' => DRUPAL_CACHE_CUSTOM,
-    'properties' => array('administrative' => TRUE),
-  );
-  $blocks['new'] = array(
-    'info' => t('New forum topics'),
-    'cache' => DRUPAL_CACHE_CUSTOM,
-    'properties' => array('administrative' => TRUE),
-  );
-  return $blocks;
-}
-
-/**
- * Implements hook_block_configure().
- */
-function forum_block_configure($delta = '') {
-  $form['forum_block_num_' . $delta] = array(
-    '#type' => 'select',
-    '#title' => t('Number of topics'),
-    '#default_value' => variable_get('forum_block_num_' . $delta, '5'),
-    '#options' => drupal_map_assoc(range(2, 20))
-  );
-  return $form;
-}
-
-/**
- * Implements hook_block_save().
- */
-function forum_block_save($delta = '', $edit = array()) {
-  variable_set('forum_block_num_' . $delta, $edit['forum_block_num_' . $delta]);
-}
-
-/**
- * Implements hook_block_view().
- *
- * Generates a block containing the currently active forum topics and the most
- * recently added forum topics.
- */
-function forum_block_view($delta = '') {
-  $query = db_select('forum_index', 'f')
-    ->fields('f')
-    ->addTag('node_access');
-  switch ($delta) {
-    case 'active':
-      $title = t('Active forum topics');
-      $query
-        ->orderBy('f.last_comment_timestamp', 'DESC')
-        ->range(0, variable_get('forum_block_num_active', '5'));
-      break;
-
-    case 'new':
-      $title = t('New forum topics');
-      $query
-        ->orderBy('f.created', 'DESC')
-        ->range(0, variable_get('forum_block_num_new', '5'));
-      break;
-  }
-
-  $block['subject'] = $title;
-  // Cache based on the altered query. Enables us to cache with node access enabled.
-  $block['content'] = drupal_render_cache_by_query($query, 'forum_block_view');
-  $block['content']['#access'] = user_access('access content');
-  return $block;
-}
-
-/**
- * Render API callback: Lists nodes based on the element's #query property.
- *
- * This function can be used as a #pre_render callback.
- *
- * @see forum_block_view()
- */
-function forum_block_view_pre_render($elements) {
-  $result = $elements['#query']->execute();
-  if ($node_title_list = node_title_list($result)) {
-    $elements['forum_list'] = $node_title_list;
-    $elements['forum_more'] = array('#theme' => 'more_link', '#url' => 'forum', '#title' => t('Read the latest forum topics.'));
-  }
-  return $elements;
-}
-
-/**
- * Implements hook_form().
- */
-function forum_form($node, $form_state) {
-  $type = node_type_get_type($node);
-  $form['title'] = array(
-    '#type' => 'textfield',
-    '#title' => check_plain($type->title_label),
-    '#default_value' => !empty($node->title) ? $node->title : '',
-    '#required' => TRUE, '#weight' => -5
-  );
-
-  if (!empty($node->nid)) {
-    $forum_terms = $node->taxonomy_forums;
-    // If editing, give option to leave shadows.
-    $shadow = (count($forum_terms) > 1);
-    $form['shadow'] = array('#type' => 'checkbox', '#title' => t('Leave shadow copy'), '#default_value' => $shadow, '#description' => t('If you move this topic, you can leave a link in the old forum to the new forum.'));
-    $form['forum_tid'] = array('#type' => 'value', '#value' => $node->forum_tid);
-  }
-
-  return $form;
-}
-
-/**
- * Returns a tree of all forums for a given taxonomy term ID.
- *
- * @param $tid
- *   (optional) Taxonomy term ID of the forum. If not given all forums will be
- *   returned.
- *
- * @return
- *   A tree of taxonomy objects, with the following additional properties:
- *   - num_topics: Number of topics in the forum.
- *   - num_posts: Total number of posts in all topics.
- *   - last_post: Most recent post for the forum.
- *   - forums: An array of child forums.
- */
-function forum_forum_load($tid = NULL) {
-  $cache = &drupal_static(__FUNCTION__, array());
-
-  // Return a cached forum tree if available.
-  if (!isset($tid)) {
-    $tid = 0;
-  }
-  if (isset($cache[$tid])) {
-    return $cache[$tid];
-  }
-
-  $vid = variable_get('forum_nav_vocabulary', 0);
-
-  // Load and validate the parent term.
-  if ($tid) {
-    $forum_term = taxonomy_term_load($tid);
-    if (!$forum_term || ($forum_term->vid != $vid)) {
-      return $cache[$tid] = FALSE;
-    }
-  }
-  // If $tid is 0, create an empty object to hold the child terms.
-  elseif ($tid === 0) {
-    $forum_term = (object) array(
-      'tid' => 0,
-    );
-  }
-
-  // Determine if the requested term is a container.
-  if (!$forum_term->tid || in_array($forum_term->tid, variable_get('forum_containers', array()))) {
-    $forum_term->container = 1;
-  }
-
-  // Load parent terms.
-  $forum_term->parents = taxonomy_get_parents_all($forum_term->tid);
-
-  // Load the tree below.
-  $forums = array();
-  $_forums = taxonomy_get_tree($vid, $tid);
-
-  if (count($_forums)) {
-    $query = db_select('node', 'n');
-    $query->join('node_comment_statistics', 'ncs', 'n.nid = ncs.nid');
-    $query->join('forum', 'f', 'n.vid = f.vid');
-    $query->addExpression('COUNT(n.nid)', 'topic_count');
-    $query->addExpression('SUM(ncs.comment_count)', 'comment_count');
-    $counts = $query
-      ->fields('f', array('tid'))
-      ->condition('n.status', 1)
-      ->groupBy('tid')
-      ->addTag('node_access')
-      ->execute()
-      ->fetchAllAssoc('tid');
-  }
-
-  foreach ($_forums as $forum) {
-    // Determine if the child term is a container.
-    if (in_array($forum->tid, variable_get('forum_containers', array()))) {
-      $forum->container = 1;
-    }
-
-    // Merge in the topic and post counters.
-    if (!empty($counts[$forum->tid])) {
-      $forum->num_topics = $counts[$forum->tid]->topic_count;
-      $forum->num_posts = $counts[$forum->tid]->topic_count + $counts[$forum->tid]->comment_count;
-    }
-    else {
-      $forum->num_topics = 0;
-      $forum->num_posts = 0;
-    }
-
-    // Query "Last Post" information for this forum.
-    $query = db_select('node', 'n');
-    $query->join('users', 'u1', 'n.uid = u1.uid');
-    $query->join('forum', 'f', 'n.vid = f.vid AND f.tid = :tid', array(':tid' => $forum->tid));
-    $query->join('node_comment_statistics', 'ncs', 'n.nid = ncs.nid');
-    $query->join('users', 'u2', 'ncs.last_comment_uid = u2.uid');
-    $query->addExpression('CASE ncs.last_comment_uid WHEN 0 THEN ncs.last_comment_name ELSE u2.name END', 'last_comment_name');
-
-    $topic = $query
-      ->fields('ncs', array('last_comment_timestamp', 'last_comment_uid'))
-      ->condition('n.status', 1)
-      ->orderBy('last_comment_timestamp', 'DESC')
-      ->range(0, 1)
-      ->addTag('node_access')
-      ->execute()
-      ->fetchObject();
-
-    // Merge in the "Last Post" information.
-    $last_post = new stdClass();
-    if (!empty($topic->last_comment_timestamp)) {
-      $last_post->created = $topic->last_comment_timestamp;
-      $last_post->name = $topic->last_comment_name;
-      $last_post->uid = $topic->last_comment_uid;
-    }
-    $forum->last_post = $last_post;
-
-    $forums[$forum->tid] = $forum;
-  }
-
-  // Cache the result, and return the tree.
-  $forum_term->forums = $forums;
-  $cache[$tid] = $forum_term;
-  return $forum_term;
-}
-
-/**
- * Calculates the number of new posts in a forum that the user has not yet read.
- *
- * Nodes are new if they are newer than NODE_NEW_LIMIT.
- *
- * @param $term
- *   The term ID of the forum.
- * @param $uid
- *   The user ID.
- *
- * @return
- *   The number of new posts in the forum that have not been read by the user.
- */
-function _forum_topics_unread($term, $uid) {
-  $query = db_select('node', 'n');
-  $query->join('forum', 'f', 'n.vid = f.vid AND f.tid = :tid', array(':tid' => $term));
-  $query->leftJoin('history', 'h', 'n.nid = h.nid AND h.uid = :uid', array(':uid' => $uid));
-  $query->addExpression('COUNT(n.nid)', 'count');
-  return $query
-    ->condition('status', 1)
-    ->condition('n.created', NODE_NEW_LIMIT, '>')
-    ->isNull('h.nid')
-    ->addTag('node_access')
-    ->execute()
-    ->fetchField();
-}
-
-/**
- * Gets all the topics in a forum.
- *
- * @param $tid
- *   The term ID of the forum.
- * @param $sortby
- *   One of the following integers indicating the sort criteria:
- *   - 1: Date - newest first.
- *   - 2: Date - oldest first.
- *   - 3: Posts with the most comments first.
- *   - 4: Posts with the least comments first.
- * @param $forum_per_page
- *   The maximum number of topics to display per page.
- *
- * @return
- *   A list of all the topics in a forum.
- */
-function forum_get_topics($tid, $sortby, $forum_per_page) {
-  global $user, $forum_topic_list_header;
-
-  $forum_topic_list_header = array(
-    NULL,
-    array('data' => t('Topic'), 'field' => 'f.title'),
-    array('data' => t('Replies'), 'field' => 'f.comment_count'),
-    array('data' => t('Last reply'), 'field' => 'f.last_comment_timestamp'),
-  );
-
-  $order = _forum_get_topic_order($sortby);
-  for ($i = 0; $i < count($forum_topic_list_header); $i++) {
-    if ($forum_topic_list_header[$i]['field'] == $order['field']) {
-      $forum_topic_list_header[$i]['sort'] = $order['sort'];
-    }
-  }
-
-  $query = db_select('forum_index', 'f')->extend('PagerDefault')->extend('TableSort');
-  $query->fields('f');
-  $query
-    ->condition('f.tid', $tid)
-    ->addTag('node_access')
-    ->orderBy('f.sticky', 'DESC')
-    ->orderByHeader($forum_topic_list_header)
-    ->limit($forum_per_page);
-
-  $count_query = db_select('forum_index', 'f');
-  $count_query->condition('f.tid', $tid);
-  $count_query->addExpression('COUNT(*)');
-  $count_query->addTag('node_access');
-
-  $query->setCountQuery($count_query);
-  $result = $query->execute();
-  $nids = array();
-  foreach ($result as $record) {
-    $nids[] = $record->nid;
-  }
-  if ($nids) {
-    $query = db_select('node', 'n')->extend('TableSort');
-    $query->fields('n', array('title', 'nid', 'type', 'sticky', 'created', 'uid'));
-    $query->addField('n', 'comment', 'comment_mode');
-
-    $query->join('node_comment_statistics', 'ncs', 'n.nid = ncs.nid');
-    $query->fields('ncs', array('cid', 'last_comment_uid', 'last_comment_timestamp', 'comment_count'));
-
-    $query->join('forum_index', 'f', 'f.nid = ncs.nid');
-    $query->addField('f', 'tid', 'forum_tid');
-
-    $query->join('users', 'u', 'n.uid = u.uid');
-    $query->addField('u', 'name');
-
-    $query->join('users', 'u2', 'ncs.last_comment_uid = u2.uid');
-
-    $query->addExpression('CASE ncs.last_comment_uid WHEN 0 THEN ncs.last_comment_name ELSE u2.name END', 'last_comment_name');
-
-    $query
-      ->orderBy('f.sticky', 'DESC')
-      ->orderByHeader($forum_topic_list_header)
-      ->condition('n.nid', $nids);
-
-    $result = $query->execute();
-  }
-  else {
-    $result = array();
-  }
-
-  $topics = array();
-  $first_new_found = FALSE;
-  foreach ($result as $topic) {
-    if ($user->uid) {
-      // A forum is new if the topic is new, or if there are new comments since
-      // the user's last visit.
-      if ($topic->forum_tid != $tid) {
-        $topic->new = 0;
-      }
-      else {
-        $history = _forum_user_last_visit($topic->nid);
-        $topic->new_replies = comment_num_new($topic->nid, $history);
-        $topic->new = $topic->new_replies || ($topic->last_comment_timestamp > $history);
-      }
-    }
-    else {
-      // Do not track "new replies" status for topics if the user is anonymous.
-      $topic->new_replies = 0;
-      $topic->new = 0;
-    }
-
-    // Make sure only one topic is indicated as the first new topic.
-    $topic->first_new = FALSE;
-    if ($topic->new != 0 && !$first_new_found) {
-      $topic->first_new = TRUE;
-      $first_new_found = TRUE;
-    }
-
-    if ($topic->comment_count > 0) {
-      $last_reply = new stdClass();
-      $last_reply->created = $topic->last_comment_timestamp;
-      $last_reply->name = $topic->last_comment_name;
-      $last_reply->uid = $topic->last_comment_uid;
-      $topic->last_reply = $last_reply;
-    }
-    $topics[] = $topic;
-  }
-
-  return $topics;
-}
-
-/**
- * Preprocesses variables for forums.tpl.php.
- *
- * @param $variables
- *   An array containing the following elements:
- *   - forums: An array of all forum objects to display for the given taxonomy
- *     term ID. If tid = 0 then all the top-level forums are displayed.
- *   - topics: An array of all the topics in the current forum.
- *   - parents: An array of taxonomy term objects that are ancestors of the
- *     current term ID.
- *   - tid: Taxonomy term ID of the current forum.
- *   - sortby: One of the following integers indicating the sort criteria:
- *     - 1: Date - newest first.
- *     - 2: Date - oldest first.
- *     - 3: Posts with the most comments first.
- *     - 4: Posts with the least comments first.
- *   - forum_per_page: The maximum number of topics to display per page.
- *
- * @see forums.tpl.php
- */
-function template_preprocess_forums(&$variables) {
-  global $user;
-
-  $vid = variable_get('forum_nav_vocabulary', 0);
-  $vocabulary = taxonomy_vocabulary_load($vid);
-  $title = !empty($vocabulary->name) ? $vocabulary->name : '';
-
-  // Breadcrumb navigation:
-  $breadcrumb[] = l(t('Home'), NULL);
-  if ($variables['tid']) {
-    $breadcrumb[] = l($vocabulary->name, 'forum');
-  }
-  if ($variables['parents']) {
-    $variables['parents'] = array_reverse($variables['parents']);
-    foreach ($variables['parents'] as $p) {
-      if ($p->tid == $variables['tid']) {
-        $title = $p->name;
-      }
-      else {
-        $breadcrumb[] = l($p->name, 'forum/' . $p->tid);
-      }
-    }
-  }
-  drupal_set_breadcrumb($breadcrumb);
-  drupal_set_title($title);
-
-  if ($variables['forums_defined'] = count($variables['forums']) || count($variables['parents'])) {
-    if (!empty($variables['forums'])) {
-      $variables['forums'] = theme('forum_list', $variables);
-    }
-    else {
-      $variables['forums'] = '';
-    }
-
-    if ($variables['tid'] && !in_array($variables['tid'], variable_get('forum_containers', array()))) {
-      $variables['topics'] = theme('forum_topic_list', $variables);
-      drupal_add_feed('taxonomy/term/' . $variables['tid'] . '/feed', 'RSS - ' . $title);
-    }
-    else {
-      $variables['topics'] = '';
-    }
-
-    // Provide separate template suggestions based on what's being output. Topic id is also accounted for.
-    // Check both variables to be safe then the inverse. Forums with topic ID's take precedence.
-    if ($variables['forums'] && !$variables['topics']) {
-      $variables['theme_hook_suggestions'][] = 'forums__containers';
-      $variables['theme_hook_suggestions'][] = 'forums__' . $variables['tid'];
-      $variables['theme_hook_suggestions'][] = 'forums__containers__' . $variables['tid'];
-    }
-    elseif (!$variables['forums'] && $variables['topics']) {
-      $variables['theme_hook_suggestions'][] = 'forums__topics';
-      $variables['theme_hook_suggestions'][] = 'forums__' . $variables['tid'];
-      $variables['theme_hook_suggestions'][] = 'forums__topics__' . $variables['tid'];
-    }
-    else {
-      $variables['theme_hook_suggestions'][] = 'forums__' . $variables['tid'];
-    }
-
-  }
-  else {
-    drupal_set_title(t('No forums defined'));
-    $variables['forums'] = '';
-    $variables['topics'] = '';
-  }
-}
-
-/**
- * Preprocesses variables for forum-list.tpl.php.
- *
- * @param $variables
- *   An array containing the following elements:
- *   - forums: An array of all forum objects to display for the given taxonomy
- *     term ID. If tid = 0 then all the top-level forums are displayed.
- *   - parents: An array of taxonomy term objects that are ancestors of the
- *     current term ID.
- *   - tid: Taxonomy term ID of the current forum.
- *
- * @see forum-list.tpl.php
- * @see theme_forum_list()
- */
-function template_preprocess_forum_list(&$variables) {
-  global $user;
-  $row = 0;
-  // Sanitize each forum so that the template can safely print the data.
-  foreach ($variables['forums'] as $id => $forum) {
-    $variables['forums'][$id]->description = !empty($forum->description) ? filter_xss_admin($forum->description) : '';
-    $variables['forums'][$id]->link = url("forum/$forum->tid");
-    $variables['forums'][$id]->name = check_plain($forum->name);
-    $variables['forums'][$id]->is_container = !empty($forum->container);
-    $variables['forums'][$id]->zebra = $row % 2 == 0 ? 'odd' : 'even';
-    $row++;
-
-    $variables['forums'][$id]->new_text = '';
-    $variables['forums'][$id]->new_url = '';
-    $variables['forums'][$id]->new_topics = 0;
-    $variables['forums'][$id]->old_topics = $forum->num_topics;
-    $variables['forums'][$id]->icon_class = 'default';
-    $variables['forums'][$id]->icon_title = t('No new posts');
-    if ($user->uid) {
-      $variables['forums'][$id]->new_topics = _forum_topics_unread($forum->tid, $user->uid);
-      if ($variables['forums'][$id]->new_topics) {
-        $variables['forums'][$id]->new_text = format_plural($variables['forums'][$id]->new_topics, '1 new', '@count new');
-        $variables['forums'][$id]->new_url = url("forum/$forum->tid", array('fragment' => 'new'));
-        $variables['forums'][$id]->icon_class = 'new';
-        $variables['forums'][$id]->icon_title = t('New posts');
-      }
-      $variables['forums'][$id]->old_topics = $forum->num_topics - $variables['forums'][$id]->new_topics;
-    }
-    $variables['forums'][$id]->last_reply = theme('forum_submitted', array('topic' => $forum->last_post));
-  }
-  // Give meaning to $tid for themers. $tid actually stands for term id.
-  $variables['forum_id'] = $variables['tid'];
-  unset($variables['tid']);
-}
-
-/**
- * Preprocesses variables for forum-topic-list.tpl.php.
- *
- * @param $variables
- *   An array containing the following elements:
- *   - tid: Taxonomy term ID of the current forum.
- *   - topics: An array of all the topics in the current forum.
- *   - forum_per_page: The maximum number of topics to display per page.
- *
- * @see forum-topic-list.tpl.php
- * @see theme_forum_topic_list()
- */
-function template_preprocess_forum_topic_list(&$variables) {
-  global $forum_topic_list_header;
-
-  // Create the tablesorting header.
-  $ts = tablesort_init($forum_topic_list_header);
-  $header = '';
-  foreach ($forum_topic_list_header as $cell) {
-    $cell = tablesort_header($cell, $forum_topic_list_header, $ts);
-    $header .= _theme_table_cell($cell, TRUE);
-  }
-  $variables['header'] = $header;
-
-  if (!empty($variables['topics'])) {
-    $row = 0;
-    foreach ($variables['topics'] as $id => $topic) {
-      $variables['topics'][$id]->icon = theme('forum_icon', array('new_posts' => $topic->new, 'num_posts' => $topic->comment_count, 'comment_mode' => $topic->comment_mode, 'sticky' => $topic->sticky, 'first_new' => $topic->first_new));
-      $variables['topics'][$id]->zebra = $row % 2 == 0 ? 'odd' : 'even';
-      $row++;
-
-      // We keep the actual tid in forum table, if it's different from the
-      // current tid then it means the topic appears in two forums, one of
-      // them is a shadow copy.
-      if ($variables['tid'] != $topic->forum_tid) {
-        $variables['topics'][$id]->moved = TRUE;
-        $variables['topics'][$id]->title = check_plain($topic->title);
-        $variables['topics'][$id]->message = l(t('This topic has been moved'), "forum/$topic->forum_tid");
-      }
-      else {
-        $variables['topics'][$id]->moved = FALSE;
-        $variables['topics'][$id]->title = l($topic->title, "node/$topic->nid");
-        $variables['topics'][$id]->message = '';
-      }
-      $variables['topics'][$id]->created = theme('forum_submitted', array('topic' => $topic));
-      $variables['topics'][$id]->last_reply = theme('forum_submitted', array('topic' => isset($topic->last_reply) ? $topic->last_reply : NULL));
-
-      $variables['topics'][$id]->new_text = '';
-      $variables['topics'][$id]->new_url = '';
-      if ($topic->new_replies) {
-        $variables['topics'][$id]->new_text = format_plural($topic->new_replies, '1 new', '@count new');
-        $variables['topics'][$id]->new_url = url("node/$topic->nid", array('query' => comment_new_page_count($topic->comment_count, $topic->new_replies, $topic), 'fragment' => 'new'));
-      }
-
-    }
-  }
-  else {
-    // Make this safe for the template.
-    $variables['topics'] = array();
-  }
-  // Give meaning to $tid for themers. $tid actually stands for term id.
-  $variables['topic_id'] = $variables['tid'];
-  unset($variables['tid']);
-
-  $variables['pager'] = theme('pager');
-}
-
-/**
- * Preprocesses variables for forum-icon.tpl.php.
- *
- * @param $variables
- *   An array containing the following elements:
- *   - new_posts: Indicates whether or not the topic contains new posts.
- *   - num_posts: The total number of posts in all topics.
- *   - comment_mode: An integer indicating whether comments are open, closed,
- *     or hidden.
- *   - sticky: Indicates whether the topic is sticky.
- *   - first_new: Indicates whether this is the first topic with new posts.
- *
- * @see forum-icon.tpl.php
- * @see theme_forum_icon()
- */
-function template_preprocess_forum_icon(&$variables) {
-  $variables['hot_threshold'] = variable_get('forum_hot_topic', 15);
-  if ($variables['num_posts'] > $variables['hot_threshold']) {
-    $variables['icon_class'] = $variables['new_posts'] ? 'hot-new' : 'hot';
-    $variables['icon_title'] = $variables['new_posts'] ? t('Hot topic, new comments') : t('Hot topic');
-  }
-  else {
-    $variables['icon_class'] = $variables['new_posts'] ? 'new' : 'default';
-    $variables['icon_title'] = $variables['new_posts'] ? t('New comments') : t('Normal topic');
-  }
-
-  if ($variables['comment_mode'] == COMMENT_NODE_CLOSED || $variables['comment_mode'] == COMMENT_NODE_HIDDEN) {
-    $variables['icon_class'] = 'closed';
-    $variables['icon_title'] = t('Closed topic');
-  }
-
-  if ($variables['sticky'] == 1) {
-    $variables['icon_class'] = 'sticky';
-    $variables['icon_title'] = t('Sticky topic');
-  }
-}
-
-/**
- * Preprocesses variables for forum-submitted.tpl.php.
- *
- * The submission information will be displayed in the forum list and topic
- * list.
- *
- * @param $variables
- *   An array containing the following elements:
- *   - topic: The topic object.
- *
- * @see forum-submitted.tpl.php
- * @see theme_forum_submitted()
- */
-function template_preprocess_forum_submitted(&$variables) {
-  $variables['author'] = isset($variables['topic']->uid) ? theme('username', array('account' => $variables['topic'])) : '';
-  $variables['time'] = isset($variables['topic']->created) ? format_interval(REQUEST_TIME - $variables['topic']->created) : '';
-}
-
-/**
- * Gets the last time the user viewed a node.
- *
- * @param $nid
- *   The node ID.
- *
- * @return
- *   The timestamp when the user last viewed this node, if the user has
- *   previously viewed the node; otherwise NODE_NEW_LIMIT.
- */
-function _forum_user_last_visit($nid) {
-  global $user;
-  $history = &drupal_static(__FUNCTION__, array());
-
-  if (empty($history)) {
-    $result = db_query('SELECT nid, timestamp FROM {history} WHERE uid = :uid', array(':uid' => $user->uid));
-    foreach ($result as $t) {
-      $history[$t->nid] = $t->timestamp > NODE_NEW_LIMIT ? $t->timestamp : NODE_NEW_LIMIT;
-    }
-  }
-  return isset($history[$nid]) ? $history[$nid] : NODE_NEW_LIMIT;
-}
-
-/**
- * Gets topic sorting information based on an integer code.
- *
- * @param $sortby
- *   One of the following integers indicating the sort criteria:
- *   - 1: Date - newest first.
- *   - 2: Date - oldest first.
- *   - 3: Posts with the most comments first.
- *   - 4: Posts with the least comments first.
- *
- * @return
- *   An array with the following values:
- *   - field: A field for an SQL query.
- *   - sort: 'asc' or 'desc'.
- */
-function _forum_get_topic_order($sortby) {
-  switch ($sortby) {
-    case 1:
-      return array('field' => 'f.last_comment_timestamp', 'sort' => 'desc');
-      break;
-    case 2:
-      return array('field' => 'f.last_comment_timestamp', 'sort' => 'asc');
-      break;
-    case 3:
-      return array('field' => 'f.comment_count', 'sort' => 'desc');
-      break;
-    case 4:
-      return array('field' => 'f.comment_count', 'sort' => 'asc');
-      break;
-  }
-}
-
-/**
- * Updates the taxonomy index for a given node.
- *
- * @param $nid
- *   The ID of the node to update.
- */
-function _forum_update_forum_index($nid) {
-  $count = db_query('SELECT COUNT(cid) FROM {comment} c INNER JOIN {forum_index} i ON c.nid = i.nid WHERE c.nid = :nid AND c.status = :status', array(
-    ':nid' => $nid,
-    ':status' => COMMENT_PUBLISHED,
-  ))->fetchField();
-
-  if ($count > 0) {
-    // Comments exist.
-    $last_reply = db_query_range('SELECT cid, name, created, uid FROM {comment} WHERE nid = :nid AND status = :status ORDER BY cid DESC', 0, 1, array(
-      ':nid' => $nid,
-      ':status' => COMMENT_PUBLISHED,
-    ))->fetchObject();
-    db_update('forum_index')
-      ->fields( array(
-        'comment_count' => $count,
-        'last_comment_timestamp' => $last_reply->created,
-      ))
-      ->condition('nid', $nid)
-      ->execute();
-  }
-  else {
-    // Comments do not exist.
-    $node = db_query('SELECT uid, created FROM {node} WHERE nid = :nid', array(':nid' => $nid))->fetchObject();
-    db_update('forum_index')
-      ->fields( array(
-        'comment_count' => 0,
-        'last_comment_timestamp' => $node->created,
-      ))
-      ->condition('nid', $nid)
-      ->execute();
-  }
-}
-
-/**
- * Implements hook_rdf_mapping().
- */
-function forum_rdf_mapping() {
-  return array(
-    array(
-      'type' => 'node',
-      'bundle' => 'forum',
-      'mapping' => array(
-        'rdftype' => array('sioc:Post', 'sioct:BoardPost'),
-        'taxonomy_forums' => array(
-          'predicates' => array('sioc:has_container'),
-          'type' => 'rel',
-        ),
-      ),
-    ),
-    array(
-      'type' => 'taxonomy_term',
-      'bundle' => 'forums',
-      'mapping' => array(
-        'rdftype' => array('sioc:Container', 'sioc:Forum'),
-      ),
-    ),
-  );
-}
diff --git a/modules/forum/forum.pages.inc b/modules/forum/forum.pages.inc
deleted file mode 100644
index 8538310..0000000
--- a/modules/forum/forum.pages.inc
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-/**
- * @file
- * User page callbacks for the Forum module.
- */
-
-/**
- * Page callback: Prints a forum listing.
- *
- * @param $forum_term
- *   A tree of all forums for a given taxonomy term ID. Defaults to NULL. See
- *   the return object of forum_forum_load() for a complete definition.
- *
- * @return
- *   A string containing HTML representing the themed forum listing.
- *
- * @see forum_menu()
- */
-function forum_page($forum_term = NULL) {
-  if (!isset($forum_term)) {
-    // On the main page, display all the top-level forums.
-    $forum_term = forum_forum_load(0);
-  }
-
-  $forum_per_page = variable_get('forum_per_page', 25);
-  $sortby = variable_get('forum_order', 1);
-
-  if (empty($forum_term->container)) {
-    $topics = forum_get_topics($forum_term->tid, $sortby, $forum_per_page);
-  }
-  else {
-    $topics = '';
-  }
-
-  return theme('forums', array('forums' => $forum_term->forums, 'topics' => $topics, 'parents' => $forum_term->parents, 'tid' => $forum_term->tid, 'sortby' => $sortby, 'forums_per_page' => $forum_per_page));
-}
diff --git a/modules/forum/forum.test b/modules/forum/forum.test
deleted file mode 100644
index bc68a3e..0000000
--- a/modules/forum/forum.test
+++ /dev/null
@@ -1,687 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for forum.module.
- */
-
-/**
- * Provides automated tests for the Forum module.
- */
-class ForumTestCase extends DrupalWebTestCase {
-
-  /**
-   * A user with various administrative privileges.
-   */
-  protected $admin_user;
-
-  /**
-   * A user that can create forum topics and edit its own topics.
-   */
-  protected $edit_own_topics_user;
-
-  /**
-   * A user that can create, edit, and delete forum topics.
-   */
-  protected $edit_any_topics_user;
-
-  /**
-   * A user with no special privileges.
-   */
-  protected $web_user;
-
-  /**
-   * An array representing a container.
-   */
-  protected $container;
-
-  /**
-   * An array representing a forum.
-   */
-  protected $forum;
-
-  /**
-   * An array representing a root forum.
-   */
-  protected $root_forum;
-
-  /**
-   * An array of forum topic node IDs.
-   */
-  protected $nids;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Forum functionality',
-      'description' => 'Create, view, edit, delete, and change forum entries and verify its consistency in the database.',
-      'group' => 'Forum',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('taxonomy', 'comment', 'forum');
-    // Create users.
-    $this->admin_user = $this->drupalCreateUser(array(
-      'access administration pages',
-      'administer modules',
-      'administer blocks',
-      'administer forums',
-      'administer menu',
-      'administer taxonomy',
-      'create forum content',
-    ));
-    $this->edit_any_topics_user = $this->drupalCreateUser(array(
-      'access administration pages',
-      'create forum content',
-      'edit any forum content',
-      'delete any forum content',
-    ));
-    $this->edit_own_topics_user = $this->drupalCreateUser(array(
-      'create forum content',
-      'edit own forum content',
-      'delete own forum content',
-    ));
-    $this->web_user = $this->drupalCreateUser(array());
-  }
-
-  /**
-   * Tests disabling and re-enabling the Forum module.
-   */
-  function testEnableForumField() {
-    $this->drupalLogin($this->admin_user);
-
-    // Disable the Forum module.
-    $edit = array();
-    $edit['modules[Core][forum][enable]'] = FALSE;
-    $this->drupalPost('admin/modules', $edit, t('Save configuration'));
-    $this->assertText(t('The configuration options have been saved.'), 'Modules status has been updated.');
-    module_list(TRUE);
-    $this->assertFalse(module_exists('forum'), 'Forum module is not enabled.');
-
-    // Attempt to re-enable the Forum module and ensure it does not try to
-    // recreate the taxonomy_forums field.
-    $edit = array();
-    $edit['modules[Core][forum][enable]'] = 'forum';
-    $this->drupalPost('admin/modules', $edit, t('Save configuration'));
-    $this->assertText(t('The configuration options have been saved.'), 'Modules status has been updated.');
-    module_list(TRUE);
-    $this->assertTrue(module_exists('forum'), 'Forum module is enabled.');
-  }
-
-  /**
-   * Tests forum functionality through the admin and user interfaces.
-   */
-  function testForum() {
-    //Check that the basic forum install creates a default forum topic
-    $this->drupalGet("/forum");
-    // Look for the "General discussion" default forum
-    $this->assertText(t("General discussion"), "Found the default forum at the /forum listing");
-
-    // Do the admin tests.
-    $this->doAdminTests($this->admin_user);
-    // Generate topics to populate the active forum block.
-    $this->generateForumTopics($this->forum);
-
-    // Login an unprivileged user to view the forum topics and generate an
-    // active forum topics list.
-    $this->drupalLogin($this->web_user);
-    // Verify that this user is shown a message that they may not post content.
-    $this->drupalGet('forum/' . $this->forum['tid']);
-    $this->assertText(t('You are not allowed to post new content in the forum'), "Authenticated user without permission to post forum content is shown message in local tasks to that effect.");
-
-    $this->viewForumTopics($this->nids);
-
-    // Log in, and do basic tests for a user with permission to edit any forum
-    // content.
-    $this->doBasicTests($this->edit_any_topics_user, TRUE);
-    // Create a forum node authored by this user.
-    $any_topics_user_node = $this->createForumTopic($this->forum, FALSE);
-
-    // Log in, and do basic tests for a user with permission to edit only its
-    // own forum content.
-    $this->doBasicTests($this->edit_own_topics_user, FALSE);
-    // Create a forum node authored by this user.
-    $own_topics_user_node = $this->createForumTopic($this->forum, FALSE);
-    // Verify that this user cannot edit forum content authored by another user.
-    $this->verifyForums($this->edit_any_topics_user, $any_topics_user_node, FALSE, 403);
-
-    // Verify that this user is shown a local task to add new forum content.
-    $this->drupalGet('forum');
-    $this->assertLink(t('Add new Forum topic'));
-    $this->drupalGet('forum/' . $this->forum['tid']);
-    $this->assertLink(t('Add new Forum topic'));
-
-    // Login a user with permission to edit any forum content.
-    $this->drupalLogin($this->edit_any_topics_user);
-    // Verify that this user can edit forum content authored by another user.
-    $this->verifyForums($this->edit_own_topics_user, $own_topics_user_node, TRUE);
-
-    // Verify the topic and post counts on the forum page.
-    $this->drupalGet('forum');
-
-    // Verify row for testing forum.
-    $forum_arg = array(':forum' => 'forum-list-' . $this->forum['tid']);
-
-    // Topics cell contains number of topics and number of unread topics.
-    $xpath = $this->buildXPathQuery('//tr[@id=:forum]//td[@class="topics"]', $forum_arg);
-    $topics = $this->xpath($xpath);
-    $topics = trim($topics[0]);
-    $this->assertEqual($topics, '6', 'Number of topics found.');
-
-    // Verify the number of unread topics.
-    $unread_topics = _forum_topics_unread($this->forum['tid'], $this->edit_any_topics_user->uid);
-    $unread_topics = format_plural($unread_topics, '1 new', '@count new');
-    $xpath = $this->buildXPathQuery('//tr[@id=:forum]//td[@class="topics"]//a', $forum_arg);
-    $this->assertFieldByXPath($xpath, $unread_topics, 'Number of unread topics found.');
-
-    // Verify total number of posts in forum.
-    $xpath = $this->buildXPathQuery('//tr[@id=:forum]//td[@class="posts"]', $forum_arg);
-    $this->assertFieldByXPath($xpath, '6', 'Number of posts found.');
-
-    // Test loading multiple forum nodes on the front page.
-    $this->drupalLogin($this->drupalCreateUser(array('administer content types', 'create forum content')));
-    $this->drupalPost('admin/structure/types/manage/forum', array('node_options[promote]' => 'promote'), t('Save content type'));
-    $this->createForumTopic($this->forum, FALSE);
-    $this->createForumTopic($this->forum, FALSE);
-    $this->drupalGet('node');
-
-    // Test adding a comment to a forum topic.
-    $node = $this->createForumTopic($this->forum, FALSE);
-    $edit = array();
-    $edit['comment_body[' . LANGUAGE_NONE . '][0][value]'] = $this->randomName();
-    $this->drupalPost("node/$node->nid", $edit, t('Save'));
-    $this->assertResponse(200);
-
-    // Test editing a forum topic that has a comment.
-    $this->drupalLogin($this->edit_any_topics_user);
-    $this->drupalGet('forum/' . $this->forum['tid']);
-    $this->drupalPost("node/$node->nid/edit", array(), t('Save'));
-    $this->assertResponse(200);
-
-    // Make sure constructing a forum node programmatically produces no notices.
-    $node = new stdClass;
-    $node->type = 'forum';
-    $node->title = 'Test forum notices';
-    $node->uid = 1;
-    $node->taxonomy_forums[LANGUAGE_NONE][0]['tid'] = $this->root_forum['tid'];
-    node_save($node);
-  }
-
-  /**
-   * Tests that forum nodes can't be added without a parent.
-   *
-   * Verifies that forum nodes are not created without choosing "forum" from the
-   * select list.
-   */
-  function testAddOrphanTopic() {
-    // Must remove forum topics to test creating orphan topics.
-    $vid = variable_get('forum_nav_vocabulary');
-    $tree = taxonomy_get_tree($vid);
-    foreach ($tree as $term) {
-      taxonomy_term_delete($term->tid);
-    }
-
-    // Create an orphan forum item.
-    $this->drupalLogin($this->admin_user);
-    $this->drupalPost('node/add/forum', array('title' => $this->randomName(10), 'body[' . LANGUAGE_NONE .'][0][value]' => $this->randomName(120)), t('Save'));
-
-    $nid_count = db_query('SELECT COUNT(nid) FROM {node}')->fetchField();
-    $this->assertEqual(0, $nid_count, 'A forum node was not created when missing a forum vocabulary.');
-
-    // Reset the defaults for future tests.
-    module_enable(array('forum'));
-  }
-
-  /**
-   * Runs admin tests on the admin user.
-   *
-   * @param object $user
-   *   The logged in user.
-   */
-  private function doAdminTests($user) {
-    // Login the user.
-    $this->drupalLogin($user);
-
-    // Enable the active forum block.
-    $edit = array();
-    $edit['blocks[forum_active][region]'] = 'sidebar_second';
-    $this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
-    $this->assertResponse(200);
-    $this->assertText(t('The block settings have been updated.'), 'Active forum topics forum block was enabled');
-
-    // Enable the new forum block.
-    $edit = array();
-    $edit['blocks[forum_new][region]'] = 'sidebar_second';
-    $this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
-    $this->assertResponse(200);
-    $this->assertText(t('The block settings have been updated.'), '[New forum topics] Forum block was enabled');
-
-    // Retrieve forum menu id.
-    $mlid = db_query_range("SELECT mlid FROM {menu_links} WHERE link_path = 'forum' AND menu_name = 'navigation' AND module = 'system' ORDER BY mlid ASC", 0, 1)->fetchField();
-
-    // Add forum to navigation menu.
-    $edit = array();
-    $this->drupalPost('admin/structure/menu/manage/navigation', $edit, t('Save configuration'));
-    $this->assertResponse(200);
-
-    // Edit forum taxonomy.
-    // Restoration of the settings fails and causes subsequent tests to fail.
-    $this->container = $this->editForumTaxonomy();
-    // Create forum container.
-    $this->container = $this->createForum('container');
-    // Verify "edit container" link exists and functions correctly.
-    $this->drupalGet('admin/structure/forum');
-    $this->clickLink('edit container');
-    $this->assertRaw('Edit container', 'Followed the link to edit the container');
-    // Create forum inside the forum container.
-    $this->forum = $this->createForum('forum', $this->container['tid']);
-    // Verify the "edit forum" link exists and functions correctly.
-    $this->drupalGet('admin/structure/forum');
-    $this->clickLink('edit forum');
-    $this->assertRaw('Edit forum', 'Followed the link to edit the forum');
-    // Navigate back to forum structure page.
-    $this->drupalGet('admin/structure/forum');
-    // Create second forum in container.
-    $this->delete_forum = $this->createForum('forum', $this->container['tid']);
-    // Save forum overview.
-    $this->drupalPost('admin/structure/forum/', array(), t('Save'));
-    $this->assertRaw(t('The configuration options have been saved.'));
-    // Delete this second forum.
-    $this->deleteForum($this->delete_forum['tid']);
-    // Create forum at the top (root) level.
-    $this->root_forum = $this->createForum('forum');
-
-    // Test vocabulary form alterations.
-    $this->drupalGet('admin/structure/taxonomy/forums/edit');
-    $this->assertFieldByName('op', t('Save'), 'Save button found.');
-    $this->assertNoFieldByName('op', t('Delete'), 'Delete button not found.');
-
-    // Test term edit form alterations.
-    $this->drupalGet('taxonomy/term/' . $this->container['tid'] . '/edit');
-    // Test parent field been hidden by forum module.
-    $this->assertNoField('parent[]', 'Parent field not found.');
-
-    // Test tags vocabulary form is not affected.
-    $this->drupalGet('admin/structure/taxonomy/tags/edit');
-    $this->assertFieldByName('op', t('Save'), 'Save button found.');
-    $this->assertFieldByName('op', t('Delete'), 'Delete button found.');
-    // Test tags vocabulary term form is not affected.
-    $this->drupalGet('admin/structure/taxonomy/tags/add');
-    $this->assertField('parent[]', 'Parent field found.');
-    // Test relations fieldset exists.
-    $relations_fieldset = $this->xpath("//fieldset[@id='edit-relations']");
-    $this->assertTrue(isset($relations_fieldset[0]), 'Relations fieldset element found.');
-  }
-
-  /**
-   * Edits the forum taxonomy.
-   */
-  function editForumTaxonomy() {
-    // Backup forum taxonomy.
-    $vid = variable_get('forum_nav_vocabulary', '');
-    $original_settings = taxonomy_vocabulary_load($vid);
-
-    // Generate a random name/description.
-    $title = $this->randomName(10);
-    $description = $this->randomName(100);
-
-    $edit = array(
-      'name' => $title,
-      'description' => $description,
-      'machine_name' => drupal_strtolower(drupal_substr($this->randomName(), 3, 9)),
-    );
-
-    // Edit the vocabulary.
-    $this->drupalPost('admin/structure/taxonomy/' . $original_settings->machine_name . '/edit', $edit, t('Save'));
-    $this->assertResponse(200);
-    $this->assertRaw(t('Updated vocabulary %name.', array('%name' => $title)), 'Vocabulary was edited');
-
-    // Grab the newly edited vocabulary.
-    entity_get_controller('taxonomy_vocabulary')->resetCache();
-    $current_settings = taxonomy_vocabulary_load($vid);
-
-    // Make sure we actually edited the vocabulary properly.
-    $this->assertEqual($current_settings->name, $title, 'The name was updated');
-    $this->assertEqual($current_settings->description, $description, 'The description was updated');
-
-    // Restore the original vocabulary.
-    taxonomy_vocabulary_save($original_settings);
-    drupal_static_reset('taxonomy_vocabulary_load');
-    $current_settings = taxonomy_vocabulary_load($vid);
-    $this->assertEqual($current_settings->name, $original_settings->name, 'The original vocabulary settings were restored');
-  }
-
-  /**
-   * Creates a forum container or a forum.
-   *
-   * @param $type
-   *   The forum type (forum container or forum).
-   * @param $parent
-   *   The forum parent. This defaults to 0, indicating a root forum.
-   *   another forum).
-   *
-   * @return
-   *   The created taxonomy term data.
-   */
-  function createForum($type, $parent = 0) {
-    // Generate a random name/description.
-    $name = $this->randomName(10);
-    $description = $this->randomName(100);
-
-    $edit = array(
-      'name' => $name,
-      'description' => $description,
-      'parent[0]' => $parent,
-      'weight' => '0',
-    );
-
-    // Create forum.
-    $this->drupalPost('admin/structure/forum/add/' . $type, $edit, t('Save'));
-    $this->assertResponse(200);
-    $type = ($type == 'container') ? 'forum container' : 'forum';
-    $this->assertRaw(t('Created new @type %term.', array('%term' => $name, '@type' => t($type))), format_string('@type was created', array('@type' => ucfirst($type))));
-
-    // Verify forum.
-    $term = db_query("SELECT * FROM {taxonomy_term_data} t WHERE t.vid = :vid AND t.name = :name AND t.description = :desc", array(':vid' => variable_get('forum_nav_vocabulary', ''), ':name' => $name, ':desc' => $description))->fetchAssoc();
-    $this->assertTrue(!empty($term), 'The ' . $type . ' exists in the database');
-
-    // Verify forum hierarchy.
-    $tid = $term['tid'];
-    $parent_tid = db_query("SELECT t.parent FROM {taxonomy_term_hierarchy} t WHERE t.tid = :tid", array(':tid' => $tid))->fetchField();
-    $this->assertTrue($parent == $parent_tid, 'The ' . $type . ' is linked to its container');
-
-    return $term;
-  }
-
-  /**
-   * Deletes a forum.
-   *
-   * @param $tid
-   *   The forum ID.
-   */
-  function deleteForum($tid) {
-    // Delete the forum.
-    $this->drupalPost('admin/structure/forum/edit/forum/' . $tid, array(), t('Delete'));
-    $this->drupalPost(NULL, array(), t('Delete'));
-
-    // Assert that the forum no longer exists.
-    $this->drupalGet('forum/' . $tid);
-    $this->assertResponse(404, 'The forum was not found');
-
-    // Assert that the associated term has been removed from the
-    // forum_containers variable.
-    $containers = variable_get('forum_containers', array());
-    $this->assertFalse(in_array($tid, $containers), 'The forum_containers variable has been updated.');
-  }
-
-  /**
-   * Runs basic tests on the indicated user.
-   *
-   * @param $user
-   *   The logged in user.
-   * @param $admin
-   *   User has 'access administration pages' privilege.
-   */
-  private function doBasicTests($user, $admin) {
-    // Login the user.
-    $this->drupalLogin($user);
-    // Attempt to create forum topic under a container.
-    $this->createForumTopic($this->container, TRUE);
-    // Create forum node.
-    $node = $this->createForumTopic($this->forum, FALSE);
-    // Verify the user has access to all the forum nodes.
-    $this->verifyForums($user, $node, $admin);
-  }
-
-  /**
-   * Creates forum topic.
-   *
-   * @param array $forum
-   *   A forum array.
-   * @param boolean $container
-   *   TRUE if $forum is a container; FALSE otherwise.
-   *
-   * @return object
-   *   The created topic node.
-   */
-  function createForumTopic($forum, $container = FALSE) {
-    // Generate a random subject/body.
-    $title = $this->randomName(20);
-    $body = $this->randomName(200);
-
-    $langcode = LANGUAGE_NONE;
-    $edit = array(
-      "title" => $title,
-      "body[$langcode][0][value]" => $body,
-    );
-    $tid = $forum['tid'];
-
-    // Create the forum topic, preselecting the forum ID via a URL parameter.
-    $this->drupalPost('node/add/forum/' . $tid, $edit, t('Save'));
-
-    $type = t('Forum topic');
-    if ($container) {
-      $this->assertNoRaw(t('@type %title has been created.', array('@type' => $type, '%title' => $title)), 'Forum topic was not created');
-      $this->assertRaw(t('The item %title is a forum container, not a forum.', array('%title' => $forum['name'])), 'Error message was shown');
-      return;
-    }
-    else {
-      $this->assertRaw(t('@type %title has been created.', array('@type' => $type, '%title' => $title)), 'Forum topic was created');
-      $this->assertNoRaw(t('The item %title is a forum container, not a forum.', array('%title' => $forum['name'])), 'No error message was shown');
-    }
-
-    // Retrieve node object, ensure that the topic was created and in the proper forum.
-    $node = $this->drupalGetNodeByTitle($title);
-    $this->assertTrue($node != NULL, format_string('Node @title was loaded', array('@title' => $title)));
-    $this->assertEqual($node->taxonomy_forums[LANGUAGE_NONE][0]['tid'], $tid, 'Saved forum topic was in the expected forum');
-
-    // View forum topic.
-    $this->drupalGet('node/' . $node->nid);
-    $this->assertRaw($title, 'Subject was found');
-    $this->assertRaw($body, 'Body was found');
-
-    return $node;
-  }
-
-  /**
-   * Verifies that the logged in user has access to a forum nodes.
-   *
-   * @param $node_user
-   *   The user who creates the node.
-   * @param $node
-   *   The node being checked.
-   * @param $admin
-   *   Boolean to indicate whether the user can 'access administration pages'.
-   * @param $response
-   *   The exptected HTTP response code.
-   */
-  private function verifyForums($node_user, $node, $admin, $response = 200) {
-    $response2 = ($admin) ? 200 : 403;
-
-    // View forum help node.
-    $this->drupalGet('admin/help/forum');
-    $this->assertResponse($response2);
-    if ($response2 == 200) {
-      $this->assertTitle(t('Forum | Drupal'), 'Forum help title was displayed');
-      $this->assertText(t('Forum'), 'Forum help node was displayed');
-    }
-
-    // Verify the forum blocks were displayed.
-    $this->drupalGet('');
-    $this->assertResponse(200);
-    $this->assertText(t('New forum topics'), '[New forum topics] Forum block was displayed');
-
-    // View forum container page.
-    $this->verifyForumView($this->container);
-    // View forum page.
-    $this->verifyForumView($this->forum, $this->container);
-    // View root forum page.
-    $this->verifyForumView($this->root_forum);
-
-    // View forum node.
-    $this->drupalGet('node/' . $node->nid);
-    $this->assertResponse(200);
-    $this->assertTitle($node->title . ' | Drupal', 'Forum node was displayed');
-    $breadcrumb = array(
-      l(t('Home'), NULL),
-      l(t('Forums'), 'forum'),
-      l($this->container['name'], 'forum/' . $this->container['tid']),
-      l($this->forum['name'], 'forum/' . $this->forum['tid']),
-    );
-    $this->assertRaw(theme('breadcrumb', array('breadcrumb' => $breadcrumb)), 'Breadcrumbs were displayed');
-
-    // View forum edit node.
-    $this->drupalGet('node/' . $node->nid . '/edit');
-    $this->assertResponse($response);
-    if ($response == 200) {
-      $this->assertTitle('Edit Forum topic ' . $node->title . ' | Drupal', 'Forum edit node was displayed');
-    }
-
-    if ($response == 200) {
-      // Edit forum node (including moving it to another forum).
-      $edit = array();
-      $langcode = LANGUAGE_NONE;
-      $edit["title"] = 'node/' . $node->nid;
-      $edit["body[$langcode][0][value]"] = $this->randomName(256);
-      // Assume the topic is initially associated with $forum.
-      $edit["taxonomy_forums[$langcode]"] = $this->root_forum['tid'];
-      $edit['shadow'] = TRUE;
-      $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
-      $this->assertRaw(t('Forum topic %title has been updated.', array('%title' => $edit["title"])), 'Forum node was edited');
-
-      // Verify topic was moved to a different forum.
-      $forum_tid = db_query("SELECT tid FROM {forum} WHERE nid = :nid AND vid = :vid", array(
-        ':nid' => $node->nid,
-        ':vid' => $node->vid,
-      ))->fetchField();
-      $this->assertTrue($forum_tid == $this->root_forum['tid'], 'The forum topic is linked to a different forum');
-
-      // Delete forum node.
-      $this->drupalPost('node/' . $node->nid . '/delete', array(), t('Delete'));
-      $this->assertResponse($response);
-      $this->assertRaw(t('Forum topic %title has been deleted.', array('%title' => $edit['title'])), 'Forum node was deleted');
-    }
-  }
-
-  /**
-   * Verifies display of forum page.
-   *
-   * @param $forum
-   *   A row from the taxonomy_term_data table in an array.
-   * @param $parent
-   *   (optional) An array representing the forum's parent.
-   */
-  private function verifyForumView($forum, $parent = NULL) {
-    // View forum page.
-    $this->drupalGet('forum/' . $forum['tid']);
-    $this->assertResponse(200);
-    $this->assertTitle($forum['name'] . ' | Drupal', 'Forum name was displayed');
-
-    $breadcrumb = array(
-      l(t('Home'), NULL),
-      l(t('Forums'), 'forum'),
-    );
-    if (isset($parent)) {
-      $breadcrumb[] = l($parent['name'], 'forum/' . $parent['tid']);
-    }
-
-    $this->assertRaw(theme('breadcrumb', array('breadcrumb' => $breadcrumb)), 'Breadcrumbs were displayed');
-  }
-
-  /**
-   * Generates forum topics to test the display of an active forum block.
-   *
-   * @param array $forum
-   *   The foorum array (a row from taxonomy_term_data table).
-   */
-  private function generateForumTopics($forum) {
-    $this->nids = array();
-    for ($i = 0; $i < 5; $i++) {
-      $node = $this->createForumTopic($this->forum, FALSE);
-      $this->nids[] = $node->nid;
-    }
-  }
-
-  /**
-   * Views forum topics to test the display of an active forum block.
-   *
-   * @todo The logic here is completely incorrect, since the active forum topics
-   *   block is determined by comments on the node, not by views.
-   * @todo DIE
-   *
-   * @param $nids
-   *   An array of forum node IDs.
-   */
-  private function viewForumTopics($nids) {
-    for ($i = 0; $i < 2; $i++) {
-      foreach ($nids as $nid) {
-        $this->drupalGet('node/' . $nid);
-        $this->drupalGet('node/' . $nid);
-        $this->drupalGet('node/' . $nid);
-      }
-    }
-  }
-}
-
-/**
- * Tests the forum index listing.
- */
-class ForumIndexTestCase extends DrupalWebTestCase {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Forum index',
-      'description' => 'Tests the forum index listing.',
-      'group' => 'Forum',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('taxonomy', 'comment', 'forum');
-
-    // Create a test user.
-    $web_user = $this->drupalCreateUser(array('create forum content', 'edit own forum content', 'edit any forum content', 'administer nodes'));
-    $this->drupalLogin($web_user);
-  }
-
-  /**
-   * Tests the forum index for published and unpublished nodes.
-   */
-  function testForumIndexStatus() {
-
-    $langcode = LANGUAGE_NONE;
-
-    // The forum ID to use.
-    $tid = 1;
-
-    // Create a test node.
-    $title = $this->randomName(20);
-    $edit = array(
-      "title" => $title,
-      "body[$langcode][0][value]" => $this->randomName(200),
-    );
-
-    // Create the forum topic, preselecting the forum ID via a URL parameter.
-    $this->drupalPost('node/add/forum/' . $tid, $edit, t('Save'));
-
-    // Check that the node exists in the database.
-    $node = $this->drupalGetNodeByTitle($title);
-    $this->assertTrue(!empty($node), 'New forum node found in database.');
-
-    // Verify that the node appears on the index.
-    $this->drupalGet('forum/' . $tid);
-    $this->assertText($title, 'Published forum topic appears on index.');
-
-    // Unpublish the node.
-    $edit = array(
-      'status' => FALSE,
-    );
-    $this->drupalPost("node/{$node->nid}/edit", $edit, t('Save'));
-    $this->drupalGet("node/{$node->nid}");
-    $this->assertText(t('Access denied'), 'Unpublished node is no longer accessible.');
-
-    // Verify that the node no longer appears on the index.
-    $this->drupalGet('forum/' . $tid);
-    $this->assertNoText($title, 'Unpublished forum topic no longer appears on index.');
-  }
-}
diff --git a/modules/forum/forums.tpl.php b/modules/forum/forums.tpl.php
deleted file mode 100644
index 6a0e02e..0000000
--- a/modules/forum/forums.tpl.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-/**
- * @file
- * Displays a forum.
- *
- * May contain forum containers as well as forum topics.
- *
- * Available variables:
- * - $forums: The forums to display (as processed by forum-list.tpl.php).
- * - $topics: The topics to display (as processed by forum-topic-list.tpl.php).
- * - $forums_defined: A flag to indicate that the forums are configured.
- *
- * @see template_preprocess_forums()
- *
- * @ingroup themeable
- */
-?>
-<?php if ($forums_defined): ?>
-<div id="forum">
-  <?php print $forums; ?>
-  <?php print $topics; ?>
-</div>
-<?php endif; ?>
diff --git a/modules/help/help-rtl.css b/modules/help/help-rtl.css
deleted file mode 100644
index 8e40a8c..0000000
--- a/modules/help/help-rtl.css
+++ /dev/null
@@ -1,10 +0,0 @@
-
-.help-items {
-  float: right;
-  padding-right: 0;
-  padding-left: 3%;
-}
-.help-items-last {
-  padding-right: 0;
-  padding-left: 0;
-}
diff --git a/modules/help/help.admin.inc b/modules/help/help.admin.inc
deleted file mode 100644
index ec1a18e..0000000
--- a/modules/help/help.admin.inc
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-
-/**
- * @file
- * Admin page callbacks for the help module.
- */
-
-/**
- * Menu callback; prints a page listing a glossary of Drupal terminology.
- */
-function help_main() {
-  // Add CSS
-  drupal_add_css(drupal_get_path('module', 'help') . '/help.css');
-  $output = '<h2>' . t('Help topics') . '</h2><p>' . t('Help is available on the following items:') . '</p>' . help_links_as_list();
-  return $output;
-}
-
-/**
- * Menu callback; prints a page listing general help for a module.
- *
- * @param $name
- *   A module name to display a help page for.
- */
-function help_page($name) {
-  $output = '';
-  if (module_hook($name, 'help')) {
-    $info = system_get_info('module');
-    drupal_set_title($info[$name]['name']);
-
-    $temp = module_invoke($name, 'help', "admin/help#$name", drupal_help_arg());
-    if (empty($temp)) {
-      $output .= t("No help is available for module %module.", array('%module' => $info[$name]['name']));
-    }
-    else {
-      $output .= $temp;
-    }
-
-    // Only print list of administration pages if the module in question has
-    // any such pages associated to it.
-    $admin_tasks = system_get_module_admin_tasks($name, $info[$name]);
-    if (!empty($admin_tasks)) {
-      $links = array();
-      foreach ($admin_tasks as $task) {
-        $links[] = l($task['title'], $task['link_path'], $task['localized_options']);
-      }
-      $output .= theme('item_list', array('items' => $links, 'title' => t('@module administration pages', array('@module' => $info[$name]['name']))));
-    }
-  }
-  return $output;
-}
-
-/**
- * Provides a formatted list of available help topics.
- *
- * @return
- *   A string containing the formatted list.
- */
-function help_links_as_list() {
-  $empty_arg = drupal_help_arg();
-  $module_info = system_rebuild_module_data();
-
-  $modules = array();
-  foreach (module_implements('help', TRUE) as $module) {
-    if (module_invoke($module, 'help', "admin/help#$module", $empty_arg)) {
-      $modules[$module] = $module_info[$module]->info['name'];
-    }
-  }
-  asort($modules);
-
-  // Output pretty four-column list.
-  $count = count($modules);
-  $break = ceil($count / 4);
-  $output = '<div class="clearfix"><div class="help-items"><ul>';
-  $i = 0;
-  foreach ($modules as $module => $name) {
-    $output .= '<li>' . l($name, 'admin/help/' . $module) . '</li>';
-    if (($i + 1) % $break == 0 && ($i + 1) != $count) {
-      $output .= '</ul></div><div class="help-items' . ($i + 1 == $break * 3 ? ' help-items-last' : '') . '"><ul>';
-    }
-    $i++;
-  }
-  $output .= '</ul></div></div>';
-
-  return $output;
-}
-
diff --git a/modules/help/help.css b/modules/help/help.css
deleted file mode 100644
index 9228170..0000000
--- a/modules/help/help.css
+++ /dev/null
@@ -1,9 +0,0 @@
-
-.help-items {
-  float: left; /* LTR */
-  width: 22%;
-  padding-right: 3%; /* LTR */
-}
-.help-items-last {
-  padding-right: 0; /* LTR */
-}
diff --git a/modules/help/help.info b/modules/help/help.info
deleted file mode 100644
index d4c1b36..0000000
--- a/modules/help/help.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = Help
-description = Manages the display of online help.
-package = Core
-version = VERSION
-core = 7.x
-files[] = help.test
diff --git a/modules/help/help.module b/modules/help/help.module
deleted file mode 100644
index 53a9f71..0000000
--- a/modules/help/help.module
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-
-/**
- * @file
- * Manages displaying online help.
- */
-
-/**
- * Implements hook_menu().
- */
-function help_menu() {
-  $items['admin/help'] = array(
-    'title' => 'Help',
-    'description' => 'Reference for usage, configuration, and modules.',
-    'page callback' => 'help_main',
-    'access arguments' => array('access administration pages'),
-    'weight' => 9,
-    'file' => 'help.admin.inc',
-  );
-
-  foreach (module_implements('help', TRUE) as $module) {
-    $items['admin/help/' . $module] = array(
-      'title' => $module,
-      'page callback' => 'help_page',
-      'page arguments' => array(2),
-      'access arguments' => array('access administration pages'),
-      'type' => MENU_VISIBLE_IN_BREADCRUMB,
-      'file' => 'help.admin.inc',
-    );
-  }
-
-  return $items;
-}
-
-/**
- * Implements hook_help().
- */
-function help_help($path, $arg) {
-  switch ($path) {
-    case 'admin/help':
-      $output = '<p>' . t('Follow these steps to set up and start using your website:') . '</p>';
-      $output .= '<ol>';
-      $output .= '<li>' . t('<strong>Configure your website</strong> Once logged in, visit the <a href="@admin">administration section</a>, where you can <a href="@config">customize and configure</a> all aspects of your website.', array('@admin' => url('admin'), '@config' => url('admin/config'))) . '</li>';
-      $output .= '<li>' . t('<strong>Enable additional functionality</strong> Next, visit the <a href="@modules">module list</a> and enable features which suit your specific needs. You can find additional modules in the <a href="@download_modules">Drupal modules download section</a>.', array('@modules' => url('admin/modules'), '@download_modules' => 'http://drupal.org/project/modules')) . '</li>';
-      $output .= '<li>' . t('<strong>Customize your website design</strong> To change the "look and feel" of your website, visit the <a href="@themes">themes section</a>. You may choose from one of the included themes or download additional themes from the <a href="@download_themes">Drupal themes download section</a>.', array('@themes' => url('admin/appearance'), '@download_themes' => 'http://drupal.org/project/themes')) . '</li>';
-      $output .= '<li>' . t('<strong>Start posting content</strong> Finally, you can <a href="@content">add new content</a> for your website.', array('@content' => url('node/add'))) . '</li>';
-      $output .= '</ol>';
-      $output .= '<p>' . t('For more information, refer to the specific topics listed in the next section or to the <a href="@handbook">online Drupal handbooks</a>. You may also post at the <a href="@forum">Drupal forum</a> or view the wide range of <a href="@support">other support options</a> available.', array('@help' => url('admin/help'), '@handbook' => 'http://drupal.org/documentation', '@forum' => 'http://drupal.org/forum', '@support' => 'http://drupal.org/support')) . '</p>';
-      return $output;
-    case 'admin/help#help':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Help module provides <a href="@help-page">Help reference pages</a> and context-sensitive advice to guide you through the use and configuration of modules. It is a starting point for the online <a href="@handbook">Drupal handbooks</a>. The handbooks contain more extensive and up-to-date information, are annotated with user-contributed comments, and serve as the definitive reference point for all Drupal documentation. For more information, see the online handbook entry for the <a href="@help">Help module</a>.', array('@help' => 'http://drupal.org/documentation/modules/help/', '@handbook' => 'http://drupal.org/documentation', '@help-page' => url('admin/help'))) . '</p>';
-      $output .= '<h3>' . t('Uses') . '</h3>';
-      $output .= '<dl>';
-      $output .= '<dt>' . t('Providing a help reference') . '</dt>';
-      $output .= '<dd>' . t('The Help module displays explanations for using each module listed on the main <a href="@help">Help reference page</a>.', array('@help' => url('admin/help'))) . '</dd>';
-      $output .= '<dt>' . t('Providing context-sensitive help') . '</dt>';
-      $output .= '<dd>' . t('The Help module displays context-sensitive advice and explanations on various pages.') . '</dd>';
-      $output .= '</dl>';
-      return $output;
-  }
-}
diff --git a/modules/help/help.test b/modules/help/help.test
deleted file mode 100644
index da12ccc..0000000
--- a/modules/help/help.test
+++ /dev/null
@@ -1,137 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for help.module.
- */
-
-/**
- * Tests help display and user access for all modules implementing help.
- */
-class HelpTestCase extends DrupalWebTestCase {
-  /**
-   * The admin user that will be created.
-   */
-  protected $big_user;
-
-  /**
-   * The anonymous user that will be created.
-   */
-  protected $any_user;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Help functionality',
-      'description' => 'Verify help display and user access to help based on permissions.',
-      'group' => 'Help',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('blog', 'poll');
-
-    $this->getModuleList();
-
-    // Create users.
-    $this->big_user = $this->drupalCreateUser(array('access administration pages', 'view the administration theme', 'administer permissions'));
-    $this->any_user = $this->drupalCreateUser(array());
-  }
-
-  /**
-   * Logs in users, creates dblog events, and tests dblog functionality.
-   */
-  function testHelp() {
-    // Login the admin user.
-    $this->drupalLogin($this->big_user);
-    $this->verifyHelp();
-
-    // Login the regular user.
-    $this->drupalLogin($this->any_user);
-    $this->verifyHelp(403);
-
-    // Check for css on admin/help.
-    $this->drupalLogin($this->big_user);
-    $this->drupalGet('admin/help');
-    $this->assertRaw(drupal_get_path('module', 'help') . '/help.css', 'The help.css file is present in the HTML.');
-
-    // Verify that introductory help text exists, goes for 100% module coverage.
-    $this->assertRaw(t('For more information, refer to the specific topics listed in the next section or to the <a href="@drupal">online Drupal handbooks</a>.', array('@drupal' => 'http://drupal.org/documentation')), 'Help intro text correctly appears.');
-
-    // Verify that help topics text appears.
-    $this->assertRaw('<h2>' . t('Help topics') . '</h2><p>' . t('Help is available on the following items:') . '</p>', 'Help topics text correctly appears.');
-
-    // Make sure links are properly added for modules implementing hook_help().
-    foreach ($this->modules as $module => $name) {
-      $this->assertLink($name, 0, format_string('Link properly added to @name (admin/help/@module)', array('@module' => $module, '@name' => $name)));
-    }
-  }
-
-  /**
-   * Verifies the logged in user has access to the various help nodes.
-   *
-   * @param integer $response
-   *   An HTTP response code.
-   */
-  protected function verifyHelp($response = 200) {
-    foreach ($this->modules as $module => $name) {
-      // View module help node.
-      $this->drupalGet('admin/help/' . $module);
-      $this->assertResponse($response);
-      if ($response == 200) {
-        $this->assertTitle($name . ' | Drupal', format_string('%module title was displayed', array('%module' => $module)));
-        $this->assertRaw('<h1 class="page-title">' . t($name) . '</h1>', format_string('%module heading was displayed', array('%module' => $module)));
-       }
-    }
-  }
-
-  /**
-   * Gets the list of enabled modules that implement hook_help().
-   *
-   * @return array
-   *   A list of enabled modules.
-   */
-  protected function getModuleList() {
-    $this->modules = array();
-    $result = db_query("SELECT name, filename, info FROM {system} WHERE type = 'module' AND status = 1 ORDER BY weight ASC, filename ASC");
-    foreach ($result as $module) {
-      if (file_exists($module->filename) && function_exists($module->name . '_help')) {
-        $fullname = unserialize($module->info);
-        $this->modules[$module->name] = $fullname['name'];
-      }
-    }
-  }
-}
-
-/**
- * Tests a module without help to verify it is not listed in the help page.
- */
-class NoHelpTestCase extends DrupalWebTestCase {
-  /**
-   * The user who will be created.
-   */
-  protected $big_user;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'No help',
-      'description' => 'Verify no help is displayed for modules not providing any help.',
-      'group' => 'Help',
-    );
-  }
-
-  function setUp() {
-    // Use one of the test modules that do not implement hook_help().
-    parent::setUp('menu_test');
-    $this->big_user = $this->drupalCreateUser(array('access administration pages'));
-  }
-
-  /**
-   * Ensures modules not implementing help do not appear on admin/help.
-   */
-  function testMainPageNoHelp() {
-    $this->drupalLogin($this->big_user);
-
-    $this->drupalGet('admin/help');
-    $this->assertNoText('Hook menu tests', 'Making sure the test module menu_test does not display a help link in admin/help');
-  }
-}
diff --git a/modules/image/image-rtl.css b/modules/image/image-rtl.css
deleted file mode 100644
index 2a7a855..0000000
--- a/modules/image/image-rtl.css
+++ /dev/null
@@ -1,11 +0,0 @@
-
-/**
- * Image upload widget.
- */
-div.image-preview {
-  float: right;
-  padding: 0 0 10px 10px;
-}
-div.image-widget-data {
-  float: right;
-}
diff --git a/modules/image/image.admin.css b/modules/image/image.admin.css
deleted file mode 100644
index 3115c8d..0000000
--- a/modules/image/image.admin.css
+++ /dev/null
@@ -1,60 +0,0 @@
-
-/**
- * Image style configuration pages.
- */
-div.image-style-new,
-div.image-style-new div {
-  display: inline;
-}
-div.image-style-preview div.preview-image-wrapper {
-  float: left;
-  padding-bottom: 2em;
-  text-align: center;
-  top: 50%;
-  width: 48%;
-}
-div.image-style-preview div.preview-image {
-  margin: auto;
-  position: relative;
-}
-div.image-style-preview div.preview-image div.width {
-  border: 1px solid #666;
-  border-top: none;
-  height: 2px;
-  left: -1px;
-  bottom: -6px;
-  position: absolute;
-}
-div.image-style-preview div.preview-image div.width span {
-  position: relative;
-  top: 4px;
-}
-div.image-style-preview div.preview-image div.height {
-  border: 1px solid #666;
-  border-left: none;
-  position: absolute;
-  right: -6px;
-  top: -1px;
-  width: 2px;
-}
-div.image-style-preview div.preview-image div.height span {
-  height: 2em;
-  left: 10px;
-  margin-top: -1em;
-  position: absolute;
-  top: 50%;
-}
-
-/**
- * Image anchor element.
- */
-table.image-anchor {
-  width: auto;
-}
-table.image-anchor tr.even,
-table.image-anchor tr.odd {
-  background: none;
-}
-table.image-anchor td {
-  border: 1px solid #CCC;
-}
diff --git a/modules/image/image.api.php b/modules/image/image.api.php
deleted file mode 100644
index 8115116..0000000
--- a/modules/image/image.api.php
+++ /dev/null
@@ -1,200 +0,0 @@
-<?php
-
-/**
- * @file
- * Hooks related to image styles and effects.
- */
-
-/**
- * @addtogroup hooks
- * @{
- */
-
-/**
- * Define information about image effects provided by a module.
- *
- * This hook enables modules to define image manipulation effects for use with
- * an image style.
- *
- * @return
- *   An array of image effects. This array is keyed on the machine-readable
- *   effect name. Each effect is defined as an associative array containing the
- *   following items:
- *   - "label": The human-readable name of the effect.
- *   - "effect callback": The function to call to perform this image effect.
- *   - "dimensions passthrough": (optional) Set this item if the effect doesn't
- *     change the dimensions of the image.
- *   - "dimensions callback": (optional) The function to call to transform
- *     dimensions for this effect.
- *   - "help": (optional) A brief description of the effect that will be shown
- *     when adding or configuring this image effect.
- *   - "form callback": (optional) The name of a function that will return a
- *     $form array providing a configuration form for this image effect.
- *   - "summary theme": (optional) The name of a theme function that will output
- *     a summary of this image effect's configuration.
- *
- * @see hook_image_effect_info_alter()
- */
-function hook_image_effect_info() {
-  $effects = array();
-
-  $effects['mymodule_resize'] = array(
-    'label' => t('Resize'),
-    'help' => t('Resize an image to an exact set of dimensions, ignoring aspect ratio.'),
-    'effect callback' => 'mymodule_resize_effect',
-    'dimensions callback' => 'mymodule_resize_dimensions',
-    'form callback' => 'mymodule_resize_form',
-    'summary theme' => 'mymodule_resize_summary',
-  );
-
-  return $effects;
-}
-
-/**
- * Alter the information provided in hook_image_effect_info().
- *
- * @param $effects
- *   The array of image effects, keyed on the machine-readable effect name.
- *
- * @see hook_image_effect_info()
- */
-function hook_image_effect_info_alter(&$effects) {
-  // Override the Image module's crop effect with more options.
-  $effects['image_crop']['effect callback'] = 'mymodule_crop_effect';
-  $effects['image_crop']['dimensions callback'] = 'mymodule_crop_dimensions';
-  $effects['image_crop']['form callback'] = 'mymodule_crop_form';
-}
-
-/**
- * Respond to image style updating.
- *
- * This hook enables modules to update settings that might be affected by
- * changes to an image. For example, updating a module specific variable to
- * reflect a change in the image style's name.
- *
- * @param $style
- *   The image style array that is being updated.
- */
-function hook_image_style_save($style) {
-  // If a module defines an image style and that style is renamed by the user
-  // the module should update any references to that style.
-  if (isset($style['old_name']) && $style['old_name'] == variable_get('mymodule_image_style', '')) {
-    variable_set('mymodule_image_style', $style['name']);
-  }
-}
-
-/**
- * Respond to image style deletion.
- *
- * This hook enables modules to update settings when a image style is being
- * deleted. If a style is deleted, a replacement name may be specified in
- * $style['name'] and the style being deleted will be specified in
- * $style['old_name'].
- *
- * @param $style
- *   The image style array that being deleted.
- */
-function hook_image_style_delete($style) {
-  // Administrators can choose an optional replacement style when deleting.
-  // Update the modules style variable accordingly.
-  if (isset($style['old_name']) && $style['old_name'] == variable_get('mymodule_image_style', '')) {
-    variable_set('mymodule_image_style', $style['name']);
-  }
-}
-
-/**
- * Respond to image style flushing.
- *
- * This hook enables modules to take effect when a style is being flushed (all
- * images are being deleted from the server and regenerated). Any
- * module-specific caches that contain information related to the style should
- * be cleared using this hook. This hook is called whenever a style is updated,
- * deleted, or any effect associated with the style is update or deleted.
- *
- * @param $style
- *   The image style array that is being flushed.
- */
-function hook_image_style_flush($style) {
-  // Empty cached data that contains information about the style.
-  cache_clear_all('*', 'cache_mymodule', TRUE);
-}
-
-/**
- * Modify any image styles provided by other modules or the user.
- *
- * This hook allows modules to modify, add, or remove image styles. This may
- * be useful to modify default styles provided by other modules or enforce
- * that a specific effect is always enabled on a style. Note that modifications
- * to these styles may negatively affect the user experience, such as if an
- * effect is added to a style through this hook, the user may attempt to remove
- * the effect but it will be immediately be re-added.
- *
- * The best use of this hook is usually to modify default styles, which are not
- * editable by the user until they are overridden, so such interface
- * contradictions will not occur. This hook can target default (or user) styles
- * by checking the $style['storage'] property.
- *
- * If your module needs to provide a new style (rather than modify an existing
- * one) use hook_image_default_styles() instead.
- *
- * @see hook_image_default_styles()
- */
-function hook_image_styles_alter(&$styles) {
-  // Check that we only affect a default style.
-  if ($styles['thumbnail']['storage'] == IMAGE_STORAGE_DEFAULT) {
-    // Add an additional effect to the thumbnail style.
-    $styles['thumbnail']['effects'][] = array(
-      'name' => 'image_desaturate',
-      'data' => array(),
-      'weight' => 1,
-      'effect callback' => 'image_desaturate_effect',
-    );
-  }
-}
-
-/**
- * Provide module-based image styles for reuse throughout Drupal.
- *
- * This hook allows your module to provide image styles. This may be useful if
- * you require images to fit within exact dimensions. Note that you should
- * attempt to re-use the default styles provided by Image module whenever
- * possible, rather than creating image styles that are specific to your module.
- * Image provides the styles "thumbnail", "medium", and "large".
- *
- * You may use this hook to more easily manage your site's changes by moving
- * existing image styles from the database to a custom module. Note however that
- * moving image styles to code instead storing them in the database has a
- * negligible effect on performance, since custom image styles are loaded
- * from the database all at once. Even if all styles are pulled from modules,
- * Image module will still perform the same queries to check the database for
- * any custom styles.
- *
- * @return
- *   An array of image styles, keyed by the style name.
- * @see image_image_default_styles()
- */
-function hook_image_default_styles() {
-  $styles = array();
-
-  $styles['mymodule_preview'] = array(
-    'label' => 'My module preview',
-    'effects' => array(
-      array(
-        'name' => 'image_scale',
-        'data' => array('width' => 400, 'height' => 400, 'upscale' => 1),
-        'weight' => 0,
-      ),
-      array(
-        'name' => 'image_desaturate',
-        'data' => array(),
-        'weight' => 1,
-      ),
-    ),
-  );
-
-  return $styles;
-}
-
- /**
-  * @} End of "addtogroup hooks".
-  */
diff --git a/modules/image/image.css b/modules/image/image.css
deleted file mode 100644
index 7db307b..0000000
--- a/modules/image/image.css
+++ /dev/null
@@ -1,14 +0,0 @@
-
-/**
- * Image upload widget.
- */
-div.image-preview {
-  float: left; /* LTR */
-  padding: 0 10px 10px 0; /* LTR */
-}
-div.image-widget-data {
-  float: left; /* LTR */
-}
-div.image-widget-data input.text-field {
-  width: auto;
-}
diff --git a/modules/image/image.effects.inc b/modules/image/image.effects.inc
deleted file mode 100644
index 35a6a74..0000000
--- a/modules/image/image.effects.inc
+++ /dev/null
@@ -1,314 +0,0 @@
-<?php
-
-/**
- * @file
- * Functions needed to execute image effects provided by Image module.
- */
-
-/**
- * Implements hook_image_effect_info().
- */
-function image_image_effect_info() {
-  $effects = array(
-    'image_resize' => array(
-      'label' => t('Resize'),
-      'help' => t('Resizing will make images an exact set of dimensions. This may cause images to be stretched or shrunk disproportionately.'),
-      'effect callback' => 'image_resize_effect',
-      'dimensions callback' => 'image_resize_dimensions',
-      'form callback' => 'image_resize_form',
-      'summary theme' => 'image_resize_summary',
-    ),
-    'image_scale' => array(
-      'label' => t('Scale'),
-      'help' => t('Scaling will maintain the aspect-ratio of the original image. If only a single dimension is specified, the other dimension will be calculated.'),
-      'effect callback' => 'image_scale_effect',
-      'dimensions callback' => 'image_scale_dimensions',
-      'form callback' => 'image_scale_form',
-      'summary theme' => 'image_scale_summary',
-    ),
-    'image_scale_and_crop' => array(
-      'label' => t('Scale and crop'),
-      'help' => t('Scale and crop will maintain the aspect-ratio of the original image, then crop the larger dimension. This is most useful for creating perfectly square thumbnails without stretching the image.'),
-      'effect callback' => 'image_scale_and_crop_effect',
-      'dimensions callback' => 'image_resize_dimensions',
-      'form callback' => 'image_resize_form',
-      'summary theme' => 'image_resize_summary',
-    ),
-    'image_crop' => array(
-      'label' => t('Crop'),
-      'help' => t('Cropping will remove portions of an image to make it the specified dimensions.'),
-      'effect callback' => 'image_crop_effect',
-      'dimensions callback' => 'image_resize_dimensions',
-      'form callback' => 'image_crop_form',
-      'summary theme' => 'image_crop_summary',
-    ),
-    'image_desaturate' => array(
-      'label' => t('Desaturate'),
-      'help' => t('Desaturate converts an image to grayscale.'),
-      'effect callback' => 'image_desaturate_effect',
-      'dimensions passthrough' => TRUE,
-    ),
-    'image_rotate' => array(
-      'label' => t('Rotate'),
-      'help' => t('Rotating an image may cause the dimensions of an image to increase to fit the diagonal.'),
-      'effect callback' => 'image_rotate_effect',
-      'dimensions callback' => 'image_rotate_dimensions',
-      'form callback' => 'image_rotate_form',
-      'summary theme' => 'image_rotate_summary',
-    ),
-  );
-
-  return $effects;
-}
-
-/**
- * Image effect callback; Resize an image resource.
- *
- * @param $image
- *   An image object returned by image_load().
- * @param $data
- *   An array of attributes to use when performing the resize effect with the
- *   following items:
- *   - "width": An integer representing the desired width in pixels.
- *   - "height": An integer representing the desired height in pixels.
- *
- * @return
- *   TRUE on success. FALSE on failure to resize image.
- *
- * @see image_resize()
- */
-function image_resize_effect(&$image, $data) {
-  if (!image_resize($image, $data['width'], $data['height'])) {
-    watchdog('image', 'Image resize failed using the %toolkit toolkit on %path (%mimetype, %dimensions)', array('%toolkit' => $image->toolkit, '%path' => $image->source, '%mimetype' => $image->info['mime_type'], '%dimensions' => $image->info['width'] . 'x' . $image->info['height']), WATCHDOG_ERROR);
-    return FALSE;
-  }
-  return TRUE;
-}
-
-/**
- * Image dimensions callback; Resize.
- *
- * @param $dimensions
- *   Dimensions to be modified - an array with components width and height, in
- *   pixels.
- * @param $data
- *   An array of attributes to use when performing the resize effect with the
- *   following items:
- *   - "width": An integer representing the desired width in pixels.
- *   - "height": An integer representing the desired height in pixels.
- */
-function image_resize_dimensions(array &$dimensions, array $data) {
-  // The new image will have the exact dimensions defined for the effect.
-  $dimensions['width'] = $data['width'];
-  $dimensions['height'] = $data['height'];
-}
-
-/**
- * Image effect callback; Scale an image resource.
- *
- * @param $image
- *   An image object returned by image_load().
- * @param $data
- *   An array of attributes to use when performing the scale effect with the
- *   following items:
- *   - "width": An integer representing the desired width in pixels.
- *   - "height": An integer representing the desired height in pixels.
- *   - "upscale": A boolean indicating that the image should be upscaled if the
- *     dimensions are larger than the original image.
- *
- * @return
- *   TRUE on success. FALSE on failure to scale image.
- *
- * @see image_scale()
- */
-function image_scale_effect(&$image, $data) {
-  // Set sane default values.
-  $data += array(
-    'width' => NULL,
-    'height' => NULL,
-    'upscale' => FALSE,
-  );
-
-  if (!image_scale($image, $data['width'], $data['height'], $data['upscale'])) {
-    watchdog('image', 'Image scale failed using the %toolkit toolkit on %path (%mimetype, %dimensions)', array('%toolkit' => $image->toolkit, '%path' => $image->source, '%mimetype' => $image->info['mime_type'], '%dimensions' => $image->info['width'] . 'x' . $image->info['height']), WATCHDOG_ERROR);
-    return FALSE;
-  }
-  return TRUE;
-}
-
-/**
- * Image dimensions callback; Scale.
- *
- * @param $dimensions
- *   Dimensions to be modified - an array with components width and height, in
- *   pixels.
- * @param $data
- *   An array of attributes to use when performing the scale effect with the
- *   following items:
- *   - "width": An integer representing the desired width in pixels.
- *   - "height": An integer representing the desired height in pixels.
- *   - "upscale": A boolean indicating that the image should be upscaled if the
- *     dimensions are larger than the original image.
- */
-function image_scale_dimensions(array &$dimensions, array $data) {
-  if ($dimensions['width'] && $dimensions['height']) {
-    image_dimensions_scale($dimensions, $data['width'], $data['height'], $data['upscale']);
-  }
-}
-
-/**
- * Image effect callback; Crop an image resource.
- *
- * @param $image
- *   An image object returned by image_load().
- * @param $data
- *   An array of attributes to use when performing the crop effect with the
- *   following items:
- *   - "width": An integer representing the desired width in pixels.
- *   - "height": An integer representing the desired height in pixels.
- *   - "anchor": A string describing where the crop should originate in the form
- *     of "XOFFSET-YOFFSET". XOFFSET is either a number of pixels or
- *     "left", "center", "right" and YOFFSET is either a number of pixels or
- *     "top", "center", "bottom".
- * @return
- *   TRUE on success. FALSE on failure to crop image.
- * @see image_crop()
- */
-function image_crop_effect(&$image, $data) {
-  // Set sane default values.
-  $data += array(
-    'anchor' => 'center-center',
-  );
-
-  list($x, $y) = explode('-', $data['anchor']);
-  $x = image_filter_keyword($x, $image->info['width'], $data['width']);
-  $y = image_filter_keyword($y, $image->info['height'], $data['height']);
-  if (!image_crop($image, $x, $y, $data['width'], $data['height'])) {
-    watchdog('image', 'Image crop failed using the %toolkit toolkit on %path (%mimetype, %dimensions)', array('%toolkit' => $image->toolkit, '%path' => $image->source, '%mimetype' => $image->info['mime_type'], '%dimensions' => $image->info['width'] . 'x' . $image->info['height']), WATCHDOG_ERROR);
-    return FALSE;
-  }
-  return TRUE;
-}
-
-/**
- * Image effect callback; Scale and crop an image resource.
- *
- * @param $image
- *   An image object returned by image_load().
- * @param $data
- *   An array of attributes to use when performing the scale and crop effect
- *   with the following items:
- *   - "width": An integer representing the desired width in pixels.
- *   - "height": An integer representing the desired height in pixels.
- * @return
- *   TRUE on success. FALSE on failure to scale and crop image.
- * @see image_scale_and_crop()
- */
-function image_scale_and_crop_effect(&$image, $data) {
-  if (!image_scale_and_crop($image, $data['width'], $data['height'])) {
-    watchdog('image', 'Image scale and crop failed using the %toolkit toolkit on %path (%mimetype, %dimensions)', array('%toolkit' => $image->toolkit, '%path' => $image->source, '%mimetype' => $image->info['mime_type'], '%dimensions' => $image->info['width'] . 'x' . $image->info['height']), WATCHDOG_ERROR);
-    return FALSE;
-  }
-  return TRUE;
-}
-
-/**
- * Image effect callback; Desaturate (grayscale) an image resource.
- *
- * @param $image
- *   An image object returned by image_load().
- * @param $data
- *   An array of attributes to use when performing the desaturate effect.
- * @return
- *   TRUE on success. FALSE on failure to desaturate image.
- * @see image_desaturate()
- */
-function image_desaturate_effect(&$image, $data) {
-  if (!image_desaturate($image)) {
-    watchdog('image', 'Image desaturate failed using the %toolkit toolkit on %path (%mimetype, %dimensions)', array('%toolkit' => $image->toolkit, '%path' => $image->source, '%mimetype' => $image->info['mime_type'], '%dimensions' => $image->info['width'] . 'x' . $image->info['height']), WATCHDOG_ERROR);
-    return FALSE;
-  }
-  return TRUE;
-}
-
-/**
- * Image effect callback; Rotate an image resource.
- *
- * @param $image
- *   An image object returned by image_load().
- * @param $data
- *   An array of attributes to use when performing the rotate effect containing
- *   the following items:
- *   - "degrees": The number of (clockwise) degrees to rotate the image.
- *   - "random": A boolean indicating that a random rotation angle should be
- *     used for this image. The angle specified in "degrees" is used as a
- *     positive and negative maximum.
- *   - "bgcolor": The background color to use for exposed areas of the image.
- *     Use web-style hex colors (#FFFFFF for white, #000000 for black). Leave
- *     blank for transparency on image types that support it.
- * @return
- *   TRUE on success. FALSE on failure to rotate image.
- * @see image_rotate().
- */
-function image_rotate_effect(&$image, $data) {
-  // Set sane default values.
-  $data += array(
-    'degrees' => 0,
-    'bgcolor' => NULL,
-    'random' => FALSE,
-  );
-
-  // Convert short #FFF syntax to full #FFFFFF syntax.
-  if (strlen($data['bgcolor']) == 4) {
-    $c = $data['bgcolor'];
-    $data['bgcolor'] = $c[0] . $c[1] . $c[1] . $c[2] . $c[2] . $c[3] . $c[3];
-  }
-
-  // Convert #FFFFFF syntax to hexadecimal colors.
-  if ($data['bgcolor'] != '') {
-    $data['bgcolor'] = hexdec(str_replace('#', '0x', $data['bgcolor']));
-  }
-  else {
-    $data['bgcolor'] = NULL;
-  }
-
-  if (!empty($data['random'])) {
-    $degrees = abs((float) $data['degrees']);
-    $data['degrees'] = rand(-1 * $degrees, $degrees);
-  }
-
-  if (!image_rotate($image, $data['degrees'], $data['bgcolor'])) {
-    watchdog('image', 'Image rotate failed using the %toolkit toolkit on %path (%mimetype, %dimensions)', array('%toolkit' => $image->toolkit, '%path' => $image->source, '%mimetype' => $image->info['mime_type'], '%dimensions' => $image->info['width'] . 'x' . $image->info['height']), WATCHDOG_ERROR);
-    return FALSE;
-  }
-  return TRUE;
-}
-
-/**
- * Image dimensions callback; Rotate.
- *
- * @param $dimensions
- *   Dimensions to be modified - an array with components width and height, in
- *   pixels.
- * @param $data
- *   An array of attributes to use when performing the rotate effect containing
- *   the following items:
- *   - "degrees": The number of (clockwise) degrees to rotate the image.
- *   - "random": A boolean indicating that a random rotation angle should be
- *     used for this image. The angle specified in "degrees" is used as a
- *     positive and negative maximum.
- */
-function image_rotate_dimensions(array &$dimensions, array $data) {
-  // If the rotate is not random and the angle is a multiple of 90 degrees,
-  // then the new dimensions can be determined.
-  if (!$data['random'] && ((int) ($data['degrees']) == $data['degrees']) && ($data['degrees'] % 90 == 0)) {
-    if ($data['degrees'] % 180 != 0) {
-      $temp = $dimensions['width'];
-      $dimensions['width'] = $dimensions['height'];
-      $dimensions['height'] = $temp;
-    }
-  }
-  else {
-    $dimensions['width'] = $dimensions['height'] = NULL;
-  }
-}
diff --git a/modules/image/image.info b/modules/image/image.info
deleted file mode 100644
index d7eece1..0000000
--- a/modules/image/image.info
+++ /dev/null
@@ -1,8 +0,0 @@
-name = Image
-description = Provides image manipulation tools.
-package = Core
-version = VERSION
-core = 7.x
-dependencies[] = file
-files[] = image.test
-configure = admin/config/media/image-styles
diff --git a/modules/image/image.install b/modules/image/image.install
deleted file mode 100644
index 45bcbbb..0000000
--- a/modules/image/image.install
+++ /dev/null
@@ -1,522 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the image module.
- */
-
-/**
- * Implements hook_install().
- */
-function image_install() {
-  // Create the styles directory and ensure it's writable.
-  $directory = file_default_scheme() . '://styles';
-  file_prepare_directory($directory, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS);
-}
-
-/**
- * Implements hook_uninstall().
- */
-function image_uninstall() {
-  // Remove the styles directory and generated images.
-  file_unmanaged_delete_recursive(file_default_scheme() . '://styles');
-}
-
-/**
- * Implements hook_schema().
- */
-function image_schema() {
-  $schema = array();
-
-  $schema['cache_image'] = drupal_get_schema_unprocessed('system', 'cache');
-  $schema['cache_image']['description'] = 'Cache table used to store information about image manipulations that are in-progress.';
-
-  $schema['image_styles'] = array(
-    'description' => 'Stores configuration options for image styles.',
-    'fields' => array(
-      'isid' => array(
-        'description' => 'The primary identifier for an image style.',
-        'type' => 'serial',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-      ),
-      'name' => array(
-        'description' => 'The style machine name.',
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-      ),
-      'label' => array(
-        'description' => 'The style administrative name.',
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'default' => '',
-      ),
-    ),
-    'primary key' => array('isid'),
-    'unique keys' => array(
-      'name' => array('name'),
-    ),
-  );
-
-  $schema['image_effects'] = array(
-    'description' => 'Stores configuration options for image effects.',
-    'fields' => array(
-      'ieid' => array(
-        'description' => 'The primary identifier for an image effect.',
-        'type' => 'serial',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-      ),
-      'isid' => array(
-        'description' => 'The {image_styles}.isid for an image style.',
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-      'weight' => array(
-        'description' => 'The weight of the effect in the style.',
-        'type' => 'int',
-        'unsigned' => FALSE,
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-      'name' => array(
-        'description' => 'The unique name of the effect to be executed.',
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-      ),
-      'data' => array(
-        'description' => 'The configuration data for the effect.',
-        'type' => 'blob',
-        'not null' => TRUE,
-        'size' => 'big',
-        'serialize' => TRUE,
-      ),
-    ),
-    'primary key' => array('ieid'),
-    'indexes' => array(
-      'isid' => array('isid'),
-      'weight' => array('weight'),
-    ),
-    'foreign keys' => array(
-      'image_style' => array(
-        'table' => 'image_styles',
-        'columns' => array('isid' => 'isid'),
-      ),
-    ),
-  );
-
-  return $schema;
-}
-
-/**
- * Implements hook_field_schema().
- */
-function image_field_schema($field) {
-  return array(
-    'columns' => array(
-      'fid' => array(
-        'description' => 'The {file_managed}.fid being referenced in this field.',
-        'type' => 'int',
-        'not null' => FALSE,
-        'unsigned' => TRUE,
-      ),
-      'alt' => array(
-        'description' => "Alternative image text, for the image's 'alt' attribute.",
-        'type' => 'varchar',
-        'length' => 512,
-        'not null' => FALSE,
-      ),
-      'title' => array(
-        'description' => "Image title text, for the image's 'title' attribute.",
-        'type' => 'varchar',
-        'length' => 1024,
-        'not null' => FALSE,
-      ),
-      'width' => array(
-        'description' => 'The width of the image in pixels.',
-        'type' => 'int',
-        'unsigned' => TRUE,
-      ),
-      'height' => array(
-        'description' => 'The height of the image in pixels.',
-        'type' => 'int',
-        'unsigned' => TRUE,
-      ),
-    ),
-    'indexes' => array(
-      'fid' => array('fid'),
-    ),
-    'foreign keys' => array(
-      'fid' => array(
-        'table' => 'file_managed',
-        'columns' => array('fid' => 'fid'),
-      ),
-    ),
-  );
-}
-
-/**
- * Implements hook_update_dependencies().
- */
-function image_update_dependencies() {
-  $dependencies['image'][7002] = array(
-    // Image update 7002 uses field API functions, so must run after
-    // Field API has been enabled.
-    'system' => 7020,
-  );
-  return $dependencies;
-}
-
-/**
- * Install the schema for users upgrading from the contributed module.
- */
-function image_update_7000() {
-  if (!db_table_exists('image_styles')) {
-    $schema = array();
-
-    $schema['cache_image'] = system_schema_cache_7054();
-    $schema['cache_image']['description'] = 'Cache table used to store information about image manipulations that are in-progress.';
-
-    $schema['image_styles'] = array(
-      'description' => 'Stores configuration options for image styles.',
-      'fields' => array(
-        'isid' => array(
-          'description' => 'The primary identifier for an image style.',
-          'type' => 'serial',
-          'unsigned' => TRUE,
-          'not null' => TRUE,
-        ),
-        'name' => array(
-          'description' => 'The style name.',
-          'type' => 'varchar',
-          'length' => 255,
-          'not null' => TRUE,
-        ),
-      ),
-      'primary key' => array('isid'),
-      'unique keys' => array(
-        'name' => array('name'),
-      ),
-    );
-
-    $schema['image_effects'] = array(
-      'description' => 'Stores configuration options for image effects.',
-      'fields' => array(
-        'ieid' => array(
-          'description' => 'The primary identifier for an image effect.',
-          'type' => 'serial',
-          'unsigned' => TRUE,
-          'not null' => TRUE,
-        ),
-        'isid' => array(
-          'description' => 'The {image_styles}.isid for an image style.',
-          'type' => 'int',
-          'unsigned' => TRUE,
-          'not null' => TRUE,
-          'default' => 0,
-        ),
-        'weight' => array(
-          'description' => 'The weight of the effect in the style.',
-          'type' => 'int',
-          'unsigned' => FALSE,
-          'not null' => TRUE,
-          'default' => 0,
-        ),
-        'name' => array(
-          'description' => 'The unique name of the effect to be executed.',
-          'type' => 'varchar',
-          'length' => 255,
-          'not null' => TRUE,
-        ),
-        'data' => array(
-          'description' => 'The configuration data for the effect.',
-          'type' => 'blob',
-          'not null' => TRUE,
-          'size' => 'big',
-          'serialize' => TRUE,
-        ),
-      ),
-      'primary key' => array('ieid'),
-      'indexes' => array(
-        'isid' => array('isid'),
-        'weight' => array('weight'),
-      ),
-      'foreign keys' => array(
-        'image_style' => array(
-          'table' => 'image_styles',
-          'columns' => array('isid' => 'isid'),
-        ),
-      ),
-    );
-
-    db_create_table('cache_image', $schema['cache_image']);
-    db_create_table('image_styles', $schema['image_styles']);
-    db_create_table('image_effects', $schema['image_effects']);
-  }
-}
-
-/**
- * @addtogroup updates-7.x-extra
- * @{
- */
-
-/**
- * Rename possibly misnamed {image_effect} table to {image_effects}.
- */
-function image_update_7001() {
-  // Due to a bug in earlier versions of image_update_7000() it is possible
-  // to end up with an {image_effect} table where there should be an
-  // {image_effects} table.
-  if (!db_table_exists('image_effects') && db_table_exists('image_effect')) {
-    db_rename_table('image_effect', 'image_effects');
-  }
-}
-
-/**
- * Add width and height columns to a specific table.
- *
- * @param $table
- *   The name of the database table to be updated.
- * @param $columns
- *   Keyed array of columns this table is supposed to have.
- */
-function _image_update_7002_add_columns($table, $field_name) {
-  $spec = array(
-    'type' => 'int',
-    'unsigned' => TRUE,
-  );
-
-  $spec['description'] = 'The width of the image in pixels.';
-  db_add_field($table, $field_name . '_width', $spec);
-
-  $spec['description'] = 'The height of the image in pixels.';
-  db_add_field($table, $field_name . '_height', $spec);
-}
-
-/**
- * Populate image dimensions in a specific table.
- *
- * @param $table
- *   The name of the database table to be updated.
- * @param $columns
- *   Keyed array of columns this table is supposed to have.
- * @param $last_fid
- *   The fid of the last image to have been processed.
- *
- * @return
- *   The number of images that were processed.
- */
-function _image_update_7002_populate_dimensions($table, $field_name, &$last_fid) {
-  // Define how many images to process per pass.
-  $images_per_pass = 100;
-
-  // Query the database for fid / URI pairs.
-  $query = db_select($table, NULL, array('fetch' => PDO::FETCH_ASSOC));
-  $query->join('file_managed', NULL, $table . '.' . $field_name . '_fid = file_managed.fid');
-
-  if ($last_fid) {
-    $query->condition('file_managed.fid', $last_fid, '>');
-  }
-
-  $result = $query->fields('file_managed', array('fid', 'uri'))
-    ->orderBy('file_managed.fid')
-    ->range(0, $images_per_pass)
-    ->execute();
-
-  $count = 0;
-  foreach ($result as $file) {
-    $count++;
-    $info = image_get_info($file['uri']);
-
-    if (is_array($info)) {
-      db_update($table)
-        ->fields(array(
-          $field_name . '_width' => $info['width'],
-          $field_name . '_height' => $info['height'],
-        ))
-        ->condition($field_name . '_fid', $file['fid'])
-        ->execute();
-    }
-  }
-
-  // If less than the requested number of rows were returned then this table
-  // has been fully processed.
-  $last_fid = ($count < $images_per_pass) ? NULL : $file['fid'];
-  return $count;
-}
-
-/**
- * Add width and height columns to image field schema and populate.
- */
-function image_update_7002(array &$sandbox) {
-  if (empty($sandbox)) {
-    // Setup the sandbox.
-    $sandbox = array(
-      'tables' => array(),
-      'total' => 0,
-      'processed' => 0,
-      'last_fid' => NULL,
-    );
-
-    $fields = _update_7000_field_read_fields(array(
-      'module' => 'image',
-      'storage_type' => 'field_sql_storage',
-      'deleted' => 0,
-    ));
-
-    foreach ($fields as $field) {
-      $tables = array(
-        _field_sql_storage_tablename($field),
-        _field_sql_storage_revision_tablename($field),
-      );
-      foreach ($tables as $table) {
-        // Add the width and height columns to the table.
-        _image_update_7002_add_columns($table, $field['field_name']);
-
-        // How many rows need dimensions populated?
-        $count = db_select($table)->countQuery()->execute()->fetchField();
-
-        if (!$count) {
-          continue;
-        }
-
-        $sandbox['total'] += $count;
-        $sandbox['tables'][$table] = $field['field_name'];
-      }
-    }
-
-    // If no tables need rows populated with dimensions then we are done.
-    if (empty($sandbox['tables'])) {
-      $sandbox = array();
-      return;
-    }
-  }
-
-  // Process the table at the top of the list.
-  $keys = array_keys($sandbox['tables']);
-  $table = reset($keys);
-  $sandbox['processed'] += _image_update_7002_populate_dimensions($table, $sandbox['tables'][$table], $sandbox['last_fid']);
-
-  // Has the table been fully processed?
-  if (!$sandbox['last_fid']) {
-    unset($sandbox['tables'][$table]);
-  }
-
-  $sandbox['#finished'] = count($sandbox['tables']) ? ($sandbox['processed'] / $sandbox['total']) : 1;
-}
-
-/**
- * Remove the variables that set alt and title length since they were not
- * used for database column size and could cause PDO exceptions.
- */
-function image_update_7003() {
-  variable_del('image_alt_length');
-  variable_del('image_title_length');
-}
-
-/**
- * Use a large setting (512 and 1024 characters) for the length of the image alt
- * and title fields.
- */
-function image_update_7004() {
-  $alt_spec = array(
-    'type' => 'varchar',
-    'length' => 512,
-    'not null' => FALSE,
-  );
-
-  $title_spec = array(
-    'type' => 'varchar',
-    'length' => 1024,
-    'not null' => FALSE,
-  );
-
-  $fields = _update_7000_field_read_fields(array(
-    'module' => 'image',
-    'storage_type' => 'field_sql_storage',
-  ));
-
-  foreach ($fields as $field_name => $field) {
-    $tables = array(
-      _field_sql_storage_tablename($field),
-      _field_sql_storage_revision_tablename($field),
-    );
-    $alt_column = $field['field_name'] . '_alt';
-    $title_column = $field['field_name'] . '_title';
-    foreach ($tables as $table) {
-      db_change_field($table, $alt_column, $alt_column, $alt_spec);
-      db_change_field($table, $title_column, $title_column, $title_spec);
-    }
-  }
-}
-
-/**
- * Add a column to the 'image_style' table to store administrative labels.
- */
-function image_update_7005() {
-  $field = array(
-    'type' => 'varchar',
-    'length' => 255,
-    'not null' => TRUE,
-    'default' => '',
-    'description' => 'The style administrative name.',
-  );
-  db_add_field('image_styles', 'label', $field);
-
-  // Do a direct query here, rather than calling image_styles(),
-  // in case Image module is disabled.
-  $styles = db_query('SELECT name FROM {image_styles}')->fetchCol();
-  foreach ($styles as $style) {
-    db_update('image_styles')
-      ->fields(array('label' => $style))
-      ->condition('name', $style)
-      ->execute();
-  }
-}
-
-/**
- * @} End of "addtogroup updates-7.x-extra".
- */
-
-/**
- * Implements hook_requirements() to check the PHP GD Library.
- *
- * @param $phase
- */
-function image_requirements($phase) {
-  $requirements = array();
-
-  if ($phase == 'runtime') {
-    // Check for the PHP GD library.
-    if (function_exists('imagegd2')) {
-      $info = gd_info();
-      $requirements['image_gd'] = array(
-        'value' => $info['GD Version'],
-      );
-
-      // Check for filter and rotate support.
-      if (function_exists('imagefilter') && function_exists('imagerotate')) {
-        $requirements['image_gd']['severity'] = REQUIREMENT_OK;
-      }
-      else {
-        $requirements['image_gd']['severity'] = REQUIREMENT_WARNING;
-        $requirements['image_gd']['description'] = t('The GD Library for PHP is enabled, but was compiled without support for functions used by the rotate and desaturate effects. It was probably compiled using the official GD libraries from http://www.libgd.org instead of the GD library bundled with PHP. You should recompile PHP --with-gd using the bundled GD library. See <a href="http://www.php.net/manual/book.image.php">the PHP manual</a>.');
-      }
-    }
-    else {
-      $requirements['image_gd'] = array(
-        'value' => t('Not installed'),
-        'severity' => REQUIREMENT_ERROR,
-        'description' => t('The GD library for PHP is missing or outdated. Check the <a href="@url">PHP image documentation</a> for information on how to correct this.', array('@url' => 'http://www.php.net/manual/book.image.php')),
-      );
-    }
-    $requirements['image_gd']['title'] = t('GD library rotate and desaturate effects');
-  }
-
-  return $requirements;
-}
diff --git a/modules/image/sample.png b/modules/image/sample.png
deleted file mode 100644
index f22e0df..0000000
Binary files a/modules/image/sample.png and /dev/null differ
diff --git a/modules/image/tests/image_module_test.info b/modules/image/tests/image_module_test.info
deleted file mode 100644
index db7eacd..0000000
--- a/modules/image/tests/image_module_test.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Image test
-description = Provides hook implementations for testing Image module functionality.
-package = Core
-version = VERSION
-core = 7.x
-files[] = image_module_test.module
-hidden = TRUE
diff --git a/modules/image/tests/image_module_test.module b/modules/image/tests/image_module_test.module
deleted file mode 100644
index 8a322fb..0000000
--- a/modules/image/tests/image_module_test.module
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-
-/**
- * @file
- * Provides Image module hook implementations for testing purposes.
- */
-
-function image_module_test_file_download($uri) {
-  if (variable_get('image_module_test_file_download', FALSE) == $uri) {
-    return array('X-Image-Owned-By' => 'image_module_test');
-  }
-}
-
-/**
- * Implements hook_image_effect_info().
- */
-function image_module_test_image_effect_info() {
-  $effects = array(
-    'image_module_test_null' => array(
-    'effect callback' => 'image_module_test_null_effect',
-    ),
-  );
-
-  return $effects;
-}
-
-/**
- * Image effect callback; Null.
- *
- * @param $image
- *   An image object returned by image_load().
- * @param $data
- *   An array with no attributes.
- *
- * @return
- *   TRUE
- */
-function image_module_test_null_effect(array &$image, array $data) {
-  return TRUE;
-}
-
-/**
- * Implements hook_image_effect_info_alter().
- *
- * Used to keep a count of cache misses in image_effect_definitions().
- */
-function image_module_test_image_effect_info_alter(&$effects) {
-  $image_effects_definition_called = &drupal_static(__FUNCTION__, 0);
-  $image_effects_definition_called++;
-}
diff --git a/modules/locale/locale-rtl.css b/modules/locale/locale-rtl.css
deleted file mode 100644
index aaf1988..0000000
--- a/modules/locale/locale-rtl.css
+++ /dev/null
@@ -1,12 +0,0 @@
-
-#locale-translation-filter-form .form-item-language,
-#locale-translation-filter-form .form-item-translation,
-#locale-translation-filter-form .form-item-group {
-  float: right;
-  padding-left: .8em;
-  padding-right: 0;
-}
-#locale-translation-filter-form .form-actions {
-  float: right;
-  padding: 3ex 1em 0 0;
-}
diff --git a/modules/locale/locale.api.php b/modules/locale/locale.api.php
deleted file mode 100644
index 1f11fc9..0000000
--- a/modules/locale/locale.api.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-/**
- * @file
- * Hooks provided by the Locale module.
- */
-
-/**
- * @addtogroup hooks
- * @{
- */
-
-/**
- * Allows modules to define their own text groups that can be translated.
- *
- * @param $op
- *   Type of operation. Currently, only supports 'groups'.
- */
-function hook_locale($op = 'groups') {
-  switch ($op) {
-    case 'groups':
-      return array('custom' => t('Custom'));
-  }
-}
-
-/**
- * Allow modules to react to language settings changes.
- *
- * Every module needing to act when the number of enabled languages changes
- * should implement this. This is an "internal" hook and should not be invoked
- * elsewhere. The typical implementation would trigger some kind of rebuilding,
- * this way system components could properly react to the change of the enabled
- * languages number.
- */
-function hook_multilingual_settings_changed() {
-  field_info_cache_clear();
-}
-
-/**
- * @} End of "addtogroup hooks".
- */
diff --git a/modules/locale/locale.css b/modules/locale/locale.css
deleted file mode 100644
index 38112b5..0000000
--- a/modules/locale/locale.css
+++ /dev/null
@@ -1,32 +0,0 @@
-
-.locale-untranslated {
-  font-style: normal;
-  text-decoration: line-through;
-}
-
-#locale-translation-filter-form .form-item-language,
-#locale-translation-filter-form .form-item-translation,
-#locale-translation-filter-form .form-item-group {
-  float: left; /* LTR */
-  padding-right: .8em; /* LTR */
-  margin: 0.1em;
-  /**
-   * In Opera 9, DOM elements with the property of "overflow: auto"
-   * will partially hide its contents with unnecessary scrollbars when
-   * its immediate child is floated without an explicit width set.
-   */
-  width: 15em;
-}
-#locale-translation-filter-form .form-type-select select {
-  width: 100%;
-}
-#locale-translation-filter-form .form-actions {
-  float: left; /* LTR */
-  padding: 3ex 0 0 1em; /* LTR */
-}
-.language-switcher-locale-session a.active {
-  color: #0062A0;
-}
-.language-switcher-locale-session a.session-active {
-  color: #000000;
-}
diff --git a/modules/locale/locale.datepicker.js b/modules/locale/locale.datepicker.js
deleted file mode 100644
index f819282..0000000
--- a/modules/locale/locale.datepicker.js
+++ /dev/null
@@ -1,79 +0,0 @@
-(function ($) {
-
-/**
- * Attaches language support to the jQuery UI datepicker component.
- */
-Drupal.behaviors.localeDatepicker = {
-  attach: function(context, settings) {
-    // This code accesses Drupal.settings and localized strings via Drupal.t().
-    // So this code should run after these are initialized. By placing it in an
-    // attach behavior this is assured.
-    $.datepicker.regional['drupal-locale'] = $.extend({
-      closeText: Drupal.t('Done'),
-      prevText: Drupal.t('Prev'),
-      nextText: Drupal.t('Next'),
-      currentText: Drupal.t('Today'),
-      monthNames: [
-        Drupal.t('January'),
-        Drupal.t('February'),
-        Drupal.t('March'),
-        Drupal.t('April'),
-        Drupal.t('May'),
-        Drupal.t('June'),
-        Drupal.t('July'),
-        Drupal.t('August'),
-        Drupal.t('September'),
-        Drupal.t('October'),
-        Drupal.t('November'),
-        Drupal.t('December')
-      ],
-      monthNamesShort: [
-        Drupal.t('Jan'),
-        Drupal.t('Feb'),
-        Drupal.t('Mar'),
-        Drupal.t('Apr'),
-        Drupal.t('May'),
-        Drupal.t('Jun'),
-        Drupal.t('Jul'),
-        Drupal.t('Aug'),
-        Drupal.t('Sep'),
-        Drupal.t('Oct'),
-        Drupal.t('Nov'),
-        Drupal.t('Dec')
-      ],
-      dayNames: [
-        Drupal.t('Sunday'),
-        Drupal.t('Monday'),
-        Drupal.t('Tuesday'),
-        Drupal.t('Wednesday'),
-        Drupal.t('Thursday'),
-        Drupal.t('Friday'),
-        Drupal.t('Saturday')
-      ],
-      dayNamesShort: [
-        Drupal.t('Sun'),
-        Drupal.t('Mon'),
-        Drupal.t('Tue'),
-        Drupal.t('Wed'),
-        Drupal.t('Thu'),
-        Drupal.t('Fri'),
-        Drupal.t('Sat')
-      ],
-      dayNamesMin: [
-        Drupal.t('Su'),
-        Drupal.t('Mo'),
-        Drupal.t('Tu'),
-        Drupal.t('We'),
-        Drupal.t('Th'),
-        Drupal.t('Fr'),
-        Drupal.t('Sa')
-      ],
-      dateFormat: Drupal.t('mm/dd/yy'),
-      firstDay: 0,
-      isRTL: 0
-    }, Drupal.settings.jquery.ui.datepicker);
-    $.datepicker.setDefaults($.datepicker.regional['drupal-locale']);
-  }
-};
-
-})(jQuery);
diff --git a/modules/locale/locale.info b/modules/locale/locale.info
deleted file mode 100644
index 1d6bdcf..0000000
--- a/modules/locale/locale.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Locale
-description = Adds language handling functionality and enables the translation of the user interface to languages other than English.
-package = Core
-version = VERSION
-core = 7.x
-files[] = locale.test
-configure = admin/config/regional/language
diff --git a/modules/locale/locale.install b/modules/locale/locale.install
deleted file mode 100644
index b4db757..0000000
--- a/modules/locale/locale.install
+++ /dev/null
@@ -1,457 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the locale module.
- */
-
-/**
- * Implements hook_install().
- */
-function locale_install() {
-  // locales_source.source and locales_target.target are not used as binary
-  // fields; non-MySQL database servers need to ensure the field type is text
-  // and that LIKE produces a case-sensitive comparison.
-
-  db_insert('languages')
-    ->fields(array(
-      'language' => 'en',
-      'name' => 'English',
-      'native' => 'English',
-      'direction' => 0,
-      'enabled' => 1,
-      'weight' => 0,
-      'javascript' => '',
-    ))
-    ->execute();
-}
-
-/**
- * @addtogroup updates-6.x-to-7.x
- * @{
- */
-
-/**
- * Add context field index and allow longer location.
- */
-function locale_update_7000() {
-  db_drop_index('locales_source', 'source');
-  db_add_index('locales_source', 'source_context', array(array('source', 30), 'context'));
-
-  // Also drop the 'textgroup_location' index added by the i18nstrings module
-  // of the i18n project, which prevents the below schema update from running.
-  if (db_index_exists('locales_source', 'textgroup_location')) {
-    db_drop_index('locales_source', 'textgroup_location');
-  }
-
-  db_change_field('locales_source', 'location', 'location', array(
-    'type' => 'text',
-    'not null' => FALSE,
-    'size' => 'big',
-    'description' => 'Drupal path in case of online discovered translations or file path in case of imported strings.',
-  ));
-}
-
-/**
- * Upgrade language negotiation settings.
- */
-function locale_update_7001() {
-  require_once DRUPAL_ROOT . '/includes/language.inc';
-  require_once DRUPAL_ROOT . '/includes/locale.inc';
-  require_once DRUPAL_ROOT . '/modules/locale/locale.module';
-
-  switch (variable_get('language_negotiation', 0)) {
-    // LANGUAGE_NEGOTIATION_NONE.
-    case 0:
-      $negotiation = array();
-      break;
-
-    // LANGUAGE_NEGOTIATION_PATH_DEFAULT.
-    case 1:
-      $negotiation = array(LOCALE_LANGUAGE_NEGOTIATION_URL);
-      // In Drupal 6 path prefixes are shown for the default language only when
-      // language negotiation is set to LANGUAGE_NEGOTIATION_PATH, while in
-      // Drupal 7 path prefixes are always shown if not empty. Hence we need to
-      // ensure that the default language has an empty prefix to avoid breaking
-      // the site URLs with a prefix that previously was missing.
-      $default = language_default();
-      $default->prefix = '';
-      variable_set('language_default', $default);
-      db_update('languages')
-        ->fields(array('prefix' => $default->prefix))
-        ->condition('language', $default->language)
-        ->execute();
-      break;
-
-    // LANGUAGE_NEGOTIATION_PATH.
-    case 2:
-      $negotiation = array(LOCALE_LANGUAGE_NEGOTIATION_URL, LOCALE_LANGUAGE_NEGOTIATION_USER, LOCALE_LANGUAGE_NEGOTIATION_BROWSER);
-      break;
-
-    // LANGUAGE_NEGOTIATION_DOMAIN.
-    case 3:
-      variable_set('locale_language_negotiation_url_part', LOCALE_LANGUAGE_NEGOTIATION_URL_DOMAIN);
-      $negotiation = array(LOCALE_LANGUAGE_NEGOTIATION_URL);
-      break;
-  }
-
-  // Save the new language negotiation options.
-  language_negotiation_set(LANGUAGE_TYPE_INTERFACE, array_flip($negotiation));
-  language_negotiation_set(LANGUAGE_TYPE_CONTENT, array(LOCALE_LANGUAGE_NEGOTIATION_INTERFACE => 0));
-  language_negotiation_set(LANGUAGE_TYPE_URL, array(LOCALE_LANGUAGE_NEGOTIATION_URL => 0));
-
-  // Save admininstration UI settings.
-  $type = LANGUAGE_TYPE_INTERFACE;
-  $provider_weights = array_flip(array_keys(locale_language_negotiation_info()));
-  variable_set("locale_language_providers_weight_$type", $provider_weights);
-
-  // Unset the old language negotiation system variable.
-  variable_del('language_negotiation');
-
-  return array();
-}
-
-/**
- * Updates URL language negotiation by adding the URL fallback detection method.
- */
-function locale_update_7002() {
-  // language.inc may not have been included during bootstrap if there is not
-  // more than one language currently enabled.
-  require_once DRUPAL_ROOT . '/includes/language.inc';
-  $language_types_info = language_types_info();
-  $info = $language_types_info[LANGUAGE_TYPE_URL];
-  if (isset($info['fixed'])) {
-    language_negotiation_set(LANGUAGE_TYPE_URL, array_flip($info['fixed']));
-  }
-}
-
-/**
- * @} End of "addtogroup updates-6.x-to-7.x".
- */
-
-/**
- * @addtogroup updates-7.x-extra
- * @{
- */
-
-/**
- * Update "language_count" variable.
- */
-function locale_update_7003() {
-  $languages = language_list('enabled');
-  variable_set('language_count', count($languages[1]));
-}
-
-/**
- * Remove duplicates in {locales_source}.
- */
-function locale_update_7004() {
-  // Look up all duplicates. For each set of duplicates, we select the row
-  // with the lowest lid as the "master" that will be preserved.
-  $result_source = db_query("SELECT MIN(lid) AS lid, source, context FROM {locales_source} WHERE textgroup = 'default' GROUP BY source, context HAVING COUNT(*) > 1");
-
-  $conflict = FALSE;
-  foreach ($result_source as $source) {
-    // Find all rows in {locales_target} that are translations of the same
-    // string (incl. context).
-    $result_target = db_query("SELECT t.lid, t.language, t.plural, t.translation FROM {locales_source} s JOIN {locales_target} t ON s.lid = t.lid WHERE s.source = :source AND s.context = :context AND s.textgroup = 'default' ORDER BY lid", array(
-      ':source' => $source->source,
-      ':context' => $source->context,
-    ));
-
-    $translations = array();
-    $keep_lids = array($source->lid);
-    foreach ($result_target as $target) {
-      if (!isset($translations[$target->language])) {
-        $translations[$target->language] = $target->translation;
-        if ($target->lid != $source->lid) {
-          // Move translation to the master lid.
-          db_query('UPDATE {locales_target} SET lid = :new_lid WHERE lid = :old_lid', array(
-            ':new_lid' => $source->lid,
-            ':old_lid' => $target->lid));
-        }
-      }
-      elseif ($translations[$target->language] == $target->translation) {
-        // Delete duplicate translation.
-        db_query('DELETE FROM {locales_target} WHERE lid = :lid AND language = :language', array(
-          ':lid' => $target->lid,
-          ':language' => $target->language));
-      }
-      else {
-        // The same string is translated into several different strings in one
-        // language. We do not know which is the preferred, so we keep them all.
-        $keep_lids[] = $target->lid;
-        $conflict = TRUE;
-      }
-    }
-
-    // Delete rows in {locales_source} that are no longer referenced from
-    // {locales_target}.
-    db_delete('locales_source')
-      ->condition('source', $source->source)
-      ->condition('context', $source->context)
-      ->condition('textgroup', 'default')
-      ->condition('lid', $keep_lids, 'NOT IN')
-      ->execute();
-  }
-
-  if ($conflict) {
-    $url = 'http://drupal.org/node/746240';
-    drupal_set_message('Your {locales_source} table contains duplicates that could not be removed automatically. See <a href="' . $url .'" target="_blank">' . $url . '</a> for more information.', 'warning');
-  }
-}
-
-/**
- * Increase {locales_languages}.formula column's length.
- */
-function locale_update_7005() {
-  db_change_field('languages', 'formula', 'formula', array(
-    'type' => 'varchar',
-    'length' => 255,
-    'not null' => TRUE,
-    'default' => '',
-    'description' => 'Plural formula in PHP code to evaluate to get plural indexes.',
-  ));
-}
-
-/**
- * @} End of "addtogroup updates-7.x-extra".
- */
-
-/**
- * Implements hook_uninstall().
- */
-function locale_uninstall() {
-  // Delete all JavaScript translation files.
-  $locale_js_directory = 'public://' . variable_get('locale_js_directory', 'languages');
-
-  if (is_dir($locale_js_directory)) {
-    $files = db_query('SELECT language, javascript FROM {languages}');
-    foreach ($files as $file) {
-      if (!empty($file->javascript)) {
-        file_unmanaged_delete($locale_js_directory . '/' . $file->language . '_' . $file->javascript . '.js');
-      }
-    }
-    // Delete the JavaScript translations directory if empty.
-    if (!file_scan_directory($locale_js_directory, '/.*/')) {
-      drupal_rmdir($locale_js_directory);
-    }
-  }
-
-  // Clear variables.
-  variable_del('language_default');
-  variable_del('language_count');
-  variable_del('language_types');
-  variable_del('locale_language_negotiation_url_part');
-  variable_del('locale_language_negotiation_session_param');
-  variable_del('language_content_type_default');
-  variable_del('language_content_type_negotiation');
-  variable_del('locale_cache_strings');
-  variable_del('locale_js_directory');
-  variable_del('javascript_parsed');
-  variable_del('locale_field_language_fallback');
-  variable_del('locale_cache_length');
-
-  foreach (language_types() as $type) {
-    variable_del("language_negotiation_$type");
-    variable_del("locale_language_providers_weight_$type");
-  }
-
-  foreach (node_type_get_types() as $type => $content_type) {
-    $setting = variable_del("language_content_type_$type");
-  }
-
-  // Switch back to English: with a $language->language value different from 'en'
-  // successive calls of t() might result in calling locale(), which in turn might
-  // try to query the unexisting {locales_source} and {locales_target} tables.
-  drupal_language_initialize();
-
-}
-
-/**
- * Implements hook_schema().
- */
-function locale_schema() {
-  $schema['languages'] = array(
-    'description' => 'List of all available languages in the system.',
-    'fields' => array(
-      'language' => array(
-        'type' => 'varchar',
-        'length' => 12,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => "Language code, e.g. 'de' or 'en-US'.",
-      ),
-      'name' => array(
-        'type' => 'varchar',
-        'length' => 64,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Language name in English.',
-      ),
-      'native' => array(
-        'type' => 'varchar',
-        'length' => 64,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Native language name.',
-      ),
-      'direction' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Direction of language (Left-to-Right = 0, Right-to-Left = 1).',
-      ),
-      'enabled' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Enabled flag (1 = Enabled, 0 = Disabled).',
-      ),
-      'plurals' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Number of plural indexes in this language.',
-      ),
-      'formula' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Plural formula in PHP code to evaluate to get plural indexes.',
-      ),
-      'domain' => array(
-        'type' => 'varchar',
-        'length' => 128,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Domain to use for this language.',
-      ),
-      'prefix' => array(
-        'type' => 'varchar',
-        'length' => 128,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Path prefix to use for this language.',
-      ),
-      'weight' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Weight, used in lists of languages.',
-      ),
-      'javascript' => array(
-        'type' => 'varchar',
-        'length' => 64,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Location of JavaScript translation file.',
-      ),
-    ),
-    'primary key' => array('language'),
-    'indexes' => array(
-      'list' => array('weight', 'name'),
-    ),
-  );
-
-  $schema['locales_source'] = array(
-    'description' => 'List of English source strings.',
-    'fields' => array(
-      'lid' => array(
-        'type' => 'serial',
-        'not null' => TRUE,
-        'description' => 'Unique identifier of this string.',
-      ),
-      'location' => array(
-        'type' => 'text',
-        'not null' => FALSE,
-        'size' => 'big',
-        'description' => 'Drupal path in case of online discovered translations or file path in case of imported strings.',
-      ),
-      'textgroup' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'default' => 'default',
-        'description' => 'A module defined group of translations, see hook_locale().',
-      ),
-      'source' => array(
-        'type' => 'text',
-        'mysql_type' => 'blob',
-        'not null' => TRUE,
-        'description' => 'The original string in English.',
-      ),
-      'context' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'The context this string applies to.',
-      ),
-      'version' => array(
-        'type' => 'varchar',
-        'length' => 20,
-        'not null' => TRUE,
-        'default' => 'none',
-        'description' => 'Version of Drupal, where the string was last used (for locales optimization).',
-      ),
-    ),
-    'primary key' => array('lid'),
-    'indexes' => array(
-      'source_context' => array(array('source', 30), 'context'),
-    ),
-  );
-
-  $schema['locales_target'] = array(
-    'description' => 'Stores translated versions of strings.',
-    'fields' => array(
-      'lid' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Source string ID. References {locales_source}.lid.',
-      ),
-      'translation' => array(
-        'type' => 'text',
-        'mysql_type' => 'blob',
-        'not null' => TRUE,
-        'description' => 'Translation string value in this language.',
-      ),
-      'language' => array(
-        'type' => 'varchar',
-        'length' => 12,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Language code. References {languages}.language.',
-      ),
-      'plid' => array(
-        'type' => 'int',
-        'not null' => TRUE, // This should be NULL for no referenced string, not zero.
-        'default' => 0,
-        'description' => 'Parent lid (lid of the previous string in the plural chain) in case of plural strings. References {locales_source}.lid.',
-      ),
-      'plural' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Plural index number in case of plural strings.',
-      ),
-    ),
-    'primary key' => array('language', 'lid', 'plural'),
-    'foreign keys' => array(
-      'locales_source' => array(
-        'table' => 'locales_source',
-        'columns' => array('lid' => 'lid'),
-      ),
-    ),
-    'indexes' => array(
-      'lid'      => array('lid'),
-      'plid'     => array('plid'),
-      'plural'   => array('plural'),
-    ),
-  );
-
-  return $schema;
-}
-
diff --git a/modules/locale/locale.module b/modules/locale/locale.module
deleted file mode 100644
index 768fead..0000000
--- a/modules/locale/locale.module
+++ /dev/null
@@ -1,1098 +0,0 @@
-<?php
-
-/**
- * @file
- *   Add language handling functionality and enables the translation of the
- *   user interface to languages other than English.
- *
- *   When enabled, multiple languages can be set up. The site interface
- *   can be displayed in different languages, as well as nodes can have languages
- *   assigned. The setup of languages and translations is completely web based.
- *   Gettext portable object files are supported.
- */
-
-// ---------------------------------------------------------------------------------
-// Hook implementations
-
-/**
- * Implements hook_help().
- */
-function locale_help($path, $arg) {
-  switch ($path) {
-    case 'admin/help#locale':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Locale module allows your Drupal site to be presented in languages other than the default English, and to be multilingual. The Locale module works by maintaining a database of translations, and examining text as it is about to be displayed. When a translation of the text is available in the language to be displayed, the translation is displayed rather than the original text. When a translation is unavailable, the original text is displayed, and then stored for review by a translator. For more information, see the online handbook entry for <a href="@locale">Locale module</a>.', array('@locale' => 'http://drupal.org/documentation/modules/locale/')) . '</p>';
-      $output .= '<h3>' . t('Uses') . '</h3>';
-      $output .= '<dl>';
-      $output .= '<dt>' . t('Translating interface text') . '</dt>';
-      $output .= '<dd>' . t('Translations of text in the Drupal interface may be provided by:');
-      $output .= '<ul>';
-      $output .= '<li>' . t("Translating within your site, using the Locale module's integrated <a href='@translate'>translation interface</a>.", array('@translate' => url('admin/config/regional/translate'))) . '</li>';
-      $output .= '<li>' . t('Importing files from a set of existing translations, known as a translation package. A translation package enables the display of a specific version of Drupal in a specific language, and contains files in the Gettext Portable Object (<em>.po</em>) format. Although not all languages are available for every version of Drupal, translation packages for many languages are available for download from the <a href="@translations">Drupal translations page</a>.', array('@translations' => 'http://localize.drupal.org')) . '</li>';
-      $output .= '<li>' . t("If an existing translation package does not meet your needs, the Gettext Portable Object (<em>.po</em>) files within a package may be modified, or new <em>.po</em> files may be created, using a desktop Gettext editor. The Locale module's <a href='@import'>import</a> feature allows the translated strings from a new or modified <em>.po</em> file to be added to your site. The Locale module's <a href='@export'>export</a> feature generates files from your site's translated strings, that can either be shared with others or edited offline by a Gettext translation editor.", array('@import' => url('admin/config/regional/translate/import'), '@export' => url('admin/config/regional/translate/export'))) . '</li>';
-      $output .= '</ul></dd>';
-      $output .= '<dt>' . t('Configuring a multilingual site') . '</dt>';
-      $output .= '<dd>' . t("Language negotiation allows your site to automatically change language based on the domain or path used for each request. Users may (optionally) select their preferred language on their <em>My account</em> page, and your site can be configured to honor a web browser's preferred language settings. Site content can be translated using the <a href='@content-help'>Content translation module</a>.", array('@content-help' => url('admin/help/translation'))) . '</dd>';
-      $output .= '</dl>';
-      return $output;
-    case 'admin/config/regional/language':
-      $output = '<p>' . t('With multiple languages enabled, interface text can be translated, registered users may select their preferred language, and authors can assign a specific language to content. <a href="@translations">Download contributed translations</a> from Drupal.org.', array('@translations' => 'http://localize.drupal.org')) . '</p>';
-      return $output;
-    case 'admin/config/regional/language/add':
-      return '<p>' . t('Add a language to be supported by your site. If your desired language is not available in the <em>Language name</em> drop-down, click <em>Custom language</em> and provide a language code and other details manually. When providing a language code manually, be sure to enter a standardized language code, since this code may be used by browsers to determine an appropriate display language.') . '</p>';
-    case 'admin/config/regional/language/configure':
-      $output = '<p>' . t("Define how to decide which language is used to display page elements (primarily text provided by Drupal and modules, such as field labels and help text). This decision is made by evaluating a series of detection methods for languages; the first detection method that gets a result will determine which language is used for that type of text. Define the order of evaluation of language detection methods on this page.") . '</p>';
-      return $output;
-    case 'admin/config/regional/language/configure/session':
-      $output = '<p>' . t('Determine the language from a request/session parameter. Example: "http://example.com?language=de" sets language to German based on the use of "de" within the "language" parameter.') . '</p>';
-      return $output;
-    case 'admin/config/regional/translate':
-      $output = '<p>' . t('This page provides an overview of available translatable strings. Drupal displays translatable strings in text groups; modules may define additional text groups containing other translatable strings. Because text groups provide a method of grouping related strings, they are often used to focus translation efforts on specific areas of the Drupal interface.') . '</p>';
-      $output .= '<p>' . t('See the <a href="@languages">Languages page</a> for more information on adding support for additional languages.', array('@languages' => url('admin/config/regional/language'))) . '</p>';
-      return $output;
-    case 'admin/config/regional/translate/import':
-      $output = '<p>' . t('This page imports the translated strings contained in an individual Gettext Portable Object (<em>.po</em>) file. Normally distributed as part of a translation package (each translation package may contain several <em>.po</em> files), a <em>.po</em> file may need to be imported after offline editing in a Gettext translation editor. Importing an individual <em>.po</em> file may be a lengthy process.') . '</p>';
-      $output .= '<p>' . t('Note that the <em>.po</em> files within a translation package are imported automatically (if available) when new modules or themes are enabled, or as new languages are added. Since this page only allows the import of one <em>.po</em> file at a time, it may be simpler to download and extract a translation package into your Drupal installation directory and <a href="@language-add">add the language</a> (which automatically imports all <em>.po</em> files within the package). Translation packages are available for download on the <a href="@translations">Drupal translation page</a>.', array('@language-add' => url('admin/config/regional/language/add'), '@translations' => 'http://localize.drupal.org')) . '</p>';
-      return $output;
-    case 'admin/config/regional/translate/export':
-      return '<p>' . t('This page exports the translated strings used by your site. An export file may be in Gettext Portable Object (<em>.po</em>) form, which includes both the original string and the translation (used to share translations with others), or in Gettext Portable Object Template (<em>.pot</em>) form, which includes the original strings only (used to create new translations with a Gettext translation editor).') . '</p>';
-    case 'admin/config/regional/translate/translate':
-      return '<p>' . t('This page allows a translator to search for specific translated and untranslated strings, and is used when creating or editing translations. (Note: For translation tasks involving many strings, it may be more convenient to <a href="@export">export</a> strings for offline editing in a desktop Gettext translation editor.) Searches may be limited to strings found within a specific text group or in a specific language.', array('@export' => url('admin/config/regional/translate/export'))) . '</p>';
-    case 'admin/structure/block/manage/%/%':
-      if ($arg[4] == 'locale' && $arg[5] == 'language') {
-        return '<p>' . t('This block is only shown if <a href="@languages">at least two languages are enabled</a> and <a href="@configuration">language negotiation</a> is set to <em>URL</em> or <em>Session</em>.', array('@languages' => url('admin/config/regional/language'), '@configuration' => url('admin/config/regional/language/configure'))) . '</p>';
-      }
-      break;
-  }
-}
-
-/**
- * Implements hook_menu().
- */
-function locale_menu() {
-  // Manage languages
-  $items['admin/config/regional/language'] = array(
-    'title' => 'Languages',
-    'description' => 'Configure languages for content and the user interface.',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('locale_languages_overview_form'),
-    'access arguments' => array('administer languages'),
-    'file' => 'locale.admin.inc',
-    'weight' => -10,
-  );
-  $items['admin/config/regional/language/overview'] = array(
-    'title' => 'List',
-    'weight' => 0,
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-  );
-  $items['admin/config/regional/language/add'] = array(
-    'title' => 'Add language',
-    'page callback' => 'locale_languages_add_screen', // two forms concatenated
-    'access arguments' => array('administer languages'),
-    'weight' => 5,
-    'type' => MENU_LOCAL_ACTION,
-    'file' => 'locale.admin.inc',
-  );
-  $items['admin/config/regional/language/configure'] = array(
-    'title' => 'Detection and selection',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('locale_languages_configure_form'),
-    'access arguments' => array('administer languages'),
-    'weight' => 10,
-    'file' => 'locale.admin.inc',
-    'type' => MENU_LOCAL_TASK,
-  );
-  $items['admin/config/regional/language/configure/url'] = array(
-    'title' => 'URL language detection configuration',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('locale_language_providers_url_form'),
-    'access arguments' => array('administer languages'),
-    'file' => 'locale.admin.inc',
-    'type' => MENU_VISIBLE_IN_BREADCRUMB,
-  );
-  $items['admin/config/regional/language/configure/session'] = array(
-    'title' => 'Session language detection configuration',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('locale_language_providers_session_form'),
-    'access arguments' => array('administer languages'),
-    'file' => 'locale.admin.inc',
-    'type' => MENU_VISIBLE_IN_BREADCRUMB,
-  );
-  $items['admin/config/regional/language/edit/%'] = array(
-    'title' => 'Edit language',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('locale_languages_edit_form', 5),
-    'access arguments' => array('administer languages'),
-    'file' => 'locale.admin.inc',
-  );
-  $items['admin/config/regional/language/delete/%'] = array(
-    'title' => 'Confirm',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('locale_languages_delete_form', 5),
-    'access arguments' => array('administer languages'),
-    'file' => 'locale.admin.inc',
-  );
-
-  // Translation functionality
-  $items['admin/config/regional/translate'] = array(
-    'title' => 'Translate interface',
-    'description' => 'Translate the built in interface and optionally other text.',
-    'page callback' => 'locale_translate_overview_screen',
-    'access arguments' => array('translate interface'),
-    'file' => 'locale.admin.inc',
-    'weight' => -5,
-  );
-  $items['admin/config/regional/translate/overview'] = array(
-    'title' => 'Overview',
-    'weight' => 0,
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-  );
-  $items['admin/config/regional/translate/translate'] = array(
-    'title' => 'Translate',
-    'weight' => 10,
-    'type' => MENU_LOCAL_TASK,
-    'page callback' => 'locale_translate_seek_screen', // search results and form concatenated
-    'access arguments' => array('translate interface'),
-    'file' => 'locale.admin.inc',
-  );
-  $items['admin/config/regional/translate/import'] = array(
-    'title' => 'Import',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('locale_translate_import_form'),
-    'access arguments' => array('translate interface'),
-    'weight' => 20,
-    'type' => MENU_LOCAL_TASK,
-    'file' => 'locale.admin.inc',
-  );
-  $items['admin/config/regional/translate/export'] = array(
-    'title' => 'Export',
-    'page callback' => 'locale_translate_export_screen',  // possibly multiple forms concatenated
-    'access arguments' => array('translate interface'),
-    'weight' => 30,
-    'type' => MENU_LOCAL_TASK,
-    'file' => 'locale.admin.inc',
-  );
-  $items['admin/config/regional/translate/edit/%'] = array(
-    'title' => 'Edit string',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('locale_translate_edit_form', 5),
-    'access arguments' => array('translate interface'),
-    'file' => 'locale.admin.inc',
-  );
-  $items['admin/config/regional/translate/delete/%'] = array(
-    'title' => 'Delete string',
-    'page callback' => 'locale_translate_delete_page',
-    'page arguments' => array(5),
-    'access arguments' => array('translate interface'),
-    'file' => 'locale.admin.inc',
-  );
-
-  // Localize date formats.
-  $items['admin/config/regional/date-time/locale'] = array(
-    'title' => 'Localize',
-    'description' => 'Configure date formats for each locale',
-    'page callback' => 'locale_date_format_language_overview_page',
-    'access arguments' => array('administer site configuration'),
-    'type' => MENU_LOCAL_TASK,
-    'weight' => -8,
-    'file' => 'locale.admin.inc',
-  );
-  $items['admin/config/regional/date-time/locale/%/edit'] = array(
-    'title' => 'Localize date formats',
-    'description' => 'Configure date formats for each locale',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('locale_date_format_form', 5),
-    'access arguments' => array('administer site configuration'),
-    'file' => 'locale.admin.inc',
-  );
-  $items['admin/config/regional/date-time/locale/%/reset'] = array(
-    'title' => 'Reset date formats',
-    'description' => 'Reset localized date formats to global defaults',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('locale_date_format_reset_form', 5),
-    'access arguments' => array('administer site configuration'),
-    'file' => 'locale.admin.inc',
-  );
-
-  return $items;
-}
-
-/**
- * Implements hook_init().
- *
- * Initialize date formats according to the user's current locale.
- */
-function locale_init() {
-  global $conf, $language;
-  include_once DRUPAL_ROOT . '/includes/locale.inc';
-
-  // For each date type (e.g. long, short), get the localized date format
-  // for the user's current language and override the default setting for it
-  // in $conf. This should happen on all pages except the date and time formats
-  // settings page, where we want to display the site default and not the
-  // localized version.
-  if (strpos($_GET['q'], 'admin/config/regional/date-time/formats') !== 0) {
-    $languages = array($language->language);
-
-    // Setup appropriate date formats for this locale.
-    $formats = locale_get_localized_date_format($languages);
-    foreach ($formats as $format_type => $format) {
-      $conf[$format_type] = $format;
-    }
-  }
-}
-
-/**
- * Implements hook_permission().
- */
-function locale_permission() {
-  return array(
-    'administer languages' => array(
-      'title' => t('Administer languages'),
-    ),
-    'translate interface' => array(
-      'title' => t('Translate interface texts'),
-      'restrict access' => TRUE,
-    ),
-  );
-}
-
-/**
- * Implements hook_locale().
- */
-function locale_locale($op = 'groups') {
-  switch ($op) {
-    case 'groups':
-      return array('default' => t('Built-in interface'));
-  }
-}
-
-/**
- * Form builder callback to display language selection widget.
- *
- * @ingroup forms
- * @see locale_form_alter()
- */
-function locale_language_selector_form(&$form, &$form_state, $user) {
-  global $language;
-  $languages = language_list('enabled');
-  $languages = $languages[1];
-
-  // If the user is being created, we set the user language to the page language.
-  $user_preferred_language = $user->uid ? user_preferred_language($user) : $language;
-
-  $names = array();
-  foreach ($languages as $langcode => $item) {
-    $name = t($item->name);
-    $names[$langcode] = $name . ($item->native != $name ? ' (' . $item->native . ')' : '');
-  }
-  $form['locale'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Language settings'),
-    '#weight' => 1,
-    '#access' => ($form['#user_category'] == 'account' || ($form['#user_category'] == 'register' && user_access('administer users'))),
-  );
-
-  // Get language negotiation settings.
-  $mode = language_negotiation_get(LANGUAGE_TYPE_INTERFACE) != LANGUAGE_NEGOTIATION_DEFAULT;
-  $form['locale']['language'] = array(
-    '#type' => (count($names) <= 5 ? 'radios' : 'select'),
-    '#title' => t('Language'),
-    '#default_value' => $user_preferred_language->language,
-    '#options' => $names,
-    '#description' => $mode ? t("This account's default language for e-mails, and preferred language for site presentation.") : t("This account's default language for e-mails."),
-  );
-}
-
-/**
- * Implements hook_form_FORM_ID_alter().
- */
-function locale_form_path_admin_form_alter(&$form, &$form_state) {
-  $form['language'] = array(
-    '#type' => 'select',
-    '#title' => t('Language'),
-    '#options' => array(LANGUAGE_NONE => t('All languages')) + locale_language_list('name'),
-    '#default_value' => $form['language']['#value'],
-    '#weight' => -10,
-    '#description' => t('A path alias set for a specific language will always be used when displaying this page in that language, and takes precedence over path aliases set for <em>All languages</em>.'),
-  );
-}
-
-/**
- * Implements hook_form_FORM_ID_alter().
- */
-function locale_form_node_type_form_alter(&$form, &$form_state) {
-  if (isset($form['type'])) {
-    $form['workflow']['language_content_type'] = array(
-      '#type' => 'radios',
-      '#title' => t('Multilingual support'),
-      '#default_value' => variable_get('language_content_type_' . $form['#node_type']->type, 0),
-      '#options' => array(t('Disabled'), t('Enabled')),
-      '#description' => t('Enable multilingual support for this content type. If enabled, a language selection field will be added to the editing form, allowing you to select from one of the <a href="!languages">enabled languages</a>. If disabled, new posts are saved with the default language. Existing content will not be affected by changing this option.', array('!languages' => url('admin/config/regional/language'))),
-    );
-  }
-}
-
-/**
- * Return whether the given content type has multilingual support.
- *
- * @return
- *   True if multilingual support is enabled.
- */
-function locale_multilingual_node_type($type_name) {
-  return (bool) variable_get('language_content_type_' . $type_name, 0);
-}
-
-/**
- * Implements hook_form_alter().
- *
- * Adds language fields to user forms.
- */
-function locale_form_alter(&$form, &$form_state, $form_id) {
-  // Only alter user forms if there is more than one language.
-  if (drupal_multilingual()) {
-    // Display language selector when either creating a user on the admin
-    // interface or editing a user account.
-    if ($form_id == 'user_register_form' || ($form_id == 'user_profile_form' && $form['#user_category'] == 'account')) {
-      locale_language_selector_form($form, $form_state, $form['#user']);
-    }
-  }
-}
-
-/**
- * Implements hook_form_BASE_FORM_ID_alter().
- */
-function locale_form_node_form_alter(&$form, &$form_state) {
-  if (isset($form['#node']->type) && locale_multilingual_node_type($form['#node']->type)) {
-    $form['language'] = array(
-      '#type' => 'select',
-      '#title' => t('Language'),
-      '#default_value' => (isset($form['#node']->language) ? $form['#node']->language : ''),
-      '#options' => array(LANGUAGE_NONE => t('Language neutral')) + locale_language_list('name'),
-    );
-  }
-  // Node type without language selector: assign the default for new nodes
-  elseif (!isset($form['#node']->nid)) {
-    $default = language_default();
-    $form['language'] = array(
-      '#type' => 'value',
-      '#value' => $default->language
-    );
-  }
-  $form['#submit'][] = 'locale_field_node_form_submit';
-}
-
-/**
- * Form submit handler for node_form().
- *
- * This submit handler needs to run before entity_form_submit_build_entity()
- * is invoked by node_form_submit_build_node(), because it alters the values of
- * attached fields. Therefore, it cannot be a hook_node_submit() implementation.
- */
-function locale_field_node_form_submit($form, &$form_state) {
-  locale_field_entity_form_submit('node', $form, $form_state);
-}
-
-/**
- * Implements hook_form_FORM_ID_alter().
- */
-function locale_form_comment_form_alter(&$form, &$form_state, $form_id) {
-  // If a content type has multilingual support we set the content language as
-  // comment language.
-  if ($form['language']['#value'] == LANGUAGE_NONE && locale_multilingual_node_type($form['#node']->type)) {
-    global $language_content;
-    $form['language']['#value'] = $language_content->language;
-    $submit_callback = 'locale_field_comment_form_submit';
-    array_unshift($form['actions']['preview']['#submit'], $submit_callback);
-    array_unshift($form['#submit'], $submit_callback);
-  }
-}
-
-/**
- * Form submit handler for comment_form().
- *
- * This submit handler needs to run before entity_form_submit_build_entity()
- * is invoked by comment_form_submit_build_comment(), because it alters the
- * values of attached fields.
- */
-function locale_field_comment_form_submit($form, &$form_state) {
-  locale_field_entity_form_submit('comment', $form, $form_state);
-}
-
-/**
- * Handles field language on submit for the given entity type.
- *
- * Checks if Locale is registered as a translation handler and handle possible
- * language changes.
- */
-function locale_field_entity_form_submit($entity_type, $form, &$form_state ) {
-  if (field_has_translation_handler($entity_type, 'locale')) {
-    $entity = (object) $form_state['values'];
-    $current_language = entity_language($entity_type, $entity);
-    list(, , $bundle) = entity_extract_ids($entity_type, $entity);
-
-    foreach (field_info_instances($entity_type, $bundle) as $instance) {
-      $field_name = $instance['field_name'];
-      $field = field_info_field($field_name);
-      $previous_language = $form[$field_name]['#language'];
-
-      // Handle a possible language change: new language values are inserted,
-      // previous ones are deleted.
-      if ($field['translatable'] && $previous_language != $current_language) {
-        $form_state['values'][$field_name][$current_language] = $entity->{$field_name}[$previous_language];
-        $form_state['values'][$field_name][$previous_language] = array();
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_theme().
- */
-function locale_theme() {
-  return array(
-    'locale_languages_overview_form' => array(
-      'render element' => 'form',
-    ),
-    'locale_languages_configure_form' => array(
-      'render element' => 'form',
-    ),
-    'locale_date_format_form' => array(
-      'render element' => 'form',
-    ),
-  );
-}
-
-/**
- * Implements hook_field_language_alter().
- */
-function locale_field_language_alter(&$display_language, $context) {
-  // Do not apply core language fallback rules if they are disabled or if Locale
-  // is not registered as a translation handler.
-  if (variable_get('locale_field_language_fallback', TRUE) && field_has_translation_handler($context['entity_type'], 'locale')) {
-    locale_field_language_fallback($display_language, $context['entity'], $context['language']);
-  }
-}
-
-/**
- * Applies language fallback rules to the fields attached to the given entity.
- *
- * Core language fallback rules simply check if fields have a field translation
- * for the requested language code. If so the requested language is returned,
- * otherwise all the fallback candidates are inspected to see if there is a
- * field translation available in another language.
- * By default this is called by locale_field_language_alter(), but this
- * behavior can be disabled by setting the 'locale_field_language_fallback'
- * variable to FALSE.
- *
- * @param $display_language
- *   A reference to an array of language codes keyed by field name.
- * @param $entity
- *   The entity to be displayed.
- * @param $langcode
- *   The language code $entity has to be displayed in.
- */
-function locale_field_language_fallback(&$display_language, $entity, $langcode) {
-  // Lazily init fallback candidates to avoid unnecessary calls.
-  $fallback_candidates = NULL;
-  $field_languages = array();
-
-  foreach ($display_language as $field_name => $field_language) {
-    // If the requested language is defined for the current field use it,
-    // otherwise search for a fallback value among the fallback candidates.
-    if (isset($entity->{$field_name}[$langcode])) {
-      $display_language[$field_name] = $langcode;
-    }
-    elseif (!empty($entity->{$field_name})) {
-      if (!isset($fallback_candidates)) {
-        require_once DRUPAL_ROOT . '/includes/language.inc';
-        $fallback_candidates = language_fallback_get_candidates();
-      }
-      foreach ($fallback_candidates as $fallback_language) {
-        if (isset($entity->{$field_name}[$fallback_language])) {
-          $display_language[$field_name] = $fallback_language;
-          break;
-        }
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_entity_info_alter().
- */
-function locale_entity_info_alter(&$entity_info) {
-  $entity_info['node']['translation']['locale'] = TRUE;
-  if (isset($entity_info['comment'])) {
-    $entity_info['comment']['translation']['locale'] = TRUE;
-  }
-}
-
-/**
- * Implements hook_language_types_info().
- *
- * Defines the three core language types:
- * - Interface language is the only configurable language type in core. It is
- *   used by t() as the default language if none is specified.
- * - Content language is by default non-configurable and inherits the interface
- *   language negotiated value. It is used by the Field API to determine the
- *   display language for fields if no explicit value is specified.
- * - URL language is by default non-configurable and is determined through the
- *   URL language provider or the URL fallback provider if no language can be
- *   detected. It is used by l() as the default language if none is specified.
- */
-function locale_language_types_info() {
-  require_once DRUPAL_ROOT . '/includes/locale.inc';
-  return array(
-    LANGUAGE_TYPE_INTERFACE => array(
-      'name' => t('User interface text'),
-      'description' => t('Order of language detection methods for user interface text. If a translation of user interface text is available in the detected language, it will be displayed.'),
-    ),
-    LANGUAGE_TYPE_CONTENT => array(
-      'name' => t('Content'),
-      'description' => t('Order of language detection methods for content. If a version of content is available in the detected language, it will be displayed.'),
-      'fixed' => array(LOCALE_LANGUAGE_NEGOTIATION_INTERFACE),
-    ),
-    LANGUAGE_TYPE_URL => array(
-      'fixed' => array(LOCALE_LANGUAGE_NEGOTIATION_URL, LOCALE_LANGUAGE_NEGOTIATION_URL_FALLBACK),
-    ),
-  );
-}
-
-/**
- * Implements hook_language_negotiation_info().
- */
-function locale_language_negotiation_info() {
-  $file = 'includes/locale.inc';
-  $providers = array();
-
-  $providers[LOCALE_LANGUAGE_NEGOTIATION_URL] = array(
-    'types' => array(LANGUAGE_TYPE_CONTENT, LANGUAGE_TYPE_INTERFACE, LANGUAGE_TYPE_URL),
-    'callbacks' => array(
-      'language' => 'locale_language_from_url',
-      'switcher' => 'locale_language_switcher_url',
-      'url_rewrite' => 'locale_language_url_rewrite_url',
-    ),
-    'file' => $file,
-    'weight' => -8,
-    'name' => t('URL'),
-    'description' => t('Determine the language from the URL (Path prefix or domain).'),
-    'config' => 'admin/config/regional/language/configure/url',
-  );
-
-  $providers[LOCALE_LANGUAGE_NEGOTIATION_SESSION] = array(
-    'callbacks' => array(
-      'language' => 'locale_language_from_session',
-      'switcher' => 'locale_language_switcher_session',
-      'url_rewrite' => 'locale_language_url_rewrite_session',
-    ),
-    'file' => $file,
-    'weight' => -6,
-    'name' => t('Session'),
-    'description' => t('Determine the language from a request/session parameter.'),
-    'config' => 'admin/config/regional/language/configure/session',
-  );
-
-  $providers[LOCALE_LANGUAGE_NEGOTIATION_USER] = array(
-    'callbacks' => array('language' => 'locale_language_from_user'),
-    'file' => $file,
-    'weight' => -4,
-    'name' => t('User'),
-    'description' => t("Follow the user's language preference."),
-  );
-
-  $providers[LOCALE_LANGUAGE_NEGOTIATION_BROWSER] = array(
-    'callbacks' => array('language' => 'locale_language_from_browser'),
-    'file' => $file,
-    'weight' => -2,
-    'cache' => 0,
-    'name' => t('Browser'),
-    'description' => t("Determine the language from the browser's language settings."),
-  );
-
-  $providers[LOCALE_LANGUAGE_NEGOTIATION_INTERFACE] = array(
-    'types' => array(LANGUAGE_TYPE_CONTENT),
-    'callbacks' => array('language' => 'locale_language_from_interface'),
-    'file' => $file,
-    'weight' => 8,
-    'name' => t('Interface'),
-    'description' => t('Use the detected interface language.'),
-  );
-
-  $providers[LOCALE_LANGUAGE_NEGOTIATION_URL_FALLBACK] = array(
-    'types' => array(LANGUAGE_TYPE_URL),
-    'callbacks' => array('language' => 'locale_language_url_fallback'),
-    'file' => $file,
-    'weight' => 8,
-    'name' => t('URL fallback'),
-    'description' => t('Use an already detected language for URLs if none is found.'),
-  );
-
-  return $providers;
-}
-
-/**
- * Implements hook_modules_enabled().
- */
-function locale_modules_enabled($modules) {
-  include_once DRUPAL_ROOT . '/includes/language.inc';
-  language_types_set();
-  language_negotiation_purge();
-}
-
-/**
- * Implements hook_modules_disabled().
- */
-function locale_modules_disabled($modules) {
-  locale_modules_enabled($modules);
-}
-
-// ---------------------------------------------------------------------------------
-// Locale core functionality
-
-/**
- * Provides interface translation services.
- *
- * This function is called from t() to translate a string if needed.
- *
- * @param $string
- *   A string to look up translation for. If omitted, all the
- *   cached strings will be returned in all languages already
- *   used on the page.
- * @param $context
- *   The context of this string.
- * @param $langcode
- *   Language code to use for the lookup.
- */
-function locale($string = NULL, $context = NULL, $langcode = NULL) {
-  global $language;
-
-  // Use the advanced drupal_static() pattern, since this is called very often.
-  static $drupal_static_fast;
-  if (!isset($drupal_static_fast)) {
-    $drupal_static_fast['locale'] = &drupal_static(__FUNCTION__);
-  }
-  $locale_t = &$drupal_static_fast['locale'];
-
-
-  if (!isset($string)) {
-    // Return all cached strings if no string was specified
-    return $locale_t;
-  }
-
-  $langcode = isset($langcode) ? $langcode : $language->language;
-
-  // Store database cached translations in a static variable. Only build the
-  // cache after $language has been set to avoid an unnecessary cache rebuild.
-  if (!isset($locale_t[$langcode]) && isset($language)) {
-    $locale_t[$langcode] = array();
-    // Disabling the usage of string caching allows a module to watch for
-    // the exact list of strings used on a page. From a performance
-    // perspective that is a really bad idea, so we have no user
-    // interface for this. Be careful when turning this option off!
-    if (variable_get('locale_cache_strings', 1) == 1) {
-      if ($cache = cache_get('locale:' . $langcode, 'cache')) {
-        $locale_t[$langcode] = $cache->data;
-      }
-      elseif (lock_acquire('locale_cache_' . $langcode)) {
-        // Refresh database stored cache of translations for given language.
-        // We only store short strings used in current version, to improve
-        // performance and consume less memory.
-        $result = db_query("SELECT s.source, s.context, t.translation, t.language FROM {locales_source} s LEFT JOIN {locales_target} t ON s.lid = t.lid AND t.language = :language WHERE s.textgroup = 'default' AND s.version = :version AND LENGTH(s.source) < :length", array(':language' => $langcode, ':version' => VERSION, ':length' => variable_get('locale_cache_length', 75)));
-        foreach ($result as $data) {
-          $locale_t[$langcode][$data->context][$data->source] = (empty($data->translation) ? TRUE : $data->translation);
-        }
-        cache_set('locale:' . $langcode, $locale_t[$langcode]);
-        lock_release('locale_cache_' . $langcode);
-      }
-    }
-  }
-
-  // If we have the translation cached, skip checking the database
-  if (!isset($locale_t[$langcode][$context][$string])) {
-
-    // We do not have this translation cached, so get it from the DB.
-    $translation = db_query("SELECT s.lid, t.translation, s.version FROM {locales_source} s LEFT JOIN {locales_target} t ON s.lid = t.lid AND t.language = :language WHERE s.source = :source AND s.context = :context AND s.textgroup = 'default'", array(
-      ':language' => $langcode,
-      ':source' => $string,
-      ':context' => (string) $context,
-    ))->fetchObject();
-    if ($translation) {
-      // We have the source string at least.
-      // Cache translation string or TRUE if no translation exists.
-      $locale_t[$langcode][$context][$string] = (empty($translation->translation) ? TRUE : $translation->translation);
-
-      if ($translation->version != VERSION) {
-        // This is the first use of this string under current Drupal version. Save version
-        // and clear cache, to include the string into caching next time. Saved version is
-        // also a string-history information for later pruning of the tables.
-        db_update('locales_source')
-          ->fields(array('version' => VERSION))
-          ->condition('lid', $translation->lid)
-          ->execute();
-        cache_clear_all('locale:', 'cache', TRUE);
-      }
-    }
-    else {
-      // We don't have the source string, cache this as untranslated.
-      db_merge('locales_source')
-        ->insertFields(array(
-          'location' => request_uri(),
-          'version' => VERSION,
-        ))
-        ->key(array(
-          'source' => $string,
-          'context' => (string) $context,
-          'textgroup' => 'default',
-        ))
-        ->execute();
-      $locale_t[$langcode][$context][$string] = TRUE;
-      // Clear locale cache so this string can be added in a later request.
-      cache_clear_all('locale:', 'cache', TRUE);
-    }
-  }
-
-  return ($locale_t[$langcode][$context][$string] === TRUE ? $string : $locale_t[$langcode][$context][$string]);
-}
-
-/**
- * Reset static variables used by locale().
- */
-function locale_reset() {
-  drupal_static_reset('locale');
-}
-
-/**
- * Returns plural form index for a specific number.
- *
- * The index is computed from the formula of this language.
- *
- * @param $count
- *   Number to return plural for.
- * @param $langcode
- *   Optional language code to translate to a language other than
- *   what is used to display the page.
- *
- * @return
- *   The numeric index of the plural variant to use for this $langcode and
- *   $count combination or -1 if the language was not found or does not have a
- *   plural formula.
- */
-function locale_get_plural($count, $langcode = NULL) {
-  global $language;
-
-  // Used to locally cache the plural formulas for all languages.
-  $plural_formulas = &drupal_static(__FUNCTION__, array());
-
-  // Used to store precomputed plural indexes corresponding to numbers
-  // individually for each language.
-  $plural_indexes = &drupal_static(__FUNCTION__ . ':plurals', array());
-
-  $langcode = $langcode ? $langcode : $language->language;
-
-  if (!isset($plural_indexes[$langcode][$count])) {
-    // Retrieve and statically cache the plural formulas for all languages.
-    if (empty($plural_formulas)) {
-      foreach (language_list() as $installed_language) {
-        $plural_formulas[$installed_language->language] = $installed_language->formula;
-      }
-    }
-    // If there is a plural formula for the language, evaluate it for the given
-    // $count and statically cache the result for the combination of language
-    // and count, since the result will always be identical.
-    if (!empty($plural_formulas[$langcode])) {
-      // $n is used inside the expression in the eval().
-      $n = $count;
-      $plural_indexes[$langcode][$count] = @eval('return intval(' . $plural_formulas[$langcode] . ');');
-    }
-    // In case there is no plural formula for English (no imported translation
-    // for English), use a default formula.
-    elseif ($langcode == 'en') {
-      $plural_indexes[$langcode][$count] = (int) ($count != 1);
-    }
-    // Otherwise, return -1 (unknown).
-    else {
-      $plural_indexes[$langcode][$count] = -1;
-    }
-  }
-  return $plural_indexes[$langcode][$count];
-}
-
-
-/**
- * Returns a language name
- */
-function locale_language_name($lang) {
-  $list = &drupal_static(__FUNCTION__);
-  if (!isset($list)) {
-    $list = locale_language_list();
-  }
-  return ($lang && isset($list[$lang])) ? $list[$lang] : t('All');
-}
-
-/**
- * Returns array of language names
- *
- * @param $field
- *   'name' => names in current language, localized
- *   'native' => native names
- * @param $all
- *   Boolean to return all languages or only enabled ones
- */
-function locale_language_list($field = 'name', $all = FALSE) {
-  if ($all) {
-    $languages = language_list();
-  }
-  else {
-    $languages = language_list('enabled');
-    $languages = $languages[1];
-  }
-  $list = array();
-  foreach ($languages as $language) {
-    $list[$language->language] = ($field == 'name') ? t($language->name) : $language->$field;
-  }
-  return $list;
-}
-
-/**
- * Implements hook_modules_installed().
- */
-function locale_modules_installed($modules) {
-  locale_system_update($modules);
-}
-
-/**
- * Implements hook_themes_enabled().
- *
- * @todo This is technically wrong. We must not import upon enabling, but upon
- *   initial installation. The theme system is missing an installation hook.
- */
-function locale_themes_enabled($themes) {
-  locale_system_update($themes);
-}
-
-/**
- * Imports translations when new modules or themes are installed.
- *
- * This function will either import translation for the component change
- * right away, or start a batch if more files need to be imported.
- *
- * @param $components
- *   An array of component (theme and/or module) names to import
- *   translations for.
- */
-function locale_system_update($components) {
-  include_once DRUPAL_ROOT . '/includes/locale.inc';
-  if ($batch = locale_batch_by_component($components)) {
-    batch_set($batch);
-  }
-}
-
-/**
- * Implements hook_js_alter().
- *
- * This function checks all JavaScript files currently added via drupal_add_js()
- * and invokes parsing if they have not yet been parsed for Drupal.t()
- * and Drupal.formatPlural() calls. Also refreshes the JavaScript translation
- * file if necessary, and adds it to the page.
- */
-function locale_js_alter(&$javascript) {
-  global $language;
-
-  $dir = 'public://' . variable_get('locale_js_directory', 'languages');
-  $parsed = variable_get('javascript_parsed', array());
-  $files = $new_files = FALSE;
-
-  // Require because locale_js_alter() could be called without locale_init().
-  require_once DRUPAL_ROOT . '/includes/locale.inc';
-
-  foreach ($javascript as $item) {
-    if ($item['type'] == 'file') {
-      $files = TRUE;
-      $filepath = $item['data'];
-      if (!in_array($filepath, $parsed)) {
-        // Don't parse our own translations files.
-        if (substr($filepath, 0, strlen($dir)) != $dir) {
-          _locale_parse_js_file($filepath);
-          $parsed[] = $filepath;
-          $new_files = TRUE;
-        }
-      }
-    }
-  }
-
-  // If there are any new source files we parsed, invalidate existing
-  // JavaScript translation files for all languages, adding the refresh
-  // flags into the existing array.
-  if ($new_files) {
-    $parsed += _locale_invalidate_js();
-  }
-
-  // If necessary, rebuild the translation file for the current language.
-  if (!empty($parsed['refresh:' . $language->language])) {
-    // Don't clear the refresh flag on failure, so that another try will
-    // be performed later.
-    if (_locale_rebuild_js()) {
-      unset($parsed['refresh:' . $language->language]);
-    }
-    // Store any changes after refresh was attempted.
-    variable_set('javascript_parsed', $parsed);
-  }
-  // If no refresh was attempted, but we have new source files, we need
-  // to store them too. This occurs if current page is in English.
-  elseif ($new_files) {
-    variable_set('javascript_parsed', $parsed);
-  }
-
-  // Add the translation JavaScript file to the page.
-  if ($files && !empty($language->javascript)) {
-    // Add the translation JavaScript file to the page.
-    $file = $dir . '/' . $language->language . '_' . $language->javascript . '.js';
-    $javascript[$file] = drupal_js_defaults($file);
-  }
-}
-
-/**
- * Implements hook_css_alter().
- *
- * This function checks all CSS files currently added via drupal_add_css() and
- * and checks to see if a related right to left CSS file should be included.
- */
-function locale_css_alter(&$css) {
-  global $language;
-
-  // If the current language is RTL, add the CSS file with the RTL overrides.
-  if ($language->direction == LANGUAGE_RTL) {
-    foreach ($css as $data => $item) {
-      // Only provide RTL overrides for files.
-      if ($item['type'] == 'file') {
-        $rtl_path = str_replace('.css', '-rtl.css', $item['data']);
-        if (file_exists($rtl_path) && !isset($css[$rtl_path])) {
-          // Replicate the same item, but with the RTL path and a little larger
-          // weight so that it appears directly after the original CSS file.
-          $item['data'] = $rtl_path;
-          $item['weight'] += 0.0001;
-          $css[$rtl_path] = $item;
-        }
-      }
-    }
-  }
-}
-
- /**
- * Implement hook_library_alter().
- *
- * Provides the language support for the jQuery UI Date Picker.
- */
-function locale_library_alter(&$libraries, $module) {
-  if ($module == 'system' && isset($libraries['ui.datepicker'])) {
-    global $language;
-    // locale.datepicker.js should be added in the JS_LIBRARY group, so that
-    // this attach behavior will execute early. JS_LIBRARY is the default for
-    // hook_library_info_alter(), thus does not have to be specified explicitly.
-    $datepicker = drupal_get_path('module', 'locale') . '/locale.datepicker.js';
-    $libraries['ui.datepicker']['js'][$datepicker] = array();
-    $libraries['ui.datepicker']['js'][] = array(
-      'data' => array(
-        'jquery' => array(
-          'ui' => array(
-            'datepicker' => array(
-              'isRTL' => $language->direction == LANGUAGE_RTL,
-              'firstDay' => variable_get('date_first_day', 0),
-            ),
-          ),
-        ),
-      ),
-      'type' => 'setting',
-    );
-  }
-}
-
-// ---------------------------------------------------------------------------------
-// Language switcher block
-
-/**
- * Implements hook_block_info().
- */
-function locale_block_info() {
-  include_once DRUPAL_ROOT . '/includes/language.inc';
-  $block = array();
-  $info = language_types_info();
-  foreach (language_types_configurable(FALSE) as $type) {
-    $block[$type] = array(
-      'info' => t('Language switcher (@type)', array('@type' => $info[$type]['name'])),
-      // Not worth caching.
-      'cache' => DRUPAL_NO_CACHE,
-    );
-  }
-  return $block;
-}
-
-/**
- * Implements hook_block_view().
- *
- * Displays a language switcher. Only show if we have at least two languages.
- */
-function locale_block_view($type) {
-  if (drupal_multilingual()) {
-    $path = drupal_is_front_page() ? '<front>' : $_GET['q'];
-    $links = language_negotiation_get_switch_links($type, $path);
-
-    if (isset($links->links)) {
-      drupal_add_css(drupal_get_path('module', 'locale') . '/locale.css');
-      $class = "language-switcher-{$links->provider}";
-      $variables = array('links' => $links->links, 'attributes' => array('class' => array($class)));
-      $block['content'] = theme('links__locale_block', $variables);
-      $block['subject'] = t('Languages');
-      return $block;
-    }
-  }
-}
-
-/**
- * Implements hook_url_outbound_alter().
- *
- * Rewrite outbound URLs with language based prefixes.
- */
-function locale_url_outbound_alter(&$path, &$options, $original_path) {
-  // Only modify internal URLs.
-  if (!$options['external'] && drupal_multilingual()) {
-    static $drupal_static_fast;
-    if (!isset($drupal_static_fast)) {
-      $drupal_static_fast['callbacks'] = &drupal_static(__FUNCTION__);
-    }
-    $callbacks = &$drupal_static_fast['callbacks'];
-
-    if (!isset($callbacks)) {
-      $callbacks = array();
-      include_once DRUPAL_ROOT . '/includes/language.inc';
-
-      foreach (language_types_configurable() as $type) {
-        // Get URL rewriter callbacks only from enabled language providers.
-        $negotiation = variable_get("language_negotiation_$type", array());
-
-        foreach ($negotiation as $id => $provider) {
-          if (isset($provider['callbacks']['url_rewrite'])) {
-            if (isset($provider['file'])) {
-              require_once DRUPAL_ROOT . '/' . $provider['file'];
-            }
-            // Avoid duplicate callback entries.
-            $callbacks[$provider['callbacks']['url_rewrite']] = TRUE;
-          }
-        }
-      }
-
-      $callbacks = array_keys($callbacks);
-    }
-
-    foreach ($callbacks as $callback) {
-      $callback($path, $options);
-    }
-
-    // No language dependent path allowed in this mode.
-    if (empty($callbacks)) {
-      unset($options['language']);
-    }
-  }
-}
diff --git a/modules/locale/tests/locale_test.info b/modules/locale/tests/locale_test.info
deleted file mode 100644
index 3744a9e..0000000
--- a/modules/locale/tests/locale_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Locale Test"
-description = "Support module for the locale layer tests."
-core = 7.x
-package = Testing
-version = VERSION
-hidden = TRUE
diff --git a/modules/locale/tests/locale_test.js b/modules/locale/tests/locale_test.js
deleted file mode 100644
index 0693bca..0000000
--- a/modules/locale/tests/locale_test.js
+++ /dev/null
@@ -1,46 +0,0 @@
-
-Drupal.t("Standard Call t");
-Drupal
-.
-t
-(
-"Whitespace Call t"
-)
-;
-
-Drupal.t('Single Quote t');
-Drupal.t('Single Quote \'Escaped\' t');
-Drupal.t('Single Quote ' + 'Concat ' + 'strings ' + 't');
-
-Drupal.t("Double Quote t");
-Drupal.t("Double Quote \"Escaped\" t");
-Drupal.t("Double Quote " + "Concat " + "strings " + "t");
-
-Drupal.t("Context Unquoted t", {}, {context: "Context string unquoted"});
-Drupal.t("Context Single Quoted t", {}, {'context': "Context string single quoted"});
-Drupal.t("Context Double Quoted t", {}, {"context": "Context string double quoted"});
-
-Drupal.t("Context !key Args t", {'!key': 'value'}, {context: "Context string"});
-
-Drupal.formatPlural(1, "Standard Call plural", "Standard Call @count plural");
-Drupal
-.
-formatPlural
-(
-1,
-"Whitespace Call plural",
-"Whitespace Call @count plural"
-)
-;
-
-Drupal.formatPlural(1, 'Single Quote plural', 'Single Quote @count plural');
-Drupal.formatPlural(1, 'Single Quote \'Escaped\' plural', 'Single Quote \'Escaped\' @count plural');
-
-Drupal.formatPlural(1, "Double Quote plural", "Double Quote @count plural");
-Drupal.formatPlural(1, "Double Quote \"Escaped\" plural", "Double Quote \"Escaped\" @count plural");
-
-Drupal.formatPlural(1, "Context Unquoted plural", "Context Unquoted @count plural", {}, {context: "Context string unquoted"});
-Drupal.formatPlural(1, "Context Single Quoted plural", "Context Single Quoted @count plural", {}, {'context': "Context string single quoted"});
-Drupal.formatPlural(1, "Context Double Quoted plural", "Context Double Quoted @count plural", {}, {"context": "Context string double quoted"});
-
-Drupal.formatPlural(1, "Context !key Args plural", "Context !key Args @count plural", {'!key': 'value'}, {context: "Context string"});
diff --git a/modules/locale/tests/locale_test.module b/modules/locale/tests/locale_test.module
deleted file mode 100644
index 64f4aed..0000000
--- a/modules/locale/tests/locale_test.module
+++ /dev/null
@@ -1,242 +0,0 @@
-<?php
-
-/**
- * @file
- * Mock module for locale layer tests.
- */
-
-/**
- * Implements hook_locale().
- */
-function locale_test_locale($op = 'groups') {
-  switch ($op) {
-    case 'groups':
-      return array('custom' => t('Custom'));
-  }
-}
-
-/**
- * Implements hook_boot().
- *
- * For testing domain language negotiation, we fake it by setting
- * the HTTP_HOST here
- */
-function locale_test_boot() {
-  if (variable_get('locale_test_domain')) {
-    $_SERVER['HTTP_HOST'] = variable_get('locale_test_domain');
-  }
-}
-
-/**
- * Implements hook_init().
- */
-function locale_test_init() {
-  locale_test_store_language_negotiation();
-  if (isset($GLOBALS['language']) && isset($GLOBALS['language']->provider)) {
-    drupal_set_message(t('Language negotiation provider: @name', array('@name' => $GLOBALS['language']->provider)));
-  }
-}
-
-/**
- * Implements hook_language_types_info().
- */
-function locale_test_language_types_info() {
-  if (variable_get('locale_test_language_types', FALSE)) {
-    return array(
-      'test_language_type' => array(
-        'name' => t('Test'),
-        'description' => t('A test language type.'),
-      ),
-      'fixed_test_language_type' => array(
-        'fixed' => array('test_language_provider'),
-      ),
-    );
-  }
-}
-
-/**
- * Implements hook_menu().
- *
- * @return array
- */
-function locale_test_menu() {
-  $items = array();
-  $items['locale_test_plural_format_page'] = array(
-    'page callback' => 'locale_test_plural_format_page',
-    'access callback' => TRUE,
-    'type' => MENU_CALLBACK,
-  );
-
-  return $items;
-}
-
-/**
- * Implements hook_language_types_info_alter().
- */
-function locale_test_language_types_info_alter(array &$language_types) {
-  if (variable_get('locale_test_content_language_type', FALSE)) {
-    unset($language_types[LANGUAGE_TYPE_CONTENT]['fixed']);
-  }
-}
-
-/**
- * Implements hook_language_negotiation_info().
- */
-function locale_test_language_negotiation_info() {
-  if (variable_get('locale_test_language_negotiation_info', FALSE)) {
-    $info = array(
-      'callbacks' => array(
-        'language' => 'locale_test_language_provider',
-      ),
-      'file' => drupal_get_path('module', 'locale_test') .'/locale_test.module',
-      'weight' => -10,
-      'description' => t('This is a test language provider.'),
-    );
-
-    return array(
-      'test_language_provider' => array(
-        'name' => t('Test'),
-        'types' => array(LANGUAGE_TYPE_CONTENT, 'test_language_type', 'fixed_test_language_type'),
-      ) + $info,
-      'test_language_provider_ts' => array(
-        'name' => t('Type-specific test'),
-        'types' => array('test_language_type'),
-      ) + $info,
-    );
-  }
-}
-
-/**
- * Implements hook_language_negotiation_info_alter().
- */
-function locale_test_language_negotiation_info_alter(array &$language_providers) {
-  if (variable_get('locale_test_language_negotiation_info_alter', FALSE)) {
-    unset($language_providers[LOCALE_LANGUAGE_NEGOTIATION_INTERFACE]);
-  }
-}
-
-/**
- * Store the last negotiated languages.
- */
-function locale_test_store_language_negotiation() {
-  $last = array();
-  foreach (language_types() as $type) {
-    $last[$type] = $GLOBALS[$type]->language;
-  }
-  variable_set('locale_test_language_negotiation_last', $last);
-}
-
-/**
- * Test language provider.
- */
-function locale_test_language_provider($languages) {
-  return 'it';
-}
-
-/**
- * Returns markup for locale_get_plural testing.
- *
- * @return array
- */
-function locale_test_plural_format_page() {
-  $tests = _locale_test_plural_format_tests();
-  $result = array();
-  foreach ($tests as $test) {
-    $string_param = array(
-      '@lang' => $test['language'],
-      '@locale_get_plural' => locale_get_plural($test['count'], $test['language'])
-    );
-    $result[] = array(
-      '#prefix' => '<br/>',
-      '#markup' => format_string('Language: @lang, locale_get_plural: @locale_get_plural.', $string_param),
-    );
-  }
-  return $result;
-}
-
-/**
- * Helper function with list of test cases
- *
- * @return array
- */
-function _locale_test_plural_format_tests() {
-  return array(
-    // Test data for English (no formula present).
-    array(
-      'count' => 1,
-      'language' => 'en',
-      'expected-result' => 0,
-    ),
-    array(
-      'count' => 0,
-      'language' => 'en',
-      'expected-result' => 1,
-    ),
-    array(
-      'count' => 5,
-      'language' => 'en',
-      'expected-result' => 1,
-    ),
-
-    // Test data for French (simpler formula).
-    array(
-      'count' => 1,
-      'language' => 'fr',
-      'expected-result' => 0,
-    ),
-    array(
-      'count' => 0,
-      'language' => 'fr',
-      'expected-result' => 1,
-    ),
-    array(
-      'count' => 5,
-      'language' => 'fr',
-      'expected-result' => 1,
-    ),
-
-    // Test data for Croatian (more complex formula).
-    array(
-      'count' => 1,
-      'language' => 'hr',
-      'expected-result' => 0,
-    ),
-    array(
-      'count' => 21,
-      'language' => 'hr',
-      'expected-result' => 0,
-    ),
-    array(
-      'count' => 0,
-      'language' => 'hr',
-      'expected-result' => 2,
-    ),
-    array(
-      'count' => 2,
-      'language' => 'hr',
-      'expected-result' => 1,
-    ),
-    array(
-      'count' => 8,
-      'language' => 'hr',
-      'expected-result' => 2,
-    ),
-
-    // Test data for Hungarian (nonexistent language).
-    array(
-      'count' => 1,
-      'language' => 'hu',
-      'expected-result' => -1,
-    ),
-    array(
-      'count' => 21,
-      'language' => 'hu',
-      'expected-result' => -1,
-    ),
-    array(
-      'count' => 0,
-      'language' => 'hu',
-      'expected-result' => -1,
-    ),
-  );
-}
diff --git a/modules/locale/tests/translations/test.xx.po b/modules/locale/tests/translations/test.xx.po
deleted file mode 100644
index 659a6e3..0000000
--- a/modules/locale/tests/translations/test.xx.po
+++ /dev/null
@@ -1,28 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: Drupal 7\\n"
-"MIME-Version: 1.0\\n"
-"Content-Type: text/plain; charset=UTF-8\\n"
-"Content-Transfer-Encoding: 8bit\\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\\n"
-
-msgid "Monday"
-msgstr "lundi"
-
-msgid "Tuesday"
-msgstr "mardi"
-
-msgid "Wednesday"
-msgstr "mercredi"
-
-msgid "Thursday"
-msgstr "jeudi"
-
-msgid "Friday"
-msgstr "vendredi"
-
-msgid "Saturday"
-msgstr "samedi"
-
-msgid "Sunday"
-msgstr "dimanche"
diff --git a/modules/menu/menu.admin.js b/modules/menu/menu.admin.js
deleted file mode 100644
index 4fa094e..0000000
--- a/modules/menu/menu.admin.js
+++ /dev/null
@@ -1,46 +0,0 @@
-(function ($) {
-
-Drupal.behaviors.menuChangeParentItems = {
-  attach: function (context, settings) {
-    $('fieldset#edit-menu input').each(function () {
-      $(this).change(function () {
-        // Update list of available parent menu items.
-        Drupal.menu_update_parent_list();
-      });
-    });
-  }
-};
-
-/**
- * Function to set the options of the menu parent item dropdown.
- */
-Drupal.menu_update_parent_list = function () {
-  var values = [];
-
-  $('input:checked', $('fieldset#edit-menu')).each(function () {
-    // Get the names of all checked menus.
-    values.push(Drupal.checkPlain($.trim($(this).val())));
-  });
-
-  var url = Drupal.settings.basePath + 'admin/structure/menu/parents';
-  $.ajax({
-    url: location.protocol + '//' + location.host + url,
-    type: 'POST',
-    data: {'menus[]' : values},
-    dataType: 'json',
-    success: function (options) {
-      // Save key of last selected element.
-      var selected = $('fieldset#edit-menu #edit-menu-parent :selected').val();
-      // Remove all exisiting options from dropdown.
-      $('fieldset#edit-menu #edit-menu-parent').children().remove();
-      // Add new options to dropdown.
-      jQuery.each(options, function(index, value) {
-        $('fieldset#edit-menu #edit-menu-parent').append(
-          $('<option ' + (index == selected ? ' selected="selected"' : '') + '></option>').val(index).text(value)
-        );
-      });
-    }
-  });
-};
-
-})(jQuery);
diff --git a/modules/menu/menu.api.php b/modules/menu/menu.api.php
deleted file mode 100644
index 22d93ef..0000000
--- a/modules/menu/menu.api.php
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php
-
-/**
- * @file
- * Hooks provided by the Menu module.
- */
-
-/**
- * @addtogroup hooks
- * @{
- */
-
-/**
- * Respond to a custom menu creation.
- *
- * This hook is used to notify modules that a custom menu has been created.
- * Contributed modules may use the information to perform actions based on the
- * information entered into the menu system.
- *
- * @param $menu
- *   An array representing a custom menu:
- *   - menu_name: The unique name of the custom menu.
- *   - title: The human readable menu title.
- *   - description: The custom menu description.
- *
- * @see hook_menu_update()
- * @see hook_menu_delete()
- */
-function hook_menu_insert($menu) {
-  // For example, we track available menus in a variable.
-  $my_menus = variable_get('my_module_menus', array());
-  $my_menus[$menu['menu_name']] = $menu['menu_name'];
-  variable_set('my_module_menus', $my_menus);
-}
-
-/**
- * Respond to a custom menu update.
- *
- * This hook is used to notify modules that a custom menu has been updated.
- * Contributed modules may use the information to perform actions based on the
- * information entered into the menu system.
- *
- * @param $menu
- *   An array representing a custom menu:
- *   - menu_name: The unique name of the custom menu.
- *   - title: The human readable menu title.
- *   - description: The custom menu description.
- *   - old_name: The current 'menu_name'. Note that internal menu names cannot
- *     be changed after initial creation.
- *
- * @see hook_menu_insert()
- * @see hook_menu_delete()
- */
-function hook_menu_update($menu) {
-  // For example, we track available menus in a variable.
-  $my_menus = variable_get('my_module_menus', array());
-  $my_menus[$menu['menu_name']] = $menu['menu_name'];
-  variable_set('my_module_menus', $my_menus);
-}
-
-/**
- * Respond to a custom menu deletion.
- *
- * This hook is used to notify modules that a custom menu along with all links
- * contained in it (if any) has been deleted. Contributed modules may use the
- * information to perform actions based on the information entered into the menu
- * system.
- *
- * @param $menu
- *   An array representing a custom menu:
- *   - menu_name: The unique name of the custom menu.
- *   - title: The human readable menu title.
- *   - description: The custom menu description.
- *
- * @see hook_menu_insert()
- * @see hook_menu_update()
- */
-function hook_menu_delete($menu) {
-  // Delete the record from our variable.
-  $my_menus = variable_get('my_module_menus', array());
-  unset($my_menus[$menu['menu_name']]);
-  variable_set('my_module_menus', $my_menus);
-}
-
-/**
- * @} End of "addtogroup hooks".
- */
diff --git a/modules/menu/menu.css b/modules/menu/menu.css
deleted file mode 100644
index 96f861a..0000000
--- a/modules/menu/menu.css
+++ /dev/null
@@ -1,12 +0,0 @@
-
-.menu-operations {
-  width: 100px;
-}
-
-.menu-enabled {
-  width: 70px;
-}
-
-.menu-enabled input {
-  margin-left:25px;
-}
diff --git a/modules/menu/menu.info b/modules/menu/menu.info
deleted file mode 100644
index 2219f69..0000000
--- a/modules/menu/menu.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Menu
-description = Allows administrators to customize the site navigation menu.
-package = Core
-version = VERSION
-core = 7.x
-files[] = menu.test
-configure = admin/structure/menu
diff --git a/modules/menu/menu.install b/modules/menu/menu.install
deleted file mode 100644
index 346edf9..0000000
--- a/modules/menu/menu.install
+++ /dev/null
@@ -1,210 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the menu module.
- */
-
-/**
- * Implements hook_schema().
- */
-function menu_schema() {
-  $schema['menu_custom'] = array(
-    'description' => 'Holds definitions for top-level custom menus (for example, Main menu).',
-    'fields' => array(
-      'menu_name' => array(
-        'type' => 'varchar',
-        'length' => 32,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Primary Key: Unique key for menu. This is used as a block delta so length is 32.',
-      ),
-      'title' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Menu title; displayed at top of block.',
-        'translatable' => TRUE,
-      ),
-      'description' => array(
-        'type' => 'text',
-        'not null' => FALSE,
-        'description' => 'Menu description.',
-        'translatable' => TRUE,
-      ),
-    ),
-    'primary key' => array('menu_name'),
-  );
-
-  return $schema;
-}
-
-/**
- * Implements hook_install().
- */
-function menu_install() {
-  $system_menus = menu_list_system_menus();
-  $t = get_t();
-  $descriptions = array(
-    'navigation' => $t('The <em>Navigation</em> menu contains links intended for site visitors. Links are added to the <em>Navigation</em> menu automatically by some modules.'),
-    'user-menu' => $t("The <em>User</em> menu contains links related to the user's account, as well as the 'Log out' link."),
-    'management' => $t('The <em>Management</em> menu contains links for administrative tasks.'),
-    'main-menu' => $t('The <em>Main</em> menu is used on many sites to show the major sections of the site, often in a top navigation bar.'),
-  );
-  foreach ($system_menus as $menu_name => $title) {
-    $menu = array(
-      'menu_name' => $menu_name,
-      'title' => $t($title),
-      'description' => $descriptions[$menu_name],
-    );
-    menu_save($menu);
-  }
-}
-
-/**
- * Implements hook_uninstall().
- */
-function menu_uninstall() {
-  menu_rebuild();
-}
-
-/**
- * @addtogroup updates-7.x-extra
- * @{
- */
-
-/**
- * Migrate the "Default menu for content" setting to individual node types.
- */
-function menu_update_7000() {
-  // Act only on sites originally on Drupal 6 that have a custom "Default menu
-  // for content" setting.
-  $default_node_menu = variable_get('menu_default_node_menu');
-  if (isset($default_node_menu)) {
-    // Remove variable no longer used in Drupal 7.
-    variable_del('menu_default_node_menu');
-
-    // Make sure the menu chosen as the default still exists.
-    $defined_menus = db_query('SELECT * FROM {menu_custom}')->fetchAllAssoc('menu_name', PDO::FETCH_ASSOC);
-    // If the menu does not exist, do nothing; nodes will use the default D7
-    // node menu settings.
-    if (!isset($defined_menus[$default_node_menu])) {
-      return;
-    }
-
-    // Update the menu settings for each node type.
-    foreach (_update_7000_node_get_types() as $type => $type_object) {
-      $type_menus = variable_get('menu_options_' . $type);
-      // If the site already has a custom menu setting for this node type (set
-      // on the initial upgrade to Drupal 7.0), don't override it.
-      if (!isset($type_menus)) {
-        // Set up this node type so that the Drupal 6 "Default menu for content"
-        // is still available in the "Menu settings" section.
-        variable_set('menu_options_' . $type, array($default_node_menu));
-        variable_set('menu_parent_' . $type, $default_node_menu . ':0');
-      }
-    }
-  }
-}
-
-/**
- * Rename "Primary Links" and "Secondary Links" to their Drupal 7 equivalents.
- */
-function menu_update_7001() {
-  // Migrate D6 menu_primary_links_source to D7 menu_main_links_source (without
-  // renaming).
-  if (variable_get('menu_primary_links_source') !== NULL) {
-    variable_set('menu_main_links_source', variable_get('menu_primary_links_source'));
-    variable_del('menu_primary_links_source');
-  }
-
-  // Rename each menu, and any settings that refer to the old menu name.
-  // - "Primary Links" has become system menu "Main menu".
-  // - "Secondary Links" has become a new custom menu "Secondary menu".
-  $rename = array(
-    'primary-links' => array('main-menu', 'Main menu'),
-    'secondary-links' => array('secondary-menu', 'Secondary menu'),
-  );
-  foreach ($rename as $from_menu => $to) {
-    list($to_menu, $to_title) = $to;
-    // Rename the menu, and links in the menu.
-    db_update('menu_custom')
-      ->fields(array('menu_name' => $to_menu, 'title' => $to_title))
-      ->condition('menu_name', $from_menu)
-      ->execute();
-    db_update('menu_links')
-      ->fields(array('menu_name' => $to_menu))
-      ->condition('menu_name', $from_menu)
-      ->execute();
-
-    // Update any content type that used this menu as a default menu.
-    // Note: these variables may be unset/default, in which case we leave them
-    // alone. See menu_update_7000()
-    foreach (_update_7000_node_get_types() as $type => $type_object) {
-      $menu_options = variable_get('menu_options_' . $type);
-      if ($menu_options !== NULL) {
-        variable_set('menu_options_' . $type, str_replace($from_menu, $to_menu, $menu_options));
-        if (variable_get('menu_parent_' . $type) == $from_menu . ':0') {
-          variable_set('menu_parent_' . $type, $to_menu . ':0');
-        }
-      }
-    }
-
-    // Update the "source for primary links" and "source for secondary links" to
-    // follow.
-    if (variable_get('menu_main_links_source') == $from_menu) {
-      variable_set('menu_main_links_source', $to_menu);
-    }
-    if (variable_get('menu_secondary_links_source') == $from_menu) {
-      variable_set('menu_secondary_links_source', $to_menu);
-    }
-  }
-}
-
-/**
- * Rename the primary/secondary menu blocks to match previously renamed menus.
- */
-function menu_update_7002(&$sandbox) {
-  // Check for the presence of old or new table names.
-  if (db_table_exists('blocks') || db_table_exists('block')) {
-    $renamed_deltas = array(
-      'menu' => array(
-        'primary-links' => 'main-menu',
-        'secondary-links' => 'secondary-menu',
-      ),
-    );
-
-    $moved_deltas = array(
-      'menu' => array('main-menu' => 'system'),
-    );
-
-    update_fix_d7_block_deltas($sandbox, $renamed_deltas, $moved_deltas);
-  }
-}
-/**
- * Add missing custom menus to active menus list.
- */
-function menu_update_7003(&$sandbox) {
-  // Make sure all custom menus are present in the active menus variable so that
-  // their items may appear in the active trail.
-  // @see menu_set_active_menu_names()
-  $active_menus = variable_get('menu_default_active_menus', array_keys(menu_list_system_menus()));
-  $update_variable = FALSE;
-  foreach (menu_get_names() as $menu_name) {
-    if (!in_array($menu_name, $active_menus) && (strpos($menu_name, 'menu-') === 0)) {
-      $active_menus[] = $menu_name;
-      $update_variable = TRUE;
-    }
-  }
-  if ($update_variable) {
-    variable_set('menu_default_active_menus', $active_menus);
-  }
-  // Clear the menu cache.
-  cache_clear_all(NULL, 'cache_menu');
-}
-
-/**
- * @} End of "addtogroup updates-7.x-extra".
- * The next series of updates should start at 8000.
- */
diff --git a/modules/menu/menu.js b/modules/menu/menu.js
deleted file mode 100644
index ff4ef1e..0000000
--- a/modules/menu/menu.js
+++ /dev/null
@@ -1,65 +0,0 @@
-(function ($) {
-
-Drupal.behaviors.menuFieldsetSummaries = {
-  attach: function (context) {
-    $('fieldset.menu-link-form', context).drupalSetSummary(function (context) {
-      if ($('.form-item-menu-enabled input', context).is(':checked')) {
-        return Drupal.checkPlain($('.form-item-menu-link-title input', context).val());
-      }
-      else {
-        return Drupal.t('Not in menu');
-      }
-    });
-  }
-};
-
-/**
- * Automatically fill in a menu link title, if possible.
- */
-Drupal.behaviors.menuLinkAutomaticTitle = {
-  attach: function (context) {
-    $('fieldset.menu-link-form', context).each(function () {
-      // Try to find menu settings widget elements as well as a 'title' field in
-      // the form, but play nicely with user permissions and form alterations.
-      var $checkbox = $('.form-item-menu-enabled input', this);
-      var $link_title = $('.form-item-menu-link-title input', context);
-      var $title = $(this).closest('form').find('.form-item-title input');
-      // Bail out if we do not have all required fields.
-      if (!($checkbox.length && $link_title.length && $title.length)) {
-        return;
-      }
-      // If there is a link title already, mark it as overridden. The user expects
-      // that toggling the checkbox twice will take over the node's title.
-      if ($checkbox.is(':checked') && $link_title.val().length) {
-        $link_title.data('menuLinkAutomaticTitleOveridden', true);
-      }
-      // Whenever the value is changed manually, disable this behavior.
-      $link_title.keyup(function () {
-        $link_title.data('menuLinkAutomaticTitleOveridden', true);
-      });
-      // Global trigger on checkbox (do not fill-in a value when disabled).
-      $checkbox.change(function () {
-        if ($checkbox.is(':checked')) {
-          if (!$link_title.data('menuLinkAutomaticTitleOveridden')) {
-            $link_title.val($title.val());
-          }
-        }
-        else {
-          $link_title.val('');
-          $link_title.removeData('menuLinkAutomaticTitleOveridden');
-        }
-        $checkbox.closest('fieldset.vertical-tabs-pane').trigger('summaryUpdated');
-        $checkbox.trigger('formUpdated');
-      });
-      // Take over any title change.
-      $title.keyup(function () {
-        if (!$link_title.data('menuLinkAutomaticTitleOveridden') && $checkbox.is(':checked')) {
-          $link_title.val($title.val());
-          $link_title.val($title.val()).trigger('formUpdated');
-        }
-      });
-    });
-  }
-};
-
-})(jQuery);
diff --git a/modules/menu/menu.module b/modules/menu/menu.module
deleted file mode 100644
index 6444791..0000000
--- a/modules/menu/menu.module
+++ /dev/null
@@ -1,794 +0,0 @@
-<?php
-
-/**
- * @file
- * Allows administrators to customize the site's navigation menus.
- *
- * A menu (in this context) is a hierarchical collection of links, generally
- * used for navigation. This is not to be confused with the
- * @link menu Menu system @endlink of menu.inc and hook_menu(), which defines
- * page routing requests for Drupal, and also allows the defined page routing
- * URLs to be added to the main site navigation menu.
- */
-
-/**
- * Maximum length of menu name as entered by the user. Database length is 32
- * and we add a menu- prefix.
- */
-define('MENU_MAX_MENU_NAME_LENGTH_UI', 27);
-
-/**
- * Implements hook_help().
- */
-function menu_help($path, $arg) {
-  switch ($path) {
-    case 'admin/help#menu':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Menu module provides an interface for managing menus. A menu is a hierarchical collection of links, which can be within or external to the site, generally used for navigation. Each menu is rendered in a block that can be enabled and positioned through the <a href="@blocks">Blocks administration page</a>. You can view and manage menus on the <a href="@menus">Menus administration page</a>. For more information, see the online handbook entry for the <a href="@menu">Menu module</a>.', array('@blocks' => url('admin/structure/block'), '@menus' => url('admin/structure/menu'), '@menu' => 'http://drupal.org/documentation/modules/menu/')) . '</p>';
-      $output .= '<h3>' . t('Uses') . '</h3>';
-      $output .= '<dl>';
-      $output .= '<dt>' . t('Managing menus') . '</dt>';
-      $output .= '<dd>' . t('Users with the <em>Administer menus and menu items</em> permission can add, edit and delete custom menus on the <a href="@menu">Menus administration page</a>. Custom menus can be special site menus, menus of external links, or any combination of internal and external links. You may create an unlimited number of additional menus, each of which will automatically have an associated block. By selecting <em>list links</em>, you can add, edit, or delete links for a given menu. The links listing page provides a drag-and-drop interface for controlling the order of links, and creating a hierarchy within the menu.', array('@menu' => url('admin/structure/menu'), '@add-menu' => url('admin/structure/menu/add'))) . '</dd>';
-      $output .= '<dt>' . t('Displaying menus') . '</dt>';
-      $output .= '<dd>' . t('After you have created a menu, you must enable and position the associated block on the <a href="@blocks">Blocks administration page</a>.', array('@blocks' => url('admin/structure/block'))) . '</dd>';
-      $output .= '</dl>';
-      return $output;
-    case 'admin/structure/menu/add':
-      return '<p>' . t('You can enable the newly-created block for this menu on the <a href="@blocks">Blocks administration page</a>.', array('@blocks' => url('admin/structure/block'))) . '</p>';
-  }
-  if ($path == 'admin/structure/menu' && module_exists('block')) {
-    return '<p>' . t('Each menu has a corresponding block that is managed on the <a href="@blocks">Blocks administration page</a>.', array('@blocks' => url('admin/structure/block'))) . '</p>';
-  }
-}
-
-/**
- * Implements hook_permission().
- */
-function menu_permission() {
-  return array(
-    'administer menu' => array(
-      'title' => t('Administer menus and menu items'),
-    ),
-  );
-}
-
-/**
- * Implements hook_menu().
- */
-function menu_menu() {
-  $items['admin/structure/menu'] = array(
-    'title' => 'Menus',
-    'description' => 'Add new menus to your site, edit existing menus, and rename and reorganize menu links.',
-    'page callback' => 'menu_overview_page',
-    'access callback' => 'user_access',
-    'access arguments' => array('administer menu'),
-    'file' => 'menu.admin.inc',
-  );
-  $items['admin/structure/menu/parents'] = array(
-    'title' => 'Parent menu items',
-    'page callback' => 'menu_parent_options_js',
-    'type' => MENU_CALLBACK,
-    'access arguments' => array(TRUE),
-  );
-  $items['admin/structure/menu/list'] = array(
-    'title' => 'List menus',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-    'weight' => -10,
-  );
-  $items['admin/structure/menu/add'] = array(
-    'title' => 'Add menu',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('menu_edit_menu', 'add'),
-    'access arguments' => array('administer menu'),
-    'type' => MENU_LOCAL_ACTION,
-    'file' => 'menu.admin.inc',
-  );
-  $items['admin/structure/menu/settings'] = array(
-    'title' => 'Settings',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('menu_configure'),
-    'access arguments' => array('administer menu'),
-    'type' => MENU_LOCAL_TASK,
-    'weight' => 5,
-    'file' => 'menu.admin.inc',
-  );
-  $items['admin/structure/menu/manage/%menu'] = array(
-    'title' => 'Customize menu',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('menu_overview_form', 4),
-    'title callback' => 'menu_overview_title',
-    'title arguments' => array(4),
-    'access arguments' => array('administer menu'),
-    'file' => 'menu.admin.inc',
-  );
-  $items['admin/structure/menu/manage/%menu/list'] = array(
-    'title' => 'List links',
-    'weight' => -10,
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-    'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
-  );
-  $items['admin/structure/menu/manage/%menu/add'] = array(
-    'title' => 'Add link',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('menu_edit_item', 'add', NULL, 4),
-    'access arguments' => array('administer menu'),
-    'type' => MENU_LOCAL_ACTION,
-    'file' => 'menu.admin.inc',
-  );
-  $items['admin/structure/menu/manage/%menu/edit'] = array(
-    'title' => 'Edit menu',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('menu_edit_menu', 'edit', 4),
-    'access arguments' => array('administer menu'),
-    'type' => MENU_LOCAL_TASK,
-    'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
-    'file' => 'menu.admin.inc',
-  );
-  $items['admin/structure/menu/manage/%menu/delete'] = array(
-    'title' => 'Delete menu',
-    'page callback' => 'menu_delete_menu_page',
-    'page arguments' => array(4),
-    'access arguments' => array('administer menu'),
-    'file' => 'menu.admin.inc',
-  );
-  $items['admin/structure/menu/item/%menu_link/edit'] = array(
-    'title' => 'Edit menu link',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('menu_edit_item', 'edit', 4, NULL),
-    'access arguments' => array('administer menu'),
-    'file' => 'menu.admin.inc',
-  );
-  $items['admin/structure/menu/item/%menu_link/reset'] = array(
-    'title' => 'Reset menu link',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('menu_reset_item_confirm', 4),
-    'access arguments' => array('administer menu'),
-    'file' => 'menu.admin.inc',
-  );
-  $items['admin/structure/menu/item/%menu_link/delete'] = array(
-    'title' => 'Delete menu link',
-    'page callback' => 'menu_item_delete_page',
-    'page arguments' => array(4),
-    'access arguments' => array('administer menu'),
-    'file' => 'menu.admin.inc',
-  );
-  return $items;
-}
-
-/**
- * Implements hook_theme().
- */
-function menu_theme() {
-  return array(
-    'menu_overview_form' => array(
-      'file' => 'menu.admin.inc',
-      'render element' => 'form',
-    ),
-    'menu_admin_overview' => array(
-      'file' => 'menu.admin.inc',
-      'variables' => array('title' => NULL, 'name' => NULL, 'description' => NULL),
-    ),
-  );
-}
-
-/**
- * Implements hook_enable().
- *
- * Add a link for each custom menu.
- */
-function menu_enable() {
-  menu_rebuild();
-  $base_link = db_query("SELECT mlid AS plid, menu_name FROM {menu_links} WHERE link_path = 'admin/structure/menu' AND module = 'system'")->fetchAssoc();
-  $base_link['router_path'] = 'admin/structure/menu/manage/%';
-  $base_link['module'] = 'menu';
-  $result = db_query("SELECT * FROM {menu_custom}", array(), array('fetch' => PDO::FETCH_ASSOC));
-  foreach ($result as $menu) {
-    // $link is passed by reference to menu_link_save(), so we make a copy of $base_link.
-    $link = $base_link;
-    $link['mlid'] = 0;
-    $link['link_title'] = $menu['title'];
-    $link['link_path'] = 'admin/structure/menu/manage/' . $menu['menu_name'];
-    $menu_link = db_query("SELECT mlid FROM {menu_links} WHERE link_path = :path AND plid = :plid", array(
-      ':path' => $link['link_path'],
-      ':plid' => $link['plid']
-    ))
-    ->fetchField();
-    if (!$menu_link) {
-      menu_link_save($link);
-    }
-  }
-  menu_cache_clear_all();
-}
-
-/**
- * Title callback for the menu overview page and links.
- */
-function menu_overview_title($menu) {
-  return $menu['title'];
-}
-
-/**
- * Load the data for a single custom menu.
- *
- * @param $menu_name
- *   The unique name of a custom menu to load.
- * @return
- *   Array defining the custom menu, or FALSE if the menu doesn't exist.
- */
-function menu_load($menu_name) {
-  $all_menus = menu_load_all();
-  return isset($all_menus[$menu_name]) ? $all_menus[$menu_name] : FALSE;
-}
-
-/**
- * Load all custom menu data.
- *
- * @return
- *   Array of custom menu data.
- */
-function menu_load_all() {
-  $custom_menus = &drupal_static(__FUNCTION__);
-  if (!isset($custom_menus)) {
-    if ($cached = cache_get('menu_custom', 'cache_menu')) {
-      $custom_menus = $cached->data;
-    }
-    else {
-      $custom_menus = db_query('SELECT * FROM {menu_custom}')->fetchAllAssoc('menu_name', PDO::FETCH_ASSOC);
-      cache_set('menu_custom', $custom_menus, 'cache_menu');
-    }
-  }
-  return $custom_menus;
-}
-
-/**
- * Save a custom menu.
- *
- * @param $menu
- *   An array representing a custom menu:
- *   - menu_name: The unique name of the custom menu (composed of lowercase
- *     letters, numbers, and hyphens).
- *   - title: The human readable menu title.
- *   - description: The custom menu description.
- *
- * Modules should always pass a fully populated $menu when saving a custom
- * menu, so other modules are able to output proper status or watchdog messages.
- *
- * @see menu_load()
- */
-function menu_save($menu) {
-  $status = db_merge('menu_custom')
-    ->key(array('menu_name' => $menu['menu_name']))
-    ->fields(array(
-      'title' => $menu['title'],
-      'description' => $menu['description'],
-    ))
-    ->execute();
-  menu_cache_clear_all();
-
-  switch ($status) {
-    case SAVED_NEW:
-      // Make sure the menu is present in the active menus variable so that its
-      // items may appear in the menu active trail.
-      // @see menu_set_active_menu_names()
-      $active_menus = variable_get('menu_default_active_menus', array_keys(menu_get_menus()));
-      if (!in_array($menu['menu_name'], $active_menus)) {
-        $active_menus[] = $menu['menu_name'];
-        variable_set('menu_default_active_menus', $active_menus);
-      }
-
-      module_invoke_all('menu_insert', $menu);
-      break;
-
-    case SAVED_UPDATED:
-      module_invoke_all('menu_update', $menu);
-      break;
-  }
-}
-
-/**
- * Delete a custom menu and all contained links.
- *
- * Note that this function deletes all menu links in a custom menu. While menu
- * links derived from router paths may be restored by rebuilding the menu, all
- * customized and custom links will be irreversibly gone. Therefore, this
- * function should usually be called from a user interface (form submit) handler
- * only, which allows the user to confirm the action.
- *
- * @param $menu
- *   An array representing a custom menu:
- *   - menu_name: The unique name of the custom menu.
- *   - title: The human readable menu title.
- *   - description: The custom menu description.
- *
- * Modules should always pass a fully populated $menu when deleting a custom
- * menu, so other modules are able to output proper status or watchdog messages.
- *
- * @see menu_load()
- *
- * menu_delete_links() will take care of clearing the page cache. Other modules
- * should take care of their menu-related data by implementing
- * hook_menu_delete().
- */
-function menu_delete($menu) {
-  // Delete all links from the menu.
-  menu_delete_links($menu['menu_name']);
-
-  // Remove menu from active menus variable.
-  $active_menus = variable_get('menu_default_active_menus', array_keys(menu_get_menus()));
-  foreach ($active_menus as $i => $menu_name) {
-    if ($menu['menu_name'] == $menu_name) {
-      unset($active_menus[$i]);
-      variable_set('menu_default_active_menus', $active_menus);
-    }
-  }
-
-  // Delete the custom menu.
-  db_delete('menu_custom')
-    ->condition('menu_name', $menu['menu_name'])
-    ->execute();
-
-  menu_cache_clear_all();
-  module_invoke_all('menu_delete', $menu);
-}
-
-/**
- * Return a list of menu items that are valid possible parents for the given menu item.
- *
- * @param $menus
- *   An array of menu names and titles, such as from menu_get_menus().
- * @param $item
- *   The menu item or the node type for which to generate a list of parents.
- *   If $item['mlid'] == 0 then the complete tree is returned.
- * @param $type
- *   The node type for which to generate a list of parents.
- *   If $item itself is a node type then $type is ignored.
- * @return
- *   An array of menu link titles keyed on the a string containing the menu name
- *   and mlid. The list excludes the given item and its children.
- *
- * @todo This has to be turned into a #process form element callback. The
- *   'menu_override_parent_selector' variable is entirely superfluous.
- */
-function menu_parent_options($menus, $item, $type = '') {
-  // The menu_links table can be practically any size and we need a way to
-  // allow contrib modules to provide more scalable pattern choosers.
-  // hook_form_alter is too late in itself because all the possible parents are
-  // retrieved here, unless menu_override_parent_selector is set to TRUE.
-  if (variable_get('menu_override_parent_selector', FALSE)) {
-    return array();
-  }
-
-  $available_menus = array();
-  if (!is_array($item)) {
-    // If $item is not an array then it is a node type.
-    // Use it as $type and prepare a dummy menu item for _menu_get_options().
-    $type = $item;
-    $item = array('mlid' => 0);
-  }
-  if (empty($type)) {
-    // If no node type is set, use all menus given to this function.
-    $available_menus = $menus;
-  }
-  else {
-    // If a node type is set, use all available menus for this type.
-    $type_menus = variable_get('menu_options_' . $type, array('main-menu' => 'main-menu'));
-    foreach ($type_menus as $menu) {
-      $available_menus[$menu] = $menu;
-    }
-  }
-
-  return _menu_get_options($menus, $available_menus, $item);
-}
-
-/**
- * Page callback.
- * Get all the available menus and menu items as a JavaScript array.
- */
-function menu_parent_options_js() {
-  $available_menus = array();
-  if (isset($_POST['menus']) && count($_POST['menus'])) {
-    foreach ($_POST['menus'] as $menu) {
-      $available_menus[$menu] = $menu;
-    }
-  }
-  $options = _menu_get_options(menu_get_menus(), $available_menus, array('mlid' => 0));
-
-  drupal_json_output($options);
-}
-
-/**
- * Helper function to get the items of the given menu.
- */
-function _menu_get_options($menus, $available_menus, $item) {
-  // If the item has children, there is an added limit to the depth of valid parents.
-  if (isset($item['parent_depth_limit'])) {
-    $limit = $item['parent_depth_limit'];
-  }
-  else {
-    $limit = _menu_parent_depth_limit($item);
-  }
-
-  $options = array();
-  foreach ($menus as $menu_name => $title) {
-    if (isset($available_menus[$menu_name])) {
-      $tree = menu_tree_all_data($menu_name, NULL);
-      $options[$menu_name . ':0'] = '<' . $title . '>';
-      _menu_parents_recurse($tree, $menu_name, '--', $options, $item['mlid'], $limit);
-    }
-  }
-  return $options;
-}
-
-/**
- * Recursive helper function for menu_parent_options().
- */
-function _menu_parents_recurse($tree, $menu_name, $indent, &$options, $exclude, $depth_limit) {
-  foreach ($tree as $data) {
-    if ($data['link']['depth'] > $depth_limit) {
-      // Don't iterate through any links on this level.
-      break;
-    }
-    if ($data['link']['mlid'] != $exclude && $data['link']['hidden'] >= 0) {
-      $title = $indent . ' ' . truncate_utf8($data['link']['title'], 30, TRUE, FALSE);
-      if ($data['link']['hidden']) {
-        $title .= ' (' . t('disabled') . ')';
-      }
-      $options[$menu_name . ':' . $data['link']['mlid']] = $title;
-      if ($data['below']) {
-        _menu_parents_recurse($data['below'], $menu_name, $indent . '--', $options, $exclude, $depth_limit);
-      }
-    }
-  }
-}
-
-/**
- * Reset a system-defined menu link.
- */
-function menu_reset_item($link) {
-  // To reset the link to its original values, we need to retrieve its
-  // definition from hook_menu(). Otherwise, for example, the link's menu would
-  // not be reset, because properties like the original 'menu_name' are not
-  // stored anywhere else. Since resetting a link happens rarely and this is a
-  // one-time operation, retrieving the full menu router does no harm.
-  $menu = menu_get_router();
-  $router_item = $menu[$link['router_path']];
-  $new_link = _menu_link_build($router_item);
-  // Merge existing menu link's ID and 'has_children' property.
-  foreach (array('mlid', 'has_children') as $key) {
-    $new_link[$key] = $link[$key];
-  }
-  menu_link_save($new_link);
-  return $new_link;
-}
-
-/**
- * Implements hook_block_info().
- */
-function menu_block_info() {
-  $menus = menu_get_menus(FALSE);
-
-  $blocks = array();
-  foreach ($menus as $name => $title) {
-    $blocks[$name]['info'] = check_plain($title);
-    // Menu blocks can't be cached because each menu item can have
-    // a custom access callback. menu.inc manages its own caching.
-    $blocks[$name]['cache'] = DRUPAL_NO_CACHE;
-  }
-  return $blocks;
-}
-
-/**
- * Implements hook_block_view().
- */
-function menu_block_view($delta = '') {
-  $menus = menu_get_menus(FALSE);
-  $data['subject'] = check_plain($menus[$delta]);
-  $data['content'] = menu_tree($delta);
-  // Add contextual links for this block.
-  if (!empty($data['content'])) {
-    $data['content']['#contextual_links']['menu'] = array('admin/structure/menu/manage', array($delta));
-  }
-  return $data;
-}
-
-/**
- * Implements hook_block_view_alter().
- */
-function menu_block_view_alter(&$data, $block) {
-  // Add contextual links for system menu blocks.
-  if ($block->module == 'system' && !empty($data['content'])) {
-    $system_menus = menu_list_system_menus();
-    if (isset($system_menus[$block->delta])) {
-      $data['content']['#contextual_links']['menu'] = array('admin/structure/menu/manage', array($block->delta));
-    }
-  }
-}
-
-/**
- * Implements hook_node_insert().
- */
-function menu_node_insert($node) {
-  menu_node_save($node);
-}
-
-/**
- * Implements hook_node_update().
- */
-function menu_node_update($node) {
-  menu_node_save($node);
-}
-
-/**
- * Helper for hook_node_insert() and hook_node_update().
- */
-function menu_node_save($node) {
-  if (isset($node->menu)) {
-    $link = &$node->menu;
-    if (empty($link['enabled'])) {
-      if (!empty($link['mlid'])) {
-        menu_link_delete($link['mlid']);
-      }
-    }
-    elseif (trim($link['link_title'])) {
-      $link['link_title'] = trim($link['link_title']);
-      $link['link_path'] = "node/$node->nid";
-      if (trim($link['description'])) {
-        $link['options']['attributes']['title'] = trim($link['description']);
-      }
-      else {
-        // If the description field was left empty, remove the title attribute
-        // from the menu link.
-        unset($link['options']['attributes']['title']);
-      }
-      if (!menu_link_save($link)) {
-        drupal_set_message(t('There was an error saving the menu link.'), 'error');
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_node_delete().
- */
-function menu_node_delete($node) {
-  // Delete all menu module links that point to this node.
-  $result = db_query("SELECT mlid FROM {menu_links} WHERE link_path = :path AND module = 'menu'", array(':path' => 'node/' . $node->nid), array('fetch' => PDO::FETCH_ASSOC));
-  foreach ($result as $m) {
-    menu_link_delete($m['mlid']);
-  }
-}
-
-/**
- * Implements hook_node_prepare().
- */
-function menu_node_prepare($node) {
-  if (empty($node->menu)) {
-    // Prepare the node for the edit form so that $node->menu always exists.
-    $menu_name = strtok(variable_get('menu_parent_' . $node->type, 'main-menu:0'), ':');
-    $item = array();
-    if (isset($node->nid)) {
-      $mlid = FALSE;
-      // Give priority to the default menu
-      $type_menus = variable_get('menu_options_' . $node->type, array('main-menu' => 'main-menu'));
-      if (in_array($menu_name, $type_menus)) {
-        $mlid = db_query_range("SELECT mlid FROM {menu_links} WHERE link_path = :path AND menu_name = :menu_name AND module = 'menu' ORDER BY mlid ASC", 0, 1, array(
-          ':path' => 'node/' . $node->nid,
-          ':menu_name' => $menu_name,
-        ))->fetchField();
-      }
-      // Check all allowed menus if a link does not exist in the default menu.
-      if (!$mlid && !empty($type_menus)) {
-        $mlid = db_query_range("SELECT mlid FROM {menu_links} WHERE link_path = :path AND module = 'menu' AND menu_name IN (:type_menus) ORDER BY mlid ASC", 0, 1, array(
-          ':path' => 'node/' . $node->nid,
-          ':type_menus' => array_values($type_menus),
-        ))->fetchField();
-      }
-      if ($mlid) {
-        $item = menu_link_load($mlid);
-      }
-    }
-    // Set default values.
-    $node->menu = $item + array(
-      'link_title' => '',
-      'mlid' => 0,
-      'plid' => 0,
-      'menu_name' => $menu_name,
-      'weight' => 0,
-      'options' => array(),
-      'module' => 'menu',
-      'expanded' => 0,
-      'hidden' => 0,
-      'has_children' => 0,
-      'customized' => 0,
-    );
-  }
-  // Find the depth limit for the parent select.
-  if (!isset($node->menu['parent_depth_limit'])) {
-    $node->menu['parent_depth_limit'] = _menu_parent_depth_limit($node->menu);
-  }
-}
-
-/**
- * Find the depth limit for items in the parent select.
- */
-function _menu_parent_depth_limit($item) {
-  return MENU_MAX_DEPTH - 1 - (($item['mlid'] && $item['has_children']) ? menu_link_children_relative_depth($item) : 0);
-}
-
-/**
- * Implements hook_form_BASE_FORM_ID_alter().
- *
- * Adds menu item fields to the node form.
- *
- * @see menu_node_submit()
- */
-function menu_form_node_form_alter(&$form, $form_state) {
-  // Generate a list of possible parents (not including this link or descendants).
-  // @todo This must be handled in a #process handler.
-  $link = $form['#node']->menu;
-  $type = $form['#node']->type;
-  // menu_parent_options() is goofy and can actually handle either a menu link
-  // or a node type both as second argument. Pick based on whether there is
-  // a link already (menu_node_prepare() sets mlid default to 0).
-  $options = menu_parent_options(menu_get_menus(), $link['mlid'] ? $link : $type, $type);
-  // If no possible parent menu items were found, there is nothing to display.
-  if (empty($options)) {
-    return;
-  }
-
-  $form['menu'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Menu settings'),
-    '#access' => user_access('administer menu'),
-    '#collapsible' => TRUE,
-    '#collapsed' => !$link['link_title'],
-    '#group' => 'additional_settings',
-    '#attached' => array(
-      'js' => array(drupal_get_path('module', 'menu') . '/menu.js'),
-    ),
-    '#tree' => TRUE,
-    '#weight' => -2,
-    '#attributes' => array('class' => array('menu-link-form')),
-  );
-  $form['menu']['enabled'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Provide a menu link'),
-    '#default_value' => (int) (bool) $link['mlid'],
-  );
-  $form['menu']['link'] = array(
-    '#type' => 'container',
-    '#parents' => array('menu'),
-    '#states' => array(
-      'invisible' => array(
-        'input[name="menu[enabled]"]' => array('checked' => FALSE),
-      ),
-    ),
-  );
-
-  // Populate the element with the link data.
-  foreach (array('mlid', 'module', 'hidden', 'has_children', 'customized', 'options', 'expanded', 'hidden', 'parent_depth_limit') as $key) {
-    $form['menu']['link'][$key] = array('#type' => 'value', '#value' => $link[$key]);
-  }
-
-  $form['menu']['link']['link_title'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Menu link title'),
-    '#default_value' => $link['link_title'],
-  );
-
-  $form['menu']['link']['description'] = array(
-    '#type' => 'textarea',
-    '#title' => t('Description'),
-    '#default_value' => isset($link['options']['attributes']['title']) ? $link['options']['attributes']['title'] : '',
-    '#rows' => 1,
-    '#description' => t('Shown when hovering over the menu link.'),
-  );
-
-  $default = ($link['mlid'] ? $link['menu_name'] . ':' . $link['plid'] : variable_get('menu_parent_' . $type, 'main-menu:0'));
-  // If the current parent menu item is not present in options, use the first
-  // available option as default value.
-  // @todo User should not be allowed to access menu link settings in such a
-  // case.
-  if (!isset($options[$default])) {
-    $array = array_keys($options);
-    $default = reset($array);
-  }
-  $form['menu']['link']['parent'] = array(
-    '#type' => 'select',
-    '#title' => t('Parent item'),
-    '#default_value' => $default,
-    '#options' => $options,
-    '#attributes' => array('class' => array('menu-parent-select')),
-  );
-  $form['menu']['link']['weight'] = array(
-    '#type' => 'weight',
-    '#title' => t('Weight'),
-    '#delta' => 50,
-    '#default_value' => $link['weight'],
-    '#description' => t('Menu links with smaller weights are displayed before links with larger weights.'),
-  );
-}
-
-/**
- * Implements hook_node_submit().
- *
- * @see menu_form_node_form_alter()
- */
-function menu_node_submit($node, $form, $form_state) {
-  // Decompose the selected menu parent option into 'menu_name' and 'plid', if
-  // the form used the default parent selection widget.
-  if (!empty($form_state['values']['menu']['parent'])) {
-    list($node->menu['menu_name'], $node->menu['plid']) = explode(':', $form_state['values']['menu']['parent']);
-  }
-}
-
-/**
- * Implements hook_form_FORM_ID_alter().
- *
- * Adds menu options to the node type form.
- */
-function menu_form_node_type_form_alter(&$form, $form_state) {
-  $menu_options = menu_get_menus();
-  $type = $form['#node_type'];
-  $form['menu'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Menu settings'),
-    '#collapsible' => TRUE,
-    '#collapsed' => TRUE,
-    '#attached' => array(
-      'js' => array(drupal_get_path('module', 'menu') . '/menu.admin.js'),
-    ),
-    '#group' => 'additional_settings',
-  );
-  $form['menu']['menu_options'] = array(
-    '#type' => 'checkboxes',
-    '#title' => t('Available menus'),
-    '#default_value' => variable_get('menu_options_' . $type->type, array('main-menu')),
-    '#options' => $menu_options,
-    '#description' => t('The menus available to place links in for this content type.'),
-  );
-  // To avoid an 'illegal option' error after saving the form we have to load
-  // all available menu items.
-  // Otherwise it is not possible to dynamically add options to the list.
-  // @todo Convert menu_parent_options() into a #process callback.
-  $options = menu_parent_options(menu_get_menus(), array('mlid' => 0));
-  $form['menu']['menu_parent'] = array(
-    '#type' => 'select',
-    '#title' => t('Default parent item'),
-    '#default_value' => variable_get('menu_parent_' . $type->type, 'main-menu:0'),
-    '#options' => $options,
-    '#description' => t('Choose the menu item to be the default parent for a new link in the content authoring form.'),
-    '#attributes' => array('class' => array('menu-title-select')),
-  );
-
-  // Call Drupal.menu_update_parent_list() to filter the list of
-  // available default parent menu items based on the selected menus.
-  drupal_add_js(
-    '(function ($) { Drupal.menu_update_parent_list(); })(jQuery);',
-    array('scope' => 'footer', 'type' => 'inline')
-  );
-}
-
-/**
- * Return an associative array of the custom menus names.
- *
- * @param $all
- *   If FALSE return only user-added menus, or if TRUE also include
- *   the menus defined by the system.
- * @return
- *   An array with the machine-readable names as the keys, and human-readable
- *   titles as the values.
- */
-function menu_get_menus($all = TRUE) {
-  if ($custom_menus = menu_load_all()) {
-    if (!$all) {
-      $custom_menus = array_diff_key($custom_menus, menu_list_system_menus());
-    }
-    foreach ($custom_menus as $menu_name => $menu) {
-      $custom_menus[$menu_name] = t($menu['title']);
-    }
-    asort($custom_menus);
-  }
-  return $custom_menus;
-}
diff --git a/modules/menu/menu.test b/modules/menu/menu.test
deleted file mode 100644
index 95e0ee9..0000000
--- a/modules/menu/menu.test
+++ /dev/null
@@ -1,724 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for menu.module.
- */
-
-class MenuTestCase extends DrupalWebTestCase {
-  protected $big_user;
-  protected $std_user;
-  protected $menu;
-  protected $items;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Menu link creation/deletion',
-      'description' => 'Add a custom menu, add menu links to the custom menu and Navigation menu, check their data, and delete them using the menu module UI.',
-      'group' => 'Menu'
-    );
-  }
-
-  function setUp() {
-    parent::setUp('menu');
-    // Create users.
-    $this->big_user = $this->drupalCreateUser(array('access administration pages', 'administer blocks', 'administer menu', 'create article content'));
-    $this->std_user = $this->drupalCreateUser(array());
-  }
-
-  /**
-   * Login users, add menus and menu links, and test menu functionality through the admin and user interfaces.
-   */
-  function testMenu() {
-    // Login the user.
-    $this->drupalLogin($this->big_user);
-    $this->items = array();
-
-    // Do standard menu tests.
-    $this->doStandardMenuTests();
-
-    // Do custom menu tests.
-    $this->doCustomMenuTests();
-
-    // Do standard user tests.
-    // Login the user.
-    $this->drupalLogin($this->std_user);
-    $this->verifyAccess(403);
-    foreach ($this->items as $item) {
-      $node = node_load(substr($item['link_path'], 5)); // Paths were set as 'node/$nid'.
-      $this->verifyMenuLink($item, $node);
-    }
-
-    // Login the user.
-    $this->drupalLogin($this->big_user);
-
-    // Delete menu links.
-    foreach ($this->items as $item) {
-      $this->deleteMenuLink($item);
-    }
-
-    // Delete custom menu.
-    $this->deleteCustomMenu($this->menu);
-
-    // Modify and reset a standard menu link.
-    $item = $this->getStandardMenuLink();
-    $old_title = $item['link_title'];
-    $this->modifyMenuLink($item);
-    $item = menu_link_load($item['mlid']);
-    // Verify that a change to the description is saved.
-    $description = $this->randomName(16);
-    $item['options']['attributes']['title']  = $description;
-    menu_link_save($item);
-    $saved_item = menu_link_load($item['mlid']);
-    $this->assertEqual($description, $saved_item['options']['attributes']['title'], 'Saving an existing link updates the description (title attribute)');
-    $this->resetMenuLink($item, $old_title);
-  }
-
-  /**
-   * Test standard menu functionality using navigation menu.
-   *
-   */
-  function doStandardMenuTests() {
-    $this->doMenuTests();
-    $this->addInvalidMenuLink();
-  }
-
-  /**
-   * Test custom menu functionality using navigation menu.
-   *
-   */
-  function doCustomMenuTests() {
-    $this->menu = $this->addCustomMenu();
-    $this->doMenuTests($this->menu['menu_name']);
-    $this->addInvalidMenuLink($this->menu['menu_name']);
-    $this->addCustomMenuCRUD();
-  }
-
-  /**
-   * Add custom menu using CRUD functions.
-   */
-  function addCustomMenuCRUD() {
-    // Add a new custom menu.
-    $menu_name = substr(hash('sha256', $this->randomName(16)), 0, MENU_MAX_MENU_NAME_LENGTH_UI);
-    $title = $this->randomName(16);
-
-    $menu = array(
-      'menu_name' => $menu_name,
-      'title' => $title,
-      'description' => 'Description text',
-    );
-    menu_save($menu);
-
-    // Assert the new menu.
-    $this->drupalGet('admin/structure/menu/manage/' . $menu_name . '/edit');
-    $this->assertRaw($title, 'Custom menu was added.');
-
-    // Edit the menu.
-    $new_title = $this->randomName(16);
-    $menu['title'] = $new_title;
-    menu_save($menu);
-    $this->drupalGet('admin/structure/menu/manage/' . $menu_name . '/edit');
-    $this->assertRaw($new_title, 'Custom menu was edited.');
-  }
-
-  /**
-   * Add custom menu.
-   */
-  function addCustomMenu() {
-    // Add custom menu.
-
-    // Try adding a menu using a menu_name that is too long.
-    $this->drupalGet('admin/structure/menu/add');
-    $menu_name = substr(hash('sha256', $this->randomName(16)), 0, MENU_MAX_MENU_NAME_LENGTH_UI + 1);
-    $title = $this->randomName(16);
-    $edit = array(
-      'menu_name' => $menu_name,
-      'description' => '',
-      'title' =>  $title,
-    );
-    $this->drupalPost('admin/structure/menu/add', $edit, t('Save'));
-
-    // Verify that using a menu_name that is too long results in a validation message.
-    $this->assertRaw(t('!name cannot be longer than %max characters but is currently %length characters long.', array(
-      '!name' => t('Menu name'),
-      '%max' => MENU_MAX_MENU_NAME_LENGTH_UI,
-      '%length' => drupal_strlen($menu_name),
-    )));
-
-    // Change the menu_name so it no longer exceeds the maximum length.
-    $menu_name = substr(hash('sha256', $this->randomName(16)), 0, MENU_MAX_MENU_NAME_LENGTH_UI);
-    $edit['menu_name'] = $menu_name;
-    $this->drupalPost('admin/structure/menu/add', $edit, t('Save'));
-
-    // Verify that no validation error is given for menu_name length.
-    $this->assertNoRaw(t('!name cannot be longer than %max characters but is currently %length characters long.', array(
-      '!name' => t('Menu name'),
-      '%max' => MENU_MAX_MENU_NAME_LENGTH_UI,
-      '%length' => drupal_strlen($menu_name),
-    )));
-    // Unlike most other modules, there is no confirmation message displayed.
-
-    $this->drupalGet('admin/structure/menu');
-    $this->assertText($title, 'Menu created');
-
-    // Enable the custom menu block.
-    $menu_name = 'menu-' . $menu_name; // Drupal prepends the name with 'menu-'.
-    $edit = array();
-    $edit['blocks[menu_' . $menu_name . '][region]'] = 'sidebar_first';
-    $this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
-    $this->assertResponse(200);
-    $this->assertText(t('The block settings have been updated.'), 'Custom menu block was enabled');
-
-    return menu_load($menu_name);
-  }
-
-  /**
-   * Delete custom menu.
-   *
-   * @param string $menu_name Custom menu name.
-   */
-  function deleteCustomMenu($menu) {
-    $menu_name = $this->menu['menu_name'];
-    $title = $this->menu['title'];
-
-    // Delete custom menu.
-    $this->drupalPost("admin/structure/menu/manage/$menu_name/delete", array(), t('Delete'));
-    $this->assertResponse(200);
-    $this->assertRaw(t('The custom menu %title has been deleted.', array('%title' => $title)), 'Custom menu was deleted');
-    $this->assertFalse(menu_load($menu_name), 'Custom menu was deleted');
-    // Test if all menu links associated to the menu were removed from database.
-    $result = db_query("SELECT menu_name FROM {menu_links} WHERE menu_name = :menu_name", array(':menu_name' => $menu_name))->fetchField();
-    $this->assertFalse($result, 'All menu links associated to the custom menu were deleted.');
-  }
-
-  /**
-   * Test menu functionality using navigation menu.
-   *
-   */
-  function doMenuTests($menu_name = 'navigation') {
-    // Add nodes to use as links for menu links.
-    $node1 = $this->drupalCreateNode(array('type' => 'article'));
-    $node2 = $this->drupalCreateNode(array('type' => 'article'));
-    $node3 = $this->drupalCreateNode(array('type' => 'article'));
-    $node4 = $this->drupalCreateNode(array('type' => 'article'));
-    $node5 = $this->drupalCreateNode(array('type' => 'article'));
-
-    // Add menu links.
-    $item1 = $this->addMenuLink(0, 'node/' . $node1->nid, $menu_name);
-    $item2 = $this->addMenuLink($item1['mlid'], 'node/' . $node2->nid, $menu_name, FALSE);
-    $item3 = $this->addMenuLink($item2['mlid'], 'node/' . $node3->nid, $menu_name);
-    $this->assertMenuLink($item1['mlid'], array('depth' => 1, 'has_children' => 1, 'p1' => $item1['mlid'], 'p2' => 0));
-    $this->assertMenuLink($item2['mlid'], array('depth' => 2, 'has_children' => 1, 'p1' => $item1['mlid'], 'p2' => $item2['mlid'], 'p3' => 0));
-    $this->assertMenuLink($item3['mlid'], array('depth' => 3, 'has_children' => 0, 'p1' => $item1['mlid'], 'p2' => $item2['mlid'], 'p3' => $item3['mlid'], 'p4' => 0));
-
-    // Verify menu links.
-    $this->verifyMenuLink($item1, $node1);
-    $this->verifyMenuLink($item2, $node2, $item1, $node1);
-    $this->verifyMenuLink($item3, $node3, $item2, $node2);
-
-    // Add more menu links.
-    $item4 = $this->addMenuLink(0, 'node/' . $node4->nid, $menu_name);
-    $item5 = $this->addMenuLink($item4['mlid'], 'node/' . $node5->nid, $menu_name);
-    $this->assertMenuLink($item4['mlid'], array('depth' => 1, 'has_children' => 1, 'p1' => $item4['mlid'], 'p2' => 0));
-    $this->assertMenuLink($item5['mlid'], array('depth' => 2, 'has_children' => 0, 'p1' => $item4['mlid'], 'p2' => $item5['mlid'], 'p3' => 0));
-
-    // Modify menu links.
-    $this->modifyMenuLink($item1);
-    $this->modifyMenuLink($item2);
-
-    // Toggle menu links.
-    $this->toggleMenuLink($item1);
-    $this->toggleMenuLink($item2);
-
-    // Move link and verify that descendants are updated.
-    $this->moveMenuLink($item2, $item5['mlid'], $menu_name);
-    $this->assertMenuLink($item1['mlid'], array('depth' => 1, 'has_children' => 0, 'p1' => $item1['mlid'], 'p2' => 0));
-    $this->assertMenuLink($item4['mlid'], array('depth' => 1, 'has_children' => 1, 'p1' => $item4['mlid'], 'p2' => 0));
-    $this->assertMenuLink($item5['mlid'], array('depth' => 2, 'has_children' => 1, 'p1' => $item4['mlid'], 'p2' => $item5['mlid'], 'p3' => 0));
-    $this->assertMenuLink($item2['mlid'], array('depth' => 3, 'has_children' => 1, 'p1' => $item4['mlid'], 'p2' => $item5['mlid'], 'p3' => $item2['mlid'], 'p4' => 0));
-    $this->assertMenuLink($item3['mlid'], array('depth' => 4, 'has_children' => 0, 'p1' => $item4['mlid'], 'p2' => $item5['mlid'], 'p3' => $item2['mlid'], 'p4' => $item3['mlid'], 'p5' => 0));
-
-    // Enable a link via the overview form.
-    $this->disableMenuLink($item1);
-    $edit = array();
-
-    // Note in the UI the 'mlid:x[hidden]' form element maps to enabled, or
-    // NOT hidden.
-    $edit['mlid:' . $item1['mlid'] . '[hidden]'] = TRUE;
-    $this->drupalPost('admin/structure/menu/manage/' . $item1['menu_name'], $edit, t('Save configuration'));
-
-    // Verify in the database.
-    $this->assertMenuLink($item1['mlid'], array('hidden' => 0));
-
-    // Save menu links for later tests.
-    $this->items[] = $item1;
-    $this->items[] = $item2;
-  }
-
-  /**
-   * Add and remove a menu link with a query string and fragment.
-   */
-  function testMenuQueryAndFragment() {
-    $this->drupalLogin($this->big_user);
-
-    // Make a path with query and fragment on.
-    $path = 'node?arg1=value1&arg2=value2';
-    $item = $this->addMenuLink(0, $path);
-
-    $this->drupalGet('admin/structure/menu/item/' . $item['mlid'] . '/edit');
-    $this->assertFieldByName('link_path', $path, 'Path is found with both query and fragment.');
-
-    // Now change the path to something without query and fragment.
-    $path = 'node';
-    $this->drupalPost('admin/structure/menu/item/' . $item['mlid'] . '/edit', array('link_path' => $path), t('Save'));
-    $this->drupalGet('admin/structure/menu/item/' . $item['mlid'] . '/edit');
-    $this->assertFieldByName('link_path', $path, 'Path no longer has query or fragment.');
-  }
-
-  /**
-   * Add a menu link using the menu module UI.
-   *
-   * @param integer $plid Parent menu link id.
-   * @param string $link Link path.
-   * @param string $menu_name Menu name.
-   * @return array Menu link created.
-   */
-  function addMenuLink($plid = 0, $link = '<front>', $menu_name = 'navigation', $expanded = TRUE) {
-    // View add menu link page.
-    $this->drupalGet("admin/structure/menu/manage/$menu_name/add");
-    $this->assertResponse(200);
-
-    $title = '!link_' . $this->randomName(16);
-    $edit = array(
-      'link_path' => $link,
-      'link_title' => $title,
-      'description' => '',
-      'enabled' => TRUE, // Use this to disable the menu and test.
-      'expanded' => $expanded, // Setting this to true should test whether it works when we do the std_user tests.
-      'parent' =>  $menu_name . ':' . $plid,
-      'weight' => '0',
-    );
-
-    // Add menu link.
-    $this->drupalPost(NULL, $edit, t('Save'));
-    $this->assertResponse(200);
-    // Unlike most other modules, there is no confirmation message displayed.
-    $this->assertText($title, 'Menu link was added');
-
-    $item = db_query('SELECT * FROM {menu_links} WHERE link_title = :title', array(':title' => $title))->fetchAssoc();
-    $this->assertTrue(t('Menu link was found in database.'));
-    $this->assertMenuLink($item['mlid'], array('menu_name' => $menu_name, 'link_path' => $link, 'has_children' => 0, 'plid' => $plid));
-
-    return $item;
-  }
-
-  /**
-   * Attempt to add menu link with invalid path or no access permission.
-   *
-   * @param string $menu_name Menu name.
-   */
-  function addInvalidMenuLink($menu_name = 'navigation') {
-    foreach (array('-&-', 'admin/people/permissions', '#') as $link_path) {
-      $edit = array(
-        'link_path' => $link_path,
-        'link_title' => 'title',
-      );
-      $this->drupalPost("admin/structure/menu/manage/$menu_name/add", $edit, t('Save'));
-      $this->assertRaw(t("The path '@path' is either invalid or you do not have access to it.", array('@path' => $link_path)), 'Menu link was not created');
-    }
-  }
-
-  /**
-   * Verify a menu link using the menu module UI.
-   *
-   * @param array $item Menu link.
-   * @param object $item_node Menu link content node.
-   * @param array $parent Parent menu link.
-   * @param object $parent_node Parent menu link content node.
-   */
-  function verifyMenuLink($item, $item_node, $parent = NULL, $parent_node = NULL) {
-    // View home page.
-    $this->drupalGet('');
-    $this->assertResponse(200);
-
-    // Verify parent menu link.
-    if (isset($parent)) {
-      // Verify menu link.
-      $title = $parent['link_title'];
-      $this->assertLink($title, 0, 'Parent menu link was displayed');
-
-      // Verify menu link link.
-      $this->clickLink($title);
-      $title = $parent_node->title;
-      $this->assertTitle(t("@title | Drupal", array('@title' => $title)), 'Parent menu link link target was correct');
-    }
-
-    // Verify menu link.
-    $title = $item['link_title'];
-    $this->assertLink($title, 0, 'Menu link was displayed');
-
-    // Verify menu link link.
-    $this->clickLink($title);
-    $title = $item_node->title;
-    $this->assertTitle(t("@title | Drupal", array('@title' => $title)), 'Menu link link target was correct');
-  }
-
-  /**
-   * Change the parent of a menu link using the menu module UI.
-   */
-  function moveMenuLink($item, $plid, $menu_name) {
-    $mlid = $item['mlid'];
-
-    $edit = array(
-      'parent' => $menu_name . ':' . $plid,
-    );
-    $this->drupalPost("admin/structure/menu/item/$mlid/edit", $edit, t('Save'));
-    $this->assertResponse(200);
-  }
-
-  /**
-   * Modify a menu link using the menu module UI.
-   *
-   * @param array $item Menu link passed by reference.
-   */
-  function modifyMenuLink(&$item) {
-    $item['link_title'] = $this->randomName(16);
-
-    $mlid = $item['mlid'];
-    $title = $item['link_title'];
-
-    // Edit menu link.
-    $edit = array();
-    $edit['link_title'] = $title;
-    $this->drupalPost("admin/structure/menu/item/$mlid/edit", $edit, t('Save'));
-    $this->assertResponse(200);
-    // Unlike most other modules, there is no confirmation message displayed.
-
-    // Verify menu link.
-    $this->drupalGet('admin/structure/menu/manage/' . $item['menu_name']);
-    $this->assertText($title, 'Menu link was edited');
-  }
-
-  /**
-   * Reset a standard menu link using the menu module UI.
-   *
-   * @param array $item Menu link.
-   * @param string $old_title Original title for menu link.
-   */
-  function resetMenuLink($item, $old_title) {
-    $mlid = $item['mlid'];
-    $title = $item['link_title'];
-
-    // Reset menu link.
-    $this->drupalPost("admin/structure/menu/item/$mlid/reset", array(), t('Reset'));
-    $this->assertResponse(200);
-    $this->assertRaw(t('The menu link was reset to its default settings.'), 'Menu link was reset');
-
-    // Verify menu link.
-    $this->drupalGet('');
-    $this->assertNoText($title, 'Menu link was reset');
-    $this->assertText($old_title, 'Menu link was reset');
-  }
-
-  /**
-   * Delete a menu link using the menu module UI.
-   *
-   * @param array $item Menu link.
-   */
-  function deleteMenuLink($item) {
-    $mlid = $item['mlid'];
-    $title = $item['link_title'];
-
-    // Delete menu link.
-    $this->drupalPost("admin/structure/menu/item/$mlid/delete", array(), t('Confirm'));
-    $this->assertResponse(200);
-    $this->assertRaw(t('The menu link %title has been deleted.', array('%title' => $title)), 'Menu link was deleted');
-
-    // Verify deletion.
-    $this->drupalGet('');
-    $this->assertNoText($title, 'Menu link was deleted');
-  }
-
-  /**
-   * Alternately disable and enable a menu link.
-   *
-   * @param $item
-   *   Menu link.
-   */
-  function toggleMenuLink($item) {
-    $this->disableMenuLink($item);
-
-    // Verify menu link is absent.
-    $this->drupalGet('');
-    $this->assertNoText($item['link_title'], 'Menu link was not displayed');
-    $this->enableMenuLink($item);
-
-    // Verify menu link is displayed.
-    $this->drupalGet('');
-    $this->assertText($item['link_title'], 'Menu link was displayed');
-  }
-
-  /**
-   * Disable a menu link.
-   *
-   * @param $item
-   *   Menu link.
-   */
-  function disableMenuLink($item) {
-    $mlid = $item['mlid'];
-    $edit['enabled'] = FALSE;
-    $this->drupalPost("admin/structure/menu/item/$mlid/edit", $edit, t('Save'));
-
-    // Unlike most other modules, there is no confirmation message displayed.
-    // Verify in the database.
-    $this->assertMenuLink($mlid, array('hidden' => 1));
-  }
-
-  /**
-   * Enable a menu link.
-   *
-   * @param $item
-   *   Menu link.
-   */
-  function enableMenuLink($item) {
-    $mlid = $item['mlid'];
-    $edit['enabled'] = TRUE;
-    $this->drupalPost("admin/structure/menu/item/$mlid/edit", $edit, t('Save'));
-
-    // Verify in the database.
-    $this->assertMenuLink($mlid, array('hidden' => 0));
-  }
-
-  /**
-   * Fetch the menu item from the database and compare it to the specified
-   * array.
-   *
-   * @param $mlid
-   *   Menu item id.
-   * @param $item
-   *   Array containing properties to verify.
-   */
-  function assertMenuLink($mlid, array $expected_item) {
-    // Retrieve menu link.
-    $item = db_query('SELECT * FROM {menu_links} WHERE mlid = :mlid', array(':mlid' => $mlid))->fetchAssoc();
-    $options = unserialize($item['options']);
-    if (!empty($options['query'])) {
-      $item['link_path'] .= '?' . drupal_http_build_query($options['query']);
-    }
-    if (!empty($options['fragment'])) {
-      $item['link_path'] .= '#' . $options['fragment'];
-    }
-    foreach ($expected_item as $key => $value) {
-      $this->assertEqual($item[$key], $value, format_string('Parameter %key had expected value.', array('%key' => $key)));
-    }
-  }
-
-  /**
-   * Get standard menu link.
-   */
-  private function getStandardMenuLink() {
-    // Retrieve menu link id of the Log out menu link, which will always be on the front page.
-    $mlid = db_query("SELECT mlid FROM {menu_links} WHERE module = 'system' AND router_path = 'user/logout'")->fetchField();
-    $this->assertTrue($mlid > 0, 'Standard menu link id was found');
-    // Load menu link.
-    // Use api function so that link is translated for rendering.
-    $item = menu_link_load($mlid);
-    $this->assertTrue((bool) $item, 'Standard menu link was loaded');
-    return $item;
-  }
-
-  /**
-   * Verify the logged in user has the desired access to the various menu nodes.
-   *
-   * @param integer $response HTTP response code.
-   */
-  private function verifyAccess($response = 200) {
-    // View menu help node.
-    $this->drupalGet('admin/help/menu');
-    $this->assertResponse($response);
-    if ($response == 200) {
-      $this->assertText(t('Menu'), 'Menu help was displayed');
-    }
-
-    // View menu build overview node.
-    $this->drupalGet('admin/structure/menu');
-    $this->assertResponse($response);
-    if ($response == 200) {
-      $this->assertText(t('Menus'), 'Menu build overview node was displayed');
-    }
-
-    // View navigation menu customization node.
-    $this->drupalGet('admin/structure/menu/manage/navigation');
-        $this->assertResponse($response);
-    if ($response == 200) {
-      $this->assertText(t('Navigation'), 'Navigation menu node was displayed');
-    }
-
-    // View menu edit node.
-    $item = $this->getStandardMenuLink();
-    $this->drupalGet('admin/structure/menu/item/' . $item['mlid'] . '/edit');
-    $this->assertResponse($response);
-    if ($response == 200) {
-      $this->assertText(t('Edit menu item'), 'Menu edit node was displayed');
-    }
-
-    // View menu settings node.
-    $this->drupalGet('admin/structure/menu/settings');
-    $this->assertResponse($response);
-    if ($response == 200) {
-      $this->assertText(t('Menus'), 'Menu settings node was displayed');
-    }
-
-    // View add menu node.
-    $this->drupalGet('admin/structure/menu/add');
-    $this->assertResponse($response);
-    if ($response == 200) {
-      $this->assertText(t('Menus'), 'Add menu node was displayed');
-    }
-  }
-}
-
-/**
- * Test menu settings for nodes.
- */
-class MenuNodeTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Menu settings for nodes',
-      'description' => 'Add, edit, and delete a node with menu link.',
-      'group' => 'Menu',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('menu');
-
-    $this->admin_user = $this->drupalCreateUser(array(
-      'access administration pages',
-      'administer content types',
-      'administer menu',
-      'create page content',
-      'edit any page content',
-      'delete any page content',
-    ));
-    $this->drupalLogin($this->admin_user);
-  }
-
-  /**
-   * Test creating, editing, deleting menu links via node form widget.
-   */
-  function testMenuNodeFormWidget() {
-    // Enable Navigation menu as available menu.
-    $edit = array(
-      'menu_options[navigation]' => 1,
-    );
-    $this->drupalPost('admin/structure/types/manage/page', $edit, t('Save content type'));
-    // Change default parent item to Navigation menu, so we can assert more
-    // easily.
-    $edit = array(
-      'menu_parent' => 'navigation:0',
-    );
-    $this->drupalPost('admin/structure/types/manage/page', $edit, t('Save content type'));
-
-    // Create a node.
-    $node_title = $this->randomName();
-    $language = LANGUAGE_NONE;
-    $edit = array(
-      "title" => $node_title,
-      "body[$language][0][value]" => $this->randomString(),
-    );
-    $this->drupalPost('node/add/page', $edit, t('Save'));
-    $node = $this->drupalGetNodeByTitle($node_title);
-    // Assert that there is no link for the node.
-    $this->drupalGet('');
-    $this->assertNoLink($node_title);
-
-    // Edit the node, enable the menu link setting, but skip the link title.
-    $edit = array(
-      'menu[enabled]' => 1,
-    );
-    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
-    // Assert that there is no link for the node.
-    $this->drupalGet('');
-    $this->assertNoLink($node_title);
-
-    // Edit the node and create a menu link.
-    $edit = array(
-      'menu[enabled]' => 1,
-      'menu[link_title]' => $node_title,
-      'menu[weight]' => 17,
-    );
-    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
-    // Assert that the link exists.
-    $this->drupalGet('');
-    $this->assertLink($node_title);
-
-    $this->drupalGet('node/' . $node->nid . '/edit');
-    $this->assertOptionSelected('edit-menu-weight', 17, 'Menu weight correct in edit form');
-
-    // Edit the node and remove the menu link.
-    $edit = array(
-      'menu[enabled]' => FALSE,
-    );
-    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
-    // Assert that there is no link for the node.
-    $this->drupalGet('');
-    $this->assertNoLink($node_title);
-
-    // Add a menu link to the Management menu.
-    $item = array(
-      'link_path' => 'node/' . $node->nid,
-      'link_title' => $this->randomName(16),
-      'menu_name' => 'management',
-    );
-    menu_link_save($item);
-
-    // Assert that disabled Management menu is not shown on the node/$nid/edit page.
-    $this->drupalGet('node/' . $node->nid . '/edit');
-    $this->assertText('Provide a menu link', 'Link in not allowed menu not shown in node edit form');
-    // Assert that the link is still in the management menu after save.
-    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
-    $link = menu_link_load($item['mlid']);
-    $this->assertTrue($link, 'Link in not allowed menu still exists after saving node');
-
-    // Move the menu link back to the Navigation menu.
-    $item['menu_name'] = 'navigation';
-    menu_link_save($item);
-    // Create a second node.
-    $child_node = $this->drupalCreateNode(array('type' => 'article'));
-    // Assign a menu link to the second node, being a child of the first one.
-    $child_item = array(
-      'link_path' => 'node/'. $child_node->nid,
-      'link_title' => $this->randomName(16),
-      'plid' => $item['mlid'],
-    );
-    menu_link_save($child_item);
-    // Edit the first node.
-    $this->drupalGet('node/'. $node->nid .'/edit');
-    // Assert that it is not possible to set the parent of the first node to itself or the second node.
-    $this->assertNoOption('edit-menu-parent', 'navigation:'. $item['mlid']);
-    $this->assertNoOption('edit-menu-parent', 'navigation:'. $child_item['mlid']);
-    // Assert that unallowed Management menu is not available in options.
-    $this->assertNoOption('edit-menu-parent', 'management:0');
-  }
-
-  /**
-   * Asserts that a select option in the current page does not exist.
-   *
-   * @param $id
-   *   Id of select field to assert.
-   * @param $option
-   *   Option to assert.
-   * @param $message
-   *   Message to display.
-   * @return
-   *   TRUE on pass, FALSE on fail.
-   *
-   * @todo move to simpletest drupal_web_test_case.php.
-   */
-  protected function assertNoOption($id, $option, $message = '') {
-    $selects = $this->xpath('//select[@id=:id]', array(':id' => $id));
-    $options = $this->xpath('//select[@id=:id]//option[@value=:option]', array(':id' => $id, ':option' => $option));
-    return $this->assertTrue(isset($selects[0]) && !isset($options[0]), $message ? $message : t('Option @option for field @id does not exist.', array('@option' => $option, '@id' => $id)), t('Browser'));
-  }
-}
diff --git a/modules/node/content_types.js b/modules/node/content_types.js
deleted file mode 100644
index 0031c32..0000000
--- a/modules/node/content_types.js
+++ /dev/null
@@ -1,34 +0,0 @@
-(function ($) {
-
-Drupal.behaviors.contentTypes = {
-  attach: function (context) {
-    // Provide the vertical tab summaries.
-    $('fieldset#edit-submission', context).drupalSetSummary(function(context) {
-      var vals = [];
-      vals.push(Drupal.checkPlain($('#edit-title-label', context).val()) || Drupal.t('Requires a title'));
-      return vals.join(', ');
-    });
-    $('fieldset#edit-workflow', context).drupalSetSummary(function(context) {
-      var vals = [];
-      $("input[name^='node_options']:checked", context).parent().each(function() {
-        vals.push(Drupal.checkPlain($(this).text()));
-      });
-      if (!$('#edit-node-options-status', context).is(':checked')) {
-        vals.unshift(Drupal.t('Not published'));
-      }
-      return vals.join(', ');
-    });
-    $('fieldset#edit-display', context).drupalSetSummary(function(context) {
-      var vals = [];
-      $('input:checked', context).next('label').each(function() {
-        vals.push(Drupal.checkPlain($(this).text()));
-      });
-      if (!$('#edit-node-submitted', context).is(':checked')) {
-        vals.unshift(Drupal.t("Don't display post information"));
-      }
-      return vals.join(', ');
-    });
-  }
-};
-
-})(jQuery);
diff --git a/modules/node/node.css b/modules/node/node.css
deleted file mode 100644
index 07540fa..0000000
--- a/modules/node/node.css
+++ /dev/null
@@ -1,10 +0,0 @@
-
-.node-unpublished {
-  background-color: #fff4f4;
-}
-.preview .node {
-  background-color: #ffffea;
-}
-td.revision-current {
-  background: #ffc;
-}
diff --git a/modules/node/node.info b/modules/node/node.info
deleted file mode 100644
index 85866e7..0000000
--- a/modules/node/node.info
+++ /dev/null
@@ -1,10 +0,0 @@
-name = Node
-description = Allows content to be submitted to the site and displayed on pages.
-package = Core
-version = VERSION
-core = 7.x
-files[] = node.module
-files[] = node.test
-required = TRUE
-configure = admin/structure/types
-stylesheets[all][] = node.css
diff --git a/modules/node/node.js b/modules/node/node.js
deleted file mode 100644
index ebf68eb..0000000
--- a/modules/node/node.js
+++ /dev/null
@@ -1,43 +0,0 @@
-
-(function ($) {
-
-Drupal.behaviors.nodeFieldsetSummaries = {
-  attach: function (context) {
-    $('fieldset.node-form-revision-information', context).drupalSetSummary(function (context) {
-      var revisionCheckbox = $('.form-item-revision input', context);
-
-      // Return 'New revision' if the 'Create new revision' checkbox is checked,
-      // or if the checkbox doesn't exist, but the revision log does. For users
-      // without the "Administer content" permission the checkbox won't appear,
-      // but the revision log will if the content type is set to auto-revision.
-      if (revisionCheckbox.is(':checked') || (!revisionCheckbox.length && $('.form-item-log textarea', context).length)) {
-        return Drupal.t('New revision');
-      }
-
-      return Drupal.t('No revision');
-    });
-
-    $('fieldset.node-form-author', context).drupalSetSummary(function (context) {
-      var name = $('.form-item-name input', context).val() || Drupal.settings.anonymous,
-        date = $('.form-item-date input', context).val();
-      return date ?
-        Drupal.t('By @name on @date', { '@name': name, '@date': date }) :
-        Drupal.t('By @name', { '@name': name });
-    });
-
-    $('fieldset.node-form-options', context).drupalSetSummary(function (context) {
-      var vals = [];
-
-      $('input:checked', context).parent().each(function () {
-        vals.push(Drupal.checkPlain($.trim($(this).text())));
-      });
-
-      if (!$('.form-item-status input', context).is(':checked')) {
-        vals.unshift(Drupal.t('Not published'));
-      }
-      return vals.join(', ');
-    });
-  }
-};
-
-})(jQuery);
diff --git a/modules/node/node.tpl.php b/modules/node/node.tpl.php
deleted file mode 100644
index 4c358a1..0000000
--- a/modules/node/node.tpl.php
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to display a node.
- *
- * Available variables:
- * - $title: the (sanitized) title of the node.
- * - $content: An array of node items. Use render($content) to print them all,
- *   or print a subset such as render($content['field_example']). Use
- *   hide($content['field_example']) to temporarily suppress the printing of a
- *   given element.
- * - $user_picture: The node author's picture from user-picture.tpl.php.
- * - $date: Formatted creation date. Preprocess functions can reformat it by
- *   calling format_date() with the desired parameters on the $created variable.
- * - $name: Themed username of node author output from theme_username().
- * - $node_url: Direct URL of the current node.
- * - $display_submitted: Whether submission information should be displayed.
- * - $submitted: Submission information created from $name and $date during
- *   template_preprocess_node().
- * - $classes: String of classes that can be used to style contextually through
- *   CSS. It can be manipulated through the variable $classes_array from
- *   preprocess functions. The default values can be one or more of the
- *   following:
- *   - node: The current template type; for example, "theming hook".
- *   - node-[type]: The current node type. For example, if the node is a
- *     "Blog entry" it would result in "node-blog". Note that the machine
- *     name will often be in a short form of the human readable label.
- *   - node-teaser: Nodes in teaser form.
- *   - node-preview: Nodes in preview mode.
- *   The following are controlled through the node publishing options.
- *   - node-promoted: Nodes promoted to the front page.
- *   - node-sticky: Nodes ordered above other non-sticky nodes in teaser
- *     listings.
- *   - node-unpublished: Unpublished nodes visible only to administrators.
- * - $title_prefix (array): An array containing additional output populated by
- *   modules, intended to be displayed in front of the main title tag that
- *   appears in the template.
- * - $title_suffix (array): An array containing additional output populated by
- *   modules, intended to be displayed after the main title tag that appears in
- *   the template.
- *
- * Other variables:
- * - $node: Full node object. Contains data that may not be safe.
- * - $type: Node type; for example, story, page, blog, etc.
- * - $comment_count: Number of comments attached to the node.
- * - $uid: User ID of the node author.
- * - $created: Time the node was published formatted in Unix timestamp.
- * - $classes_array: Array of html class attribute values. It is flattened
- *   into a string within the variable $classes.
- * - $zebra: Outputs either "even" or "odd". Useful for zebra striping in
- *   teaser listings.
- * - $id: Position of the node. Increments each time it's output.
- *
- * Node status variables:
- * - $view_mode: View mode; for example, "full", "teaser".
- * - $teaser: Flag for the teaser state (shortcut for $view_mode == 'teaser').
- * - $page: Flag for the full page state.
- * - $promote: Flag for front page promotion state.
- * - $sticky: Flags for sticky post setting.
- * - $status: Flag for published status.
- * - $comment: State of comment settings for the node.
- * - $readmore: Flags true if the teaser content of the node cannot hold the
- *   main body content.
- * - $is_front: Flags true when presented in the front page.
- * - $logged_in: Flags true when the current user is a logged-in member.
- * - $is_admin: Flags true when the current user is an administrator.
- *
- * Field variables: for each field instance attached to the node a corresponding
- * variable is defined; for example, $node->body becomes $body. When needing to
- * access a field's raw values, developers/themers are strongly encouraged to
- * use these variables. Otherwise they will have to explicitly specify the
- * desired field language; for example, $node->body['en'], thus overriding any
- * language negotiation rule that was previously applied.
- *
- * @see template_preprocess()
- * @see template_preprocess_node()
- * @see template_process()
- *
- * @ingroup themeable
- */
-?>
-<div id="node-<?php print $node->nid; ?>" class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>>
-
-  <?php print $user_picture; ?>
-
-  <?php print render($title_prefix); ?>
-  <?php if (!$page): ?>
-    <h2<?php print $title_attributes; ?>><a href="<?php print $node_url; ?>"><?php print $title; ?></a></h2>
-  <?php endif; ?>
-  <?php print render($title_suffix); ?>
-
-  <?php if ($display_submitted): ?>
-    <div class="submitted">
-      <?php print $submitted; ?>
-    </div>
-  <?php endif; ?>
-
-  <div class="content"<?php print $content_attributes; ?>>
-    <?php
-      // We hide the comments and links now so that we can render them later.
-      hide($content['comments']);
-      hide($content['links']);
-      print render($content);
-    ?>
-  </div>
-
-  <?php print render($content['links']); ?>
-
-  <?php print render($content['comments']); ?>
-
-</div>
diff --git a/modules/node/tests/node_access_test.info b/modules/node/tests/node_access_test.info
deleted file mode 100644
index dc5e530..0000000
--- a/modules/node/tests/node_access_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Node module access tests"
-description = "Support module for node permission testing."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/node/tests/node_access_test.install b/modules/node/tests/node_access_test.install
deleted file mode 100644
index 1f33d51..0000000
--- a/modules/node/tests/node_access_test.install
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the node_access_test module.
- */
-
-/**
- * Implements hook_schema().
- */
-function node_access_test_schema() {
-  $schema['node_access_test'] = array(
-    'description' => 'The base table for node_access_test.',
-    'fields' => array(
-      'nid' => array(
-        'description' => 'The {node}.nid this record affects.',
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-      'private' => array(
-        'description' => 'Boolean indicating whether the node is private (visible to administrator) or not (visible to non-administrators).',
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-    ),
-    'indexes' => array(
-      'nid' => array('nid'),
-    ),
-    'primary key' => array('nid'),
-    'foreign keys' => array(
-      'versioned_node' => array(
-        'table' => 'node',
-        'columns' => array('nid' => 'nid'),
-      ),
-    ),
-  );
-
-  return $schema;
-}
diff --git a/modules/node/tests/node_access_test.module b/modules/node/tests/node_access_test.module
deleted file mode 100644
index ec35c41..0000000
--- a/modules/node/tests/node_access_test.module
+++ /dev/null
@@ -1,230 +0,0 @@
-<?php
-
-/**
- * @file
- * A dummy module implementing node access related hooks for testing purposes.
- *
- * A dummy module implementing node access related hooks to test API interaction
- * with the Node module. This module restricts view permission to those with
- * a special 'node test view' permission.
- */
-
-/**
- * Implements hook_node_grants().
- */
-function node_access_test_node_grants($account, $op) {
-  $grants = array();
-  // First grant a grant to the author for own content.
-  $grants['node_access_test_author'] = array($account->uid);
-  if ($op == 'view' && user_access('node test view', $account)) {
-    $grants['node_access_test'] = array(8888, 8889);
-  }
-  if ($op == 'view' && $account->uid == variable_get('node_test_node_access_all_uid', 0)) {
-    $grants['node_access_all'] = array(0);
-  }
-  return $grants;
-}
-
-/**
- * Implements hook_node_access_records().
- */
-function node_access_test_node_access_records($node) {
-  $grants = array();
-  // For NodeAccessBaseTableTestCase, only set records for private nodes.
-  if (!variable_get('node_access_test_private') || $node->private) {
-    $grants[] = array(
-      'realm' => 'node_access_test',
-      'gid' => 8888,
-      'grant_view' => 1,
-      'grant_update' => 0,
-      'grant_delete' => 0,
-      'priority' => 0,
-    );
-    $grants[] = array(
-      'realm' => 'node_access_test',
-      'gid' => 8889,
-      'grant_view' => 1,
-      'grant_update' => 0,
-      'grant_delete' => 0,
-      'priority' => 0,
-    );
-    // For the author realm, the GID is equivalent to a UID, which
-    // means there are many many groups of just 1 user.
-    $grants[] = array(
-      'realm' => 'node_access_test_author',
-      'gid' => $node->uid,
-      'grant_view' => 1,
-      'grant_update' => 1,
-      'grant_delete' => 1,
-      'priority' => 0,
-    );
-  }
-
-  return $grants;
-}
-
-/**
- * Implements hook_permission().
- *
- * Sets up permissions for this module.
- */
-function node_access_test_permission() {
-  return array('node test view' => array('title' => 'View content'));
-}
-
-/**
- * Implements hook_menu().
- *
- * Sets up a page that lists nodes.
- */
-function node_access_test_menu() {
-  $items = array();
-  $items['node_access_test_page'] = array(
-    'title' => 'Node access test',
-    'page callback' => 'node_access_test_page',
-    'access arguments' => array('access content'),
-    'type' => MENU_SUGGESTED_ITEM,
-  );
-  $items['node_access_entity_test_page'] = array(
-    'title' => 'Node access test',
-    'page callback' => 'node_access_entity_test_page',
-    'access arguments' => array('access content'),
-    'type' => MENU_SUGGESTED_ITEM,
-  );
-  return $items;
-}
-
-/**
- * Page callback for node access test page.
- *
- * Page should say "No nodes" if there are no nodes, and "Yes, # nodes" (with
- * the number filled in) if there were nodes the user could access. Also, the
- * database query is shown, and a list of the node IDs, for debugging purposes.
- * And if there is a query exception, the page says "Exception" and gives the
- * error.
- */
-function node_access_test_page() {
-  $output = '';
-
-  try {
-    $query = db_select('node', 'mytab')
-      ->fields('mytab');
-    $query->addTag('node_access');
-    $result = $query->execute()->fetchAll();
-
-    if (count($result)) {
-      $output .= '<p>Yes, ' . count($result) . ' nodes</p>';
-      $output .= '<ul>';
-      foreach ($result as $item) {
-        $output .= '<li>' . $item->nid . '</li>';
-      }
-      $output .= '</ul>';
-    }
-    else {
-      $output .= '<p>No nodes</p>';
-    }
-
-    $output .= '<p>' . ((string) $query ) . '</p>';
-  }
-  catch (Exception $e) {
-    $output = '<p>Exception</p>';
-    $output .= '<p>' . $e->getMessage() . '</p>';
-  }
-
-  return $output;
-}
-
-/**
- * Page callback for node access entity test page.
- *
- * Page should say "No nodes" if there are no nodes, and "Yes, # nodes" (with
- * the number filled in) if there were nodes the user could access. Also, the
- * database query is shown, and a list of the node IDs, for debugging purposes.
- * And if there is a query exception, the page says "Exception" and gives the
- * error.
- *
- * @see node_access_test_menu()
- */
-function node_access_entity_test_page() {
-  $output = '';
-  try {
-    $query = new EntityFieldQuery;
-    $result = $query->fieldCondition('body', 'value', 'A', 'STARTS_WITH')->execute();
-    if (!empty($result['node'])) {
-      $output .= '<p>Yes, ' . count($result['node']) . ' nodes</p>';
-      $output .= '<ul>';
-      foreach ($result['node'] as $nid => $v) {
-        $output .= '<li>' . $nid . '</li>';
-      }
-      $output .= '</ul>';
-    }
-    else {
-      $output .= '<p>No nodes</p>';
-    }
-  }
-  catch (Exception $e) {
-    $output = '<p>Exception</p>';
-    $output .= '<p>' . $e->getMessage() . '</p>';
-  }
-
-  return $output;
-}
-
-/**
- * Implements hook_form_BASE_FORM_ID_alter().
- */
-function node_access_test_form_node_form_alter(&$form, $form_state) {
-  // Only show this checkbox for NodeAccessBaseTableTestCase.
-  if (variable_get('node_access_test_private')) {
-    $form['private'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Private'),
-      '#description' => t('Check here if this content should be set private and only shown to privileged users.'),
-      '#default_value' => isset($form['#node']->private) ? $form['#node']->private : FALSE,
-    );
-  }
-}
-
-/**
- * Implements hook_node_load().
- */
-function node_access_test_node_load($nodes, $types) {
-  $result = db_query('SELECT nid, private FROM {node_access_test} WHERE nid IN(:nids)', array(':nids' => array_keys($nodes)));
-  foreach ($result as $record) {
-    $nodes[$record->nid]->private = $record->private;
-  }
-}
-
-/**
- * Implements hook_node_delete().
- */
-
-function node_access_test_node_delete($node) {
-  db_delete('node_access_test')->condition('nid', $node->nid)->execute();
-}
-
-/**
- * Implements hook_node_insert().
- */
-function node_access_test_node_insert($node) {
-  _node_access_test_node_write($node);
-}
-
-/**
- * Implements hook_nodeapi_update().
- */
-function node_access_test_node_update($node) {
-  _node_access_test_node_write($node);
-}
-
-/**
- * Helper for node insert/update.
- */
-function _node_access_test_node_write($node) {
-  if (isset($node->private)) {
-    db_merge('node_access_test')
-      ->key(array('nid' => $node->nid))
-      ->fields(array('private' => (int) $node->private))
-      ->execute();
-  }
-}
diff --git a/modules/node/tests/node_test.info b/modules/node/tests/node_test.info
deleted file mode 100644
index fa6c093..0000000
--- a/modules/node/tests/node_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Node module tests"
-description = "Support module for node related testing."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/node/tests/node_test_exception.info b/modules/node/tests/node_test_exception.info
deleted file mode 100644
index 1a339e0..0000000
--- a/modules/node/tests/node_test_exception.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Node module exception tests"
-description = "Support module for node related exception testing."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/node/tests/node_test_exception.module b/modules/node/tests/node_test_exception.module
deleted file mode 100644
index 66bc717..0000000
--- a/modules/node/tests/node_test_exception.module
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-/**
- * @file
- * A module implementing node related hooks to test API interaction.
- */
-
-/**
- * Implements hook_node_insert().
- */
-function node_test_exception_node_insert($node) {
-  if ($node->title == 'testing_transaction_exception') {
-    throw new Exception('Test exception for rollback.');
-  }
-}
diff --git a/modules/openid/login-bg.png b/modules/openid/login-bg.png
deleted file mode 100644
index 532614f..0000000
Binary files a/modules/openid/login-bg.png and /dev/null differ
diff --git a/modules/openid/openid-rtl.css b/modules/openid/openid-rtl.css
deleted file mode 100644
index 861f6d7..0000000
--- a/modules/openid/openid-rtl.css
+++ /dev/null
@@ -1,18 +0,0 @@
-
-#edit-openid-identifier {
-  background-position: right 50%;
-  padding-left: 0;
-  padding-right: 20px;
-}
-#user-login .openid-links {
-  padding-right: 0;
-}
-html.js #user-login-form li.openid-link,
-html.js #user-login li.openid-link {
-  margin-right: 0;
-}
-#user-login-form li.openid-link a,
-#user-login li.openid-link a {
-  background-position: right top;
-  padding: 0 1.5em 0 0;
-}
diff --git a/modules/openid/openid.api.php b/modules/openid/openid.api.php
deleted file mode 100644
index 5e3d15d..0000000
--- a/modules/openid/openid.api.php
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-
-/**
- * @file
- * Hooks provided by the OpenID module.
- */
-
-/**
- * @addtogroup hooks
- * @{
- */
-
-/**
- * Allow modules to modify the OpenID request parameters.
- *
- * @param $op
- *   The operation to be performed.
- *   Possible values:
- *   - request: Modify parameters before they are sent to the OpenID provider.
- * @param $request
- *   An associative array of parameter defaults to which to modify or append.
- * @return
- *   An associative array of parameters to be merged with the default list.
- *
- */
-function hook_openid($op, $request) {
-  if ($op == 'request') {
-    $request['openid.identity'] = 'http://myname.myopenid.com/';
-  }
-  return $request;
-}
-
-/**
- * Allow modules to act upon a successful OpenID login.
- *
- * @param $response
- *   Response values from the OpenID Provider.
- * @param $account
- *   The Drupal user account that logged in
- *
- */
-function hook_openid_response($response, $account) {
-  if (isset($response['openid.ns.ax'])) {
-    _mymodule_store_ax_fields($response, $account);
-  }
-}
-
-/**
- * Allow modules to declare OpenID discovery methods.
- *
- * The discovery function callbacks will be called in turn with an unique
- * parameter, the claimed identifier. They have to return an associative array
- * with array of services and claimed identifier in the same form as returned by
- * openid_discover(). The resulting array must contain following keys:
- *   - 'services' (required) an array of discovered services (including OpenID
- *   version, endpoint URI, etc).
- *   - 'claimed_id' (optional) new claimed identifer, found by following HTTP
- *   redirects during the services discovery.
- *
- * The first discovery method that succeed (return at least one services) will
- * stop the discovery process.
- *
- * @return
- *   An associative array which keys are the name of the discovery methods and
- *   values are function callbacks.
- *
- * @see hook_openid_discovery_method_info_alter()
- */
-function hook_openid_discovery_method_info() {
-  return array(
-    'new_discovery_idea' => '_my_discovery_method',
-  );
-}
-
-/**
- * Allow modules to alter discovery methods.
- */
-function hook_openid_discovery_method_info_alter(&$methods) {
-  // Remove XRI discovery scheme.
-  unset($methods['xri']);
-}
-
-/**
- * Allow modules to declare OpenID normalization methods.
- *
- * The discovery function callbacks will be called in turn with an unique
- * parameter, the identifier to normalize. They have to return a normalized
- * identifier, or NULL if the identifier is not in a form they can handle.
- *
- * The first normalization method that succeed (return a value that is not NULL)
- * will stop the normalization process.
- *
- * @return
- *   An array with a set of function callbacks, that will be called in turn
- *   when normalizing an OpenID identifier. The normalization functions have
- *   to return a normalized identifier, or NULL if the identifier is not in
- *   a form they can handle.
- * @see hook_openid_normalization_method_info_alter()
- */
-function hook_openid_normalization_method_info() {
-  return array(
-    'new_normalization_idea' => '_my_normalization_method',
-  );
-}
-
-/**
- * Allow modules to alter normalization methods.
- */
-function hook_openid_normalization_method_info_alter(&$methods) {
-  // Remove Google IDP normalization.
-  unset($methods['google_idp']);
-}
-
-/**
- * @} End of "addtogroup hooks".
- */
diff --git a/modules/openid/openid.css b/modules/openid/openid.css
deleted file mode 100644
index 48b170f..0000000
--- a/modules/openid/openid.css
+++ /dev/null
@@ -1,46 +0,0 @@
-
-#edit-openid-identifier {
-  background-image: url("login-bg.png");
-  background-position: left 50%; /* LTR */
-  background-repeat: no-repeat;
-  padding-left: 20px; /* LTR */
-}
-div.form-item-openid-identifier {
-  display: block;
-}
-html.js #user-login-form div.form-item-openid-identifier,
-html.js #user-login div.form-item-openid-identifier {
-  display: none;
-}
-#user-login-form ul {
-  margin-top: 0;
-}
-#user-login ul {
-  margin: 0 0 5px;
-}
-#user-login ul li {
-  margin: 0;
-}
-#user-login-form .openid-links {
-  padding-bottom: 0;
-}
-#user-login .openid-links {
-  padding-left: 0; /* LTR */
-}
-#user-login-form .openid-links li,
-#user-login .openid-links li {
-  display: none;
-  list-style: none;
-}
-html.js #user-login-form li.openid-link,
-html.js #user-login li.openid-link {
-  display: block;
-  margin-left: 0; /* LTR */
-}
-#user-login-form li.openid-link a,
-#user-login li.openid-link a {
-  background-image: url("login-bg.png");
-  background-position: left top; /* LTR */
-  background-repeat: no-repeat;
-  padding: 0 0 0 1.5em; /* LTR */
-}
diff --git a/modules/openid/openid.info b/modules/openid/openid.info
deleted file mode 100644
index 6a1843c..0000000
--- a/modules/openid/openid.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = OpenID
-description = "Allows users to log into your site using OpenID."
-version = VERSION
-package = Core
-core = 7.x
-files[] = openid.test
diff --git a/modules/openid/openid.js b/modules/openid/openid.js
deleted file mode 100644
index 4a09e5a..0000000
--- a/modules/openid/openid.js
+++ /dev/null
@@ -1,49 +0,0 @@
-(function ($) {
-
-Drupal.behaviors.openid = {
-  attach: function (context) {
-    var loginElements = $('.form-item-name, .form-item-pass, li.openid-link');
-    var openidElements = $('.form-item-openid-identifier, li.user-link');
-    var cookie = $.cookie('Drupal.visitor.openid_identifier');
-
-    // This behavior attaches by ID, so is only valid once on a page.
-    if (!$('#edit-openid-identifier.openid-processed').length) {
-      if (cookie) {
-        $('#edit-openid-identifier').val(cookie);
-      }
-      if ($('#edit-openid-identifier').val() || location.hash == '#openid-login') {
-        $('#edit-openid-identifier').addClass('openid-processed');
-        loginElements.hide();
-        // Use .css('display', 'block') instead of .show() to be Konqueror friendly.
-        openidElements.css('display', 'block');
-      }
-    }
-
-    $('li.openid-link:not(.openid-processed)', context)
-      .addClass('openid-processed')
-      .click(function () {
-         loginElements.hide();
-         openidElements.css('display', 'block');
-        // Remove possible error message.
-        $('#edit-name, #edit-pass').removeClass('error');
-        $('div.messages.error').hide();
-        // Set focus on OpenID Identifier field.
-        $('#edit-openid-identifier')[0].focus();
-        return false;
-      });
-    $('li.user-link:not(.openid-processed)', context)
-      .addClass('openid-processed')
-      .click(function () {
-         openidElements.hide();
-         loginElements.css('display', 'block');
-        // Clear OpenID Identifier field and remove possible error message.
-        $('#edit-openid-identifier').val('').removeClass('error');
-        $('div.messages.error').css('display', 'block');
-        // Set focus on username field.
-        $('#edit-name')[0].focus();
-        return false;
-      });
-  }
-};
-
-})(jQuery);
diff --git a/modules/openid/openid.pages.inc b/modules/openid/openid.pages.inc
deleted file mode 100644
index 8a52f20..0000000
--- a/modules/openid/openid.pages.inc
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-
-/**
- * @file
- * User page callbacks for the openid module.
- */
-
-/**
- * Menu callback; Process an OpenID authentication.
- */
-function openid_authentication_page() {
-  $result = openid_complete();
-  switch ($result['status']) {
-    case 'success':
-      return openid_authentication($result);
-    case 'failed':
-      drupal_set_message(t('OpenID login failed.'), 'error');
-      break;
-    case 'cancel':
-      drupal_set_message(t('OpenID login cancelled.'));
-      break;
-  }
-  drupal_goto();
-}
-
-/**
- * Menu callback; Manage OpenID identities for the specified user.
- */
-function openid_user_identities($account) {
-  drupal_set_title(format_username($account));
-  drupal_add_css(drupal_get_path('module', 'openid') . '/openid.css');
-
-  // Check to see if we got a response
-  $result = openid_complete();
-  if ($result['status'] == 'success') {
-    $identity = $result['openid.claimed_id'];
-    $query = db_insert('authmap')
-      ->fields(array(
-        'uid' => $account->uid,
-        'authname' => $identity,
-        'module' => 'openid',
-      ))
-      ->execute();
-    drupal_set_message(t('Successfully added %identity', array('%identity' => $identity)));
-  }
-
-  $header = array(t('OpenID'), t('Operations'));
-  $rows = array();
-
-  $result = db_query("SELECT * FROM {authmap} WHERE module='openid' AND uid=:uid", array(':uid' => $account->uid));
-  foreach ($result as $identity) {
-    $rows[] = array(check_plain($identity->authname), l(t('Delete'), 'user/' . $account->uid . '/openid/delete/' . $identity->aid));
-  }
-
-  $build['openid_table'] = array(
-    '#theme' => 'table',
-    '#header' => $header,
-    '#rows' => $rows,
-    '#empty' => t('No OpenID identities available for this account.'),
-  );
-  $build['openid_user_add'] = drupal_get_form('openid_user_add');
-  return $build;
-}
-
-/**
- * Form builder; Add an OpenID identity.
- *
- * @ingroup forms
- * @see openid_user_add_validate()
- */
-function openid_user_add() {
-  $form['openid_identifier'] = array(
-    '#type' => 'textfield',
-    '#title' => t('OpenID'),
-  );
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Add an OpenID'));
-  return $form;
-}
-
-function openid_user_add_validate($form, &$form_state) {
-  // Check for existing entries.
-  $claimed_id = openid_normalize($form_state['values']['openid_identifier']);
-  if (db_query("SELECT authname FROM {authmap} WHERE authname = :authname", (array(':authname' => $claimed_id)))->fetchField()) {
-    form_set_error('openid_identifier', t('That OpenID is already in use on this site.'));
-  }
-}
-
-function openid_user_add_submit($form, &$form_state) {
-  $return_to = url('user/' . arg(1) . '/openid', array('absolute' => TRUE));
-  openid_begin($form_state['values']['openid_identifier'], $return_to);
-}
-
-/**
- * Menu callback; Delete the specified OpenID identity from the system.
- */
-function openid_user_delete_form($form, $form_state, $account, $aid = 0) {
-  $authname = db_query("SELECT authname FROM {authmap} WHERE uid = :uid AND aid = :aid AND module = 'openid'", array(
-    ':uid' => $account->uid,
-    ':aid' => $aid,
-  ))
-  ->fetchField();
-  return confirm_form(array(), t('Are you sure you want to delete the OpenID %authname for %user?', array('%authname' => $authname, '%user' => $account->name)), 'user/' . $account->uid . '/openid');
-}
-
-function openid_user_delete_form_submit($form, &$form_state) {
-  $query = db_delete('authmap')
-    ->condition('uid', $form_state['build_info']['args'][0]->uid)
-    ->condition('aid', $form_state['build_info']['args'][1])
-    ->condition('module', 'openid')
-    ->execute();
-  if ($query) {
-    drupal_set_message(t('OpenID deleted.'));
-  }
-  $form_state['redirect'] = 'user/' . $form_state['build_info']['args'][0]->uid . '/openid';
-}
diff --git a/modules/openid/tests/openid_test.info b/modules/openid/tests/openid_test.info
deleted file mode 100644
index 755a5ee..0000000
--- a/modules/openid/tests/openid_test.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = OpenID dummy provider
-description = "OpenID provider used for testing."
-package = Testing
-version = VERSION
-core = 7.x
-dependencies[] = openid
-hidden = TRUE
diff --git a/modules/openid/tests/openid_test.module b/modules/openid/tests/openid_test.module
deleted file mode 100644
index bcf9f42..0000000
--- a/modules/openid/tests/openid_test.module
+++ /dev/null
@@ -1,367 +0,0 @@
-<?php
-
-/**
- * @file
- * Dummy OpenID Provider used with SimpleTest.
- *
- * The provider simply responds positively to all authentication requests. In
- * addition to a Provider Endpoint (a URL used for Drupal to communicate with
- * the provider using the OpenID Authentication protocol) the module provides
- * URLs used by the various discovery mechanisms.
- *
- * When a user enters an OpenID identity, the Relying Party (in the testing
- * scenario, this is the OpenID module) looks up the URL of the Provider
- * Endpoint using one of several discovery mechanisms. The Relying Party then
- * redirects the user to Provider Endpoint. The provider verifies the user's
- * identity and redirects the user back to the Relying Party accompanied by a
- * signed message confirming the identity. Before redirecting to a provider for
- * the first time, the Relying Party fetches a secret MAC key from the provider
- * by doing a direct "associate" HTTP request to the Provider Endpoint. This
- * key is used for verifying the signed messages from the provider.
- */
-
-/**
- * Implements hook_menu().
- */
-function openid_test_menu() {
-  $items['openid-test/yadis/xrds'] = array(
-    'title' => 'XRDS service document',
-    'page callback' => 'openid_test_yadis_xrds',
-    'access callback' => TRUE,
-    'type' => MENU_CALLBACK,
-  );
-  $items['openid-test/yadis/x-xrds-location'] = array(
-    'title' => 'Yadis discovery using X-XRDS-Location header',
-    'page callback' => 'openid_test_yadis_x_xrds_location',
-    'access callback' => TRUE,
-    'type' => MENU_CALLBACK,
-  );
-  $items['openid-test/yadis/http-equiv'] = array(
-    'title' => 'Yadis discovery using <meta http-equiv="X-XRDS-Location" ...>',
-    'page callback' => 'openid_test_yadis_http_equiv',
-    'access callback' => TRUE,
-    'type' => MENU_CALLBACK,
-  );
-  $items['openid-test/html/openid1'] = array(
-    'title' => 'HTML-based discovery using <link rel="openid.server" ...>',
-    'page callback' => 'openid_test_html_openid1',
-    'access callback' => TRUE,
-    'type' => MENU_CALLBACK,
-  );
-  $items['openid-test/html/openid2'] = array(
-    'title' => 'HTML-based discovery using <link rel="openid2.provider" ...>',
-    'page callback' => 'openid_test_html_openid2',
-    'access callback' => TRUE,
-    'type' => MENU_CALLBACK,
-  );
-  $items['openid-test/endpoint'] = array(
-    'title' => 'OpenID Provider Endpoint',
-    'page callback' => 'openid_test_endpoint',
-    'access callback' => TRUE,
-    'type' => MENU_CALLBACK,
-  );
-  $items['openid-test/redirect'] = array(
-    'title' => 'OpenID Provider Redirection Point',
-    'page callback' => 'openid_test_redirect',
-    'access callback' => TRUE,
-    'type' => MENU_CALLBACK,
-  );
-  $items['openid-test/redirected/%/%'] = array(
-    'title' => 'OpenID Provider Final URL',
-    'page callback' => 'openid_test_redirected_method',
-    'page arguments' => array(2, 3),
-    'access callback' => TRUE,
-    'type' => MENU_CALLBACK,
-  );
-  return $items;
-}
-
-/**
- * Implements hook_menu_site_status_alter().
- */
-function openid_test_menu_site_status_alter(&$menu_site_status, $path) {
-  // Allow access to openid endpoint and identity even in offline mode.
-  if ($menu_site_status == MENU_SITE_OFFLINE && user_is_anonymous() && in_array($path, array('openid-test/yadis/xrds', 'openid-test/endpoint'))) {
-    $menu_site_status = MENU_SITE_ONLINE;
-  }
-}
-
-/**
- * Menu callback; XRDS document that references the OP Endpoint URL.
- */
-function openid_test_yadis_xrds() {
-  if ($_SERVER['HTTP_ACCEPT'] == 'application/xrds+xml') {
-    // Only respond to XRI requests for one specific XRI. The is used to verify
-    // that the XRI has been properly encoded. The "+" sign in the _xrd_r query
-    // parameter is decoded to a space by PHP.
-    if (arg(3) == 'xri') {
-      if (variable_get('clean_url', 0)) {
-        if (arg(4) != '@example*résumé;%25' || $_GET['_xrd_r'] != 'application/xrds xml') {
-          drupal_not_found();
-        }
-      }
-      else {
-        // Drupal cannot properly emulate an XRI proxy resolver using unclean
-        // URLs, so the arguments gets messed up.
-        if (arg(4) . '/' . arg(5) != '@example*résumé;%25?_xrd_r=application/xrds xml') {
-          drupal_not_found();
-        }
-      }
-    }
-    drupal_add_http_header('Content-Type', 'application/xrds+xml');
-    print '<?xml version="1.0" encoding="UTF-8"?>';
-    if (!empty($_GET['doctype'])) {
-      print "\n<!DOCTYPE dct [ <!ELEMENT blue (#PCDATA)> ]>\n";
-    }
-    print '
-      <xrds:XRDS xmlns:xrds="xri://$xrds" xmlns="xri://$xrd*($v*2.0)" xmlns:openid="http://openid.net/xmlns/1.0">
-        <XRD>
-          <Status cid="' . check_plain(variable_get('openid_test_canonical_id_status', 'verified')) . '"/>
-          <ProviderID>xri://@</ProviderID>
-          <CanonicalID>http://example.com/user</CanonicalID>
-          <Service>
-            <Type>http://example.com/this-is-ignored</Type>
-          </Service>
-          <Service priority="5">
-            <Type>http://openid.net/signon/1.0</Type>
-            <URI>http://example.com/this-is-only-openid-1.0</URI>
-          </Service>
-          <Service priority="10">
-            <Type>http://specs.openid.net/auth/2.0/signon</Type>
-            <Type>http://openid.net/srv/ax/1.0</Type>
-            <URI>' . url('openid-test/endpoint', array('absolute' => TRUE)) . '</URI>
-            <LocalID>http://example.com/xrds</LocalID>
-          </Service>
-          <Service priority="15">
-            <Type>http://specs.openid.net/auth/2.0/signon</Type>
-            <URI>http://example.com/this-has-too-low-priority</URI>
-          </Service>
-          <Service>
-            <Type>http://specs.openid.net/auth/2.0/signon</Type>
-            <URI>http://example.com/this-has-too-low-priority</URI>
-          </Service>
-          ';
-    if (arg(3) == 'server') {
-      print '
-          <Service>
-            <Type>http://specs.openid.net/auth/2.0/server</Type>
-            <URI>http://example.com/this-has-too-low-priority</URI>
-          </Service>
-          <Service priority="20">
-            <Type>http://specs.openid.net/auth/2.0/server</Type>
-            <URI>' . url('openid-test/endpoint', array('absolute' => TRUE)) . '</URI>
-          </Service>';
-    }
-    elseif (arg(3) == 'delegate') {
-      print '
-          <Service priority="0">
-            <Type>http://specs.openid.net/auth/2.0/signon</Type>
-            <Type>http://openid.net/srv/ax/1.0</Type>
-            <URI>' . url('openid-test/endpoint', array('absolute' => TRUE)) . '</URI>
-            <openid:Delegate>http://example.com/xrds-delegate</openid:Delegate>
-          </Service>';
-    }
-    print '
-        </XRD>
-      </xrds:XRDS>';
-  }
-  else {
-    return t('This is a regular HTML page. If the client sends an Accept: application/xrds+xml header when requesting this URL, an XRDS document is returned.');
-  }
-}
-
-/**
- * Menu callback; regular HTML page with an X-XRDS-Location HTTP header.
- */
-function openid_test_yadis_x_xrds_location() {
-  drupal_add_http_header('X-XRDS-Location', url('openid-test/yadis/xrds', array('absolute' => TRUE)));
-  return t('This page includes an X-RDS-Location HTTP header containing the URL of an XRDS document.');
-}
-
-/**
- * Menu callback; regular HTML page with <meta> element.
- */
-function openid_test_yadis_http_equiv() {
-  $element = array(
-    '#tag' => 'meta',
-    '#attributes' => array(
-      'http-equiv' => 'X-XRDS-Location',
-      'content' => url('openid-test/yadis/xrds', array('absolute' => TRUE)),
-    ),
-  );
-  drupal_add_html_head($element, 'openid_test_yadis_http_equiv');
-  return t('This page includes a &lt;meta equiv=...&gt; element containing the URL of an XRDS document.');
-}
-
-/**
- * Menu callback; regular HTML page with OpenID 1.0 <link> element.
- */
-function openid_test_html_openid1() {
-  drupal_add_html_head_link(array('rel' => 'openid.server', 'href' => url('openid-test/endpoint', array('absolute' => TRUE))));
-  drupal_add_html_head_link(array('rel' => 'openid.delegate', 'href' => 'http://example.com/html-openid1'));
-  return t('This page includes a &lt;link rel=...&gt; element containing the URL of an OpenID Provider Endpoint.');
-}
-
-/**
- * Menu callback; regular HTML page with OpenID 2.0 <link> element.
- */
-function openid_test_html_openid2() {
-  drupal_add_html_head_link(array('rel' => 'openid2.provider', 'href' => url('openid-test/endpoint', array('absolute' => TRUE))));
-  drupal_add_html_head_link(array('rel' => 'openid2.local_id', 'href' => 'http://example.com/html-openid2'));
-  return t('This page includes a &lt;link rel=...&gt; element containing the URL of an OpenID Provider Endpoint.');
-}
-
-/**
- * Menu callback; OpenID Provider Endpoint.
- *
- * It accepts "associate" requests directly from the Relying Party, and
- * "checkid_setup" requests made by the user's browser based on HTTP redirects
- * (in OpenID 1) or HTML forms (in OpenID 2) generated by the Relying Party.
- */
-function openid_test_endpoint() {
-  switch ($_REQUEST['openid_mode']) {
-    case 'associate':
-      _openid_test_endpoint_associate();
-      break;
-    case 'checkid_setup':
-      _openid_test_endpoint_authenticate();
-      break;
-  }
-}
-
-/**
- * Menu callback; redirect during Normalization/Discovery.
- */
-function openid_test_redirect($count = 0) {
-  if ($count == 0) {
-    $url = variable_get('openid_test_redirect_url', '');
-  }
-  else {
-    $url = url('openid-test/redirect/' . --$count, array('absolute' => TRUE));
-  }
-  $http_response_code = variable_get('openid_test_redirect_http_reponse_code', 301);
-  header('Location: ' . $url, TRUE, $http_response_code);
-  exit();
-}
-
-/**
- * Menu callback; respond with appropriate callback.
- */
-function openid_test_redirected_method($method1, $method2) {
-  return call_user_func('openid_test_' . $method1 . '_' . $method2);
-}
-
-/**
- * OpenID endpoint; handle "associate" requests (see OpenID Authentication 2.0,
- * section 8).
- *
- * The purpose of association is to send the secret MAC key to the Relying Party
- * using Diffie-Hellman key exchange. The MAC key is used in subsequent
- * "authenticate" requests. The "associate" request is made by the Relying Party
- * (in the testing scenario, this is the OpenID module that communicates with
- * the endpoint using drupal_http_request()).
- */
-function _openid_test_endpoint_associate() {
-  module_load_include('inc', 'openid');
-
-  // Use default parameters for Diffie-Helmann key exchange.
-  $mod = OPENID_DH_DEFAULT_MOD;
-  $gen = OPENID_DH_DEFAULT_GEN;
-
-  // Generate private Diffie-Helmann key.
-  $r = _openid_dh_rand($mod);
-  $private = _openid_math_add($r, 1);
-
-  // Calculate public Diffie-Helmann key.
-  $public = _openid_math_powmod($gen, $private, $mod);
-
-  // Calculate shared secret based on Relying Party's public key.
-  $cpub = _openid_dh_base64_to_long($_REQUEST['openid_dh_consumer_public']);
-  $shared = _openid_math_powmod($cpub, $private, $mod);
-
-  // Encrypt the MAC key using the shared secret.
-  $enc_mac_key = base64_encode(_openid_dh_xorsecret($shared, base64_decode(variable_get('mac_key'))));
-
-  // Generate response including our public key and the MAC key. Using our
-  // public key and its own private key, the Relying Party can calculate the
-  // shared secret, and with this it can decrypt the encrypted MAC key.
-  $response = array(
-    'ns' => 'http://specs.openid.net/auth/2.0',
-    'assoc_handle' => 'openid-test',
-    'session_type' => $_REQUEST['openid_session_type'],
-    'assoc_type' => $_REQUEST['openid_assoc_type'],
-    'expires_in' => '3600',
-    'dh_server_public' => _openid_dh_long_to_base64($public),
-    'enc_mac_key' => $enc_mac_key,
-  );
-
-  // Respond to Relying Party in the special Key-Value Form Encoding (see OpenID
-  // Authentication 1.0, section 4.1.1).
-  drupal_add_http_header('Content-Type', 'text/plain');
-  print _openid_create_message($response);
-}
-
-/**
- * OpenID endpoint; handle "authenticate" requests.
- *
- * All requests result in a successful response. The request is a GET or POST
- * made by the user's browser based on an HTML form or HTTP redirect generated
- * by the Relying Party. The user is redirected back to the Relying Party using
- * a URL containing a signed message in the query string confirming the user's
- * identity.
- */
-function _openid_test_endpoint_authenticate() {
-  module_load_include('inc', 'openid');
-
-  $expected_identity = variable_get('openid_test_identity');
-  if ($expected_identity && $_REQUEST['openid_identity'] != $expected_identity) {
-    $response = variable_get('openid_test_response', array()) + array(
-      'openid.ns' => OPENID_NS_2_0,
-      'openid.mode' => 'error',
-      'openid.error' => 'Unexpted identity',
-    );
-    drupal_add_http_header('Content-Type', 'text/plain');
-    header('Location: ' . url($_REQUEST['openid_return_to'], array('query' => $response, 'external' => TRUE)));
-    return;
-  }
-
-  // Generate unique identifier for this authentication.
-  $nonce = _openid_nonce();
-
-  // Generate response containing the user's identity.
-  $response = variable_get('openid_test_response', array()) + array(
-    'openid.ns' => OPENID_NS_2_0,
-    'openid.mode' => 'id_res',
-    'openid.op_endpoint' => url('openid-test/endpoint', array('absolute' => TRUE)),
-    'openid.claimed_id' => !empty($_REQUEST['openid_claimed_id']) ? $_REQUEST['openid_claimed_id'] : '',
-    'openid.identity' => $_REQUEST['openid_identity'],
-    'openid.return_to' => $_REQUEST['openid_return_to'],
-    'openid.response_nonce' => $nonce,
-    'openid.assoc_handle' => 'openid-test',
-  );
-
-  if (isset($response['openid.signed'])) {
-    $keys_to_sign = explode(',', $response['openid.signed']);
-  }
-  else {
-    // Unless openid.signed is explicitly defined, all keys are signed.
-    $keys_to_sign = array();
-    foreach ($response as $key => $value) {
-      // Strip off the "openid." prefix.
-      $keys_to_sign[] = substr($key, 7);
-    }
-    $response['openid.signed'] = implode(',', $keys_to_sign);
-  }
-
-  // Sign the message using the MAC key that was exchanged during association.
-  $association = new stdClass();
-  $association->mac_key = variable_get('mac_key');
-  if (!isset($response['openid.sig'])) {
-    $response['openid.sig'] = _openid_signature($association, $response, $keys_to_sign);
-  }
-
-  // Put the signed message into the query string of a URL supplied by the
-  // Relying Party, and redirect the user.
-  drupal_add_http_header('Content-Type', 'text/plain');
-  header('Location: ' . url($_REQUEST['openid_return_to'], array('query' => $response, 'external' => TRUE)));
-}
diff --git a/modules/overlay/images/background.png b/modules/overlay/images/background.png
deleted file mode 100644
index 9be2193..0000000
Binary files a/modules/overlay/images/background.png and /dev/null differ
diff --git a/modules/overlay/images/close-rtl.png b/modules/overlay/images/close-rtl.png
deleted file mode 100644
index ae05d11..0000000
Binary files a/modules/overlay/images/close-rtl.png and /dev/null differ
diff --git a/modules/overlay/images/close.png b/modules/overlay/images/close.png
deleted file mode 100644
index 436985e..0000000
Binary files a/modules/overlay/images/close.png and /dev/null differ
diff --git a/modules/overlay/overlay-child-rtl.css b/modules/overlay/overlay-child-rtl.css
deleted file mode 100644
index 2e5a267..0000000
--- a/modules/overlay/overlay-child-rtl.css
+++ /dev/null
@@ -1,40 +0,0 @@
-
-/**
- * @file
- * RTL styling for Overlay child pages.
- */
-
-html {
-  direction: rtl;
-}
-
-#overlay-title {
-  float: right;
-  left: auto;
-}
-#overlay {
-  padding: 0.2em;
-  padding-left: 26px;
-}
-#overlay-close-wrapper {
-  left: 0;
-  right: auto;
-}
-#overlay-close,
-#overlay-close:hover {
-  background: transparent url(images/close-rtl.png) no-repeat;
-  -moz-border-radius-topright: 0;
-  -webkit-border-top-right-radius: 0;
-  border-top-right-radius: 0;
-}
-
-/**
- * Tabs on the overlay.
- */
-#overlay-tabs {
-  left: 20px;
-  right: auto;
-}
-#overlay-tabs li {
-  margin: 0 -3px 0 0;
-}
diff --git a/modules/overlay/overlay-child.css b/modules/overlay/overlay-child.css
deleted file mode 100644
index 959ebdd..0000000
--- a/modules/overlay/overlay-child.css
+++ /dev/null
@@ -1,172 +0,0 @@
-
-/**
- * @file
- * Basic styling for the Overlay child pages.
- */
-
-html.js {
-  background: transparent !important;
-  overflow-y: scroll;
-}
-html.js body {
-  background: transparent !important;
-  margin-left: 0;
-  margin-right: 0;
-  padding: 20px 0;
-}
-
-#overlay {
-  display: table;
-  margin: 0 auto;
-  min-height: 100px;
-  min-width: 700px;
-  position: relative;
-  padding: .2em;
-  padding-bottom: 2em;
-  padding-right: 26px; /* LTR */
-  width: 88%;
-}
-#overlay-titlebar {
-  padding: 0 20px;
-  position: relative;
-  white-space: nowrap;
-  z-index: 100;
-}
-#overlay-content {
-  background: #fff;
-  clear: both;
-  color: #000;
-  padding: .5em 1em;
-  position: relative;
-}
-
-#overlay-title-wrapper {
-  overflow: hidden;
-}
-#overlay-title {
-  color: #fff;
-  float: left; /* LTR */
-  font-size: 20px;
-  margin: 0;
-  padding: 0.3em 0;
-}
-#overlay-title:active,
-#overlay-title:focus {
-  outline: 0;
-}
-
-.overlay #skip-link {
-  margin-top: -20px;
-}
-.overlay #skip-link a {
-  color: #fff; /* This is white to contrast with the dark background behind it. */
-}
-
-#overlay-close-wrapper {
-  position: absolute;
-  right: 0; /* LTR */
-}
-#overlay-close,
-#overlay-close:hover {
-  background: transparent url(images/close.png) no-repeat; /* LTR */
-  -moz-border-radius-topleft: 0; /* LTR */
-  -webkit-border-top-left-radius: 0; /* LTR */
-  border-top-left-radius: 0; /* LTR */
-  display: block;
-  height: 26px;
-  margin: 0;
-  padding: 0;
-  /* Replace with position:fixed to get a scrolling close button. */
-  position: absolute;
-  width: 26px;
-}
-
-/**
- * Tabs on the overlay.
- */
-#overlay-tabs {
-  line-height: 27px;
-  margin: -28px 0 0 0;
-  position: absolute;
-  right: 20px; /* LTR */
-  text-transform: uppercase;
-}
-#overlay-tabs li {
-  display: inline;
-  list-style: none;
-  margin: 0 0 0 -3px; /* LTR */
-  padding: 0;
-}
-#overlay-tabs li a,
-#overlay-tabs li a:active,
-#overlay-tabs li a:visited,
-#overlay-tabs li a:hover {
-  background-color: #a6a7a2;
-  -moz-border-radius: 8px 8px 0 0;
-  -webkit-border-top-left-radius: 8px;
-  -webkit-border-top-right-radius: 8px;
-  border-radius: 8px 8px 0 0;
-  color: #000;
-  display: inline-block;
-  font-size: 11px;
-  font-weight: bold;
-  margin: 0 0 2px 0;
-  outline: 0;
-  padding: 0 14px;
-  text-decoration: none;
-}
-#overlay-tabs li.active a,
-#overlay-tabs li.active a.active,
-#overlay-tabs li.active a:active,
-#overlay-tabs li.active a:visited {
-  background-color: #fff;
-  margin: 0;
-  padding-bottom: 2px;
-}
-#overlay-tabs li a:focus,
-#overlay-tabs li a:hover {
-  color: #fff;
-}
-#overlay-tabs li.active a:focus,
-#overlay-tabs li.active a:hover {
-  color: #000;
-}
-
-/**
- * Add to shortcuts link
- */
-#overlay-titlebar .add-or-remove-shortcuts {
-  padding-top: 0.9em;
-}
-
-/**
- * IE6 shows elements with position:fixed as position:static so replace
- * it with position:absolute;
- */
-* html #overlay-close,
-* html #overlay-close:hover {
-  position: absolute;
-}
-
-/**
- * Disable message.
- */
-#overlay-disable-message {
-  background-color: #fff;
-  margin: -20px auto 20px;
-  width: 80%;
-  -moz-border-radius: 0 0 8px 8px;
-  -webkit-border-bottom-left-radius: 8px;
-  -webkit-border-bottom-right-radius: 8px;
-  border-radius: 0 0 8px 8px;
-}
-.overlay-disable-message-focused {
-  padding: 0.5em;
-}
-.overlay-disable-message-focused a {
-  display: block;
-  float: left;
-}
-.overlay-disable-message-focused #overlay-dismiss-message {
-  float: right;
-}
diff --git a/modules/overlay/overlay-child.js b/modules/overlay/overlay-child.js
deleted file mode 100644
index 4ff6cf0..0000000
--- a/modules/overlay/overlay-child.js
+++ /dev/null
@@ -1,196 +0,0 @@
-/**
- * @file
- * Attaches the behaviors for the Overlay child pages.
- */
-
-(function ($) {
-
-/**
- * Attach the child dialog behavior to new content.
- */
-Drupal.behaviors.overlayChild = {
-  attach: function (context, settings) {
-    // Make sure this behavior is not processed more than once.
-    if (this.processed) {
-      return;
-    }
-    this.processed = true;
-
-    // If we cannot reach the parent window, break out of the overlay.
-    if (!parent.Drupal || !parent.Drupal.overlay) {
-      window.location = window.location.href.replace(/([?&]?)render=overlay&?/g, '$1').replace(/\?$/, '');
-    }
-
-    var settings = settings.overlayChild || {};
-
-    // If the entire parent window should be refreshed when the overlay is
-    // closed, pass that information to the parent window.
-    if (settings.refreshPage) {
-      parent.Drupal.overlay.refreshPage = true;
-    }
-
-    // If a form has been submitted successfully, then the server side script
-    // may have decided to tell the parent window to close the popup dialog.
-    if (settings.closeOverlay) {
-      parent.Drupal.overlay.bindChild(window, true);
-      // Use setTimeout to close the child window from a separate thread,
-      // because the current one is busy processing Drupal behaviors.
-      setTimeout(function () {
-        if (typeof settings.redirect == 'string') {
-          parent.Drupal.overlay.redirect(settings.redirect);
-        }
-        else {
-          parent.Drupal.overlay.close();
-        }
-      }, 1);
-      return;
-    }
-
-    // If one of the regions displaying outside the overlay needs to be
-    // reloaded immediately, let the parent window know.
-    if (settings.refreshRegions) {
-      parent.Drupal.overlay.refreshRegions(settings.refreshRegions);
-    }
-
-    // Ok, now we can tell the parent window we're ready.
-    parent.Drupal.overlay.bindChild(window);
-
-    // IE8 crashes on certain pages if this isn't called; reason unknown.
-    window.scrollTo(window.scrollX, window.scrollY);
-
-    // Attach child related behaviors to the iframe document.
-    Drupal.overlayChild.attachBehaviors(context, settings);
-
-    // There are two links within the message that informs people about the
-    // overlay and how to disable it. Make sure both links are visible when
-    // either one has focus and add a class to the wrapper for styling purposes.
-    $('#overlay-disable-message', context)
-      .focusin(function () {
-        $(this).addClass('overlay-disable-message-focused');
-        $('a.element-focusable', this).removeClass('element-invisible');
-      })
-      .focusout(function () {
-        $(this).removeClass('overlay-disable-message-focused');
-        $('a.element-focusable', this).addClass('element-invisible');
-      });
-  }
-};
-
-/**
- * Overlay object for child windows.
- */
-Drupal.overlayChild = Drupal.overlayChild || {
-  behaviors: {}
-};
-
-Drupal.overlayChild.prototype = {};
-
-/**
- * Attach child related behaviors to the iframe document.
- */
-Drupal.overlayChild.attachBehaviors = function (context, settings) {
-  $.each(this.behaviors, function () {
-    this(context, settings);
-  });
-};
-
-/**
- * Capture and handle clicks.
- *
- * Instead of binding a click event handler to every link we bind one to the
- * document and handle events that bubble up. This also allows other scripts
- * to bind their own handlers to links and also to prevent overlay's handling.
- */
-Drupal.overlayChild.behaviors.addClickHandler = function (context, settings) {
-  $(document).bind('click.drupal-overlay mouseup.drupal-overlay', $.proxy(parent.Drupal.overlay, 'eventhandlerOverrideLink'));
-};
-
-/**
- * Modify forms depending on their relation to the overlay.
- *
- * By default, forms are assumed to keep the flow in the overlay. Thus their
- * action attribute get a ?render=overlay suffix.
- */
-Drupal.overlayChild.behaviors.parseForms = function (context, settings) {
-  $('form', context).once('overlay', function () {
-    // Obtain the action attribute of the form.
-    var action = $(this).attr('action');
-    // Keep internal forms in the overlay.
-    if (action == undefined || (action.indexOf('http') != 0 && action.indexOf('https') != 0)) {
-      action += (action.indexOf('?') > -1 ? '&' : '?') + 'render=overlay';
-      $(this).attr('action', action);
-    }
-    // Submit external forms into a new window.
-    else {
-      $(this).attr('target', '_new');
-    }
-  });
-};
-
-/**
- * Replace the overlay title with a message while loading another page.
- */
-Drupal.overlayChild.behaviors.loading = function (context, settings) {
-  var $title;
-  var text = Drupal.t('Loading');
-  var dots = '';
-
-  $(document).bind('drupalOverlayBeforeLoad.drupal-overlay.drupal-overlay-child-loading', function () {
-    $title = $('#overlay-title').text(text);
-    var id = setInterval(function () {
-      dots = (dots.length > 10) ? '' : dots + '.';
-      $title.text(text + dots);
-    }, 500);
-  });
-};
-
-/**
- * Switch active tab immediately.
- */
-Drupal.overlayChild.behaviors.tabs = function (context, settings) {
-  var $tabsLinks = $('#overlay-tabs > li > a');
-
-  $('#overlay-tabs > li > a').bind('click.drupal-overlay', function () {
-    var active_tab = Drupal.t('(active tab)');
-    $tabsLinks.parent().siblings().removeClass('active').find('element-invisible:contains(' + active_tab + ')').appendTo(this);
-    $(this).parent().addClass('active');
-  });
-};
-
-/**
- * If the shortcut add/delete button exists, move it to the overlay titlebar.
- */
-Drupal.overlayChild.behaviors.shortcutAddLink = function (context, settings) {
-  // Remove any existing shortcut button markup from the titlebar.
-  $('#overlay-titlebar').find('.add-or-remove-shortcuts').remove();
-  // If the shortcut add/delete button exists, move it to the titlebar.
-  var $addToShortcuts = $('.add-or-remove-shortcuts');
-  if ($addToShortcuts.length) {
-    $addToShortcuts.insertAfter('#overlay-title');
-  }
-
-  $(document).bind('drupalOverlayBeforeLoad.drupal-overlay.drupal-overlay-child-loading', function () {
-    $('#overlay-titlebar').find('.add-or-remove-shortcuts').remove();
-  });
-};
-
-/**
- * Use displacement from parent window.
- */
-Drupal.overlayChild.behaviors.alterTableHeaderOffset = function (context, settings) {
-  if (Drupal.settings.tableHeaderOffset) {
-    Drupal.overlayChild.prevTableHeaderOffset = Drupal.settings.tableHeaderOffset;
-  }
-  Drupal.settings.tableHeaderOffset = 'Drupal.overlayChild.tableHeaderOffset';
-};
-
-/**
- * Callback for Drupal.settings.tableHeaderOffset.
- */
-Drupal.overlayChild.tableHeaderOffset = function () {
-  var topOffset = Drupal.overlayChild.prevTableHeaderOffset ? eval(Drupal.overlayChild.prevTableHeaderOffset + '()') : 0;
-
-  return topOffset + parseInt($(document.body).css('marginTop'));
-};
-
-})(jQuery);
diff --git a/modules/overlay/overlay-parent.css b/modules/overlay/overlay-parent.css
deleted file mode 100644
index 9459a7a..0000000
--- a/modules/overlay/overlay-parent.css
+++ /dev/null
@@ -1,55 +0,0 @@
-
-/**
- * @file
- * Basic styling for the Overlay module.
- */
-
-html.overlay-open,
-html.overlay-open body {
-  height: 100%;
-  overflow: hidden;
-}
-
-#overlay-container,
-.overlay-modal-background,
-.overlay-element {
-  height: 100%;
-  left: 0;
-  position: absolute;
-  top: 0;
-  width: 100%;
-  z-index: 500;
-}
-
-.overlay-modal-background {
-  /* Using a transparent png renders faster than using opacity */
-  background: transparent url(images/background.png) repeat;
-}
-
-.overlay-element {
-  background: transparent;
-  left: -200%;
-  z-index: 501;
-}
-.overlay-element.overlay-active {
-  left: 0;
-}
-
-html.overlay-open .displace-top,
-html.overlay-open .displace-bottom {
-  z-index: 600;
-}
-
-/**
- * Within the overlay parent, the message about disabling the overlay is for
- * screen-reader users only. It is always kept invisible with the
- * element-invisible class, and removed from the tab order. Overlay-child.css
- * contains styling for the same message appearing within the overlay, and
- * intended for sighted users.
- */
-#overlay-disable-message {
-  display: none;
-}
-html.overlay-open #overlay-disable-message {
-  display: block;
-}
diff --git a/modules/overlay/overlay-parent.js b/modules/overlay/overlay-parent.js
deleted file mode 100644
index 7452a51..0000000
--- a/modules/overlay/overlay-parent.js
+++ /dev/null
@@ -1,1015 +0,0 @@
-/**
- * @file
- * Attaches the behaviors for the Overlay parent pages.
- */
-
-(function ($) {
-
-/**
- * Open the overlay, or load content into it, when an admin link is clicked.
- */
-Drupal.behaviors.overlayParent = {
-  attach: function (context, settings) {
-    if (Drupal.overlay.isOpen) {
-      Drupal.overlay.makeDocumentUntabbable(context);
-    }
-
-    if (this.processed) {
-      return;
-    }
-    this.processed = true;
-
-    $(window)
-      // When the hash (URL fragment) changes, open the overlay if needed.
-      .bind('hashchange.drupal-overlay', $.proxy(Drupal.overlay, 'eventhandlerOperateByURLFragment'))
-      // Trigger the hashchange handler once, after the page is loaded, so that
-      // permalinks open the overlay.
-      .triggerHandler('hashchange.drupal-overlay');
-
-    $(document)
-      // Instead of binding a click event handler to every link we bind one to
-      // the document and only handle events that bubble up. This allows other
-      // scripts to bind their own handlers to links and also to prevent
-      // overlay's handling.
-      .bind('click.drupal-overlay mouseup.drupal-overlay', $.proxy(Drupal.overlay, 'eventhandlerOverrideLink'));
-  }
-};
-
-/**
- * Overlay object for parent windows.
- *
- * Events
- * Overlay triggers a number of events that can be used by other scripts.
- * - drupalOverlayOpen: This event is triggered when the overlay is opened.
- * - drupalOverlayBeforeClose: This event is triggered when the overlay attempts
- *   to close. If an event handler returns false, the close will be prevented.
- * - drupalOverlayClose: This event is triggered when the overlay is closed.
- * - drupalOverlayBeforeLoad: This event is triggered right before a new URL
- *   is loaded into the overlay.
- * - drupalOverlayReady: This event is triggered when the DOM of the overlay
- *   child document is fully loaded.
- * - drupalOverlayLoad: This event is triggered when the overlay is finished
- *   loading.
- * - drupalOverlayResize: This event is triggered when the overlay is being
- *   resized to match the parent window.
- */
-Drupal.overlay = Drupal.overlay || {
-  isOpen: false,
-  isOpening: false,
-  isClosing: false,
-  isLoading: false
-};
-
-Drupal.overlay.prototype = {};
-
-/**
- * Open the overlay.
- *
- * @param url
- *   The URL of the page to open in the overlay.
- *
- * @return
- *   TRUE if the overlay was opened, FALSE otherwise.
- */
-Drupal.overlay.open = function (url) {
-  // Just one overlay is allowed.
-  if (this.isOpen || this.isOpening) {
-    return this.load(url);
-  }
-  this.isOpening = true;
-  // Store the original document title.
-  this.originalTitle = document.title;
-
-  // Create the dialog and related DOM elements.
-  this.create();
-
-  this.isOpening = false;
-  this.isOpen = true;
-  $(document.documentElement).addClass('overlay-open');
-  this.makeDocumentUntabbable();
-
-  // Allow other scripts to respond to this event.
-  $(document).trigger('drupalOverlayOpen');
-
-  return this.load(url);
-};
-
-/**
- * Create the underlying markup and behaviors for the overlay.
- */
-Drupal.overlay.create = function () {
-  this.$container = $(Drupal.theme('overlayContainer'))
-    .appendTo(document.body);
-
-  // Overlay uses transparent iframes that cover the full parent window.
-  // When the overlay is open the scrollbar of the parent window is hidden.
-  // Because some browsers show a white iframe background for a short moment
-  // while loading a page into an iframe, overlay uses two iframes. By loading
-  // the page in a hidden (inactive) iframe the user doesn't see the white
-  // background. When the page is loaded the active and inactive iframes
-  // are switched.
-  this.activeFrame = this.$iframeA = $(Drupal.theme('overlayElement'))
-    .appendTo(this.$container);
-
-  this.inactiveFrame = this.$iframeB = $(Drupal.theme('overlayElement'))
-    .appendTo(this.$container);
-
-  this.$iframeA.bind('load.drupal-overlay', { self: this.$iframeA[0], sibling: this.$iframeB }, $.proxy(this, 'loadChild'));
-  this.$iframeB.bind('load.drupal-overlay', { self: this.$iframeB[0], sibling: this.$iframeA }, $.proxy(this, 'loadChild'));
-
-  // Add a second class "drupal-overlay-open" to indicate these event handlers
-  // should only be bound when the overlay is open.
-  var eventClass = '.drupal-overlay.drupal-overlay-open';
-  $(window)
-    .bind('resize' + eventClass, $.proxy(this, 'eventhandlerOuterResize'));
-  $(document)
-    .bind('drupalOverlayLoad' + eventClass, $.proxy(this, 'eventhandlerOuterResize'))
-    .bind('drupalOverlayReady' + eventClass +
-          ' drupalOverlayClose' + eventClass, $.proxy(this, 'eventhandlerSyncURLFragment'))
-    .bind('drupalOverlayClose' + eventClass, $.proxy(this, 'eventhandlerRefreshPage'))
-    .bind('drupalOverlayBeforeClose' + eventClass +
-          ' drupalOverlayBeforeLoad' + eventClass +
-          ' drupalOverlayResize' + eventClass, $.proxy(this, 'eventhandlerDispatchEvent'));
-
-  if ($('.overlay-displace-top, .overlay-displace-bottom').length) {
-    $(document)
-      .bind('drupalOverlayResize' + eventClass, $.proxy(this, 'eventhandlerAlterDisplacedElements'))
-      .bind('drupalOverlayClose' + eventClass, $.proxy(this, 'eventhandlerRestoreDisplacedElements'));
-  }
-};
-
-/**
- * Load the given URL into the overlay iframe.
- *
- * Use this method to change the URL being loaded in the overlay if it is
- * already open.
- *
- * @return
- *   TRUE if URL is loaded into the overlay, FALSE otherwise.
- */
-Drupal.overlay.load = function (url) {
-  if (!this.isOpen) {
-    return false;
-  }
-
-  // Allow other scripts to respond to this event.
-  $(document).trigger('drupalOverlayBeforeLoad');
-
-  $(document.documentElement).addClass('overlay-loading');
-
-  // The contentDocument property is not supported in IE until IE8.
-  var iframeDocument = this.inactiveFrame[0].contentDocument || this.inactiveFrame[0].contentWindow.document;
-
-  // location.replace doesn't create a history entry. location.href does.
-  // In this case, we want location.replace, as we're creating the history
-  // entry using URL fragments.
-  iframeDocument.location.replace(url);
-
-  return true;
-};
-
-/**
- * Close the overlay and remove markup related to it from the document.
- *
- * @return
- *   TRUE if the overlay was closed, FALSE otherwise.
- */
-Drupal.overlay.close = function () {
-  // Prevent double execution when close is requested more than once.
-  if (!this.isOpen || this.isClosing) {
-    return false;
-  }
-
-  // Allow other scripts to respond to this event.
-  var event = $.Event('drupalOverlayBeforeClose');
-  $(document).trigger(event);
-  // If a handler returned false, the close will be prevented.
-  if (event.isDefaultPrevented()) {
-    return false;
-  }
-
-  this.isClosing = true;
-  this.isOpen = false;
-  $(document.documentElement).removeClass('overlay-open');
-  // Restore the original document title.
-  document.title = this.originalTitle;
-  this.makeDocumentTabbable();
-
-  // Allow other scripts to respond to this event.
-  $(document).trigger('drupalOverlayClose');
-
-  // When the iframe is still loading don't destroy it immediately but after
-  // the content is loaded (see Drupal.overlay.loadChild).
-  if (!this.isLoading) {
-    this.destroy();
-    this.isClosing = false;
-  }
-  return true;
-};
-
-/**
- * Destroy the overlay.
- */
-Drupal.overlay.destroy = function () {
-  $([document, window]).unbind('.drupal-overlay-open');
-  this.$container.remove();
-
-  this.$container = null;
-  this.$iframeA = null;
-  this.$iframeB = null;
-
-  this.iframeWindow = null;
-};
-
-/**
- * Redirect the overlay parent window to the given URL.
- *
- * @param url
- *   Can be an absolute URL or a relative link to the domain root.
- */
-Drupal.overlay.redirect = function (url) {
-  // Create a native Link object, so we can use its object methods.
-  var link = $(url.link(url)).get(0);
-
-  // If the link is already open, force the hashchange event to simulate reload.
-  if (window.location.href == link.href) {
-    $(window).triggerHandler('hashchange.drupal-overlay');
-  }
-
-  window.location.href = link.href;
-  return true;
-};
-
-/**
- * Bind the child window.
- *
- * Note that this function is fired earlier than Drupal.overlay.loadChild.
- */
-Drupal.overlay.bindChild = function (iframeWindow, isClosing) {
-  this.iframeWindow = iframeWindow;
-
-  // We are done if the child window is closing.
-  if (isClosing || this.isClosing || !this.isOpen) {
-    return;
-  }
-
-  // Allow other scripts to respond to this event.
-  $(document).trigger('drupalOverlayReady');
-};
-
-/**
- * Event handler: load event handler for the overlay iframe.
- *
- * @param event
- *   Event being triggered, with the following restrictions:
- *   - event.type: load
- *   - event.currentTarget: iframe
- */
-Drupal.overlay.loadChild = function (event) {
-  var iframe = event.data.self;
-  var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
-  var iframeWindow = iframeDocument.defaultView || iframeDocument.parentWindow;
-  if (iframeWindow.location == 'about:blank') {
-    return;
-  }
-
-  this.isLoading = false;
-  $(document.documentElement).removeClass('overlay-loading');
-  event.data.sibling.removeClass('overlay-active').attr({ 'tabindex': -1 });
-
-  // Only continue when overlay is still open and not closing.
-  if (this.isOpen && !this.isClosing) {
-    // And child document is an actual overlayChild.
-    if (iframeWindow.Drupal && iframeWindow.Drupal.overlayChild) {
-      // Replace the document title with title of iframe.
-      document.title = iframeWindow.document.title;
-
-      this.activeFrame = $(iframe)
-        .addClass('overlay-active')
-        // Add a title attribute to the iframe for accessibility.
-        .attr('title', Drupal.t('@title dialog', { '@title': iframeWindow.jQuery('#overlay-title').text() })).removeAttr('tabindex');
-      this.inactiveFrame = event.data.sibling;
-
-      // Load an empty document into the inactive iframe.
-      (this.inactiveFrame[0].contentDocument || this.inactiveFrame[0].contentWindow.document).location.replace('about:blank');
-
-      // Move the focus to just before the "skip to main content" link inside
-      // the overlay.
-      this.activeFrame.focus();
-      var skipLink = iframeWindow.jQuery('a:first');
-      Drupal.overlay.setFocusBefore(skipLink, iframeWindow.document);
-
-      // Allow other scripts to respond to this event.
-      $(document).trigger('drupalOverlayLoad');
-    }
-    else {
-      window.location = iframeWindow.location.href.replace(/([?&]?)render=overlay&?/g, '$1').replace(/\?$/, '');
-    }
-  }
-  else {
-    this.destroy();
-  }
-};
-
-/**
- * Creates a placeholder element to receive document focus.
- *
- * Setting the document focus to a link will make it visible, even if it's a
- * "skip to main content" link that should normally be visible only when the
- * user tabs to it. This function can be used to set the document focus to
- * just before such an invisible link.
- *
- * @param $element
- *   The jQuery element that should receive focus on the next tab press.
- * @param document
- *   The iframe window element to which the placeholder should be added. The
- *   placeholder element has to be created inside the same iframe as the element
- *   it precedes, to keep IE happy. (http://bugs.jquery.com/ticket/4059)
- */
-Drupal.overlay.setFocusBefore = function ($element, document) {
-  // Create an anchor inside the placeholder document.
-  var placeholder = document.createElement('a');
-  var $placeholder = $(placeholder).addClass('element-invisible').attr('href', '#');
-  // Put the placeholder where it belongs, and set the document focus to it.
-  $placeholder.insertBefore($element);
-  $placeholder.focus();
-  // Make the placeholder disappear as soon as it loses focus, so that it
-  // doesn't appear in the tab order again.
-  $placeholder.one('blur', function () {
-    $(this).remove();
-  });
-};
-
-/**
- * Check if the given link is in the administrative section of the site.
- *
- * @param url
- *   The URL to be tested.
- *
- * @return boolean
- *   TRUE if the URL represents an administrative link, FALSE otherwise.
- */
-Drupal.overlay.isAdminLink = function (url) {
-  if (Drupal.overlay.isExternalLink(url)) {
-    return false;
-  }
-
-  var path = this.getPath(url);
-
-  // Turn the list of administrative paths into a regular expression.
-  if (!this.adminPathRegExp) {
-    var prefix = '';
-    if (Drupal.settings.overlay.pathPrefixes.length) {
-      // Allow path prefixes used for language negatiation followed by slash,
-      // and the empty string.
-      prefix = '(' + Drupal.settings.overlay.pathPrefixes.join('/|') + '/|)';
-    }
-    var adminPaths = '^' + prefix + '(' + Drupal.settings.overlay.paths.admin.replace(/\s+/g, '|') + ')$';
-    var nonAdminPaths = '^' + prefix + '(' + Drupal.settings.overlay.paths.non_admin.replace(/\s+/g, '|') + ')$';
-    adminPaths = adminPaths.replace(/\*/g, '.*');
-    nonAdminPaths = nonAdminPaths.replace(/\*/g, '.*');
-    this.adminPathRegExp = new RegExp(adminPaths);
-    this.nonAdminPathRegExp = new RegExp(nonAdminPaths);
-  }
-
-  return this.adminPathRegExp.exec(path) && !this.nonAdminPathRegExp.exec(path);
-};
-
-/**
- * Determine whether a link is external to the site.
- *
- * @param url
- *   The URL to be tested.
- *
- * @return boolean
- *   TRUE if the URL is external to the site, FALSE otherwise.
- */
-Drupal.overlay.isExternalLink = function (url) {
-  var re = RegExp('^((f|ht)tps?:)?//(?!' + window.location.host + ')');
-  return re.test(url);
-};
-
-/**
- * Event handler: resizes overlay according to the size of the parent window.
- *
- * @param event
- *   Event being triggered, with the following restrictions:
- *   - event.type: any
- *   - event.currentTarget: any
- */
-Drupal.overlay.eventhandlerOuterResize = function (event) {
-  // Proceed only if the overlay still exists.
-  if (!(this.isOpen || this.isOpening) || this.isClosing || !this.iframeWindow) {
-    return;
-  }
-
-  // IE6 uses position:absolute instead of position:fixed.
-  if (typeof document.body.style.maxHeight != 'string') {
-    this.activeFrame.height($(window).height());
-  }
-
-  // Allow other scripts to respond to this event.
-  $(document).trigger('drupalOverlayResize');
-};
-
-/**
- * Event handler: resizes displaced elements so they won't overlap the scrollbar
- * of overlay's iframe.
- *
- * @param event
- *   Event being triggered, with the following restrictions:
- *   - event.type: any
- *   - event.currentTarget: any
- */
-Drupal.overlay.eventhandlerAlterDisplacedElements = function (event) {
-  // Proceed only if the overlay still exists.
-  if (!(this.isOpen || this.isOpening) || this.isClosing || !this.iframeWindow) {
-    return;
-  }
-
-  $(this.iframeWindow.document.body).css({
-    marginTop: Drupal.overlay.getDisplacement('top'),
-    marginBottom: Drupal.overlay.getDisplacement('bottom')
-  })
-  // IE7 isn't reflowing the document immediately.
-  // @todo This might be fixed in a cleaner way.
-  .addClass('overlay-trigger-reflow').removeClass('overlay-trigger-reflow');
-
-  var documentHeight = this.iframeWindow.document.body.clientHeight;
-  var documentWidth = this.iframeWindow.document.body.clientWidth;
-  // IE6 doesn't support maxWidth, use width instead.
-  var maxWidthName = (typeof document.body.style.maxWidth == 'string') ? 'maxWidth' : 'width';
-
-  if (Drupal.overlay.leftSidedScrollbarOffset === undefined && $(document.documentElement).attr('dir') === 'rtl') {
-    // We can't use element.clientLeft to detect whether scrollbars are placed
-    // on the left side of the element when direction is set to "rtl" as most
-    // browsers dont't support it correctly.
-    // http://www.gtalbot.org/BugzillaSection/DocumentAllDHTMLproperties.html
-    // There seems to be absolutely no way to detect whether the scrollbar
-    // is on the left side in Opera; always expect scrollbar to be on the left.
-    if ($.browser.opera) {
-      Drupal.overlay.leftSidedScrollbarOffset = document.documentElement.clientWidth - this.iframeWindow.document.documentElement.clientWidth + this.iframeWindow.document.documentElement.clientLeft;
-    }
-    else if (this.iframeWindow.document.documentElement.clientLeft) {
-      Drupal.overlay.leftSidedScrollbarOffset = this.iframeWindow.document.documentElement.clientLeft;
-    }
-    else {
-      var el1 = $('<div style="direction: rtl; overflow: scroll;"></div>').appendTo(document.body);
-      var el2 = $('<div></div>').appendTo(el1);
-      Drupal.overlay.leftSidedScrollbarOffset = parseInt(el2[0].offsetLeft - el1[0].offsetLeft);
-      el1.remove();
-    }
-  }
-
-  // Consider any element that should be visible above the overlay (such as
-  // a toolbar).
-  $('.overlay-displace-top, .overlay-displace-bottom').each(function () {
-    var data = $(this).data();
-    var maxWidth = documentWidth;
-    // In IE, Shadow filter makes element to overlap the scrollbar with 1px.
-    if (this.filters && this.filters.length && this.filters.item('DXImageTransform.Microsoft.Shadow')) {
-      maxWidth -= 1;
-    }
-
-    if (Drupal.overlay.leftSidedScrollbarOffset) {
-      $(this).css('left', Drupal.overlay.leftSidedScrollbarOffset);
-    }
-
-    // Prevent displaced elements overlapping window's scrollbar.
-    var currentMaxWidth = parseInt($(this).css(maxWidthName));
-    if ((data.drupalOverlay && data.drupalOverlay.maxWidth) || isNaN(currentMaxWidth) || currentMaxWidth > maxWidth || currentMaxWidth <= 0) {
-      $(this).css(maxWidthName, maxWidth);
-      (data.drupalOverlay = data.drupalOverlay || {}).maxWidth = true;
-    }
-
-    // Use a more rigorous approach if the displaced element still overlaps
-    // window's scrollbar; clip the element on the right.
-    var offset = $(this).offset();
-    var offsetRight = offset.left + $(this).outerWidth();
-    if ((data.drupalOverlay && data.drupalOverlay.clip) || offsetRight > maxWidth) {
-      if (Drupal.overlay.leftSidedScrollbarOffset) {
-        $(this).css('clip', 'rect(auto, auto, ' + (documentHeight - offset.top) + 'px, ' + (Drupal.overlay.leftSidedScrollbarOffset + 2) + 'px)');
-      }
-      else {
-        $(this).css('clip', 'rect(auto, ' + (maxWidth - offset.left) + 'px, ' + (documentHeight - offset.top) + 'px, auto)');
-      }
-      (data.drupalOverlay = data.drupalOverlay || {}).clip = true;
-    }
-  });
-};
-
-/**
- * Event handler: restores size of displaced elements as they were before
- * overlay was opened.
- *
- * @param event
- *   Event being triggered, with the following restrictions:
- *   - event.type: any
- *   - event.currentTarget: any
- */
-Drupal.overlay.eventhandlerRestoreDisplacedElements = function (event) {
-  var $displacedElements = $('.overlay-displace-top, .overlay-displace-bottom');
-  try {
-    $displacedElements.css({ maxWidth: '', clip: '' });
-  }
-  // IE bug that doesn't allow unsetting style.clip (http://dev.jquery.com/ticket/6512).
-  catch (err) {
-    $displacedElements.attr('style', function (index, attr) {
-      return attr.replace(/clip\s*:\s*rect\([^)]+\);?/i, '');
-    });
-  }
-};
-
-/**
- * Event handler: overrides href of administrative links to be opened in
- * the overlay.
- *
- * This click event handler should be bound to any document (for example the
- * overlay iframe) of which you want links to open in the overlay.
- *
- * @param event
- *   Event being triggered, with the following restrictions:
- *   - event.type: click, mouseup
- *   - event.currentTarget: document
- *
- * @see Drupal.overlayChild.behaviors.addClickHandler
- */
-Drupal.overlay.eventhandlerOverrideLink = function (event) {
-  // In some browsers the click event isn't fired for right-clicks. Use the
-  // mouseup event for right-clicks and the click event for everything else.
-  if ((event.type == 'click' && event.button == 2) || (event.type == 'mouseup' && event.button != 2)) {
-    return;
-  }
-
-  var $target = $(event.target);
-
-  // Only continue if clicked target (or one of its parents) is a link.
-  if (!$target.is('a')) {
-    $target = $target.closest('a');
-    if (!$target.length) {
-      return;
-    }
-  }
-
-  // Never open links in the overlay that contain the overlay-exclude class.
-  if ($target.hasClass('overlay-exclude')) {
-    return;
-  }
-
-  // Close the overlay when the link contains the overlay-close class.
-  if ($target.hasClass('overlay-close')) {
-    // Clearing the overlay URL fragment will close the overlay.
-    $.bbq.removeState('overlay');
-    return;
-  }
-
-  var target = $target[0];
-  var href = target.href;
-  // Only handle links that have an href attribute and use the HTTP(S) protocol.
-  if (href != undefined && href != '' && target.protocol.match(/^https?\:/)) {
-    var anchor = href.replace(target.ownerDocument.location.href, '');
-    // Skip anchor links.
-    if (anchor.length == 0 || anchor.charAt(0) == '#') {
-      return;
-    }
-    // Open admin links in the overlay.
-    else if (this.isAdminLink(href)) {
-      // If the link contains the overlay-restore class and the overlay-context
-      // state is set, also update the parent window's location.
-      var parentLocation = ($target.hasClass('overlay-restore') && typeof $.bbq.getState('overlay-context') == 'string')
-        ? Drupal.settings.basePath + $.bbq.getState('overlay-context')
-        : null;
-      href = this.fragmentizeLink($target.get(0), parentLocation);
-      // Only override default behavior when left-clicking and user is not
-      // pressing the ALT, CTRL, META (Command key on the Macintosh keyboard)
-      // or SHIFT key.
-      if (event.button == 0 && !event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey) {
-        // Redirect to a fragmentized href. This will trigger a hashchange event.
-        this.redirect(href);
-        // Prevent default action and further propagation of the event.
-        return false;
-      }
-      // Otherwise alter clicked link's href. This is being picked up by
-      // the default action handler.
-      else {
-        $target
-          // Restore link's href attribute on blur or next click.
-          .one('blur mousedown', { target: target, href: target.href }, function (event) { $(event.data.target).attr('href', event.data.href); })
-          .attr('href', href);
-      }
-    }
-    // Non-admin links should close the overlay and open in the main window,
-    // which is the default action for a link. We only need to handle them
-    // if the overlay is open and the clicked link is inside the overlay iframe.
-    else if (this.isOpen && target.ownerDocument === this.iframeWindow.document) {
-      // Open external links in the immediate parent of the frame, unless the
-      // link already has a different target.
-      if (target.hostname != window.location.hostname) {
-        if (!$target.attr('target')) {
-          $target.attr('target', '_parent');
-        }
-      }
-      else {
-        // Add the overlay-context state to the link, so "overlay-restore" links
-        // can restore the context.
-        if ($target[0].hash) {
-          // Leave links with an existing fragment alone. Adding an extra
-          // parameter to a link like "node/1#section-1" breaks the link.
-        }
-        else {
-          // For links with no existing fragment, add the overlay context.
-          $target.attr('href', $.param.fragment(href, { 'overlay-context': this.getPath(window.location) + window.location.search }));
-        }
-
-        // When the link has a destination query parameter and that destination
-        // is an admin link we need to fragmentize it. This will make it reopen
-        // in the overlay.
-        var params = $.deparam.querystring(href);
-        if (params.destination && this.isAdminLink(params.destination)) {
-          var fragmentizedDestination = $.param.fragment(this.getPath(window.location), { overlay: params.destination });
-          $target.attr('href', $.param.querystring(href, { destination: fragmentizedDestination }));
-        }
-
-        // Make the link open in the immediate parent of the frame, unless the
-        // link already has a different target.
-        if (!$target.attr('target')) {
-          $target.attr('target', '_parent');
-        }
-      }
-    }
-  }
-};
-
-/**
- * Event handler: opens or closes the overlay based on the current URL fragment.
- *
- * @param event
- *   Event being triggered, with the following restrictions:
- *   - event.type: hashchange
- *   - event.currentTarget: document
- */
-Drupal.overlay.eventhandlerOperateByURLFragment = function (event) {
-  // If we changed the hash to reflect an internal redirect in the overlay,
-  // its location has already been changed, so don't do anything.
-  if ($.data(window.location, window.location.href) === 'redirect') {
-    $.data(window.location, window.location.href, null);
-    return;
-  }
-
-  // Get the overlay URL from the current URL fragment.
-  var state = $.bbq.getState('overlay');
-  if (state) {
-    // Append render variable, so the server side can choose the right
-    // rendering and add child frame code to the page if needed.
-    var url = $.param.querystring(Drupal.settings.basePath + state, { render: 'overlay' });
-
-    this.open(url);
-    this.resetActiveClass(this.getPath(Drupal.settings.basePath + state));
-  }
-  // If there is no overlay URL in the fragment and the overlay is (still)
-  // open, close the overlay.
-  else if (this.isOpen && !this.isClosing) {
-    this.close();
-    this.resetActiveClass(this.getPath(window.location));
-  }
-};
-
-/**
- * Event handler: makes sure the internal overlay URL is reflected in the parent
- * URL fragment.
- *
- * Normally the parent URL fragment determines the overlay location. However, if
- * the overlay redirects internally, the parent doesn't get informed, and the
- * parent URL fragment will be out of date. This is a sanity check to make
- * sure we're in the right place.
- *
- * The parent URL fragment is also not updated automatically when overlay's
- * open, close or load functions are used directly (instead of through
- * eventhandlerOperateByURLFragment).
- *
- * @param event
- *   Event being triggered, with the following restrictions:
- *   - event.type: drupalOverlayReady, drupalOverlayClose
- *   - event.currentTarget: document
- */
-Drupal.overlay.eventhandlerSyncURLFragment = function (event) {
-  if (this.isOpen) {
-    var expected = $.bbq.getState('overlay');
-    // This is just a sanity check, so we're comparing paths, not query strings.
-    if (this.getPath(Drupal.settings.basePath + expected) != this.getPath(this.iframeWindow.document.location)) {
-      // There may have been a redirect inside the child overlay window that the
-      // parent wasn't aware of. Update the parent URL fragment appropriately.
-      var newLocation = Drupal.overlay.fragmentizeLink(this.iframeWindow.document.location);
-      // Set a 'redirect' flag on the new location so the hashchange event handler
-      // knows not to change the overlay's content.
-      $.data(window.location, newLocation, 'redirect');
-      // Use location.replace() so we don't create an extra history entry.
-      window.location.replace(newLocation);
-    }
-  }
-  else {
-    $.bbq.removeState('overlay');
-  }
-};
-
-/**
- * Event handler: if the child window suggested that the parent refresh on
- * close, force a page refresh.
- *
- * @param event
- *   Event being triggered, with the following restrictions:
- *   - event.type: drupalOverlayClose
- *   - event.currentTarget: document
- */
-Drupal.overlay.eventhandlerRefreshPage = function (event) {
-  if (Drupal.overlay.refreshPage) {
-    window.location.reload(true);
-  }
-};
-
-/**
- * Event handler: dispatches events to the overlay document.
- *
- * @param event
- *   Event being triggered, with the following restrictions:
- *   - event.type: any
- *   - event.currentTarget: any
- */
-Drupal.overlay.eventhandlerDispatchEvent = function (event) {
-  if (this.iframeWindow && this.iframeWindow.document) {
-    this.iframeWindow.jQuery(this.iframeWindow.document).trigger(event);
-  }
-};
-
-/**
- * Make a regular admin link into a URL that will trigger the overlay to open.
- *
- * @param link
- *   A JavaScript Link object (i.e. an <a> element).
- * @param parentLocation
- *   (optional) URL to override the parent window's location with.
- *
- * @return
- *   A URL that will trigger the overlay (in the form
- *   /node/1#overlay=admin/config).
- */
-Drupal.overlay.fragmentizeLink = function (link, parentLocation) {
-  // Don't operate on links that are already overlay-ready.
-  var params = $.deparam.fragment(link.href);
-  if (params.overlay) {
-    return link.href;
-  }
-
-  // Determine the link's original destination. Set ignorePathFromQueryString to
-  // true to prevent transforming this link into a clean URL while clean URLs
-  // may be disabled.
-  var path = this.getPath(link, true);
-  // Preserve existing query and fragment parameters in the URL, except for
-  // "render=overlay" which is re-added in Drupal.overlay.eventhandlerOperateByURLFragment.
-  var destination = path + link.search.replace(/&?render=overlay/, '').replace(/\?$/, '') + link.hash;
-
-  // Assemble and return the overlay-ready link.
-  return $.param.fragment(parentLocation || window.location.href, { overlay: destination });
-};
-
-/**
- * Refresh any regions of the page that are displayed outside the overlay.
- *
- * @param data
- *   An array of objects with information on the page regions to be refreshed.
- *   For each object, the key is a CSS class identifying the region to be
- *   refreshed, and the value represents the section of the Drupal $page array
- *   corresponding to this region.
- */
-Drupal.overlay.refreshRegions = function (data) {
-  $.each(data, function () {
-    var region_info = this;
-    $.each(region_info, function (regionClass) {
-      var regionName = region_info[regionClass];
-      var regionSelector = '.' + regionClass;
-      // Allow special behaviors to detach.
-      Drupal.detachBehaviors($(regionSelector));
-      $.get(Drupal.settings.basePath + Drupal.settings.overlay.ajaxCallback + '/' + regionName, function (newElement) {
-        $(regionSelector).replaceWith($(newElement));
-        Drupal.attachBehaviors($(regionSelector), Drupal.settings);
-      });
-    });
-  });
-};
-
-/**
- * Reset the active class on links in displaced elements according to
- * given path.
- *
- * @param activePath
- *   Path to match links against.
- */
-Drupal.overlay.resetActiveClass = function(activePath) {
-  var self = this;
-  var windowDomain = window.location.protocol + window.location.hostname;
-
-  $('.overlay-displace-top, .overlay-displace-bottom')
-  .find('a[href]')
-  // Remove active class from all links in displaced elements.
-  .removeClass('active')
-  // Add active class to links that match activePath.
-  .each(function () {
-    var linkDomain = this.protocol + this.hostname;
-    var linkPath = self.getPath(this);
-
-    // A link matches if it is part of the active trail of activePath, except
-    // for frontpage links.
-    if (linkDomain == windowDomain && (activePath + '/').indexOf(linkPath + '/') === 0 && (linkPath !== '' || activePath === '')) {
-      $(this).addClass('active');
-    }
-  });
-};
-
-/**
- * Helper function to get the (corrected) Drupal path of a link.
- *
- * @param link
- *   Link object or string to get the Drupal path from.
- * @param ignorePathFromQueryString
- *   Boolean whether to ignore path from query string if path appears empty.
- *
- * @return
- *   The Drupal path.
- */
-Drupal.overlay.getPath = function (link, ignorePathFromQueryString) {
-  if (typeof link == 'string') {
-    // Create a native Link object, so we can use its object methods.
-    link = $(link.link(link)).get(0);
-  }
-
-  var path = link.pathname;
-  // Ensure a leading slash on the path, omitted in some browsers.
-  if (path.charAt(0) != '/') {
-    path = '/' + path;
-  }
-  path = path.replace(new RegExp(Drupal.settings.basePath + '(?:index.php)?'), '');
-  if (path == '' && !ignorePathFromQueryString) {
-    // If the path appears empty, it might mean the path is represented in the
-    // query string (clean URLs are not used).
-    var match = new RegExp('([?&])q=(.+)([&#]|$)').exec(link.search);
-    if (match && match.length == 4) {
-      path = match[2];
-    }
-  }
-
-  return path;
-};
-
-/**
- * Get the total displacement of given region.
- *
- * @param region
- *   Region name. Either "top" or "bottom".
- *
- * @return
- *   The total displacement of given region in pixels.
- */
-Drupal.overlay.getDisplacement = function (region) {
-  var displacement = 0;
-  var lastDisplaced = $('.overlay-displace-' + region + ':last');
-  if (lastDisplaced.length) {
-    displacement = lastDisplaced.offset().top + lastDisplaced.outerHeight();
-
-    // In modern browsers (including IE9), when box-shadow is defined, use the
-    // normal height.
-    var cssBoxShadowValue = lastDisplaced.css('box-shadow');
-    var boxShadow = (typeof cssBoxShadowValue !== 'undefined' && cssBoxShadowValue !== 'none');
-    // In IE8 and below, we use the shadow filter to apply box-shadow styles to
-    // the toolbar. It adds some extra height that we need to remove.
-    if (!boxShadow && /DXImageTransform\.Microsoft\.Shadow/.test(lastDisplaced.css('filter'))) {
-      displacement -= lastDisplaced[0].filters.item('DXImageTransform.Microsoft.Shadow').strength;
-      displacement = Math.max(0, displacement);
-    }
-  }
-  return displacement;
-};
-
-/**
- * Makes elements outside the overlay unreachable via the tab key.
- *
- * @param context
- *   The part of the DOM that should have its tabindexes changed. Defaults to
- *   the entire page.
- */
-Drupal.overlay.makeDocumentUntabbable = function (context) {
-  // Manipulating tabindexes for the entire document is unacceptably slow in IE6
-  // and IE7, so in those browsers, the underlying page will still be reachable
-  // via the tab key. However, we still make the links within the Disable
-  // message unreachable, because the same message also exists within the
-  // child document. The duplicate copy in the underlying document is only for
-  // assisting screen-reader users navigating the document with reading commands
-  // that follow markup order rather than tab order.
-  if (jQuery.browser.msie && parseInt(jQuery.browser.version, 10) < 8) {
-    $('#overlay-disable-message a', context).attr('tabindex', -1);
-    return;
-  }
-
-  context = context || document.body;
-  var $overlay, $tabbable, $hasTabindex;
-
-  // Determine which elements on the page already have a tabindex.
-  $hasTabindex = $('[tabindex] :not(.overlay-element)', context);
-  // Record the tabindex for each element, so we can restore it later.
-  $hasTabindex.each(Drupal.overlay._recordTabindex);
-  // Add the tabbable elements from the current context to any that we might
-  // have previously recorded.
-  Drupal.overlay._hasTabindex = $hasTabindex.add(Drupal.overlay._hasTabindex);
-
-  // Set tabindex to -1 on everything outside the overlay and toolbars, so that
-  // the underlying page is unreachable.
-
-  // By default, browsers make a, area, button, input, object, select, textarea,
-  // and iframe elements reachable via the tab key.
-  $tabbable = $('a, area, button, input, object, select, textarea, iframe');
-  // If another element (like a div) has a tabindex, it's also tabbable.
-  $tabbable = $tabbable.add($hasTabindex);
-  // Leave links inside the overlay and toolbars alone.
-  $overlay = $('.overlay-element, #overlay-container, .overlay-displace-top, .overlay-displace-bottom').find('*');
-  $tabbable = $tabbable.not($overlay);
-  // We now have a list of everything in the underlying document that could
-  // possibly be reachable via the tab key. Make it all unreachable.
-  $tabbable.attr('tabindex', -1);
-};
-
-/**
- * Restores the original tabindex value of a group of elements.
- *
- * @param context
- *   The part of the DOM that should have its tabindexes restored. Defaults to
- *   the entire page.
- */
-Drupal.overlay.makeDocumentTabbable = function (context) {
-  // Manipulating tabindexes is unacceptably slow in IE6 and IE7. In those
-  // browsers, the underlying page was never made unreachable via tab, so
-  // there is no work to be done here.
-  if (jQuery.browser.msie && parseInt(jQuery.browser.version, 10) < 8) {
-    return;
-  }
-
-  var $needsTabindex;
-  context = context || document.body;
-
-  // Make the underlying document tabbable again by removing all existing
-  // tabindex attributes.
-  var $tabindex = $('[tabindex]', context);
-  if (jQuery.browser.msie && parseInt(jQuery.browser.version, 10) < 8) {
-    // removeAttr('tabindex') is broken in IE6-7, but the DOM function
-    // removeAttribute works.
-    var i;
-    var length = $tabindex.length;
-    for (i = 0; i < length; i++) {
-      $tabindex[i].removeAttribute('tabIndex');
-    }
-  }
-  else {
-    $tabindex.removeAttr('tabindex');
-  }
-
-  // Restore the tabindex attributes that existed before the overlay was opened.
-  $needsTabindex = $(Drupal.overlay._hasTabindex, context);
-  $needsTabindex.each(Drupal.overlay._restoreTabindex);
-  Drupal.overlay._hasTabindex = Drupal.overlay._hasTabindex.not($needsTabindex);
-};
-
-/**
- * Record the tabindex for an element, using $.data.
- *
- * Meant to be used as a jQuery.fn.each callback.
- */
-Drupal.overlay._recordTabindex = function () {
-  var $element = $(this);
-  var tabindex = $(this).attr('tabindex');
-  $element.data('drupalOverlayOriginalTabIndex', tabindex);
-};
-
-/**
- * Restore an element's original tabindex.
- *
- * Meant to be used as a jQuery.fn.each callback.
- */
-Drupal.overlay._restoreTabindex = function () {
-  var $element = $(this);
-  var tabindex = $element.data('drupalOverlayOriginalTabIndex');
-  $element.attr('tabindex', tabindex);
-};
-
-/**
- * Theme function to create the overlay iframe element.
- */
-Drupal.theme.prototype.overlayContainer = function () {
-  return '<div id="overlay-container"><div class="overlay-modal-background"></div></div>';
-};
-
-/**
- * Theme function to create an overlay iframe element.
- */
-Drupal.theme.prototype.overlayElement = function (url) {
-  return '<iframe class="overlay-element" frameborder="0" scrolling="auto" allowtransparency="true"></iframe>';
-};
-
-})(jQuery);
diff --git a/modules/overlay/overlay.api.php b/modules/overlay/overlay.api.php
deleted file mode 100644
index bc23546..0000000
--- a/modules/overlay/overlay.api.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-/**
- * @file
- * Hooks provided by Overlay module.
- */
-
-/**
- * @addtogroup hooks
- * @{
- */
-
-/**
- * Allow modules to act when an overlay parent window is initialized.
- *
- * The parent window is initialized when a page is displayed in which the
- * overlay might be required to be displayed, so modules can act here if they
- * need to take action to accommodate the possibility of the overlay appearing
- * within a Drupal page.
- */
-function hook_overlay_parent_initialize() {
-  // Add our custom JavaScript.
-  drupal_add_js(drupal_get_path('module', 'hook') . '/hook-overlay.js');
-}
-
-/**
- * Allow modules to act when an overlay child window is initialized.
- *
- * The child window is initialized when a page is displayed from within the
- * overlay, so modules can act here if they need to take action to work from
- * within the confines of the overlay.
- */
-function hook_overlay_child_initialize() {
-  // Add our custom JavaScript.
-  drupal_add_js(drupal_get_path('module', 'hook') . '/hook-overlay-child.js');
-}
-
-/**
- * @} End of "addtogroup hooks".
- */
diff --git a/modules/overlay/overlay.info b/modules/overlay/overlay.info
deleted file mode 100644
index 5fb354d..0000000
--- a/modules/overlay/overlay.info
+++ /dev/null
@@ -1,5 +0,0 @@
-name = Overlay
-description = Displays the Drupal administration interface in an overlay.
-package = Core
-version = VERSION
-core = 7.x
diff --git a/modules/overlay/overlay.install b/modules/overlay/overlay.install
deleted file mode 100644
index 2df860b..0000000
--- a/modules/overlay/overlay.install
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update, and uninstall functions for the Overlay module.
- */
-
-/**
- * Implements hook_enable().
- *
- * If the module is being enabled through the admin UI, and not from an
- * installation profile, reopen the modules page in an overlay.
- */
-function overlay_enable() {
-  if (strpos(current_path(), 'admin/modules') === 0) {
-    // Flag for a redirect to <front>#overlay=admin/modules on hook_init().
-    $_SESSION['overlay_enable_redirect'] = 1;
-  }
-}
diff --git a/modules/overlay/overlay.tpl.php b/modules/overlay/overlay.tpl.php
deleted file mode 100644
index df86337..0000000
--- a/modules/overlay/overlay.tpl.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to display a page in the overlay.
- *
- * Available variables:
- * - $title: the (sanitized) title of the page.
- * - $page: The rendered page content.
- * - $tabs (array): Tabs linking to any sub-pages beneath the current page
- *   (e.g., the view and edit tabs when displaying a node).
- *
- * Helper variables:
- * - $classes_array: Array of html class attribute values. It is flattened
- *   into a string within the variable $classes.
- *
- * @see template_preprocess()
- * @see template_preprocess_overlay()
- * @see template_process()
- *
- * @ingroup themeable
- */
-?>
-
-<?php print render($disable_overlay); ?>
-<div id="overlay" <?php print $attributes; ?>>
-  <div id="overlay-titlebar" class="clearfix">
-    <div id="overlay-title-wrapper" class="clearfix">
-      <h1 id="overlay-title"<?php print $title_attributes; ?>><?php print $title; ?></h1>
-    </div>
-    <div id="overlay-close-wrapper">
-      <a id="overlay-close" href="#" class="overlay-close"><span class="element-invisible"><?php print t('Close overlay'); ?></span></a>
-    </div>
-    <?php if ($tabs): ?><h2 class="element-invisible"><?php print t('Primary tabs'); ?></h2><ul id="overlay-tabs"><?php print render($tabs); ?></ul><?php endif; ?>
-  </div>
-  <div id="overlay-content"<?php print $content_attributes; ?>>
-    <?php print $page; ?>
-  </div>
-</div>
diff --git a/modules/path/path.admin.inc b/modules/path/path.admin.inc
deleted file mode 100644
index 28b0618..0000000
--- a/modules/path/path.admin.inc
+++ /dev/null
@@ -1,314 +0,0 @@
-<?php
-
-/**
- * @file
- * Administrative page callbacks for the path module.
- */
-
-/**
- * Returns a listing of all defined URL aliases.
- *
- * When filter key passed, perform a standard search on the given key,
- * and return the list of matching URL aliases.
- */
-function path_admin_overview($keys = NULL) {
-  // Add the filter form above the overview table.
-  $build['path_admin_filter_form'] = drupal_get_form('path_admin_filter_form', $keys);
-  // Enable language column if locale is enabled or if we have any alias with language
-  $alias_exists = (bool) db_query_range('SELECT 1 FROM {url_alias} WHERE language <> :language', 0, 1, array(':language' => LANGUAGE_NONE))->fetchField();
-  $multilanguage = (module_exists('locale') || $alias_exists);
-
-  $header = array();
-  $header[] = array('data' => t('Alias'), 'field' => 'alias', 'sort' => 'asc');
-  $header[] = array('data' => t('System'), 'field' => 'source');
-  if ($multilanguage) {
-    $header[] = array('data' => t('Language'), 'field' => 'language');
-  }
-  $header[] = array('data' => t('Operations'));
-
-  $query = db_select('url_alias')->extend('PagerDefault')->extend('TableSort');
-  if ($keys) {
-    // Replace wildcards with PDO wildcards.
-    $query->condition('alias', '%' . preg_replace('!\*+!', '%', $keys) . '%', 'LIKE');
-  }
-  $result = $query
-    ->fields('url_alias')
-    ->orderByHeader($header)
-    ->limit(50)
-    ->execute();
-
-  $rows = array();
-  $destination = drupal_get_destination();
-  foreach ($result as $data) {
-    $row = array();
-    $row['data']['alias'] = l($data->alias, $data->source);
-    $row['data']['source'] = l($data->source, $data->source, array('alias' => TRUE));
-    if ($multilanguage) {
-      $row['data']['language'] = module_invoke('locale', 'language_name', $data->language);
-    }
-
-    $operations = array();
-    $operations['edit'] = array(
-      'title' => t('edit'),
-      'href' => "admin/config/search/path/edit/$data->pid",
-      'query' => $destination,
-    );
-    $operations['delete'] = array(
-      'title' => t('delete'),
-      'href' => "admin/config/search/path/delete/$data->pid",
-      'query' => $destination,
-    );
-    $row['data']['operations'] = array(
-      'data' => array(
-        '#theme' => 'links',
-        '#links' => $operations,
-        '#attributes' => array('class' => array('links', 'inline', 'nowrap')),
-      ),
-    );
-
-    // If the system path maps to a different URL alias, highlight this table
-    // row to let the user know of old aliases.
-    if ($data->alias != drupal_get_path_alias($data->source, $data->language)) {
-      $row['class'] = array('warning');
-    }
-
-    $rows[] = $row;
-  }
-
-  $build['path_table'] = array(
-    '#theme' => 'table',
-    '#header' => $header,
-    '#rows' => $rows,
-    '#empty' => t('No URL aliases available. <a href="@link">Add URL alias</a>.', array('@link' => url('admin/config/search/path/add'))),
-  );
-  $build['path_pager'] = array('#theme' => 'pager');
-
-  return $build;
-}
-
-/**
- * Page callback: Returns a form creating or editing a path alias.
- *
- * @param $path
- *   An array containing the path ID, source, alias, and language code.
- *
- * @return
- *   A form for adding or editing a URL alias.
- *
- * @see path_menu()
- */
-function path_admin_edit($path = array()) {
-  if ($path) {
-    drupal_set_title($path['alias']);
-    $output = drupal_get_form('path_admin_form', $path);
-  }
-  else {
-    $output = drupal_get_form('path_admin_form');
-  }
-
-  return $output;
-}
-
-/**
- * Form constructor for the path administration form.
- *
- * @param $path
- *   An array containing the path ID, source, alias, and language code.
- *
- * @ingroup forms
- * @see path_admin_form_validate()
- * @see path_admin_form_submit()
- * @see path_admin_form_delete_submit()
- */
-function path_admin_form($form, &$form_state, $path = array('source' => '', 'alias' => '', 'language' => LANGUAGE_NONE, 'pid' => NULL)) {
-  $form['source'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Existing system path'),
-    '#default_value' => $path['source'],
-    '#maxlength' => 255,
-    '#size' => 45,
-    '#description' => t('Specify the existing path you wish to alias. For example: node/28, forum/1, taxonomy/term/1.'),
-    '#field_prefix' => url(NULL, array('absolute' => TRUE)) . (variable_get('clean_url', 0) ? '' : '?q='),
-    '#required' => TRUE,
-  );
-  $form['alias'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Path alias'),
-    '#default_value' => $path['alias'],
-    '#maxlength' => 255,
-    '#size' => 45,
-    '#description' => t('Specify an alternative path by which this data can be accessed. For example, type "about" when writing an about page. Use a relative path and don\'t add a trailing slash or the URL alias won\'t work.'),
-    '#field_prefix' => url(NULL, array('absolute' => TRUE)) . (variable_get('clean_url', 0) ? '' : '?q='),
-    '#required' => TRUE,
-  );
-
-  // This will be a hidden value unless locale module is enabled.
-  $form['language'] = array(
-    '#type' => 'value',
-    '#value' => $path['language']
-  );
-
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Save'),
-  );
-  if ($path['pid']) {
-    $form['pid'] = array(
-      '#type' => 'hidden',
-      '#value' => $path['pid'],
-    );
-    $form['actions']['delete'] = array(
-      '#type' => 'submit',
-      '#value' => t('Delete'),
-      '#submit' => array('path_admin_form_delete_submit'),
-    );
-  }
-
-  return $form;
-}
-
-/**
- * Form submission handler for the 'Delete' button on path_admin_form().
- *
- * @see path_admin_form_validate()
- * @see path_admin_form_submit()
- */
-function path_admin_form_delete_submit($form, &$form_state) {
-  $destination = array();
-  if (isset($_GET['destination'])) {
-    $destination = drupal_get_destination();
-    unset($_GET['destination']);
-  }
-  $form_state['redirect'] = array('admin/config/search/path/delete/' . $form_state['values']['pid'], array('query' => $destination));
-}
-
-/**
- * Form validation handler for path_admin_form().
- *
- * @see path_admin_form_submit()
- * @see path_admin_form_delete_submit()
- */
-function path_admin_form_validate($form, &$form_state) {
-  $source = &$form_state['values']['source'];
-  $source = drupal_get_normal_path($source);
-  $alias = $form_state['values']['alias'];
-  $pid = isset($form_state['values']['pid']) ? $form_state['values']['pid'] : 0;
-  // Language is only set if locale module is enabled, otherwise save for all languages.
-  $language = isset($form_state['values']['language']) ? $form_state['values']['language'] : LANGUAGE_NONE;
-
-  $has_alias = db_query("SELECT COUNT(alias) FROM {url_alias} WHERE pid <> :pid AND alias = :alias AND language = :language", array(
-      ':pid' => $pid,
-      ':alias' => $alias,
-      ':language' => $language,
-    ))
-    ->fetchField();
-
-  if ($has_alias) {
-    form_set_error('alias', t('The alias %alias is already in use in this language.', array('%alias' => $alias)));
-  }
-  if (!drupal_valid_path($source)) {
-    form_set_error('source', t("The path '@link_path' is either invalid or you do not have access to it.", array('@link_path' => $source)));
-  }
-}
-
-/**
- * Form submission handler for path_admin_form().
- *
- * @see path_admin_form_validate()
- * @see path_admin_form_delete_submit()
- */
-function path_admin_form_submit($form, &$form_state) {
-  // Remove unnecessary values.
-  form_state_values_clean($form_state);
-
-  path_save($form_state['values']);
-
-  drupal_set_message(t('The alias has been saved.'));
-  $form_state['redirect'] = 'admin/config/search/path';
-}
-
-/**
- * Form constructor for the path deletion form.
- *
- * @param $path
- *   The path alias that will be deleted.
- *
- * @see path_admin_delete_confirm_submit()
- */
-function path_admin_delete_confirm($form, &$form_state, $path) {
-  if (user_access('administer url aliases')) {
-    $form_state['path'] = $path;
-    return confirm_form(
-      $form,
-      t('Are you sure you want to delete path alias %title?',
-      array('%title' => $path['alias'])),
-      'admin/config/search/path'
-    );
-  }
-  return array();
-}
-
-/**
- * Form submission handler for path_admin_delete_confirm().
- */
-function path_admin_delete_confirm_submit($form, &$form_state) {
-  if ($form_state['values']['confirm']) {
-    path_delete($form_state['path']['pid']);
-    $form_state['redirect'] = 'admin/config/search/path';
-  }
-}
-
-/**
- * Form constructor for the path admin overview filter form.
- *
- * @ingroup forms
- * @see path_admin_filter_form_submit_filter()
- * @see path_admin_filter_form_submit_reset()
- */
-function path_admin_filter_form($form, &$form_state, $keys = '') {
-  $form['#attributes'] = array('class' => array('search-form'));
-  $form['basic'] = array('#type' => 'fieldset',
-    '#title' => t('Filter aliases'),
-    '#attributes' => array('class' => array('container-inline')),
-  );
-  $form['basic']['filter'] = array(
-    '#type' => 'textfield',
-    '#title' => 'Path alias',
-    '#title_display' => 'invisible',
-    '#default_value' => $keys,
-    '#maxlength' => 128,
-    '#size' => 25,
-  );
-  $form['basic']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Filter'),
-    '#submit' => array('path_admin_filter_form_submit_filter'),
-    );
-  if ($keys) {
-    $form['basic']['reset'] = array(
-      '#type' => 'submit',
-      '#value' => t('Reset'),
-      '#submit' => array('path_admin_filter_form_submit_reset'),
-    );
-  }
-  return $form;
-}
-
-/**
- * Form submission handler for the path_admin_filter_form() Filter button.
- *
- * @see path_admin_filter_form_submit_reset()
- */
-function path_admin_filter_form_submit_filter($form, &$form_state) {
-  $form_state['redirect'] = 'admin/config/search/path/list/' . trim($form_state['values']['filter']);
-}
-
-/**
- * Form submission handler for the path_admin_filter_form() Reset button.
- *
- * @see path_admin_filter_form_submit_filter()
- */
-function path_admin_filter_form_submit_reset($form, &$form_state) {
-  $form_state['redirect'] = 'admin/config/search/path/list';
-}
diff --git a/modules/path/path.api.php b/modules/path/path.api.php
deleted file mode 100644
index 0a17e2c..0000000
--- a/modules/path/path.api.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-
-/**
- * @file
- * Hooks provided by the Path module.
- */
-
-/**
- * @addtogroup hooks
- * @{
- */
-
-/**
- * Respond to a path being inserted.
- *
- * @param $path
- *   An associative array containing the following keys:
- *   - source: The internal system path.
- *   - alias: The URL alias.
- *   - pid: Unique path alias identifier.
- *   - language: The language of the alias.
- *
- * @see path_save()
- */
-function hook_path_insert($path) {
-  db_insert('mytable')
-    ->fields(array(
-      'alias' => $path['alias'],
-      'pid' => $path['pid'],
-    ))
-    ->execute();
-}
-
-/**
- * Respond to a path being updated.
- *
- * @param $path
- *   An associative array containing the following keys:
- *   - source: The internal system path.
- *   - alias: The URL alias.
- *   - pid: Unique path alias identifier.
- *   - language: The language of the alias.
- *
- * @see path_save()
- */
-function hook_path_update($path) {
-  db_update('mytable')
-    ->fields(array('alias' => $path['alias']))
-    ->condition('pid', $path['pid'])
-    ->execute();
-}
-
-/**
- * Respond to a path being deleted.
- *
- * @param $path
- *   An associative array containing the following keys:
- *   - source: The internal system path.
- *   - alias: The URL alias.
- *   - pid: Unique path alias identifier.
- *   - language: The language of the alias.
- *
- * @see path_delete()
- */
-function hook_path_delete($path) {
-  db_delete('mytable')
-    ->condition('pid', $path['pid'])
-    ->execute();
-}
-
-/**
- * @} End of "addtogroup hooks".
- */
diff --git a/modules/path/path.info b/modules/path/path.info
deleted file mode 100644
index 8b6b67c..0000000
--- a/modules/path/path.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Path
-description = Allows users to rename URLs.
-package = Core
-version = VERSION
-core = 7.x
-files[] = path.test
-configure = admin/config/search/path
diff --git a/modules/path/path.js b/modules/path/path.js
deleted file mode 100644
index c4f3cd0..0000000
--- a/modules/path/path.js
+++ /dev/null
@@ -1,21 +0,0 @@
-
-/**
- * @file
- * Attaches behaviors for the Path module.
- */
-
-(function ($) {
-
-Drupal.behaviors.pathFieldsetSummaries = {
-  attach: function (context) {
-    $('fieldset.path-form', context).drupalSetSummary(function (context) {
-      var path = $('.form-item-path-alias input').val();
-
-      return path ?
-        Drupal.t('Alias: @alias', { '@alias': path }) :
-        Drupal.t('No alias');
-    });
-  }
-};
-
-})(jQuery);
diff --git a/modules/path/path.module b/modules/path/path.module
deleted file mode 100644
index 81c7bb2..0000000
--- a/modules/path/path.module
+++ /dev/null
@@ -1,313 +0,0 @@
-<?php
-
-/**
- * @file
- * Enables users to rename URLs.
- */
-
-/**
- * Implements hook_help().
- */
-function path_help($path, $arg) {
-  switch ($path) {
-    case 'admin/help#path':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Path module allows you to specify an alias, or custom URL, for any existing internal system path. Aliases should not be confused with URL redirects, which allow you to forward a changed or inactive URL to a new URL. In addition to making URLs more readable, aliases also help search engines index content more effectively. Multiple aliases may be used for a single internal system path. To automate the aliasing of paths, you can install the contributed module <a href="@pathauto">Pathauto</a>. For more information, see the online handbook entry for the <a href="@path">Path module</a>.', array('@path' => 'http://drupal.org/documentation/modules/path', '@pathauto' => 'http://drupal.org/project/pathauto')) . '</p>';
-      $output .= '<h3>' . t('Uses') . '</h3>';
-      $output .= '<dl>';
-      $output .= '<dt>' . t('Creating aliases') . '</dt>';
-      $output .= '<dd>' . t('Users with sufficient <a href="@permissions">permissions</a> can create aliases under the <em>URL path settings</em> section when they create or edit content. Some examples of aliases are: ', array('@permissions' => url('admin/people/permissions', array('fragment' => 'module-path'))));
-      $output .= '<ul><li>' . t('<em>member/jane-smith</em> aliased to internal path <em>user/123</em>') . '</li>';
-      $output .= '<li>' . t('<em>about-us/team</em> aliased to internal path <em>node/456</em>') . '</li>';
-      $output .= '</ul></dd>';
-      $output .= '<dt>' . t('Managing aliases') . '</dt>';
-      $output .= '<dd>' . t('The Path module provides a way to search and view a <a href="@aliases">list of all aliases</a> that are in use on your website. Aliases can be added, edited and deleted through this list.', array('@aliases' => url('admin/config/search/path'))) . '</dd>';
-      $output .= '</dl>';
-      return $output;
-
-    case 'admin/config/search/path':
-      return '<p>' . t("An alias defines a different name for an existing URL path - for example, the alias 'about' for the URL path 'node/1'. A URL path can have multiple aliases.") . '</p>';
-
-    case 'admin/config/search/path/add':
-      return '<p>' . t('Enter the path you wish to create the alias for, followed by the name of the new alias.') . '</p>';
-  }
-}
-
-/**
- * Implements hook_permission().
- */
-function path_permission() {
-  return array(
-    'administer url aliases' => array(
-      'title' => t('Administer URL aliases'),
-    ),
-    'create url aliases' => array(
-      'title' => t('Create and edit URL aliases'),
-    ),
-  );
-}
-
-/**
- * Implements hook_menu().
- */
-function path_menu() {
-  $items['admin/config/search/path'] = array(
-    'title' => 'URL aliases',
-    'description' => "Change your site's URL paths by aliasing them.",
-    'page callback' => 'path_admin_overview',
-    'access arguments' => array('administer url aliases'),
-    'weight' => -5,
-    'file' => 'path.admin.inc',
-  );
-  $items['admin/config/search/path/edit/%path'] = array(
-    'title' => 'Edit alias',
-    'page callback' => 'path_admin_edit',
-    'page arguments' => array(5),
-    'access arguments' => array('administer url aliases'),
-    'file' => 'path.admin.inc',
-  );
-  $items['admin/config/search/path/delete/%path'] = array(
-    'title' => 'Delete alias',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('path_admin_delete_confirm', 5),
-    'access arguments' => array('administer url aliases'),
-    'file' => 'path.admin.inc',
-  );
-  $items['admin/config/search/path/list'] = array(
-    'title' => 'List',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-    'weight' => -10,
-  );
-  $items['admin/config/search/path/add'] = array(
-    'title' => 'Add alias',
-    'page callback' => 'path_admin_edit',
-    'access arguments' => array('administer url aliases'),
-    'type' => MENU_LOCAL_ACTION,
-    'file' => 'path.admin.inc',
-  );
-
-  return $items;
-}
-
-/**
- * Implements hook_form_BASE_FORM_ID_alter() for node_form().
- *
- * @see path_form_element_validate()
- */
-function path_form_node_form_alter(&$form, $form_state) {
-  $path = array();
-  if (!empty($form['#node']->nid)) {
-    $conditions = array('source' => 'node/' . $form['#node']->nid);
-    $langcode = entity_language('node', $form['#node']);
-    if ($langcode != LANGUAGE_NONE) {
-      $conditions['language'] = $langcode;
-    }
-    $path = path_load($conditions);
-    if ($path === FALSE) {
-      $path = array();
-    }
-  }
-  $path += array(
-    'pid' => NULL,
-    'source' => isset($form['#node']->nid) ? 'node/' . $form['#node']->nid : NULL,
-    'alias' => '',
-    'language' => isset($langcode) ? $langcode : LANGUAGE_NONE,
-  );
-
-  $form['path'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('URL path settings'),
-    '#collapsible' => TRUE,
-    '#collapsed' => empty($path['alias']),
-    '#group' => 'additional_settings',
-    '#attributes' => array(
-      'class' => array('path-form'),
-    ),
-    '#attached' => array(
-      'js' => array(drupal_get_path('module', 'path') . '/path.js'),
-    ),
-    '#access' => user_access('create url aliases') || user_access('administer url aliases'),
-    '#weight' => 30,
-    '#tree' => TRUE,
-    '#element_validate' => array('path_form_element_validate'),
-  );
-  $form['path']['alias'] = array(
-    '#type' => 'textfield',
-    '#title' => t('URL alias'),
-    '#default_value' => $path['alias'],
-    '#maxlength' => 255,
-    '#description' => t('Optionally specify an alternative URL by which this content can be accessed. For example, type "about" when writing an about page. Use a relative path and don\'t add a trailing slash or the URL alias won\'t work.'),
-  );
-  $form['path']['pid'] = array('#type' => 'value', '#value' => $path['pid']);
-  $form['path']['source'] = array('#type' => 'value', '#value' => $path['source']);
-  $form['path']['language'] = array('#type' => 'value', '#value' => $path['language']);
-}
-
-/**
- * Form element validation handler for URL alias form element.
- *
- * @see path_form_node_form_alter()
- */
-function path_form_element_validate($element, &$form_state, $complete_form) {
-  // Trim the submitted value.
-  $alias = trim($form_state['values']['path']['alias']);
-  if (!empty($alias)) {
-    form_set_value($element['alias'], $alias, $form_state);
-    // Node language (Locale module) needs special care. Since the language of
-    // the URL alias depends on the node language, and the node language can be
-    // switched right within the same form, we need to conditionally overload
-    // the originally assigned URL alias language.
-    // @todo Remove this after converting Path module to a field, and, after
-    //   stopping Locale module from abusing the content language system.
-    if (isset($form_state['values']['language'])) {
-      form_set_value($element['language'], $form_state['values']['language'], $form_state);
-    }
-
-    $path = $form_state['values']['path'];
-
-    // Ensure that the submitted alias does not exist yet.
-    $query = db_select('url_alias')
-      ->condition('alias', $path['alias'])
-      ->condition('language', $path['language']);
-    if (!empty($path['source'])) {
-      $query->condition('source', $path['source'], '<>');
-    }
-    $query->addExpression('1');
-    $query->range(0, 1);
-    if ($query->execute()->fetchField()) {
-      form_error($element, t('The alias is already in use.'));
-    }
-  }
-}
-
-/**
- * Implements hook_node_insert().
- */
-function path_node_insert($node) {
-  if (isset($node->path)) {
-    $path = $node->path;
-    $path['alias'] = trim($path['alias']);
-    // Only save a non-empty alias.
-    if (!empty($path['alias'])) {
-      // Ensure fields for programmatic executions.
-      $langcode = entity_language('node', $node);
-      $path['source'] = 'node/' . $node->nid;
-      $path['language'] = isset($langcode) ? $langcode : LANGUAGE_NONE;
-      path_save($path);
-    }
-  }
-}
-
-/**
- * Implements hook_node_update().
- */
-function path_node_update($node) {
-  if (isset($node->path)) {
-    $path = $node->path;
-    $path['alias'] = trim($path['alias']);
-    // Delete old alias if user erased it.
-    if (!empty($path['pid']) && empty($path['alias'])) {
-      path_delete($path['pid']);
-    }
-    path_node_insert($node);
-  }
-}
-
-/**
- * Implements hook_node_delete().
- */
-function path_node_delete($node) {
-  // Delete all aliases associated with this node.
-  path_delete(array('source' => 'node/' . $node->nid));
-}
-
-/**
- * Implements hook_form_FORM_ID_alter() for taxonomy_form_term().
- */
-function path_form_taxonomy_form_term_alter(&$form, $form_state) {
-  // Make sure this does not show up on the delete confirmation form.
-  if (empty($form_state['confirm_delete'])) {
-    $langcode = entity_language('taxonomy_term', (object) $form['#term']);
-    $langcode = !empty($langcode) ? $langcode : LANGUAGE_NONE;
-    $conditions = array('source' => 'taxonomy/term/' . $form['#term']['tid'], 'language' => $langcode);
-    $path = (isset($form['#term']['tid']) ? path_load($conditions) : array());
-    if ($path === FALSE) {
-      $path = array();
-    }
-    $path += array(
-      'pid' => NULL,
-      'source' => isset($form['#term']['tid']) ? 'taxonomy/term/' . $form['#term']['tid'] : NULL,
-      'alias' => '',
-      'language' => $langcode,
-    );
-    $form['path'] = array(
-      '#access' => user_access('create url aliases') || user_access('administer url aliases'),
-      '#tree' => TRUE,
-      '#element_validate' => array('path_form_element_validate'),
-    );
-    $form['path']['alias'] = array(
-      '#type' => 'textfield',
-      '#title' => t('URL alias'),
-      '#default_value' => $path['alias'],
-      '#maxlength' => 255,
-      '#weight' => 0,
-      '#description' => t("Optionally specify an alternative URL by which this term can be accessed. Use a relative path and don't add a trailing slash or the URL alias won't work."),
-    );
-    $form['path']['pid'] = array('#type' => 'value', '#value' => $path['pid']);
-    $form['path']['source'] = array('#type' => 'value', '#value' => $path['source']);
-    $form['path']['language'] = array('#type' => 'value', '#value' => $path['language']);
-  }
-}
-
-/**
- * Implements hook_taxonomy_term_insert().
- */
-function path_taxonomy_term_insert($term) {
-  if (isset($term->path)) {
-    $path = $term->path;
-    $path['alias'] = trim($path['alias']);
-    // Only save a non-empty alias.
-    if (!empty($path['alias'])) {
-      // Ensure fields for programmatic executions.
-      $path['source'] = 'taxonomy/term/' . $term->tid;
-      // Core does not provide a way to store the term language but contrib
-      // modules can do it so we need to take this into account.
-      $langcode = entity_language('taxonomy_term', $term);
-      $path['language'] = !empty($langcode) ? $langcode : LANGUAGE_NONE;
-      path_save($path);
-    }
-  }
-}
-
-/**
- * Implements hook_taxonomy_term_update().
- */
-function path_taxonomy_term_update($term) {
-  if (isset($term->path)) {
-    $path = $term->path;
-    $path['alias'] = trim($path['alias']);
-    // Delete old alias if user erased it.
-    if (!empty($path['pid']) && empty($path['alias'])) {
-      path_delete($path['pid']);
-    }
-    // Only save a non-empty alias.
-    if (!empty($path['alias'])) {
-      // Ensure fields for programmatic executions.
-      $path['source'] = 'taxonomy/term/' . $term->tid;
-      // Core does not provide a way to store the term language but contrib
-      // modules can do it so we need to take this into account.
-      $langcode = entity_language('taxonomy_term', $term);
-      $path['language'] = !empty($langcode) ? $langcode : LANGUAGE_NONE;
-      path_save($path);
-    }
-  }
-}
-
-/**
- * Implements hook_taxonomy_term_delete().
- */
-function path_taxonomy_term_delete($term) {
-  // Delete all aliases associated with this term.
-  path_delete(array('source' => 'taxonomy/term/' . $term->tid));
-}
diff --git a/modules/path/path.test b/modules/path/path.test
deleted file mode 100644
index edecff5..0000000
--- a/modules/path/path.test
+++ /dev/null
@@ -1,537 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for the Path module.
- */
-
-/**
- * Provides a base class for testing the Path module.
- */
-class PathTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Path alias functionality',
-      'description' => 'Add, edit, delete, and change alias and verify its consistency in the database.',
-      'group' => 'Path',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('path');
-
-    // Create test user and login.
-    $web_user = $this->drupalCreateUser(array('create page content', 'edit own page content', 'administer url aliases', 'create url aliases'));
-    $this->drupalLogin($web_user);
-  }
-
-  /**
-   * Tests the path cache.
-   */
-  function testPathCache() {
-    // Create test node.
-    $node1 = $this->drupalCreateNode();
-
-    // Create alias.
-    $edit = array();
-    $edit['source'] = 'node/' . $node1->nid;
-    $edit['alias'] = $this->randomName(8);
-    $this->drupalPost('admin/config/search/path/add', $edit, t('Save'));
-
-    // Visit the system path for the node and confirm a cache entry is
-    // created.
-    cache_clear_all('*', 'cache_path', TRUE);
-    $this->drupalGet($edit['source']);
-    $this->assertTrue(cache_get($edit['source'], 'cache_path'), 'Cache entry was created.');
-
-    // Visit the alias for the node and confirm a cache entry is created.
-    cache_clear_all('*', 'cache_path', TRUE);
-    $this->drupalGet($edit['alias']);
-    $this->assertTrue(cache_get($edit['source'], 'cache_path'), 'Cache entry was created.');
-  }
-
-  /**
-   * Tests alias functionality through the admin interfaces.
-   */
-  function testAdminAlias() {
-    // Create test node.
-    $node1 = $this->drupalCreateNode();
-
-    // Create alias.
-    $edit = array();
-    $edit['source'] = 'node/' . $node1->nid;
-    $edit['alias'] = $this->randomName(8);
-    $this->drupalPost('admin/config/search/path/add', $edit, t('Save'));
-
-    // Confirm that the alias works.
-    $this->drupalGet($edit['alias']);
-    $this->assertText($node1->title, 'Alias works.');
-    $this->assertResponse(200);
-
-    // Change alias to one containing "exotic" characters.
-    $pid = $this->getPID($edit['alias']);
-
-    $previous = $edit['alias'];
-    $edit['alias'] = "- ._~!$'\"()*@[]?&+%#,;=:" . // "Special" ASCII characters.
-      "%23%25%26%2B%2F%3F" . // Characters that look like a percent-escaped string.
-      "éøïвβ中國書۞"; // Characters from various non-ASCII alphabets.
-    $this->drupalPost('admin/config/search/path/edit/' . $pid, $edit, t('Save'));
-
-    // Confirm that the alias works.
-    $this->drupalGet($edit['alias']);
-    $this->assertText($node1->title, 'Changed alias works.');
-    $this->assertResponse(200);
-
-    drupal_static_reset('drupal_lookup_path');
-    // Confirm that previous alias no longer works.
-    $this->drupalGet($previous);
-    $this->assertNoText($node1->title, 'Previous alias no longer works.');
-    $this->assertResponse(404);
-
-    // Create second test node.
-    $node2 = $this->drupalCreateNode();
-
-    // Set alias to second test node.
-    $edit['source'] = 'node/' . $node2->nid;
-    // leave $edit['alias'] the same
-    $this->drupalPost('admin/config/search/path/add', $edit, t('Save'));
-
-    // Confirm no duplicate was created.
-    $this->assertRaw(t('The alias %alias is already in use in this language.', array('%alias' => $edit['alias'])), 'Attempt to move alias was rejected.');
-
-    // Delete alias.
-    $this->drupalPost('admin/config/search/path/edit/' . $pid, array(), t('Delete'));
-    $this->drupalPost(NULL, array(), t('Confirm'));
-
-    // Confirm that the alias no longer works.
-    $this->drupalGet($edit['alias']);
-    $this->assertNoText($node1->title, 'Alias was successfully deleted.');
-    $this->assertResponse(404);
-  }
-
-  /**
-   * Tests alias functionality through the node interfaces.
-   */
-  function testNodeAlias() {
-    // Create test node.
-    $node1 = $this->drupalCreateNode();
-
-    // Create alias.
-    $edit = array();
-    $edit['path[alias]'] = $this->randomName(8);
-    $this->drupalPost('node/' . $node1->nid . '/edit', $edit, t('Save'));
-
-    // Confirm that the alias works.
-    $this->drupalGet($edit['path[alias]']);
-    $this->assertText($node1->title, 'Alias works.');
-    $this->assertResponse(200);
-
-    // Change alias to one containing "exotic" characters.
-    $previous = $edit['path[alias]'];
-    $edit['path[alias]'] = "- ._~!$'\"()*@[]?&+%#,;=:" . // "Special" ASCII characters.
-      "%23%25%26%2B%2F%3F" . // Characters that look like a percent-escaped string.
-      "éøïвβ中國書۞"; // Characters from various non-ASCII alphabets.
-    $this->drupalPost('node/' . $node1->nid . '/edit', $edit, t('Save'));
-
-    // Confirm that the alias works.
-    $this->drupalGet($edit['path[alias]']);
-    $this->assertText($node1->title, 'Changed alias works.');
-    $this->assertResponse(200);
-
-    // Make sure that previous alias no longer works.
-    $this->drupalGet($previous);
-    $this->assertNoText($node1->title, 'Previous alias no longer works.');
-    $this->assertResponse(404);
-
-    // Create second test node.
-    $node2 = $this->drupalCreateNode();
-
-    // Set alias to second test node.
-    // Leave $edit['path[alias]'] the same.
-    $this->drupalPost('node/' . $node2->nid . '/edit', $edit, t('Save'));
-
-    // Confirm that the alias didn't make a duplicate.
-    $this->assertText(t('The alias is already in use.'), 'Attempt to moved alias was rejected.');
-
-    // Delete alias.
-    $this->drupalPost('node/' . $node1->nid . '/edit', array('path[alias]' => ''), t('Save'));
-
-    // Confirm that the alias no longer works.
-    $this->drupalGet($edit['path[alias]']);
-    $this->assertNoText($node1->title, 'Alias was successfully deleted.');
-    $this->assertResponse(404);
-  }
-
-  /**
-   * Returns the path ID.
-   *
-   * @param $alias
-   *   A string containing an aliased path.
-   *
-   * @return int
-   *   Integer representing the path ID.
-   */
-  function getPID($alias) {
-    return db_query("SELECT pid FROM {url_alias} WHERE alias = :alias", array(':alias' => $alias))->fetchField();
-  }
-
-  /**
-   * Tests that duplicate aliases fail validation.
-   */
-  function testDuplicateNodeAlias() {
-    // Create one node with a random alias.
-    $node_one = $this->drupalCreateNode();
-    $edit = array();
-    $edit['path[alias]'] = $this->randomName();
-    $this->drupalPost('node/' . $node_one->nid . '/edit', $edit, t('Save'));
-
-    // Now create another node and try to set the same alias.
-    $node_two = $this->drupalCreateNode();
-    $this->drupalPost('node/' . $node_two->nid . '/edit', $edit, t('Save'));
-    $this->assertText(t('The alias is already in use.'));
-    $this->assertFieldByXPath("//input[@name='path[alias]' and contains(@class, 'error')]", $edit['path[alias]'], 'Textfield exists and has the error class.');
-  }
-}
-
-/**
- * Tests URL aliases for taxonomy terms.
- */
-class PathTaxonomyTermTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Taxonomy term URL aliases',
-      'description' => 'Tests URL aliases for taxonomy terms.',
-      'group' => 'Path',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('path', 'taxonomy');
-
-    // Create and login user.
-    $web_user = $this->drupalCreateUser(array('administer url aliases', 'administer taxonomy', 'access administration pages'));
-    $this->drupalLogin($web_user);
-  }
-
-  /**
-   * Tests alias functionality through the admin interfaces.
-   */
-  function testTermAlias() {
-    // Create a term in the default 'Tags' vocabulary with URL alias.
-    $vocabulary = taxonomy_vocabulary_load(1);
-    $description = $this->randomName();;
-    $edit = array();
-    $edit['name'] = $this->randomName();
-    $edit['description[value]'] = $description;
-    $edit['path[alias]'] = $this->randomName();
-    $this->drupalPost('admin/structure/taxonomy/' . $vocabulary->machine_name . '/add', $edit, t('Save'));
-
-    // Confirm that the alias works.
-    $this->drupalGet($edit['path[alias]']);
-    $this->assertText($description, 'Term can be accessed on URL alias.');
-
-    // Change the term's URL alias.
-    $tid = db_query("SELECT tid FROM {taxonomy_term_data} WHERE name = :name", array(':name' => $edit['name']))->fetchField();
-    $edit2 = array();
-    $edit2['path[alias]'] = $this->randomName();
-    $this->drupalPost('taxonomy/term/' . $tid . '/edit', $edit2, t('Save'));
-
-    // Confirm that the changed alias works.
-    $this->drupalGet($edit2['path[alias]']);
-    $this->assertText($description, 'Term can be accessed on changed URL alias.');
-
-    // Confirm that the old alias no longer works.
-    $this->drupalGet($edit['path[alias]']);
-    $this->assertNoText($description, 'Old URL alias has been removed after altering.');
-    $this->assertResponse(404, 'Old URL alias returns 404.');
-
-    // Remove the term's URL alias.
-    $edit3 = array();
-    $edit3['path[alias]'] = '';
-    $this->drupalPost('taxonomy/term/' . $tid . '/edit', $edit3, t('Save'));
-
-    // Confirm that the alias no longer works.
-    $this->drupalGet($edit2['path[alias]']);
-    $this->assertNoText($description, 'Old URL alias has been removed after altering.');
-    $this->assertResponse(404, 'Old URL alias returns 404.');
-  }
-}
-
-/**
- * Tests URL aliases for translated nodes.
- */
-class PathLanguageTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Path aliases with translated nodes',
-      'description' => 'Confirm that paths work with translated nodes',
-      'group' => 'Path',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('path', 'locale', 'translation');
-
-    // Create and login user.
-    $this->web_user = $this->drupalCreateUser(array('edit any page content', 'create page content', 'administer url aliases', 'create url aliases', 'administer languages', 'translate content', 'access administration pages'));
-    $this->drupalLogin($this->web_user);
-
-    // Enable French language.
-    $edit = array();
-    $edit['langcode'] = 'fr';
-
-    $this->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));
-
-    // Enable URL language detection and selection.
-    $edit = array('language[enabled][locale-url]' => 1);
-    $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
-  }
-
-  /**
-   * Test alias functionality through the admin interfaces.
-   */
-  function testAliasTranslation() {
-    // Set 'page' content type to enable translation.
-    variable_set('language_content_type_page', 2);
-
-    $english_node = $this->drupalCreateNode(array('type' => 'page'));
-    $english_alias = $this->randomName();
-
-    // Edit the node to set language and path.
-    $edit = array();
-    $edit['language'] = 'en';
-    $edit['path[alias]'] = $english_alias;
-    $this->drupalPost('node/' . $english_node->nid . '/edit', $edit, t('Save'));
-
-    // Confirm that the alias works.
-    $this->drupalGet($english_alias);
-    $this->assertText($english_node->title, 'Alias works.');
-
-    // Translate the node into French.
-    $this->drupalGet('node/' . $english_node->nid . '/translate');
-    $this->clickLink(t('add translation'));
-    $edit = array();
-    $langcode = LANGUAGE_NONE;
-    $edit["title"] = $this->randomName();
-    $edit["body[$langcode][0][value]"] = $this->randomName();
-    $french_alias = $this->randomName();
-    $edit['path[alias]'] = $french_alias;
-    $this->drupalPost(NULL, $edit, t('Save'));
-
-    // Clear the path lookup cache.
-    drupal_lookup_path('wipe');
-
-    // Ensure the node was created.
-    $french_node = $this->drupalGetNodeByTitle($edit["title"]);
-    $this->assertTrue(($french_node), 'Node found in database.');
-
-    // Confirm that the alias works.
-    $this->drupalGet('fr/' . $edit['path[alias]']);
-    $this->assertText($french_node->title, 'Alias for French translation works.');
-
-    // Confirm that the alias is returned by url().
-    drupal_static_reset('language_list');
-    drupal_static_reset('locale_url_outbound_alter');
-    $languages = language_list();
-    $url = url('node/' . $french_node->nid, array('language' => $languages[$french_node->language]));
-    $this->assertTrue(strpos($url, $edit['path[alias]']), 'URL contains the path alias.');
-
-    // Confirm that the alias works even when changing language negotiation
-    // options. Enable User language detection and selection over URL one.
-    $edit = array(
-      'language[enabled][locale-user]' => 1,
-      'language[weight][locale-user]' => -9,
-      'language[enabled][locale-url]' => 1,
-      'language[weight][locale-url]' => -8,
-    );
-    $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
-
-    // Change user language preference.
-    $edit = array('language' => 'fr');
-    $this->drupalPost("user/{$this->web_user->uid}/edit", $edit, t('Save'));
-
-    // Check that the English alias works. In this situation French is the
-    // current UI and content language, while URL language is English (since we
-    // do not have a path prefix we fall back to the site's default language).
-    // We need to ensure that the user language preference is not taken into
-    // account while determining the path alias language, because if this
-    // happens we have no way to check that the path alias is valid: there is no
-    // path alias for French matching the english alias. So drupal_lookup_path()
-    // needs to use the URL language to check whether the alias is valid.
-    $this->drupalGet($english_alias);
-    $this->assertText($english_node->title, 'Alias for English translation works.');
-
-    // Check that the French alias works.
-    $this->drupalGet("fr/$french_alias");
-    $this->assertText($french_node->title, 'Alias for French translation works.');
-
-    // Disable URL language negotiation.
-    $edit = array('language[enabled][locale-url]' => FALSE);
-    $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
-
-    // Check that the English alias still works.
-    $this->drupalGet($english_alias);
-    $this->assertText($english_node->title, 'Alias for English translation works.');
-
-    // Check that the French alias is not available. We check the unprefixed
-    // alias because we disabled URL language negotiation above. In this
-    // situation only aliases in the default language and language neutral ones
-    // should keep working.
-    $this->drupalGet($french_alias);
-    $this->assertResponse(404, 'Alias for French translation is unavailable when URL language negotiation is disabled.');
-
-    // drupal_lookup_path() has an internal static cache. Check to see that
-    // it has the appropriate contents at this point.
-    drupal_lookup_path('wipe');
-    $french_node_path = drupal_lookup_path('source', $french_alias, $french_node->language);
-    $this->assertEqual($french_node_path, 'node/' . $french_node->nid, 'Normal path works.');
-    // Second call should return the same path.
-    $french_node_path = drupal_lookup_path('source', $french_alias, $french_node->language);
-    $this->assertEqual($french_node_path, 'node/' . $french_node->nid, 'Normal path is the same.');
-
-    // Confirm that the alias works.
-    $french_node_alias = drupal_lookup_path('alias', 'node/' . $french_node->nid, $french_node->language);
-    $this->assertEqual($french_node_alias, $french_alias, 'Alias works.');
-    // Second call should return the same alias.
-    $french_node_alias = drupal_lookup_path('alias', 'node/' . $french_node->nid, $french_node->language);
-    $this->assertEqual($french_node_alias, $french_alias, 'Alias is the same.');
-  }
-}
-
-/**
- * Tests the user interface for creating path aliases, with languages.
- */
-class PathLanguageUITestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Path aliases with languages',
-      'description' => 'Confirm that the Path module user interface works with languages.',
-      'group' => 'Path',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('path', 'locale');
-
-    // Create and login user.
-    $web_user = $this->drupalCreateUser(array('edit any page content', 'create page content', 'administer url aliases', 'create url aliases', 'administer languages', 'access administration pages'));
-    $this->drupalLogin($web_user);
-
-    // Enable French language.
-    $edit = array();
-    $edit['langcode'] = 'fr';
-
-    $this->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));
-
-    // Enable URL language detection and selection.
-    $edit = array('language[enabled][locale-url]' => 1);
-    $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
-  }
-
-  /**
-   * Tests that a language-neutral URL alias works.
-   */
-  function testLanguageNeutralURLs() {
-    $name = $this->randomName(8);
-    $edit = array();
-    $edit['source'] = 'admin/config/search/path';
-    $edit['alias'] = $name;
-    $this->drupalPost('admin/config/search/path/add', $edit, t('Save'));
-
-    $this->drupalGet($name);
-    $this->assertText(t('Filter aliases'), 'Language-neutral URL alias works');
-  }
-
-  /**
-   * Tests that a default language URL alias works.
-   */
-  function testDefaultLanguageURLs() {
-    $name = $this->randomName(8);
-    $edit = array();
-    $edit['source'] = 'admin/config/search/path';
-    $edit['alias'] = $name;
-    $edit['language'] = 'en';
-    $this->drupalPost('admin/config/search/path/add', $edit, t('Save'));
-
-    $this->drupalGet($name);
-    $this->assertText(t('Filter aliases'), 'English URL alias works');
-  }
-
-  /**
-   * Tests that a non-default language URL alias works.
-   */
-  function testNonDefaultURLs() {
-    $name = $this->randomName(8);
-    $edit = array();
-    $edit['source'] = 'admin/config/search/path';
-    $edit['alias'] = $name;
-    $edit['language'] = 'fr';
-    $this->drupalPost('admin/config/search/path/add', $edit, t('Save'));
-
-    $this->drupalGet('fr/' . $name);
-    $this->assertText(t('Filter aliases'), 'Foreign URL alias works');
-  }
-
-}
-
-/**
- * Tests that paths are not prefixed on a monolingual site.
- */
-class PathMonolingualTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Paths on non-English monolingual sites',
-      'description' => 'Confirm that paths are not changed on monolingual non-English sites',
-      'group' => 'Path',
-    );
-  }
-
-  function setUp() {
-    global $language;
-    parent::setUp('path', 'locale', 'translation');
-
-    // Create and login user.
-    $web_user = $this->drupalCreateUser(array('administer languages', 'access administration pages'));
-    $this->drupalLogin($web_user);
-
-    // Enable French language.
-    $edit = array();
-    $edit['langcode'] = 'fr';
-    $this->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));
-
-    // Make French the default language.
-    $edit = array('site_default' => 'fr');
-    $this->drupalPost('admin/config/regional/language', $edit, t('Save configuration'));
-
-    // Disable English.
-    $edit = array('enabled[en]' => FALSE);
-    $this->drupalPost('admin/config/regional/language', $edit, t('Save configuration'));
-
-    // Verify that French is the only language.
-    $this->assertFalse(drupal_multilingual(), 'Site is mono-lingual');
-    $this->assertEqual(language_default('language'), 'fr', 'French is the default language');
-
-    // Set language detection to URL.
-    $edit = array('language[enabled][locale-url]' => TRUE);
-    $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
-
-    // Force languages to be initialized.
-    drupal_language_initialize();
-  }
-
-  /**
-   * Verifies that links do not have language prefixes in them.
-   */
-  function testPageLinks() {
-    // Navigate to 'admin/config' path.
-    $this->drupalGet('admin/config');
-
-    // Verify that links in this page do not have a 'fr/' prefix.
-    $this->assertNoLinkByHref('/fr/', 'Links do not contain language prefix');
-
-    // Verify that links in this page can be followed and work.
-    $this->clickLink(t('Languages'));
-    $this->assertResponse(200, 'Clicked link results in a valid page');
-    $this->assertText(t('Add language'), 'Page contains the add language text');
-  }
-}
diff --git a/modules/php/php.info b/modules/php/php.info
deleted file mode 100644
index cf86362..0000000
--- a/modules/php/php.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = PHP filter
-description = Allows embedded PHP code/snippets to be evaluated.
-package = Core
-version = VERSION
-core = 7.x
-files[] = php.test
diff --git a/modules/php/php.install b/modules/php/php.install
deleted file mode 100644
index 12944dd..0000000
--- a/modules/php/php.install
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the php module.
- */
-
-/**
- * Implements hook_enable().
- */
-function php_enable() {
-  $format_exists = (bool) db_query_range('SELECT 1 FROM {filter_format} WHERE name = :name', 0, 1, array(':name' => 'PHP code'))->fetchField();
-  // Add a PHP code text format, if it does not exist. Do this only for the
-  // first install (or if the format has been manually deleted) as there is no
-  // reliable method to identify the format in an uninstall hook or in
-  // subsequent clean installs.
-  if (!$format_exists) {
-    $php_format = array(
-      'format' => 'php_code',
-      'name' => 'PHP code',
-      // 'Plain text' format is installed with a weight of 10 by default. Use a
-      // higher weight here to ensure that this format will not be the default
-      // format for anyone.
-      'weight' => 11,
-      'filters' => array(
-        // Enable the PHP evaluator filter.
-        'php_code' => array(
-          'weight' => 0,
-          'status' => 1,
-        ),
-      ),
-    );
-    $php_format = (object) $php_format;
-    filter_format_save($php_format);
-
-    drupal_set_message(t('A <a href="@php-code">PHP code</a> text format has been created.', array('@php-code' => url('admin/config/content/formats/' . $php_format->format))));
-  }
-}
-
-/**
- * Implements hook_disable().
- */
-function php_disable() {
-  drupal_set_message(t('The PHP module has been disabled. Any existing content that was using the PHP filter will now be visible in plain text. This might pose a security risk by exposing sensitive information, if any, used in the PHP code.'));
-}
diff --git a/modules/php/php.test b/modules/php/php.test
deleted file mode 100644
index 3b11b48..0000000
--- a/modules/php/php.test
+++ /dev/null
@@ -1,120 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for php.module.
- */
-
-/**
- * Defines a base PHP test case class.
- */
-class PHPTestCase extends DrupalWebTestCase {
-  protected $php_code_format;
-
-  function setUp() {
-    parent::setUp('php');
-
-    // Create and login admin user.
-    $admin_user = $this->drupalCreateUser(array('administer filters'));
-    $this->drupalLogin($admin_user);
-
-    // Verify that the PHP code text format was inserted.
-    $php_format_id = 'php_code';
-    $this->php_code_format = filter_format_load($php_format_id);
-    $this->assertEqual($this->php_code_format->name, 'PHP code', 'PHP code text format was created.');
-
-    // Verify that the format has the PHP code filter enabled.
-    $filters = filter_list_format($php_format_id);
-    $this->assertTrue($filters['php_code']->status, 'PHP code filter is enabled.');
-
-    // Verify that the format exists on the administration page.
-    $this->drupalGet('admin/config/content/formats');
-    $this->assertText('PHP code', 'PHP code text format was created.');
-
-    // Verify that anonymous and authenticated user roles do not have access.
-    $this->drupalGet('admin/config/content/formats/' . $php_format_id);
-    $this->assertFieldByName('roles[' . DRUPAL_ANONYMOUS_RID . ']', FALSE, 'Anonymous users do not have access to PHP code format.');
-    $this->assertFieldByName('roles[' . DRUPAL_AUTHENTICATED_RID . ']', FALSE, 'Authenticated users do not have access to PHP code format.');
-  }
-
-  /**
-   * Creates a test node with PHP code in the body.
-   *
-   * @return stdObject Node object.
-   */
-  function createNodeWithCode() {
-    return $this->drupalCreateNode(array('body' => array(LANGUAGE_NONE => array(array('value' => '<?php print "SimpleTest PHP was executed!"; ?>')))));
-  }
-}
-
-/**
- * Tests to make sure the PHP filter actually evaluates PHP code when used.
- */
-class PHPFilterTestCase extends PHPTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'PHP filter functionality',
-      'description' => 'Make sure that PHP filter properly evaluates PHP code when enabled.',
-      'group' => 'PHP',
-    );
-  }
-
-  /**
-   * Makes sure that the PHP filter evaluates PHP code when used.
-   */
-  function testPHPFilter() {
-    // Log in as a user with permission to use the PHP code text format.
-    $php_code_permission = filter_permission_name(filter_format_load('php_code'));
-    $web_user = $this->drupalCreateUser(array('access content', 'create page content', 'edit own page content', $php_code_permission));
-    $this->drupalLogin($web_user);
-
-    // Create a node with PHP code in it.
-    $node = $this->createNodeWithCode();
-
-    // Make sure that the PHP code shows up as text.
-    $this->drupalGet('node/' . $node->nid);
-    $this->assertText('print "SimpleTest PHP was executed!"', 'PHP code is displayed.');
-
-    // Change filter to PHP filter and see that PHP code is evaluated.
-    $edit = array();
-    $langcode = LANGUAGE_NONE;
-    $edit["body[$langcode][0][format]"] = $this->php_code_format->format;
-    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
-    $this->assertRaw(t('Basic page %title has been updated.', array('%title' => $node->title)), 'PHP code filter turned on.');
-
-    // Make sure that the PHP code shows up as text.
-    $this->assertNoText('print "SimpleTest PHP was executed!"', "PHP code isn't displayed.");
-    $this->assertText('SimpleTest PHP was executed!', 'PHP code has been evaluated.');
-  }
-}
-
-/**
- * Tests to make sure access to the PHP filter is properly restricted.
- */
-class PHPAccessTestCase extends PHPTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'PHP filter access check',
-      'description' => 'Make sure that users who don\'t have access to the PHP filter can\'t see it.',
-      'group' => 'PHP',
-    );
-  }
-
-  /**
-   * Makes sure that the user can't use the PHP filter when not given access.
-   */
-  function testNoPrivileges() {
-    // Create node with PHP filter enabled.
-    $web_user = $this->drupalCreateUser(array('access content', 'create page content', 'edit own page content'));
-    $this->drupalLogin($web_user);
-    $node = $this->createNodeWithCode();
-
-    // Make sure that the PHP code shows up as text.
-    $this->drupalGet('node/' . $node->nid);
-    $this->assertText('print', 'PHP code was not evaluated.');
-
-    // Make sure that user doesn't have access to filter.
-    $this->drupalGet('node/' . $node->nid . '/edit');
-    $this->assertNoRaw('<option value="' . $this->php_code_format->format . '">', 'PHP code format not available.');
-  }
-}
diff --git a/modules/poll/poll-bar--block.tpl.php b/modules/poll/poll-bar--block.tpl.php
deleted file mode 100644
index 3b91afc..0000000
--- a/modules/poll/poll-bar--block.tpl.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to display the bar for a single choice in a
- * poll.
- *
- * Variables available:
- * - $title: The title of the poll.
- * - $votes: The number of votes for this choice
- * - $total_votes: The number of votes for this choice
- * - $percentage: The percentage of votes for this choice.
- * - $vote: The choice number of the current user's vote.
- * - $voted: Set to TRUE if the user voted for this choice.
- *
- * @see template_preprocess_poll_bar()
- */
-?>
-
-<div class="text"><?php print $title; ?></div>
-<div class="bar">
-  <div style="width: <?php print $percentage; ?>%;" class="foreground"></div>
-</div>
-<div class="percent">
-  <?php print $percentage; ?>%
-</div>
diff --git a/modules/poll/poll-bar.tpl.php b/modules/poll/poll-bar.tpl.php
deleted file mode 100644
index 9426ff5..0000000
--- a/modules/poll/poll-bar.tpl.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to display the bar for a single choice in a
- * poll.
- *
- * Variables available:
- * - $title: The title of the poll.
- * - $votes: The number of votes for this choice
- * - $total_votes: The number of votes for this choice
- * - $percentage: The percentage of votes for this choice.
- * - $vote: The choice number of the current user's vote.
- * - $voted: Set to TRUE if the user voted for this choice.
- *
- * @see template_preprocess_poll_bar()
- */
-?>
-
-<div class="text"><?php print $title; ?></div>
-<div class="bar">
-  <div style="width: <?php print $percentage; ?>%;" class="foreground"></div>
-</div>
-<div class="percent">
-  <?php print $percentage; ?>% (<?php print format_plural($votes, '1 vote', '@count votes'); ?>)
-</div>
diff --git a/modules/poll/poll-results--block.tpl.php b/modules/poll/poll-results--block.tpl.php
deleted file mode 100644
index f8387f5..0000000
--- a/modules/poll/poll-results--block.tpl.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-/**
- * @file
- * Default theme implementation to display the poll results in a block.
- *
- * Variables available:
- * - $title: The title of the poll.
- * - $results: The results of the poll.
- * - $votes: The total results in the poll.
- * - $links: Links in the poll.
- * - $nid: The nid of the poll
- * - $cancel_form: A form to cancel the user's vote, if allowed.
- * - $raw_links: The raw array of links. Should be run through theme('links')
- *   if used.
- * - $vote: The choice number of the current user's vote.
- *
- * @see template_preprocess_poll_results()
- */
-?>
-
-<div class="poll">
-  <div class="title"><?php print $title ?></div>
-  <?php print $results ?>
-  <div class="total">
-    <?php print t('Total votes: @votes', array('@votes' => $votes)); ?>
-  </div>
-</div>
-<div class="links"><?php print $links; ?></div>
diff --git a/modules/poll/poll-results.tpl.php b/modules/poll/poll-results.tpl.php
deleted file mode 100644
index 678bc2b..0000000
--- a/modules/poll/poll-results.tpl.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to display the poll results in a block.
- *
- * Variables available:
- * - $title: The title of the poll.
- * - $results: The results of the poll.
- * - $votes: The total results in the poll.
- * - $links: Links in the poll.
- * - $nid: The nid of the poll
- * - $cancel_form: A form to cancel the user's vote, if allowed.
- * - $raw_links: The raw array of links.
- * - $vote: The choice number of the current user's vote.
- *
- * @see template_preprocess_poll_results()
- *
- * @ingroup themeable
- */
-?>
-<div class="poll">
-  <?php print $results; ?>
-  <div class="total">
-    <?php print t('Total votes: @votes', array('@votes' => $votes)); ?>
-  </div>
-  <?php if (!empty($cancel_form)): ?>
-    <?php print $cancel_form; ?>
-  <?php endif; ?>
-</div>
diff --git a/modules/poll/poll-rtl.css b/modules/poll/poll-rtl.css
deleted file mode 100644
index 14d42e6..0000000
--- a/modules/poll/poll-rtl.css
+++ /dev/null
@@ -1,10 +0,0 @@
-
-.poll .bar .foreground {
-  float: right;
-}
-.poll .percent {
-  text-align: left;
-}
-.poll .vote-form .choices {
-  text-align: right;
-}
diff --git a/modules/poll/poll-vote.tpl.php b/modules/poll/poll-vote.tpl.php
deleted file mode 100644
index 699a26d..0000000
--- a/modules/poll/poll-vote.tpl.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to display voting form for a poll.
- *
- * - $choice: The radio buttons for the choices in the poll.
- * - $title: The title of the poll.
- * - $block: True if this is being displayed as a block.
- * - $vote: The vote button
- * - $rest: Anything else in the form that may have been added via
- *   form_alter hooks.
- *
- * @see template_preprocess_poll_vote()
- *
- * @ingroup themeable
- */
-?>
-<div class="poll">
-  <div class="vote-form">
-    <div class="choices">
-      <?php if ($block): ?>
-        <div class="title"><?php print $title; ?></div>
-      <?php endif; ?>
-      <?php print $choice; ?>
-    </div>
-    <?php print $vote; ?>
-  </div>
-  <?php // This is the 'rest' of the form, in case items have been added. ?>
-  <?php print $rest ?>
-</div>
diff --git a/modules/poll/poll.css b/modules/poll/poll.css
deleted file mode 100644
index 8b04e38..0000000
--- a/modules/poll/poll.css
+++ /dev/null
@@ -1,51 +0,0 @@
-
-.poll {
-  overflow: hidden;
-}
-.poll .bar {
-  height: 1em;
-  margin: 1px 0;
-  background-color: #ddd;
-}
-.poll .bar .foreground {
-  background-color: #000;
-  height: 1em;
-  float: left; /* LTR */
-}
-.poll .links {
-  text-align: center;
-}
-.poll .percent {
-  text-align: right; /* LTR */
-}
-.poll .total {
-  text-align: center;
-}
-.poll .vote-form {
-  text-align: center;
-}
-.poll .vote-form .choices {
-  text-align: left; /* LTR */
-  margin: 0 auto;
-  display: table;
-}
-.poll .vote-form .choices .title {
-  font-weight: bold;
-}
-.node-form #edit-poll-more {
-  margin: 0;
-}
-.node-form #poll-choice-table .form-text {
-  display: inline;
-  width: auto;
-}
-.node-form #poll-choice-table td.choice-flag {
-  white-space: nowrap;
-  width: 4em;
-}
-td.poll-chtext {
-  width: 80%;
-}
-td.poll-chvotes .form-text {
-  width: 85%;
-}
diff --git a/modules/poll/poll.info b/modules/poll/poll.info
deleted file mode 100644
index 9297727..0000000
--- a/modules/poll/poll.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Poll
-description = Allows your site to capture votes on different topics in the form of multiple choice questions.
-package = Core
-version = VERSION
-core = 7.x
-files[] = poll.test
-stylesheets[all][] = poll.css
diff --git a/modules/poll/poll.install b/modules/poll/poll.install
deleted file mode 100644
index 8c58025..0000000
--- a/modules/poll/poll.install
+++ /dev/null
@@ -1,215 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the poll module.
- */
-
-/**
- * Implements hook_schema().
- */
-function poll_schema() {
-  $schema['poll'] = array(
-    'description' => 'Stores poll-specific information for poll nodes.',
-    'fields' => array(
-      'nid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => "The poll's {node}.nid.",
-      ),
-      'runtime' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The number of seconds past {node}.created during which the poll is open.',
-      ),
-      'active' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Boolean indicating whether or not the poll is open.',
-      ),
-    ),
-    'primary key' => array('nid'),
-    'foreign keys' => array(
-      'poll_node' => array(
-        'table' => 'node',
-        'columns' => array('nid' => 'nid'),
-      ),
-    ),
-  );
-
-  $schema['poll_choice'] = array(
-    'description' => 'Stores information about all choices for all {poll}s.',
-    'fields' => array(
-      'chid' => array(
-        'type' => 'serial',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'description' => 'Unique identifier for a poll choice.',
-      ),
-      'nid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The {node}.nid this choice belongs to.',
-      ),
-      'chtext' => array(
-        'type' => 'varchar',
-        'length' => 128,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'The text for this choice.',
-        'translatable' => TRUE,
-      ),
-      'chvotes' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The total number of votes this choice has received by all users.',
-      ),
-      'weight' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The sort order of this choice among all choices for the same node.',
-      ),
-    ),
-    'indexes' => array(
-      'nid' => array('nid'),
-    ),
-    'primary key' => array('chid'),
-    'foreign keys' => array(
-      'choice_node' => array(
-        'table' => 'node',
-        'columns' => array('nid' => 'nid'),
-      ),
-    ),
-  );
-
-  $schema['poll_vote'] = array(
-    'description' => 'Stores per-{users} votes for each {poll}.',
-    'fields' => array(
-      'chid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'description' => "The {users}'s vote for this poll.",
-      ),
-      'nid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'description' => 'The {poll} node this vote is for.',
-      ),
-      'uid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The {users}.uid this vote is from unless the voter was anonymous.',
-      ),
-      'hostname' => array(
-        'type' => 'varchar',
-        'length' => 128,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'The IP address this vote is from unless the voter was logged in.',
-      ),
-      'timestamp' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The timestamp of the vote creation.',
-      ),
-    ),
-    'primary key' => array('nid', 'uid', 'hostname'),
-    'foreign keys' => array(
-      'poll_node' => array(
-        'table' => 'node',
-        'columns' => array('nid' => 'nid'),
-      ),
-      'voter' => array(
-        'table' => 'users',
-        'columns' => array('uid' => 'uid'),
-      ),
-    ),
-    'indexes' => array(
-      'chid'     => array('chid'),
-      'hostname' => array('hostname'),
-      'uid' => array('uid'),
-    ),
-  );
-
-  return $schema;
-}
-
-/**
- * Use the poll_choice primary key to record votes in poll_votes rather than
- * the choice order. Rename chorder to weight.
- *
- * Rename {poll_choices} table to {poll_choice} and {poll_votes} to {poll_vote}.
- */
-function poll_update_7001() {
-  // Add chid column and convert existing votes.
-  db_add_field('poll_votes', 'chid', array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0));
-  db_add_index('poll_votes', 'chid', array('chid'));
-  db_update('poll_votes')
-    ->expression('chid', Database::getConnection()->prefixTables('COALESCE((SELECT chid FROM {poll_choices} c WHERE {poll_votes}.chorder = c.chorder AND {poll_votes}.nid = c.nid), 0)'))
-    ->execute();
-  // Delete invalid votes.
-  db_delete('poll_votes')->condition('chid', 0)->execute();
-  // Remove old chorder column.
-  db_drop_field('poll_votes', 'chorder');
-
-  // Change the chorder column to weight in poll_choices.
-  db_change_field('poll_choices', 'chorder', 'weight', array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'size' => 'tiny'));
-
-  db_rename_table('poll_votes', 'poll_vote');
-  db_rename_table('poll_choices', 'poll_choice');
-}
-
-/**
- * Add timestamp field to {poll_vote}.
- */
-function poll_update_7002() {
-  $field = array(
-    'type' => 'int',
-    'not null' => TRUE,
-    'default' => 0,
-  );
-  db_add_field('poll_vote', 'timestamp', $field);
-}
-
-/**
- * Change the weight column to normal int.
- */
-function poll_update_7003() {
-  db_change_field('poll_choice', 'weight', 'weight', array(
-    'type' => 'int',
-    'not null' => TRUE,
-    'default' => 0,
-    'description' => 'The sort order of this choice among all choices for the same node.',
-  ));
-}
-
-/**
- * @addtogroup updates-7.x-extra
- * @{
- */
-
-/**
- * Update the database to match the schema.
- */
-function poll_update_7004() {
-  // Remove field default.
-  db_change_field('poll_vote', 'chid', 'chid', array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE));
-}
-
-/**
- * @} End of "addtogroup updates-7.x-extra".
- */
diff --git a/modules/poll/poll.module b/modules/poll/poll.module
deleted file mode 100644
index 70eb65d..0000000
--- a/modules/poll/poll.module
+++ /dev/null
@@ -1,1019 +0,0 @@
-<?php
-
-/**
- * @file
- * Enables your site to capture votes on different topics in the form of multiple
- * choice questions.
- */
-
-/**
- * Implements hook_help().
- */
-function poll_help($path, $arg) {
-  switch ($path) {
-    case 'admin/help#poll':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Poll module can be used to create simple surveys or questionnaires that display cumulative results. A poll is a good way to receive feedback from site users and community members. For more information, see the online handbook entry for the <a href="@poll">Poll module</a>.', array('@poll' => 'http://drupal.org/documentation/modules/poll/')) . '</p>';
-      $output .= '<h3>' . t('Uses') . '</h3>';
-      $output .= '<dl>';
-      $output .= '<dt>' . t('Creating a poll') . '</dt>';
-      $output .= '<dd>' . t('Users can create a poll by clicking on Poll on the <a href="@add-content">Add new content</a> page, and entering the question being posed, the answer choices, and beginning vote counts for each choice. The status (closed or active) and duration (length of time the poll remains active for new votes) can also be specified.', array('@add-content' => url('node/add'))) . '</dd>';
-      $output .= '<dt>' . t('Viewing polls') . '</dt>';
-      $output .= '<dd>' . t('You can visit the <a href="@poll">Polls</a> page to view all current polls, or alternately enable the <em>Most recent poll</em> block on the <a href="@blocks">Blocks administration page</a>. To vote in or view the results of a specific poll, you can click on the poll itself.', array('@poll' => url('poll'), '@blocks' => url('admin/structure/block'))) . '</dd>';
-      $output .= '</dl>';
-      return $output;
-  }
-}
-
-/**
- * Implements hook_theme().
- */
-function poll_theme() {
-  $theme_hooks = array(
-    'poll_vote' => array(
-      'template' => 'poll-vote',
-      'render element' => 'form',
-    ),
-    'poll_choices' => array(
-      'render element' => 'form',
-    ),
-    'poll_results' => array(
-      'template' => 'poll-results',
-      'variables' => array('raw_title' => NULL, 'results' => NULL, 'votes' => NULL, 'raw_links' => NULL, 'block' => NULL, 'nid' => NULL, 'vote' => NULL),
-    ),
-    'poll_bar' => array(
-      'template' => 'poll-bar',
-      'variables' => array('title' => NULL, 'votes' => NULL, 'total_votes' => NULL, 'vote' => NULL, 'block' => NULL),
-    ),
-  );
-  // The theme system automatically discovers the theme's functions and
-  // templates that implement more targeted "suggestions" of generic theme
-  // hooks. But suggestions implemented by a module must be explicitly
-  // registered.
-  $theme_hooks += array(
-    'poll_results__block' => array(
-      'template' => 'poll-results--block',
-      'variables' => $theme_hooks['poll_results']['variables'],
-    ),
-    'poll_bar__block' => array(
-      'template' => 'poll-bar--block',
-      'variables' => $theme_hooks['poll_bar']['variables'],
-    ),
-  );
-  return $theme_hooks;
-}
-
-/**
- * Implements hook_permission().
- */
-function poll_permission() {
-  $perms = array(
-    'vote on polls' => array(
-      'title' => t('Vote on polls'),
-    ),
-    'cancel own vote' => array(
-      'title' => t('Cancel and change own votes'),
-    ),
-    'inspect all votes' => array(
-      'title' => t('View details for all votes'),
-    ),
-  );
-
-  return $perms;
-}
-
-/**
- * Implements hook_menu().
- */
-function poll_menu() {
-  $items['poll'] = array(
-    'title' => 'Polls',
-    'page callback' => 'poll_page',
-    'access arguments' => array('access content'),
-    'type' => MENU_SUGGESTED_ITEM,
-    'file' => 'poll.pages.inc',
-  );
-
-  $items['node/%node/votes'] = array(
-    'title' => 'Votes',
-    'page callback' => 'poll_votes',
-    'page arguments' => array(1),
-    'access callback' => '_poll_menu_access',
-    'access arguments' => array(1, 'inspect all votes', FALSE),
-    'weight' => 3,
-    'type' => MENU_LOCAL_TASK,
-    'file' => 'poll.pages.inc',
-  );
-
-  $items['node/%node/results'] = array(
-    'title' => 'Results',
-    'page callback' => 'poll_results',
-    'page arguments' => array(1),
-    'access callback' => '_poll_menu_access',
-    'access arguments' => array(1, 'access content', TRUE),
-    'weight' => 3,
-    'type' => MENU_LOCAL_TASK,
-    'file' => 'poll.pages.inc',
-  );
-
-  return $items;
-}
-
-/**
- * Callback function to see if a node is acceptable for poll menu items.
- */
-function _poll_menu_access($node, $perm, $inspect_allowvotes) {
-  return user_access($perm) && ($node->type == 'poll') && ($node->allowvotes || !$inspect_allowvotes);
-}
-
-/**
- * Implements hook_block_info().
- */
-function poll_block_info() {
-  $blocks['recent']['info'] = t('Most recent poll');
-  $blocks['recent']['properties']['administrative'] = TRUE;
-  return $blocks;
-}
-
-/**
- * Implements hook_block_view().
- *
- * Generates a block containing the latest poll.
- */
-function poll_block_view($delta = '') {
-  if (user_access('access content')) {
-    // Retrieve the latest poll.
-    $select = db_select('node', 'n');
-    $select->join('poll', 'p', 'p.nid = n.nid');
-    $select->fields('n', array('nid'))
-      ->condition('n.status', 1)
-      ->condition('p.active', 1)
-      ->orderBy('n.created', 'DESC')
-      ->range(0, 1)
-      ->addTag('node_access');
-
-    $record = $select->execute()->fetchObject();
-    if ($record) {
-      $poll = node_load($record->nid);
-      if ($poll->nid) {
-        $poll = poll_block_latest_poll_view($poll);
-        $block['subject'] = t('Poll');
-        $block['content'] = $poll->content;
-        return $block;
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_cron().
- *
- * Closes polls that have exceeded their allowed runtime.
- */
-function poll_cron() {
-  $nids = db_query('SELECT p.nid FROM {poll} p INNER JOIN {node} n ON p.nid = n.nid WHERE (n.created + p.runtime) < :request_time AND p.active = :active AND p.runtime <> :runtime', array(':request_time' => REQUEST_TIME, ':active' => 1, ':runtime' => 0))->fetchCol();
-  if (!empty($nids)) {
-    db_update('poll')
-      ->fields(array('active' => 0))
-      ->condition('nid', $nids, 'IN')
-      ->execute();
-  }
-}
-
-/**
- * Implements hook_node_info().
- */
-function poll_node_info() {
-  return array(
-    'poll' => array(
-      'name' => t('Poll'),
-      'base' => 'poll',
-      'description' => t('A <em>poll</em> is a question with a set of possible responses. A <em>poll</em>, once created, automatically provides a simple running count of the number of votes received for each response.'),
-      'title_label' => t('Question'),
-      'has_body' => FALSE,
-    )
-  );
-}
-
-/**
- * Implements hook_field_extra_fields().
- */
-function poll_field_extra_fields() {
-  $extra['node']['poll'] = array(
-    'form' => array(
-      'choice_wrapper' => array(
-        'label' => t('Poll choices'),
-        'description' => t('Poll choices'),
-        'weight' => -4,
-      ),
-      'settings' => array(
-        'label' => t('Poll settings'),
-        'description' => t('Poll module settings'),
-        'weight' => -3,
-      ),
-    ),
-    'display' => array(
-      'poll_view_voting' => array(
-        'label' => t('Poll vote'),
-        'description' => t('Poll vote'),
-        'weight' => 0,
-      ),
-      'poll_view_results' => array(
-        'label' => t('Poll results'),
-        'description' => t('Poll results'),
-        'weight' => 0,
-      ),
-    )
-  );
-
-  return $extra;
-}
-
-/**
- * Implements hook_form().
- */
-function poll_form($node, &$form_state) {
-  global $user;
-
-  $admin = user_access('bypass node access') || user_access('edit any poll content') || (user_access('edit own poll content') && $user->uid == $node->uid);
-
-  $type = node_type_get_type($node);
-
-  // The submit handlers to add more poll choices require that this form is
-  // cached, regardless of whether Ajax is used.
-  $form_state['cache'] = TRUE;
-
-  $form['title'] = array(
-    '#type' => 'textfield',
-    '#title' => check_plain($type->title_label),
-    '#required' => TRUE,
-    '#default_value' => $node->title,
-    '#weight' => -5,
-  );
-
-  if (isset($form_state['choice_count'])) {
-    $choice_count = $form_state['choice_count'];
-  }
-  else {
-    $choice_count = max(2, empty($node->choice) ? 2 : count($node->choice));
-  }
-
-  // Add a wrapper for the choices and more button.
-  $form['choice_wrapper'] = array(
-    '#tree' => FALSE,
-    '#weight' => -4,
-    '#prefix' => '<div class="clearfix" id="poll-choice-wrapper">',
-    '#suffix' => '</div>',
-  );
-
-  // Container for just the poll choices.
-  $form['choice_wrapper']['choice'] = array(
-    '#prefix' => '<div id="poll-choices">',
-    '#suffix' => '</div>',
-    '#theme' => 'poll_choices',
-  );
-
-  // Add the current choices to the form.
-  $delta = 0;
-  $weight = 0;
-  if (isset($node->choice)) {
-    $delta = count($node->choice);
-    foreach ($node->choice as $chid => $choice) {
-      $key = 'chid:' . $chid;
-      $form['choice_wrapper']['choice'][$key] = _poll_choice_form($key, $choice['chid'], $choice['chtext'], $choice['chvotes'], $choice['weight'], $choice_count);
-      $weight = max($choice['weight'], $weight);
-    }
-  }
-
-  // Add initial or additional choices.
-  $existing_delta = $delta;
-  for ($delta; $delta < $choice_count; $delta++) {
-    $key = 'new:' . ($delta - $existing_delta);
-    // Increase the weight of each new choice.
-    $weight++;
-    $form['choice_wrapper']['choice'][$key] = _poll_choice_form($key, NULL, '', 0, $weight, $choice_count);
-  }
-
-  // We name our button 'poll_more' to avoid conflicts with other modules using
-  // Ajax-enabled buttons with the id 'more'.
-  $form['choice_wrapper']['poll_more'] = array(
-    '#type' => 'submit',
-    '#value' => t('More choices'),
-    '#attributes' => array(
-      'title' => t("If the amount of boxes above isn't enough, click here to add more choices."),
-    ),
-    '#weight' => 1,
-    '#limit_validation_errors' => array(array('choice')),
-    '#submit' => array('poll_more_choices_submit'),
-    '#ajax' => array(
-      'callback' => 'poll_choice_js',
-      'wrapper' => 'poll-choices',
-      'effect' => 'fade',
-    ),
-  );
-
-  // Poll attributes
-  $duration = array(
-    // 1-6 days.
-    86400, 2 * 86400, 3 * 86400, 4 * 86400, 5 * 86400, 6 * 86400,
-    // 1-3 weeks (7 days).
-    604800, 2 * 604800, 3 * 604800,
-    // 1-3,6,9 months (30 days).
-    2592000, 2 * 2592000, 3 * 2592000, 6 * 2592000, 9 * 2592000,
-    // 1 year (365 days).
-    31536000,
-  );
-  $duration = array(0 => t('Unlimited')) + drupal_map_assoc($duration, 'format_interval');
-  $active = array(0 => t('Closed'), 1 => t('Active'));
-
-  $form['settings'] = array(
-    '#type' => 'fieldset',
-    '#collapsible' => TRUE,
-    '#title' => t('Poll settings'),
-    '#weight' => -3,
-    '#access' => $admin,
-  );
-
-  $form['settings']['active'] = array(
-    '#type' => 'radios',
-    '#title' => t('Poll status'),
-    '#default_value' => isset($node->active) ? $node->active : 1,
-    '#options' => $active,
-    '#description' => t('When a poll is closed, visitors can no longer vote for it.'),
-    '#access' => $admin,
-  );
-  $form['settings']['runtime'] = array(
-    '#type' => 'select',
-    '#title' => t('Poll duration'),
-    '#default_value' => isset($node->runtime) ? $node->runtime : 0,
-    '#options' => $duration,
-    '#description' => t('After this period, the poll will be closed automatically.'),
-  );
-
-  return $form;
-}
-
-/**
- * Submit handler to add more choices to a poll form.
- *
- * This handler is run regardless of whether JS is enabled or not. It makes
- * changes to the form state. If the button was clicked with JS disabled, then
- * the page is reloaded with the complete rebuilt form. If the button was
- * clicked with JS enabled, then ajax_form_callback() calls poll_choice_js() to
- * return just the changed part of the form.
- */
-function poll_more_choices_submit($form, &$form_state) {
-  // If this is a Ajax POST, add 1, otherwise add 5 more choices to the form.
-  if ($form_state['values']['poll_more']) {
-    $n = $_GET['q'] == 'system/ajax' ? 1 : 5;
-    $form_state['choice_count'] = count($form_state['values']['choice']) + $n;
-  }
-  // Renumber the choices. This invalidates the corresponding key/value
-  // associations in $form_state['input'], so clear that out. This requires
-  // poll_form() to rebuild the choices with the values in
-  // $form_state['node']->choice, which it does.
-  $form_state['node']->choice = array_values($form_state['values']['choice']);
-  unset($form_state['input']['choice']);
-  $form_state['rebuild'] = TRUE;
-}
-
-function _poll_choice_form($key, $chid = NULL, $value = '', $votes = 0, $weight = 0, $size = 10) {
-  $form = array(
-    '#tree' => TRUE,
-    '#weight' => $weight,
-  );
-
-  // We'll manually set the #parents property of these fields so that
-  // their values appear in the $form_state['values']['choice'] array.
-  $form['chid'] = array(
-    '#type' => 'value',
-    '#value' => $chid,
-    '#parents' => array('choice', $key, 'chid'),
-  );
-
-  $form['chtext'] = array(
-    '#type' => 'textfield',
-    '#title' => $value !== '' ? t('Choice label') : t('New choice label'),
-    '#title_display' => 'invisible',
-    '#default_value' => $value,
-    '#parents' => array('choice', $key, 'chtext'),
-  );
-
-  $form['chvotes'] = array(
-    '#type' => 'textfield',
-    '#title' => $value !== '' ? t('Vote count for choice @label', array('@label' => $value)) : t('Vote count for new choice'),
-    '#title_display' => 'invisible',
-    '#default_value' => $votes,
-    '#size' => 5,
-    '#maxlength' => 7,
-    '#parents' => array('choice', $key, 'chvotes'),
-    '#access' => user_access('administer nodes'),
-    '#element_validate' => array('element_validate_integer'),
-  );
-
-  $form['weight'] = array(
-    '#type' => 'weight',
-    '#title' => $value !== '' ? t('Weight for choice @label', array('@label' => $value)) : t('Weight for new choice'),
-    '#title_display' => 'invisible',
-    '#default_value' => $weight,
-    '#delta' => $size,
-    '#parents' => array('choice', $key, 'weight'),
-  );
-
-  return $form;
-}
-
-/**
- * Ajax callback in response to new choices being added to the form.
- *
- * This returns the new page content to replace the page content made obsolete
- * by the form submission.
- *
- * @see poll_more_choices_submit()
- */
-function poll_choice_js($form, $form_state) {
-  return $form['choice_wrapper']['choice'];
-}
-
-/**
- * Form submit handler for node_form().
- *
- * Upon preview and final submission, we need to renumber poll choices and
- * create a teaser output.
- */
-function poll_node_form_submit(&$form, &$form_state) {
-  // Renumber choices.
-  $form_state['values']['choice'] = array_values($form_state['values']['choice']);
-  $form_state['values']['teaser'] = poll_teaser((object) $form_state['values']);
-}
-
-/**
- * Implements hook_validate().
- */
-function poll_validate($node, $form) {
-  if (isset($node->title)) {
-    // Check for at least two options and validate amount of votes.
-    $realchoices = 0;
-    foreach ($node->choice as $i => $choice) {
-      if ($choice['chtext'] != '') {
-        $realchoices++;
-      }
-      if (isset($choice['chvotes']) && $choice['chvotes'] < 0) {
-        form_set_error("choice][$i][chvotes", t('Negative values are not allowed.'));
-      }
-    }
-
-    if ($realchoices < 2) {
-      form_set_error("choice][$realchoices][chtext", t('You must fill in at least two choices.'));
-    }
-  }
-}
-
-/**
- * Implements hook_field_attach_prepare_translation_alter().
- */
-function poll_field_attach_prepare_translation_alter(&$entity, $context) {
-  if ($context['entity_type'] == 'node' && $entity->type == 'poll') {
-    $entity->choice = $context['source_entity']->choice;
-    foreach ($entity->choice as $i => $options) {
-      $entity->choice[$i]['chvotes'] = 0;
-    }
-  }
-}
-
-/**
- * Implements hook_load().
- */
-function poll_load($nodes) {
-  global $user;
-  foreach ($nodes as $node) {
-    $poll = db_query("SELECT runtime, active FROM {poll} WHERE nid = :nid", array(':nid' => $node->nid))->fetchObject();
-
-    if (empty($poll)) {
-      $poll = new stdClass();
-    }
-
-    // Load the appropriate choices into the $poll object.
-    $poll->choice = db_select('poll_choice', 'c')
-      ->addTag('translatable')
-      ->fields('c', array('chid', 'chtext', 'chvotes', 'weight'))
-      ->condition('c.nid', $node->nid)
-      ->orderBy('weight')
-      ->execute()->fetchAllAssoc('chid', PDO::FETCH_ASSOC);
-
-    // Determine whether or not this user is allowed to vote.
-    $poll->allowvotes = FALSE;
-    if (user_access('vote on polls') && $poll->active) {
-      if ($user->uid) {
-        // If authenticated, find existing vote based on uid.
-        $poll->vote = db_query('SELECT chid FROM {poll_vote} WHERE nid = :nid AND uid = :uid', array(':nid' => $node->nid, ':uid' => $user->uid))->fetchField();
-        if (empty($poll->vote)) {
-          $poll->vote = -1;
-          $poll->allowvotes = TRUE;
-        }
-      }
-      elseif (!empty($_SESSION['poll_vote'][$node->nid])) {
-        // Otherwise the user is anonymous. Look for an existing vote in the
-        // user's session.
-        $poll->vote = $_SESSION['poll_vote'][$node->nid];
-      }
-      else {
-        // Finally, query the database for an existing vote based on anonymous
-        // user's hostname.
-        $poll->allowvotes = !db_query("SELECT 1 FROM {poll_vote} WHERE nid = :nid AND hostname = :hostname AND uid = 0", array(':nid' => $node->nid, ':hostname' => ip_address()))->fetchField();
-      }
-    }
-    foreach ($poll as $key => $value) {
-      $nodes[$node->nid]->$key = $value;
-    }
-  }
-}
-
-/**
- * Implements hook_insert().
- */
-function poll_insert($node) {
-  if (!user_access('administer nodes')) {
-    // Make sure all votes are 0 initially
-    foreach ($node->choice as $i => $choice) {
-      $node->choice[$i]['chvotes'] = 0;
-    }
-    $node->active = 1;
-  }
-
-  db_insert('poll')
-    ->fields(array(
-      'nid' => $node->nid,
-      'runtime' => $node->runtime,
-      'active' => $node->active,
-    ))
-    ->execute();
-
-  foreach ($node->choice as $choice) {
-    if ($choice['chtext'] != '') {
-      db_insert('poll_choice')
-        ->fields(array(
-          'nid' => $node->nid,
-          'chtext' => $choice['chtext'],
-          'chvotes' => $choice['chvotes'],
-          'weight' => $choice['weight'],
-        ))
-        ->execute();
-    }
-  }
-}
-
-/**
- * Implements hook_update().
- */
-function poll_update($node) {
-  // Update poll settings.
-  db_update('poll')
-    ->fields(array(
-      'runtime' => $node->runtime,
-      'active' => $node->active,
-    ))
-    ->condition('nid', $node->nid)
-    ->execute();
-
-  // Poll choices with empty titles signifies removal. We remove all votes to
-  // the removed options, so people who voted on them can vote again.
-  foreach ($node->choice as $key => $choice) {
-    if (!empty($choice['chtext'])) {
-      db_merge('poll_choice')
-        ->key(array('chid' => $choice['chid']))
-        ->fields(array(
-          'chtext' => $choice['chtext'],
-          'chvotes' => (int) $choice['chvotes'],
-          'weight' => $choice['weight'],
-        ))
-        ->insertFields(array(
-          'nid' => $node->nid,
-          'chtext' => $choice['chtext'],
-          'chvotes' => (int) $choice['chvotes'],
-          'weight' => $choice['weight'],
-        ))
-        ->execute();
-    }
-    else {
-      db_delete('poll_vote')
-        ->condition('nid', $node->nid)
-        ->condition('chid', $key)
-        ->execute();
-      db_delete('poll_choice')
-        ->condition('nid', $node->nid)
-        ->condition('chid', $choice['chid'])
-        ->execute();
-    }
-  }
-}
-
-/**
- * Implements hook_delete().
- */
-function poll_delete($node) {
-  db_delete('poll')
-    ->condition('nid', $node->nid)
-    ->execute();
-  db_delete('poll_choice')
-    ->condition('nid', $node->nid)
-    ->execute();
-  db_delete('poll_vote')
-    ->condition('nid', $node->nid)
-    ->execute();
-}
-
-/**
- * Return content for 'latest poll' block.
- *
- * @param $node
- *   The node object to load.
- */
-function poll_block_latest_poll_view($node) {
-  global $user;
-  $output = '';
-
-  // This is necessary for shared objects because PHP doesn't copy objects, but
-  // passes them by reference.  So when the objects are cached it can result in
-  // the wrong output being displayed on subsequent calls.  The cloning and
-  // unsetting of $node->content prevents the block output from being the same
-  // as the node output.
-  $node = clone $node;
-  unset($node->content);
-
-  // No 'read more' link.
-  $node->readmore = FALSE;
-  $node->teaser = '';
-
-  $links = array();
-  $links[] = array('title' => t('Older polls'), 'href' => 'poll', 'attributes' => array('title' => t('View the list of polls on this site.')));
-  if ($node->allowvotes) {
-    $links[] = array('title' => t('Results'), 'href' => 'node/' . $node->nid . '/results', 'attributes' => array('title' => t('View the current poll results.')));
-  }
-
-  $node->links = $links;
-
-  if (!empty($node->allowvotes)) {
-    $node->content['poll_view_voting'] = drupal_get_form('poll_view_voting', $node, TRUE);
-    $node->content['links'] = array(
-      '#theme' => 'links',
-      '#links' => $node->links,
-      '#weight' => 5,
-    );
-  }
-  else {
-    $node->content['poll_view_results'] = array('#markup' => poll_view_results($node, TRUE, TRUE));
-  }
-
-  return $node;
-}
-
-
-/**
- * Implements hook_view().
- */
-function poll_view($node, $view_mode) {
-  global $user;
-  $output = '';
-
-  if (!empty($node->allowvotes) && empty($node->show_results)) {
-    $node->content['poll_view_voting'] = drupal_get_form('poll_view_voting', $node);
-  }
-  else {
-    $node->content['poll_view_results'] = array('#markup' => poll_view_results($node, $view_mode));
-  }
-  return $node;
-}
-
-/**
- * Creates a simple teaser that lists all the choices.
- *
- * This is primarily used for RSS.
- */
-function poll_teaser($node) {
-  $teaser = NULL;
-  if (is_array($node->choice)) {
-    foreach ($node->choice as $k => $choice) {
-      if ($choice['chtext'] != '') {
-        $teaser .= '* ' . check_plain($choice['chtext']) . "\n";
-      }
-    }
-  }
-  return $teaser;
-}
-
-/**
- * Generates the voting form for a poll.
- *
- * @ingroup forms
- * @see poll_vote()
- * @see phptemplate_preprocess_poll_vote()
- */
-function poll_view_voting($form, &$form_state, $node, $block = FALSE) {
-  if ($node->choice) {
-    $list = array();
-    foreach ($node->choice as $i => $choice) {
-      $list[$i] = check_plain($choice['chtext']);
-    }
-    $form['choice'] = array(
-      '#type' => 'radios',
-      '#title' => t('Choices'),
-      '#title_display' => 'invisible',
-      '#default_value' => -1,
-      '#options' => $list,
-    );
-  }
-
-  $form['vote'] = array(
-    '#type' => 'submit',
-    '#value' => t('Vote'),
-    '#submit' => array('poll_vote'),
-  );
-
-  // Store the node so we can get to it in submit functions.
-  $form['#node'] = $node;
-  $form['#block'] = $block;
-
-  // Set form caching because we could have multiple of these forms on
-  // the same page, and we want to ensure the right one gets picked.
-  $form_state['cache'] = TRUE;
-
-  // Provide a more cleanly named voting form theme.
-  $form['#theme'] = 'poll_vote';
-  return $form;
-}
-
-/**
- * Validation function for processing votes
- */
-function poll_view_voting_validate($form, &$form_state) {
-  if ($form_state['values']['choice'] == -1) {
-    form_set_error( 'choice', t('Your vote could not be recorded because you did not select any of the choices.'));
-  }
-}
-
-/**
- * Submit handler for processing a vote.
- */
-function poll_vote($form, &$form_state) {
-  $node = $form['#node'];
-  $choice = $form_state['values']['choice'];
-
-  global $user;
-  db_insert('poll_vote')
-    ->fields(array(
-      'nid' => $node->nid,
-      'chid' => $choice,
-      'uid' => $user->uid,
-      'hostname' => ip_address(),
-      'timestamp' => REQUEST_TIME,
-    ))
-    ->execute();
-
-  // Add one to the votes.
-  db_update('poll_choice')
-    ->expression('chvotes', 'chvotes + 1')
-    ->condition('chid', $choice)
-    ->execute();
-
-  cache_clear_all();
-
-  if (!$user->uid) {
-    // The vote is recorded so the user gets the result view instead of the
-    // voting form when viewing the poll. Saving a value in $_SESSION has the
-    // convenient side effect of preventing the user from hitting the page
-    // cache. When anonymous voting is allowed, the page cache should only
-    // contain the voting form, not the results.
-    $_SESSION['poll_vote'][$node->nid] = $choice;
-  }
-
-  drupal_set_message(t('Your vote was recorded.'));
-
-  // Return the user to whatever page they voted from.
-}
-
-/**
- * Themes the voting form for a poll.
- *
- * Inputs: $form
- */
-function template_preprocess_poll_vote(&$variables) {
-  $form = $variables['form'];
-  $variables['choice'] = drupal_render($form['choice']);
-  $variables['title'] = check_plain($form['#node']->title);
-  $variables['vote'] = drupal_render($form['vote']);
-  $variables['rest'] = drupal_render_children($form);
-  $variables['block'] = $form['#block'];
-  if ($variables['block']) {
-    $variables['theme_hook_suggestions'][] = 'poll_vote__block';
-  }
-}
-
-/**
- * Generates a graphical representation of the results of a poll.
- */
-function poll_view_results($node, $view_mode, $block = FALSE) {
-  // Make sure that choices are ordered by their weight.
-  uasort($node->choice, 'drupal_sort_weight');
-
-  // Count the votes and find the maximum.
-  $total_votes = 0;
-  $max_votes = 0;
-  foreach ($node->choice as $choice) {
-    if (isset($choice['chvotes'])) {
-      $total_votes += $choice['chvotes'];
-      $max_votes = max($max_votes, $choice['chvotes']);
-    }
-  }
-
-  $poll_results = '';
-  foreach ($node->choice as $i => $choice) {
-    if (!empty($choice['chtext'])) {
-      $chvotes = isset($choice['chvotes']) ? $choice['chvotes'] : NULL;
-      $poll_results .= theme('poll_bar', array('title' => $choice['chtext'], 'votes' => $chvotes, 'total_votes' => $total_votes, 'vote' => isset($node->vote) && $node->vote == $i, 'block' => $block));
-    }
-  }
-
-  return theme('poll_results', array('raw_title' => $node->title, 'results' => $poll_results, 'votes' => $total_votes, 'raw_links' => isset($node->links) ? $node->links : array(), 'block' => $block, 'nid' => $node->nid, 'vote' => isset($node->vote) ? $node->vote : NULL));
-}
-
-
-/**
- * Returns HTML for an admin poll form for choices.
- *
- * @param $variables
- *   An associative array containing:
- *   - form: A render element representing the form.
- *
- * @ingroup themeable
- */
-function theme_poll_choices($variables) {
-  $form = $variables['form'];
-
-  drupal_add_tabledrag('poll-choice-table', 'order', 'sibling', 'poll-weight');
-
-  $is_admin= user_access('administer nodes');
-  $delta = 0;
-  $rows = array();
-  $headers = array('', t('Choice'));
-  if ($is_admin) {
-    $headers[] = t('Vote count');
-  }
-  $headers[] = t('Weight');
-
-  foreach (element_children($form) as $key) {
-    $delta++;
-    // Set special classes for drag and drop updating.
-    $form[$key]['weight']['#attributes']['class'] = array('poll-weight');
-
-    // Build the table row.
-    $row = array(
-      'data' => array(
-        array('class' => array('choice-flag')),
-        drupal_render($form[$key]['chtext']),
-      ),
-      'class' => array('draggable'),
-    );
-    if ($is_admin) {
-      $row['data'][] = drupal_render($form[$key]['chvotes']);
-    }
-    $row['data'][] = drupal_render($form[$key]['weight']);
-
-    // Add any additional classes set on the row.
-    if (!empty($form[$key]['#attributes']['class'])) {
-      $row['class'] = array_merge($row['class'], $form[$key]['#attributes']['class']);
-    }
-
-    $rows[] = $row;
-  }
-
-  $output = theme('table', array('header' => $headers, 'rows' => $rows, 'attributes' => array('id' => 'poll-choice-table')));
-  $output .= drupal_render_children($form);
-  return $output;
-}
-
-/**
- * Preprocess the poll_results theme hook.
- *
- * Inputs: $raw_title, $results, $votes, $raw_links, $block, $nid, $vote. The
- * $raw_* inputs to this are naturally unsafe; often safe versions are
- * made to simply overwrite the raw version, but in this case it seems likely
- * that the title and the links may be overridden by the theme layer, so they
- * are left in with a different name for that purpose.
- *
- * @see poll-results.tpl.php
- * @see poll-results--block.tpl.php
- */
-function template_preprocess_poll_results(&$variables) {
-  $variables['links'] = theme('links__poll_results', array('links' => $variables['raw_links']));
-  if (isset($variables['vote']) && $variables['vote'] > -1 && user_access('cancel own vote')) {
-    $elements = drupal_get_form('poll_cancel_form', $variables['nid']);
-    $variables['cancel_form'] = drupal_render($elements);
-  }
-  $variables['title'] = check_plain($variables['raw_title']);
-
-  if ($variables['block']) {
-    $variables['theme_hook_suggestions'][] = 'poll_results__block';
-  }
-}
-
-/**
- * Preprocess the poll_bar theme hook.
- *
- * Inputs: $title, $votes, $total_votes, $voted, $block
- *
- * @see poll-bar.tpl.php
- * @see poll-bar--block.tpl.php
- * @see theme_poll_bar()
- */
-function template_preprocess_poll_bar(&$variables) {
-  if ($variables['block']) {
-    $variables['theme_hook_suggestions'][] = 'poll_bar__block';
-  }
-  $variables['title'] = check_plain($variables['title']);
-  $variables['percentage'] = round($variables['votes'] * 100 / max($variables['total_votes'], 1));
-}
-
-/**
- * Builds the cancel form for a poll.
- *
- * @ingroup forms
- * @see poll_cancel()
- */
-function poll_cancel_form($form, &$form_state, $nid) {
-  $form_state['cache'] = TRUE;
-
-  // Store the nid so we can get to it in submit functions.
-  $form['#nid'] = $nid;
-
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Cancel your vote'),
-    '#submit' => array('poll_cancel')
-  );
-
-  return $form;
-}
-
-/**
- * Submit callback for poll_cancel_form().
- */
-function poll_cancel($form, &$form_state) {
-  global $user;
-  $node = node_load($form['#nid']);
-
-  db_delete('poll_vote')
-    ->condition('nid', $node->nid)
-    ->condition($user->uid ? 'uid' : 'hostname', $user->uid ? $user->uid : ip_address())
-    ->execute();
-
-  // Subtract from the votes.
-  db_update('poll_choice')
-    ->expression('chvotes', 'chvotes - 1')
-    ->condition('chid', $node->vote)
-    ->execute();
-
-  unset($_SESSION['poll_vote'][$node->nid]);
-
-  drupal_set_message(t('Your vote was cancelled.'));
-}
-
-/**
- * Implements hook_user_cancel().
- */
-function poll_user_cancel($edit, $account, $method) {
-  switch ($method) {
-    case 'user_cancel_reassign':
-      db_update('poll_vote')
-        ->fields(array('uid' => 0))
-        ->condition('uid', $account->uid)
-        ->execute();
-      break;
-  }
-}
-
-/**
- * Implements hook_user_delete().
- */
-function poll_user_delete($account) {
-  db_delete('poll_vote')
-    ->condition('uid', $account->uid)
-    ->execute();
-}
-
-/**
- * Implements hook_rdf_mapping().
- */
-function poll_rdf_mapping() {
-  return array(
-    array(
-      'type' => 'node',
-      'bundle' => 'poll',
-      'mapping' => array(
-        'rdftype' => array('sioc:Post', 'sioct:Poll'),
-      ),
-    ),
-  );
-}
diff --git a/modules/poll/poll.pages.inc b/modules/poll/poll.pages.inc
deleted file mode 100644
index 15f3ba7..0000000
--- a/modules/poll/poll.pages.inc
+++ /dev/null
@@ -1,97 +0,0 @@
-<?php
-
-/**
- * @file
- * User page callbacks for the poll module.
- */
-
-/**
- * Menu callback to provide a simple list of all polls available.
- */
-function poll_page() {
-  $polls_per_page = 15;
-
-  $count_select = db_select('node', 'n');
-  $count_select->addExpression('COUNT(*)', 'expression');
-  $count_select->join('poll', 'p', 'p.nid = n.nid');
-  $count_select->condition('n.status', 1);
-
-  // List all polls.
-  $select = db_select('node', 'n');
-  $select->join('poll', 'p', 'p.nid = n.nid');
-  $select->join('poll_choice', 'c', 'c.nid = n.nid');
-  $select->addExpression('SUM(c.chvotes)', 'votes');
-  $select = $select->fields('n', array('nid', 'title', 'created'))
-    ->fields('p', array('active'))
-    ->condition('n.status', 1)
-    ->orderBy('n.created', 'DESC')
-    ->groupBy('n.nid')
-    ->groupBy('n.title')
-    ->groupBy('p.active')
-    ->groupBy('n.created')
-    ->extend('PagerDefault')
-    ->limit($polls_per_page)
-    ->addTag('node_access');
-  $select->setCountQuery($count_select);
-  $queried_nodes = $select->execute()
-    ->fetchAllAssoc('nid');
-
-  $output = '<ul>';
-  foreach ($queried_nodes as $node) {
-    $output .= '<li>' . l($node->title, "node/$node->nid") . ' - ' . format_plural($node->votes, '1 vote', '@count votes') . ' - ' . ($node->active ? t('open') : t('closed')) . '</li>';
-  }
-  $output .= '</ul>';
-  $output .= theme('pager');
-  return $output;
-}
-
-/**
- * Callback for the 'votes' tab for polls you can see other votes on
- */
-function poll_votes($node) {
-  $votes_per_page = 20;
-  drupal_set_title($node->title);
-
-  $header[] = array('data' => t('Visitor'), 'field' => 'u.name');
-  $header[] = array('data' => t('Vote'), 'field' => 'pc.chtext');
-  $header[] = array('data' => t('Timestamp'), 'field' => 'pv.timestamp', 'sort' => 'desc');
-
-  $select = db_select('poll_vote', 'pv')->extend('PagerDefault')->extend('TableSort');
-  $select->join('poll_choice', 'pc', 'pv.chid = pc.chid');
-  $select->join('users', 'u', 'pv.uid = u.uid');
-  $queried_votes = $select
-    ->addTag('translatable')
-    ->fields('pv', array('chid', 'uid', 'hostname', 'timestamp', 'nid'))
-    ->fields('pc', array('chtext'))
-    ->fields('u', array('name'))
-    ->condition('pv.nid', $node->nid)
-    ->limit($votes_per_page)
-    ->orderByHeader($header)
-    ->execute();
-
-  $rows = array();
-  foreach ($queried_votes as $vote) {
-    $rows[] = array(
-      $vote->name ? theme('username', array('account' => $vote)) : check_plain($vote->hostname),
-      check_plain($vote->chtext),
-      format_date($vote->timestamp),
-    );
-  }
-  $build['poll_votes_table'] = array(
-    '#theme' => 'table',
-    '#header' => $header,
-    '#rows' => $rows,
-    '#prefix' => t('This table lists all the recorded votes for this poll. If anonymous users are allowed to vote, they will be identified by the IP address of the computer they used when they voted.'),
-  );
-  $build['poll_votes_pager'] = array('#theme' => 'pager');
-  return $build;
-}
-
-/**
- * Callback for the 'results' tab for polls you can vote on
- */
-function poll_results($node) {
-  drupal_set_title($node->title);
-  $node->show_results = TRUE;
-  return node_show($node);
-}
diff --git a/modules/poll/poll.test b/modules/poll/poll.test
deleted file mode 100644
index 35eea22..0000000
--- a/modules/poll/poll.test
+++ /dev/null
@@ -1,872 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for poll.module.
- */
-
-class PollTestCase extends DrupalWebTestCase {
-
-  /**
-   * Creates a poll.
-   *
-   * @param string $title
-   *   The title of the poll.
-   * @param array $choices
-   *   A list of choice labels.
-   * @param boolean $preview
-   *   (optional) Whether to test if the preview is working or not. Defaults to
-   *   TRUE.
-   *
-   * @return
-   *   The node id of the created poll, or FALSE on error.
-   */
-  function pollCreate($title, $choices, $preview = TRUE) {
-    $this->assertTrue(TRUE, 'Create a poll');
-
-    $admin_user = $this->drupalCreateUser(array('create poll content', 'administer nodes'));
-    $web_user = $this->drupalCreateUser(array('create poll content', 'access content', 'edit own poll content'));
-    $this->drupalLogin($admin_user);
-
-    // Get the form first to initialize the state of the internal browser.
-    $this->drupalGet('node/add/poll');
-
-    // Prepare a form with two choices.
-    list($edit, $index) = $this->_pollGenerateEdit($title, $choices);
-
-    // Verify that the vote count element only allows non-negative integers.
-    $edit['choice[new:1][chvotes]'] = -1;
-    $edit['choice[new:0][chvotes]'] = $this->randomString(7);
-    $this->drupalPost(NULL, $edit, t('Save'));
-    $this->assertText(t('Negative values are not allowed.'));
-    $this->assertText(t('Vote count for new choice must be an integer.'));
-
-    // Repeat steps for initializing the state of the internal browser.
-    $this->drupalLogin($web_user);
-    $this->drupalGet('node/add/poll');
-    list($edit, $index) = $this->_pollGenerateEdit($title, $choices);
-
-    // Re-submit the form until all choices are filled in.
-    if (count($choices) > 2) {
-      while ($index < count($choices)) {
-        $this->drupalPost(NULL, $edit, t('More choices'));
-        $this->assertPollChoiceOrder($choices, $index);
-        list($edit, $index) = $this->_pollGenerateEdit($title, $choices, $index);
-      }
-    }
-
-    if ($preview) {
-      $this->drupalPost(NULL, $edit, t('Preview'));
-      $this->assertPollChoiceOrder($choices, $index, TRUE);
-      list($edit, $index) = $this->_pollGenerateEdit($title, $choices, $index);
-    }
-
-    $this->drupalPost(NULL, $edit, t('Save'));
-    $node = $this->drupalGetNodeByTitle($title);
-    $this->assertText(t('@type @title has been created.', array('@type' => node_type_get_name('poll'), '@title' => $title)), 'Poll has been created.');
-    $this->assertTrue($node->nid, 'Poll has been found in the database.');
-
-    return isset($node->nid) ? $node->nid : FALSE;
-  }
-
-  /**
-   * Generates POST values for the poll node form, specifically poll choices.
-   *
-   * @param $title
-   *   The title for the poll node.
-   * @param $choices
-   *   An array containing poll choices, as generated by
-   *   PollTestCase::_generateChoices().
-   * @param $index
-   *   (optional) The amount/number of already submitted poll choices. Defaults
-   *   to 0.
-   *
-   * @return
-   *   An indexed array containing:
-   *   - The generated POST values, suitable for
-   *     DrupalWebTestCase::drupalPost().
-   *   - The number of poll choices contained in 'edit', for potential re-usage
-   *     in subsequent invocations of this function.
-   */
-  function _pollGenerateEdit($title, array $choices, $index = 0) {
-    $max_new_choices = ($index == 0 ? 2 : 5);
-    $already_submitted_choices = array_slice($choices, 0, $index);
-    $new_choices = array_values(array_slice($choices, $index, $max_new_choices));
-
-    $edit = array(
-      'title' => $title,
-    );
-    foreach ($already_submitted_choices as $k => $text) {
-      $edit['choice[chid:' . $k . '][chtext]'] = $text;
-    }
-    foreach ($new_choices as $k => $text) {
-      $edit['choice[new:' . $k . '][chtext]'] = $text;
-    }
-    return array($edit, count($already_submitted_choices) + count($new_choices));
-  }
-
-  function _generateChoices($count = 7) {
-    $choices = array();
-    for ($i = 1; $i <= $count; $i++) {
-      $choices[] = $this->randomName();
-    }
-    return $choices;
-  }
-
-  /**
-   * Assert correct poll choice order in the node form after submission.
-   *
-   * Verifies both the order in the DOM and in the 'weight' form elements.
-   *
-   * @param $choices
-   *   An array containing poll choices, as generated by
-   *   PollTestCase::_generateChoices().
-   * @param $index
-   *   (optional) The amount/number of already submitted poll choices. Defaults
-   *   to 0.
-   * @param $preview
-   *   (optional) Whether to also check the poll preview.
-   *
-   * @see PollTestCase::_pollGenerateEdit()
-   */
-  function assertPollChoiceOrder(array $choices, $index = 0, $preview = FALSE) {
-    $expected = array();
-    $weight = 0;
-    foreach ($choices as $id => $label) {
-      if ($id < $index) {
-        // The expected weight of each choice is higher than the previous one.
-        $weight++;
-        // Directly assert the weight form element value for this choice.
-        $this->assertFieldByName('choice[chid:' . $id . '][weight]', $weight, format_string('Found choice @id with weight @weight.', array(
-          '@id' => $id,
-          '@weight' => $weight,
-        )));
-        // Append to our (to be reversed) stack of labels.
-        $expected[$weight] = $label;
-      }
-    }
-    ksort($expected);
-
-    // Verify DOM order of poll choices (i.e., #weight of form elements).
-    $elements = $this->xpath('//input[starts-with(@name, :prefix) and contains(@name, :suffix)]', array(
-      ':prefix' => 'choice[chid:',
-      ':suffix' => '][chtext]',
-    ));
-    $expected_order = $expected;
-    foreach ($elements as $element) {
-      $next_label = array_shift($expected_order);
-      $this->assertEqual((string) $element['value'], $next_label);
-    }
-
-    // If requested, also verify DOM order in preview.
-    if ($preview) {
-      $elements = $this->xpath('//div[contains(@class, :teaser)]/descendant::div[@class=:text]', array(
-        ':teaser' => 'node-teaser',
-        ':text' => 'text',
-      ));
-      $expected_order = $expected;
-      foreach ($elements as $element) {
-        $next_label = array_shift($expected_order);
-        $this->assertEqual((string) $element, $next_label, format_string('Found choice @label in preview.', array(
-          '@label' => $next_label,
-        )));
-      }
-    }
-  }
-
-  function pollUpdate($nid, $title, $edit) {
-    // Edit the poll node.
-    $this->drupalPost('node/' . $nid . '/edit', $edit, t('Save'));
-    $this->assertText(t('@type @title has been updated.', array('@type' => node_type_get_name('poll'), '@title' => $title)), 'Poll has been updated.');
-  }
-}
-
-class PollCreateTestCase extends PollTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Poll create',
-      'description' => 'Adds "more choices", previews and creates a poll.',
-      'group' => 'Poll'
-    );
-  }
-
-  function setUp() {
-    parent::setUp('poll');
-  }
-
-  function testPollCreate() {
-    $title = $this->randomName();
-    $choices = $this->_generateChoices(7);
-    $poll_nid = $this->pollCreate($title, $choices, TRUE);
-
-    // Verify poll appears on 'poll' page.
-    $this->drupalGet('poll');
-    $this->assertText($title, 'Poll appears in poll list.');
-    $this->assertText('open', 'Poll is active.');
-
-    // Click on the poll title to go to node page.
-    $this->clickLink($title);
-    $this->assertText('Total votes: 0', 'Link to poll correct.');
-
-    // Now add a new option to make sure that when we update the node the
-    // option is displayed.
-    $node = node_load($poll_nid);
-
-    $new_option = $this->randomName();
-
-    $vote_count = '2000';
-    $node->choice[] = array(
-      'chid' => '',
-      'chtext' => $new_option,
-      'chvotes' => (int) $vote_count,
-      'weight' => 1000,
-    );
-
-    node_save($node);
-
-    $this->drupalGet('poll');
-    $this->clickLink($title);
-    $this->assertText($new_option, 'New option found.');
-
-    $option = $this->xpath('//div[@id="node-1"]//div[@class="poll"]//div[@class="text"]');
-    $this->assertEqual(end($option), $new_option, 'Last item is equal to new option.');
-
-    $votes = $this->xpath('//div[@id="node-1"]//div[@class="poll"]//div[@class="percent"]');
-    $this->assertTrue(strpos(end($votes), $vote_count) > 0, "Votes saved.");
-  }
-
-  function testPollClose() {
-    $content_user = $this->drupalCreateUser(array('create poll content', 'edit any poll content', 'access content'));
-    $vote_user = $this->drupalCreateUser(array('cancel own vote', 'inspect all votes', 'vote on polls', 'access content'));
-
-    // Create poll.
-    $title = $this->randomName();
-    $choices = $this->_generateChoices(7);
-    $poll_nid = $this->pollCreate($title, $choices, FALSE);
-
-    $this->drupalLogout();
-    $this->drupalLogin($content_user);
-
-    // Edit the poll node and close the poll.
-    $close_edit = array('active' => 0);
-    $this->pollUpdate($poll_nid, $title, $close_edit);
-
-    // Verify 'Vote' button no longer appears.
-    $this->drupalGet('node/' . $poll_nid);
-    $elements = $this->xpath('//input[@id="edit-vote"]');
-    $this->assertTrue(empty($elements), "Vote button doesn't appear.");
-
-    // Verify status on 'poll' page is 'closed'.
-    $this->drupalGet('poll');
-    $this->assertText($title, 'Poll appears in poll list.');
-    $this->assertText('closed', 'Poll is closed.');
-
-    // Edit the poll node and re-activate.
-    $open_edit = array('active' => 1);
-    $this->pollUpdate($poll_nid, $title, $open_edit);
-
-    // Vote on the poll.
-    $this->drupalLogout();
-    $this->drupalLogin($vote_user);
-    $vote_edit = array('choice' => '1');
-    $this->drupalPost('node/' . $poll_nid, $vote_edit, t('Vote'));
-    $this->assertText('Your vote was recorded.', 'Your vote was recorded.');
-    $elements = $this->xpath('//input[@value="Cancel your vote"]');
-    $this->assertTrue(isset($elements[0]), "'Cancel your vote' button appears.");
-
-    // Edit the poll node and close the poll.
-    $this->drupalLogout();
-    $this->drupalLogin($content_user);
-    $close_edit = array('active' => 0);
-    $this->pollUpdate($poll_nid, $title, $close_edit);
-
-    // Verify 'Cancel your vote' button no longer appears.
-    $this->drupalGet('node/' . $poll_nid);
-    $elements = $this->xpath('//input[@value="Cancel your vote"]');
-    $this->assertTrue(empty($elements), "'Cancel your vote' button no longer appears.");
-  }
-}
-
-class PollVoteTestCase extends PollTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Poll vote',
-      'description' => 'Vote on a poll',
-      'group' => 'Poll'
-    );
-  }
-
-  function setUp() {
-    parent::setUp('poll');
-  }
-
-  function tearDown() {
-    parent::tearDown();
-  }
-
-  function testPollVote() {
-    $title = $this->randomName();
-    $choices = $this->_generateChoices(7);
-    $poll_nid = $this->pollCreate($title, $choices, FALSE);
-    $this->drupalLogout();
-
-    $vote_user = $this->drupalCreateUser(array('cancel own vote', 'inspect all votes', 'vote on polls', 'access content'));
-    $restricted_vote_user = $this->drupalCreateUser(array('vote on polls', 'access content'));
-
-    $this->drupalLogin($vote_user);
-
-    // Record a vote for the first choice.
-    $edit = array(
-      'choice' => '1',
-    );
-    $this->drupalPost('node/' . $poll_nid, $edit, t('Vote'));
-    $this->assertText('Your vote was recorded.', 'Your vote was recorded.');
-    $this->assertText('Total votes: 1', 'Vote count updated correctly.');
-    $elements = $this->xpath('//input[@value="Cancel your vote"]');
-    $this->assertTrue(isset($elements[0]), "'Cancel your vote' button appears.");
-
-    $this->drupalGet("node/$poll_nid/votes");
-    $this->assertText(t('This table lists all the recorded votes for this poll. If anonymous users are allowed to vote, they will be identified by the IP address of the computer they used when they voted.'), 'Vote table text.');
-    $this->assertText($choices[0], 'Vote recorded');
-
-    // Ensure poll listing page has correct number of votes.
-    $this->drupalGet('poll');
-    $this->assertText($title, 'Poll appears in poll list.');
-    $this->assertText('1 vote', 'Poll has 1 vote.');
-
-    // Cancel a vote.
-    $this->drupalPost('node/' . $poll_nid, array(), t('Cancel your vote'));
-    $this->assertText('Your vote was cancelled.', 'Your vote was cancelled.');
-    $this->assertNoText('Cancel your vote', "Cancel vote button doesn't appear.");
-
-    $this->drupalGet("node/$poll_nid/votes");
-    $this->assertNoText($choices[0], 'Vote cancelled');
-
-    // Ensure poll listing page has correct number of votes.
-    $this->drupalGet('poll');
-    $this->assertText($title, 'Poll appears in poll list.');
-    $this->assertText('0 votes', 'Poll has 0 votes.');
-
-    // Log in as a user who can only vote on polls.
-    $this->drupalLogout();
-    $this->drupalLogin($restricted_vote_user);
-
-    // Vote on a poll.
-    $edit = array(
-      'choice' => '1',
-    );
-    $this->drupalPost('node/' . $poll_nid, $edit, t('Vote'));
-    $this->assertText('Your vote was recorded.', 'Your vote was recorded.');
-    $this->assertText('Total votes: 1', 'Vote count updated correctly.');
-    $elements = $this->xpath('//input[@value="Cancel your vote"]');
-    $this->assertTrue(empty($elements), "'Cancel your vote' button does not appear.");
-  }
-}
-
-class PollBlockTestCase extends PollTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Block availability',
-      'description' => 'Check if the most recent poll block is available.',
-      'group' => 'Poll',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('poll');
-
-    // Create and login user
-    $admin_user = $this->drupalCreateUser(array('administer blocks'));
-    $this->drupalLogin($admin_user);
-  }
-
-  function testRecentBlock() {
-    // Set block title to confirm that the interface is available.
-    $this->drupalPost('admin/structure/block/manage/poll/recent/configure', array('title' => $this->randomName(8)), t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), 'Block configuration set.');
-
-    // Set the block to a region to confirm block is available.
-    $edit = array();
-    $edit['blocks[poll_recent][region]'] = 'footer';
-    $this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
-    $this->assertText(t('The block settings have been updated.'), 'Block successfully move to footer region.');
-
-    // Create a poll which should appear in recent polls block.
-    $title = $this->randomName();
-    $choices = $this->_generateChoices(7);
-    $poll_nid = $this->pollCreate($title, $choices, TRUE);
-
-    // Verify poll appears in a block.
-    // View user page so we're not matching the poll node on front page.
-    $this->drupalGet('user');
-    // If a 'block' view not generated, this title would not appear even though
-    // the choices might.
-    $this->assertText($title, 'Poll appears in block.');
-
-    // Logout and login back in as a user who can vote.
-    $this->drupalLogout();
-    $vote_user = $this->drupalCreateUser(array('cancel own vote', 'inspect all votes', 'vote on polls', 'access content'));
-    $this->drupalLogin($vote_user);
-
-    // Verify we can vote via the block.
-    $edit = array(
-      'choice' => '1',
-    );
-    $this->drupalPost('user/' . $vote_user->uid, $edit, t('Vote'));
-    $this->assertText('Your vote was recorded.', 'Your vote was recorded.');
-    $this->assertText('Total votes: 1', 'Vote count updated correctly.');
-    $this->assertText('Older polls', 'Link to older polls appears.');
-    $this->clickLink('Older polls');
-    $this->assertText('1 vote - open', 'Link to poll listing correct.');
-
-    // Close the poll and verify block doesn't appear.
-    $content_user = $this->drupalCreateUser(array('create poll content', 'edit any poll content', 'access content'));
-    $this->drupalLogout();
-    $this->drupalLogin($content_user);
-    $close_edit = array('active' => 0);
-    $this->pollUpdate($poll_nid, $title, $close_edit);
-    $this->drupalGet('user/' . $content_user->uid);
-    $this->assertNoText($title, 'Poll no longer appears in block.');
-  }
-}
-
-/**
- * Test adding new choices.
- */
-class PollJSAddChoice extends DrupalWebTestCase {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Poll add choice',
-      'description' => 'Submits a POST request for an additional poll choice.',
-      'group' => 'Poll'
-    );
-  }
-
-  function setUp() {
-    parent::setUp('poll');
-  }
-
-  /**
-   * Test adding a new choice.
-   */
-  function testAddChoice() {
-    $web_user = $this->drupalCreateUser(array('create poll content', 'access content'));
-    $this->drupalLogin($web_user);
-    $this->drupalGet('node/add/poll');
-    $edit = array(
-      "title" => $this->randomName(),
-      'choice[new:0][chtext]' => $this->randomName(),
-      'choice[new:1][chtext]' => $this->randomName(),
-    );
-
-    // Press 'add choice' button through Ajax, and place the expected HTML result
-    // as the tested content.
-    $commands = $this->drupalPostAJAX(NULL, $edit, array('op' => t('More choices')));
-    $this->content = $commands[1]['data'];
-
-    $this->assertFieldByName('choice[chid:0][chtext]', $edit['choice[new:0][chtext]'], format_string('Field !i found', array('!i' => 0)));
-    $this->assertFieldByName('choice[chid:1][chtext]', $edit['choice[new:1][chtext]'], format_string('Field !i found', array('!i' => 1)));
-    $this->assertFieldByName('choice[new:0][chtext]', '', format_string('Field !i found', array('!i' => 2)));
-  }
-}
-
-class PollVoteCheckHostname extends PollTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'User poll vote capability.',
-      'description' => 'Check that users and anonymous users from specified ip-address can only vote once.',
-      'group' => 'Poll'
-    );
-  }
-
-  function setUp() {
-    parent::setUp('poll');
-
-    // Create and login user.
-    $this->admin_user = $this->drupalCreateUser(array('administer permissions', 'create poll content'));
-    $this->drupalLogin($this->admin_user);
-
-    // Allow anonymous users to vote on polls.
-    user_role_change_permissions(DRUPAL_ANONYMOUS_RID, array(
-      'access content' => TRUE,
-      'vote on polls' => TRUE,
-      'cancel own vote' => TRUE,
-    ));
-
-    // Enable page cache to verify that the result page is not saved in the
-    // cache when anonymous voting is allowed.
-    variable_set('cache', 1);
-
-    // Create poll.
-    $title = $this->randomName();
-    $choices = $this->_generateChoices(3);
-    $this->poll_nid = $this->pollCreate($title, $choices, FALSE);
-
-    $this->drupalLogout();
-
-    // Create web users.
-    $this->web_user1 = $this->drupalCreateUser(array('access content', 'vote on polls', 'cancel own vote'));
-    $this->web_user2 = $this->drupalCreateUser(array('access content', 'vote on polls'));
-  }
-
-  /**
-   * Check that anonymous users with same ip cannot vote on poll more than once
-   * unless user is logged in.
-   */
-  function testHostnamePollVote() {
-    // Login User1.
-    $this->drupalLogin($this->web_user1);
-
-    $edit = array(
-      'choice' => '1',
-    );
-
-    // User1 vote on Poll.
-    $this->drupalPost('node/' . $this->poll_nid, $edit, t('Vote'));
-    $this->assertText(t('Your vote was recorded.'), format_string('%user vote was recorded.', array('%user' => $this->web_user1->name)));
-    $this->assertText(t('Total votes: @votes', array('@votes' => 1)), 'Vote count updated correctly.');
-
-    // Check to make sure User1 cannot vote again.
-    $this->drupalGet('node/' . $this->poll_nid);
-    $elements = $this->xpath('//input[@value="Vote"]');
-    $this->assertTrue(empty($elements), format_string("%user is not able to vote again.", array('%user' => $this->web_user1->name)));
-    $elements = $this->xpath('//input[@value="Cancel your vote"]');
-    $this->assertTrue(!empty($elements), "'Cancel your vote' button appears.");
-
-    // Logout User1.
-    $this->drupalLogout();
-
-    // Fill the page cache by requesting the poll.
-    $this->drupalGet('node/' . $this->poll_nid);
-    $this->assertEqual($this->drupalGetHeader('x-drupal-cache'), 'MISS', 'Page was cacheable but was not in the cache.');
-    $this->drupalGet('node/' . $this->poll_nid);
-    $this->assertEqual($this->drupalGetHeader('x-drupal-cache'), 'HIT', 'Page was cached.');
-
-    // Anonymous user vote on Poll.
-    $this->drupalPost(NULL, $edit, t('Vote'));
-    $this->assertText(t('Your vote was recorded.'), 'Anonymous vote was recorded.');
-    $this->assertText(t('Total votes: @votes', array('@votes' => 2)), 'Vote count updated correctly.');
-    $elements = $this->xpath('//input[@value="Cancel your vote"]');
-    $this->assertTrue(!empty($elements), "'Cancel your vote' button appears.");
-
-    // Check to make sure Anonymous user cannot vote again.
-    $this->drupalGet('node/' . $this->poll_nid);
-    $this->assertFalse($this->drupalGetHeader('x-drupal-cache'), 'Page was not cacheable.');
-    $elements = $this->xpath('//input[@value="Vote"]');
-    $this->assertTrue(empty($elements), "Anonymous is not able to vote again.");
-    $elements = $this->xpath('//input[@value="Cancel your vote"]');
-    $this->assertTrue(!empty($elements), "'Cancel your vote' button appears.");
-
-    // Login User2.
-    $this->drupalLogin($this->web_user2);
-
-    // User2 vote on poll.
-    $this->drupalPost('node/' . $this->poll_nid, $edit, t('Vote'));
-    $this->assertText(t('Your vote was recorded.'), format_string('%user vote was recorded.', array('%user' => $this->web_user2->name)));
-    $this->assertText(t('Total votes: @votes', array('@votes' => 3)), 'Vote count updated correctly.');
-    $elements = $this->xpath('//input[@value="Cancel your vote"]');
-    $this->assertTrue(empty($elements), "'Cancel your vote' button does not appear.");
-
-    // Logout User2.
-    $this->drupalLogout();
-
-    // Change host name for anonymous users.
-    db_update('poll_vote')
-      ->fields(array(
-        'hostname' => '123.456.789.1',
-      ))
-      ->condition('hostname', '', '<>')
-      ->execute();
-
-    // Check to make sure Anonymous user can vote again with a new session after
-    // a hostname change.
-    $this->drupalGet('node/' . $this->poll_nid);
-    $this->assertEqual($this->drupalGetHeader('x-drupal-cache'), 'MISS', 'Page was cacheable but was not in the cache.');
-    $this->drupalPost(NULL, $edit, t('Vote'));
-    $this->assertText(t('Your vote was recorded.'), format_string('%user vote was recorded.', array('%user' => $this->web_user2->name)));
-    $this->assertText(t('Total votes: @votes', array('@votes' => 4)), 'Vote count updated correctly.');
-    $elements = $this->xpath('//input[@value="Cancel your vote"]');
-    $this->assertTrue(!empty($elements), "'Cancel your vote' button appears.");
-
-    // Check to make sure Anonymous user cannot vote again with a new session,
-    // and that the vote from the previous session cannot be cancelledd.
-    $this->curlClose();
-    $this->drupalGet('node/' . $this->poll_nid);
-    $this->assertEqual($this->drupalGetHeader('x-drupal-cache'), 'MISS', 'Page was cacheable but was not in the cache.');
-    $elements = $this->xpath('//input[@value="Vote"]');
-    $this->assertTrue(empty($elements), 'Anonymous is not able to vote again.');
-    $elements = $this->xpath('//input[@value="Cancel your vote"]');
-    $this->assertTrue(empty($elements), "'Cancel your vote' button does not appear.");
-
-    // Login User1.
-    $this->drupalLogin($this->web_user1);
-
-    // Check to make sure User1 still cannot vote even after hostname changed.
-    $this->drupalGet('node/' . $this->poll_nid);
-    $elements = $this->xpath('//input[@value="Vote"]');
-    $this->assertTrue(empty($elements), format_string("%user is not able to vote again.", array('%user' => $this->web_user1->name)));
-    $elements = $this->xpath('//input[@value="Cancel your vote"]');
-    $this->assertTrue(!empty($elements), "'Cancel your vote' button appears.");
-  }
-}
-
-/**
- * Test poll token replacement in strings.
- */
-class PollTokenReplaceTestCase extends PollTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Poll token replacement',
-      'description' => 'Generates text using placeholders for dummy content to check poll token replacement.',
-      'group' => 'Poll',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('poll');
-  }
-
-  /**
-   * Creates a poll, then tests the tokens generated from it.
-   */
-  function testPollTokenReplacement() {
-    global $language;
-
-    // Craete a poll with three choices.
-    $title = $this->randomName();
-    $choices = $this->_generateChoices(3);
-    $poll_nid = $this->pollCreate($title, $choices, FALSE);
-    $this->drupalLogout();
-
-    // Create four users and have each of them vote.
-    $vote_user1 = $this->drupalCreateUser(array('vote on polls', 'access content'));
-    $this->drupalLogin($vote_user1);
-    $edit = array(
-      'choice' => '1',
-    );
-    $this->drupalPost('node/' . $poll_nid, $edit, t('Vote'));
-    $this->drupalLogout();
-
-    $vote_user2 = $this->drupalCreateUser(array('vote on polls', 'access content'));
-    $this->drupalLogin($vote_user2);
-    $edit = array(
-      'choice' => '1',
-    );
-    $this->drupalPost('node/' . $poll_nid, $edit, t('Vote'));
-    $this->drupalLogout();
-
-    $vote_user3 = $this->drupalCreateUser(array('vote on polls', 'access content'));
-    $this->drupalLogin($vote_user3);
-    $edit = array(
-      'choice' => '2',
-    );
-    $this->drupalPost('node/' . $poll_nid, $edit, t('Vote'));
-    $this->drupalLogout();
-
-    $vote_user4 = $this->drupalCreateUser(array('vote on polls', 'access content'));
-    $this->drupalLogin($vote_user4);
-    $edit = array(
-      'choice' => '3',
-    );
-    $this->drupalPost('node/' . $poll_nid, $edit, t('Vote'));
-    $this->drupalLogout();
-
-    $poll = node_load($poll_nid, NULL, TRUE);
-
-    // Generate and test sanitized tokens.
-    $tests = array();
-    $tests['[node:poll-votes]'] = 4;
-    $tests['[node:poll-winner]'] = filter_xss($poll->choice[1]['chtext']);
-    $tests['[node:poll-winner-votes]'] = 2;
-    $tests['[node:poll-winner-percent]'] = 50;
-    $tests['[node:poll-duration]'] = format_interval($poll->runtime, 1, $language->language);
-
-    // Test to make sure that we generated something for each token.
-    $this->assertFalse(in_array(0, array_map('strlen', $tests)), 'No empty tokens generated.');
-
-    foreach ($tests as $input => $expected) {
-      $output = token_replace($input, array('node' => $poll), array('language' => $language));
-      $this->assertEqual($output, $expected, format_string('Sanitized poll token %token replaced.', array('%token' => $input)));
-    }
-
-    // Generate and test unsanitized tokens.
-    $tests['[node:poll-winner]'] = $poll->choice[1]['chtext'];
-
-    foreach ($tests as $input => $expected) {
-      $output = token_replace($input, array('node' => $poll), array('language' => $language, 'sanitize' => FALSE));
-      $this->assertEqual($output, $expected, format_string('Unsanitized poll token %token replaced.', array('%token' => $input)));
-    }
-  }
-}
-
-class PollExpirationTestCase extends PollTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Poll expiration',
-      'description' => 'Test the poll auto-expiration logic.',
-      'group' => 'Poll',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('poll');
-  }
-
-  function testAutoExpire() {
-    // Set up a poll.
-    $title = $this->randomName();
-    $choices = $this->_generateChoices(2);
-    $poll_nid = $this->pollCreate($title, $choices, FALSE);
-    $this->assertTrue($poll_nid, 'Poll for auto-expire test created.');
-
-    // Visit the poll edit page and verify that by default, expiration
-    // is set to unlimited.
-    $this->drupalGet("node/$poll_nid/edit");
-    $this->assertField('runtime', 'Poll expiration setting found.');
-    $elements = $this->xpath('//select[@id="edit-runtime"]/option[@selected="selected"]');
-    $this->assertTrue(isset($elements[0]['value']) && $elements[0]['value'] == 0, 'Poll expiration set to unlimited.');
-
-    // Set the expiration to one week.
-    $edit = array();
-    $poll_expiration = 604800; // One week.
-    $edit['runtime'] = $poll_expiration;
-    $this->drupalPost(NULL, $edit, t('Save'));
-    $this->assertRaw(t('Poll %title has been updated.', array('%title' => $title)), 'Poll expiration settings saved.');
-
-    // Make sure that the changed expiration settings is kept.
-    $this->drupalGet("node/$poll_nid/edit");
-    $elements = $this->xpath('//select[@id="edit-runtime"]/option[@selected="selected"]');
-    $this->assertTrue(isset($elements[0]['value']) && $elements[0]['value'] == $poll_expiration, 'Poll expiration set to unlimited.');
-
-    // Force a cron run. Since the expiration date has not yet been reached,
-    // the poll should remain active.
-    drupal_cron_run();
-    $this->drupalGet("node/$poll_nid/edit");
-    $elements = $this->xpath('//input[@id="edit-active-1"]');
-    $this->assertTrue(isset($elements[0]) && !empty($elements[0]['checked']), 'Poll is still active.');
-
-    // Test expiration. Since REQUEST_TIME is a constant and we don't
-    // want to keep SimpleTest waiting until the moment of expiration arrives,
-    // we forcibly change the expiration date in the database.
-    $created = db_query('SELECT created FROM {node} WHERE nid = :nid', array(':nid' => $poll_nid))->fetchField();
-    db_update('node')
-      ->fields(array('created' => $created - ($poll_expiration * 1.01)))
-      ->condition('nid', $poll_nid)
-      ->execute();
-
-    // Run cron and verify that the poll is now marked as "closed".
-    drupal_cron_run();
-    $this->drupalGet("node/$poll_nid/edit");
-    $elements = $this->xpath('//input[@id="edit-active-0"]');
-    $this->assertTrue(isset($elements[0]) && !empty($elements[0]['checked']), 'Poll has expired.');
-  }
-}
-
-class PollDeleteChoiceTestCase extends PollTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Poll choice deletion',
-      'description' => 'Test the poll choice deletion logic.',
-      'group' => 'Poll',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('poll');
-  }
-
-  function testChoiceRemoval() {
-    // Set up a poll with three choices.
-    $title = $this->randomName();
-    $choices = array('First choice', 'Second choice', 'Third choice');
-    $poll_nid = $this->pollCreate($title, $choices, FALSE);
-    $this->assertTrue($poll_nid, 'Poll for choice deletion logic test created.');
-
-    // Edit the poll, and try to delete first poll choice.
-    $this->drupalGet("node/$poll_nid/edit");
-    $edit['choice[chid:1][chtext]'] = '';
-    $this->drupalPost(NULL, $edit, t('Save'));
-
-    // Click on the poll title to go to node page.
-    $this->drupalGet('poll');
-    $this->clickLink($title);
-
-    // Check the first poll choice is deleted, while the others remain.
-    $this->assertNoText('First choice', 'First choice removed.');
-    $this->assertText('Second choice', 'Second choice remains.');
-    $this->assertText('Third choice', 'Third choice remains.');
-  }
-}
-
-/**
- * Tests poll translation logic.
- */
-class PollTranslateTestCase extends PollTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Poll translation',
-      'description' => 'Test the poll translation logic.',
-      'group' => 'Poll',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('poll', 'translation');
-  }
-
-  /**
-   * Tests poll creation and translation.
-   *
-   * Checks that the choice names get copied from the original poll and that
-   * the vote count values are set to 0.
-   */
-  function testPollTranslate() {
-    $admin_user = $this->drupalCreateUser(array('administer content types', 'administer languages', 'edit any poll content', 'create poll content', 'administer nodes', 'translate content'));
-
-    // Set up a poll with two choices.
-    $title = $this->randomName();
-    $choices = array($this->randomName(), $this->randomName());
-    $poll_nid = $this->pollCreate($title, $choices, FALSE);
-    $this->assertTrue($poll_nid, 'Poll for translation logic test created.');
-
-    $this->drupalLogout();
-    $this->drupalLogin($admin_user);
-
-    // Enable a second language.
-    $this->drupalGet('admin/config/regional/language');
-    $edit = array();
-    $edit['langcode'] = 'nl';
-    $this->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));
-    $this->assertRaw(t('The language %language has been created and can now be used.', array('%language' => 'Dutch')), 'Language Dutch has been created.');
-
-    // Set "Poll" content type to use multilingual support with translation.
-    $this->drupalGet('admin/structure/types/manage/poll');
-    $edit = array();
-    $edit['language_content_type'] = 2;
-    $this->drupalPost('admin/structure/types/manage/poll', $edit, t('Save content type'));
-    $this->assertRaw(t('The content type %type has been updated.', array('%type' => 'Poll')), 'Poll content type has been updated.');
-
-    // Edit poll.
-    $this->drupalGet("node/$poll_nid/edit");
-    $edit = array();
-    // Set the poll's first choice count to 200.
-    $edit['choice[chid:1][chvotes]'] = 200;
-    // Set the language to Dutch.
-    $edit['language'] = 'nl';
-    $this->drupalPost(NULL, $edit, t('Save'));
-
-    // Translate the Dutch poll.
-    $this->drupalGet('node/add/poll', array('query' => array('translation' => $poll_nid, 'target' => 'en')));
-
-    $dutch_poll = node_load($poll_nid);
-
-    // Check that the vote count values didn't get copied from the Dutch poll
-    // and are set to 0.
-    $this->assertFieldByName('choice[chid:1][chvotes]', '0', ('Found choice with vote count 0'));
-    $this->assertFieldByName('choice[chid:2][chvotes]', '0', ('Found choice with vote count 0'));
-    // Check that the choice names got copied from the Dutch poll.
-    $this->assertFieldByName('choice[chid:1][chtext]', $dutch_poll->choice[1]['chtext'], format_string('Found choice with text @text', array('@text' => $dutch_poll->choice[1]['chtext'])));
-    $this->assertFieldByName('choice[chid:2][chtext]', $dutch_poll->choice[2]['chtext'], format_string('Found choice with text @text', array('@text' => $dutch_poll->choice[2]['chtext'])));
-  }
-}
diff --git a/modules/poll/poll.tokens.inc b/modules/poll/poll.tokens.inc
deleted file mode 100644
index eda628b..0000000
--- a/modules/poll/poll.tokens.inc
+++ /dev/null
@@ -1,107 +0,0 @@
-<?php
-
-/**
- * @file
- * Builds placeholder replacement tokens for values specific to Poll nodes.
- */
-
-/**
- * Implements hook_token_info().
- */
-function poll_token_info() {
-  $node['poll-votes'] = array(
-    'name' => t("Poll votes"),
-    'description' => t("The number of votes that have been cast on a poll."),
-  );
-  $node['poll-winner'] = array(
-    'name' => t("Poll winner"),
-    'description' => t("The winning poll answer."),
-  );
-  $node['poll-winner-votes'] = array(
-    'name' => t("Poll winner votes"),
-    'description' => t("The number of votes received by the winning poll answer."),
-  );
-  $node['poll-winner-percent'] = array(
-    'name' => t("Poll winner percent"),
-    'description' => t("The percentage of votes received by the winning poll answer."),
-  );
-  $node['poll-duration'] = array(
-    'name' => t("Poll duration"),
-    'description' => t("The length of time the poll is set to run."),
-  );
-
-  return array(
-    'tokens' => array('node' => $node),
-  );
-}
-
-/**
- * Implements hook_tokens().
- */
-function poll_tokens($type, $tokens, array $data = array(), array $options = array()) {
-  $sanitize = !empty($options['sanitize']);
-  if (isset($options['language'])) {
-    $url_options['language'] = $options['language'];
-    $language_code = $options['language']->language;
-  }
-  else {
-    $language_code = NULL;
-  }
-
-  $replacements = array();
-
-  if ($type == 'node' && !empty($data['node']) && $data['node']->type == 'poll') {
-    $node = $data['node'];
-
-    $total_votes = 0;
-    $highest_votes = 0;
-    foreach ($node->choice as $choice) {
-      if ($choice['chvotes'] > $highest_votes) {
-        $winner = $choice;
-        $highest_votes = $choice['chvotes'];
-      }
-      $total_votes = $total_votes + $choice['chvotes'];
-    }
-    foreach ($tokens as $name => $original) {
-      switch ($name) {
-        case 'poll-votes':
-          $replacements[$original] = $total_votes;
-          break;
-
-        case 'poll-winner':
-          if (isset($winner)) {
-            $replacements[$original] = $sanitize ? filter_xss($winner['chtext']) : $winner['chtext'];
-          }
-          else {
-            $replacements[$original] = '';
-          }
-          break;
-
-        case 'poll-winner-votes':
-          if (isset($winner)) {
-            $replacements[$original] = $winner['chvotes'];
-          }
-          else {
-            $replacements[$original] = '';
-          }
-          break;
-
-        case 'poll-winner-percent':
-          if (isset($winner)) {
-            $percent = ($winner['chvotes'] / $total_votes) * 100;
-            $replacements[$original] = number_format($percent, 0);
-          }
-          else {
-            $replacements[$original] = '';
-          }
-          break;
-
-        case 'poll-duration':
-          $replacements[$original] = format_interval($node->runtime, 1, $language_code);
-          break;
-      }
-    }
-  }
-
-  return $replacements;
-}
diff --git a/modules/profile/profile-block.tpl.php b/modules/profile/profile-block.tpl.php
deleted file mode 100644
index dbdbcd8..0000000
--- a/modules/profile/profile-block.tpl.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation for displaying a users profile within a
- * block. It only shows in relation to a node displayed as a full page.
- *
- * Available variables:
- * - $user_picture: Image configured for the account linking to the users page.
- * - $profile: Keyed array of all profile fields that have a value.
- *
- * Each $field in $profile contains:
- * - $field->title: Title of the profile field.
- * - $field->value: Value of the profile field.
- * - $field->type: Type of the profile field, i.e., checkbox, textfield,
- *   textarea, selection, list, url or date.
- *
- * Since $profile is keyed, a direct print of the field is possible. Not
- * all accounts may have a value for a profile so do a check first. If a field
- * of "last_name" was set for the site, the following can be used.
- *
- *  <?php if (isset($profile['last_name'])): ?>
- *    <div class="field last-name">
- *      <?php print $profile['last_name']->title; ?>:<br />
- *      <?php print $profile['last_name']->value; ?>
- *    </div>
- *  <?php endif; ?>
- *
- * @see template_preprocess_profile_block()
- */
-?>
-<?php print $user_picture; ?>
-
-<?php foreach ($profile as $field): ?>
-  <p>
-    <?php if ($field->type != 'checkbox'): ?>
-      <strong><?php print $field->title; ?></strong><br />
-    <?php endif; ?>
-    <?php print $field->value; ?>
-  </p>
-<?php endforeach; ?>
diff --git a/modules/profile/profile-listing.tpl.php b/modules/profile/profile-listing.tpl.php
deleted file mode 100644
index d8b835a..0000000
--- a/modules/profile/profile-listing.tpl.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation for displaying a user and their profile data
- * for member listing pages.
- *
- * @see profile-wrapper.tpl.php
- *      where all the data is collected and printed out.
- *
- * Available variables:
- * - $account: User's account object.
- * - $user_picture: Image configured for the account linking to the users page.
- * - $name: User's account name linking to the users page.
- * - $profile: Keyed array of all profile fields that are set as visible
- *   in member list pages (configured by site administrators). It also needs
- *   to have a value in order to be present.
- *
- * Each $field in $profile contains:
- * - $field->title: Title of the profile field.
- * - $field->value: Value of the profile field.
- * - $field->type: Type of the profile field, i.e., checkbox, textfield,
- *   textarea, selection, list, url or date.
- *
- * Since $profile is keyed, a direct print of the field is possible. Not
- * all accounts may have a value for a profile so do a check first. If a field
- * of "last_name" was set for the site, the following can be used.
- *
- *  <?php if (isset($profile['last_name'])): ?>
- *    <div class="field last-name">
- *      <?php print $profile['last_name']->title; ?>:<br />
- *      <?php print $profile['last_name']->value; ?>
- *    </div>
- *  <?php endif; ?>
- *
- * @see template_preprocess_profile_listing()
- */
-?>
-<div class="profile clearfix">
-  <?php print $user_picture; ?>
-
-  <div class="name">
-    <?php print $name; ?>
-  </div>
-
-  <?php foreach ($profile as $field): ?>
-    <div class="field">
-      <?php print $field->value; ?>
-    </div>
-  <?php endforeach; ?>
-
-</div>
diff --git a/modules/profile/profile-wrapper.tpl.php b/modules/profile/profile-wrapper.tpl.php
deleted file mode 100644
index 3940ba0..0000000
--- a/modules/profile/profile-wrapper.tpl.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation for wrapping member listings and their
- * profiles.
- *
- * This template is used when viewing a list of users. It can be a general
- * list for viewing all users with the URL of "example.com/profile" or when
- * viewing a set of users who share a specific value for a profile such
- * as "example.com/profile/country/belgium".
- *
- * Available variables:
- * - $content: User account profiles iterated through profile-listing.tpl.php.
- * - $current_field: The named field being browsed. Provided here for context.
- *   The above example would result in "last_name". An alternate template name
- *   is also based on this, e.g., "profile-wrapper-last_name.tpl.php".
- *
- * @see template_preprocess_profile_wrapper()
- */
-?>
-<div id="profile">
-  <?php print $content; ?>
-</div>
diff --git a/modules/profile/profile.admin.inc b/modules/profile/profile.admin.inc
deleted file mode 100644
index d6ac3c3..0000000
--- a/modules/profile/profile.admin.inc
+++ /dev/null
@@ -1,446 +0,0 @@
-<?php
-
-/**
- * @file
- * Administrative page callbacks for the profile module.
- */
-
-/**
- * Form builder to display a listing of all editable profile fields.
- *
- * @ingroup forms
- * @see profile_admin_overview_submit()
- */
-function profile_admin_overview($form) {
-  $result = db_query('SELECT title, name, type, category, fid, weight FROM {profile_field} ORDER BY category, weight');
-
-  $categories = array();
-  foreach ($result as $field) {
-    // Collect all category information
-    $categories[] = $field->category;
-
-    // Save all field information
-    $form[$field->fid]['name'] = array('#markup' => check_plain($field->name));
-    $form[$field->fid]['title'] = array('#markup' => check_plain($field->title));
-    $form[$field->fid]['type'] = array('#markup' => $field->type);
-    $form[$field->fid]['category'] = array(
-      '#type' => 'select',
-      '#title' => t('Category for @title', array('@title' => $field->title)),
-      '#title_display' => 'invisible',
-      '#default_value' => $field->category,
-      '#options' => array(),
-    );
-    $form[$field->fid]['weight'] = array(
-      '#type' => 'weight',
-      '#title' => t('Weight for @title', array('@title' => $field->title)),
-      '#title_display' => 'invisible',
-      '#default_value' => $field->weight,
-    );
-    $form[$field->fid]['edit'] = array('#type' => 'link', '#title' => t('edit'), '#href' => "admin/config/people/profile/edit/$field->fid");
-    $form[$field->fid]['delete'] = array('#type' => 'link', '#title' => t('delete'), '#href' => "admin/config/people/profile/delete/$field->fid");
-  }
-
-  // Add the category combo boxes
-  $categories = array_unique($categories);
-  foreach ($form as $fid => $field) {
-    foreach ($categories as $cat => $category) {
-      $form[$fid]['category']['#options'][$category] = $category;
-    }
-  }
-
-  // Display the submit button only when there's more than one field
-  if (count($form) > 1) {
-    $form['actions'] = array('#type' => 'actions');
-    $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save configuration'));
-  }
-  else {
-    // Disable combo boxes when there isn't a submit button
-    foreach ($form as $fid => $field) {
-      unset($form[$fid]['weight']);
-      $form[$fid]['category']['#type'] = 'value';
-    }
-  }
-  $form['#tree'] = TRUE;
-
-  // @todo: Any reason this isn't done using an element with #theme = 'links'?
-  $addnewfields = '<h2>' . t('Add new field') . '</h2>';
-  $addnewfields .= '<ul>';
-  foreach (_profile_field_types() as $key => $value) {
-    $addnewfields .= '<li>' . l($value, "admin/config/people/profile/add/$key") . '</li>';
-  }
-  $addnewfields .= '</ul>';
-  $form['addnewfields'] = array('#markup' => $addnewfields);
-
-  return $form;
-}
-
-/**
- * Submit handler to update changed profile field weights and categories.
- *
- * @see profile_admin_overview()
- */
-function profile_admin_overview_submit($form, &$form_state) {
-  foreach (element_children($form_state['values']) as $fid) {
-    if (is_numeric($fid)) {
-      $weight = $form_state['values'][$fid]['weight'];
-      $category = $form_state['values'][$fid]['category'];
-      if ($weight != $form[$fid]['weight']['#default_value'] || $category != $form[$fid]['category']['#default_value']) {
-        db_update('profile_field')
-          ->fields(array(
-            'weight' => $weight,
-            'category' => $category,
-          ))
-          ->condition('fid', $fid)
-          ->execute();
-      }
-    }
-  }
-
-  drupal_set_message(t('Profile fields have been updated.'));
-  cache_clear_all();
-  menu_rebuild();
-}
-
-/**
- * Returns HTML for the profile field overview form into a drag and drop enabled table.
- *
- * @param $variables
- *   An associative array containing:
- *   - form: A render element representing the form.
- *
- * @see profile_admin_overview()
- * @ingroup themeable
- */
-function theme_profile_admin_overview($variables) {
-  $form = $variables['form'];
-
-  drupal_add_css(drupal_get_path('module', 'profile') . '/profile.css');
-  // Add javascript if there's more than one field.
-  if (isset($form['actions'])) {
-    drupal_add_js(drupal_get_path('module', 'profile') . '/profile.js');
-  }
-
-  $rows = array();
-  $categories = array();
-  $category_number = 0;
-  foreach (element_children($form) as $key) {
-    // Don't take form control structures.
-    if (isset($form[$key]['category'])) {
-      $field = &$form[$key];
-      $category = $field['category']['#default_value'];
-
-      if (!isset($categories[$category])) {
-        // Category classes are given numeric IDs because there's no guarantee
-        // class names won't contain invalid characters.
-        $categories[$category] = $category_number;
-        $category_field['#attributes']['class'] = array('profile-category', 'profile-category-' . $category_number);
-        $rows[] = array(array('data' => check_plain($category), 'colspan' => 7, 'class' => array('category')));
-        $rows[] = array('data' => array(array('data' => '<em>' . t('No fields in this category. If this category remains empty when saved, it will be removed.') . '</em>', 'colspan' => 7)), 'class' => array('category-' . $category_number . '-message', 'category-message', 'category-populated'));
-
-        // Make it draggable only if there is more than one field
-        if (isset($form['actions'])) {
-          drupal_add_tabledrag('profile-fields', 'order', 'sibling', 'profile-weight', 'profile-weight-' . $category_number);
-          drupal_add_tabledrag('profile-fields', 'match', 'sibling', 'profile-category', 'profile-category-' . $category_number);
-        }
-        $category_number++;
-      }
-
-      // Add special drag and drop classes that group fields together.
-      $field['weight']['#attributes']['class'] = array('profile-weight', 'profile-weight-' . $categories[$category]);
-      $field['category']['#attributes']['class'] = array('profile-category', 'profile-category-' . $categories[$category]);
-
-      // Add the row
-      $row = array();
-      $row[] = drupal_render($field['title']);
-      $row[] = drupal_render($field['name']);
-      $row[] = drupal_render($field['type']);
-      if (isset($form['actions'])) {
-        $row[] = drupal_render($field['category']);
-        $row[] = drupal_render($field['weight']);
-      }
-      $row[] = drupal_render($field['edit']);
-      $row[] = drupal_render($field['delete']);
-      $rows[] = array('data' => $row, 'class' => array('draggable'));
-    }
-  }
-
-  $header = array(t('Title'), t('Name'), t('Type'));
-  if (isset($form['actions'])) {
-    $header[] = t('Category');
-    $header[] = t('Weight');
-  }
-  $header[] = array('data' => t('Operations'), 'colspan' => 2);
-
-  $output = theme('table', array('header' => $header, 'rows' => $rows, 'empty' => t('No fields available.'), 'attributes' => array('id' => 'profile-fields')));
-  $output .= drupal_render_children($form);
-
-  return $output;
-}
-
-/**
- * Menu callback: Generate a form to add/edit a user profile field.
- *
- * @ingroup forms
- * @see profile_field_form_validate()
- * @see profile_field_form_submit()
- */
-function profile_field_form($form, &$form_state, $arg = NULL) {
-  if (arg(4) == 'edit') {
-    if (is_numeric($arg)) {
-      $fid = $arg;
-
-      $edit = db_query('SELECT * FROM {profile_field} WHERE fid = :fid', array('fid' => $fid))->fetchAssoc();
-
-      if (!$edit) {
-        drupal_not_found();
-        return;
-      }
-      drupal_set_title(t('Edit %title', array('%title' => $edit['title'])), PASS_THROUGH);
-      $form['fid'] = array('#type' => 'value',
-        '#value' => $fid,
-      );
-      $type = $edit['type'];
-    }
-    else {
-      drupal_not_found();
-      return;
-    }
-  }
-  else {
-    $types = _profile_field_types();
-    if (!isset($types[$arg])) {
-      drupal_not_found();
-      return;
-    }
-    $type = $arg;
-    drupal_set_title(t('Add new %type', array('%type' => $types[$type])), PASS_THROUGH);
-    $edit = array('name' => 'profile_');
-    $form['type'] = array('#type' => 'value', '#value' => $type);
-  }
-  $edit += array(
-    'category' => '',
-    'title' => '',
-    'explanation' => '',
-    'weight' => 0,
-    'page' => '',
-    'autocomplete' => '',
-    'required' => '',
-    'register' => '',
-  );
-  $form['category'] = array('#type' => 'textfield',
-    '#title' => t('Category'),
-    '#default_value' => $edit['category'],
-    '#autocomplete_path' => 'admin/config/people/profile/autocomplete',
-    '#description' => t('The category the new field should be part of. Categories are used to group fields logically. An example category is "Personal information".'),
-    '#required' => TRUE,
-  );
-  $form['title'] = array('#type' => 'textfield',
-    '#title' => t('Title'),
-    '#default_value' => $edit['title'],
-    '#description' => t('The title of the new field. The title will be shown to the user. An example title is "Favorite color".'),
-    '#required' => TRUE,
-  );
-  $form['name'] = array('#type' => 'textfield',
-    '#title' => t('Form name'),
-    '#default_value' => $edit['name'],
-    '#description' => t('The name of the field. The form name is not shown to the user but used internally in the HTML code and URLs.
-Unless you know what you are doing, it is highly recommended that you prefix the form name with <code>profile_</code> to avoid name clashes with other fields. Spaces or any other special characters except dash (-) and underscore (_) are not allowed. An example name is "profile_favorite_color" or perhaps just "profile_color".'),
-    '#required' => TRUE,
-  );
-  $form['explanation'] = array('#type' => 'textarea',
-    '#title' => t('Explanation'),
-    '#default_value' => $edit['explanation'],
-    '#description' => t('An optional explanation to go with the new field. The explanation will be shown to the user.'),
-  );
-  if ($type == 'selection') {
-    $form['fields']['options'] = array('#type' => 'textarea',
-      '#title' => t('Selection options'),
-      '#default_value' => isset($edit['options']) ? $edit['options'] : '',
-      '#description' => t('A list of all options. Put each option on a separate line. Example options are "red", "blue", "green", etc.'),
-    );
-  }
-  $form['visibility'] = array('#type' => 'radios',
-    '#title' => t('Visibility'),
-    '#default_value' => isset($edit['visibility']) ? $edit['visibility'] : PROFILE_PUBLIC,
-    '#options' => array(PROFILE_HIDDEN => t('Hidden profile field, only accessible by administrators, modules and themes.'), PROFILE_PRIVATE => t('Private field, content only available to privileged users.'), PROFILE_PUBLIC => t('Public field, content shown on profile page but not used on member list pages.'), PROFILE_PUBLIC_LISTINGS => t('Public field, content shown on profile page and on member list pages.')),
-  );
-  if ($type == 'selection' || $type == 'list' || $type == 'textfield') {
-    $form['fields']['page'] = array('#type' => 'textfield',
-      '#title' => t('Page title'),
-      '#default_value' => $edit['page'],
-      '#description' => t('To enable browsing this field by value, enter a title for the resulting page. The word <code>%value</code> will be substituted with the corresponding value. An example page title is "People whose favorite color is %value" . This is only applicable for a public field.'),
-    );
-  }
-  elseif ($type == 'checkbox') {
-    $form['fields']['page'] = array('#type' => 'textfield',
-      '#title' => t('Page title'),
-      '#default_value' => $edit['page'],
-      '#description' => t('To enable browsing this field by value, enter a title for the resulting page. An example page title is "People who are employed" . This is only applicable for a public field.'),
-    );
-  }
-  $form['weight'] = array('#type' => 'weight',
-    '#title' => t('Weight'),
-    '#default_value' => $edit['weight'],
-    '#description' => t('The weights define the order in which the form fields are shown. Lighter fields "float up" towards the top of the category.'),
-  );
-  $form['autocomplete'] = array('#type' => 'checkbox',
-    '#title' => t('Form will auto-complete while user is typing.'),
-    '#default_value' => $edit['autocomplete'],
-    '#description' => t('For security, auto-complete will be disabled if the user does not have access to user profiles.'),
-  );
-  $form['required'] = array('#type' => 'checkbox',
-    '#title' => t('The user must enter a value.'),
-    '#default_value' => $edit['required'],
-  );
-  $form['register'] = array('#type' => 'checkbox',
-    '#title' => t('Visible in user registration form.'),
-    '#default_value' => $edit['register'],
-  );
-
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array('#type' => 'submit',
-    '#value' => t('Save field'),
-  );
-  return $form;
-}
-
-/**
- * Validate profile_field_form submissions.
- */
-function profile_field_form_validate($form, &$form_state) {
-  // Validate the 'field name':
-  if (preg_match('/[^a-zA-Z0-9_-]/', $form_state['values']['name'])) {
-    form_set_error('name', t('The specified form name contains one or more illegal characters. Spaces or any other special characters except dash (-) and underscore (_) are not allowed.'));
-  }
-
-  $users_table = drupal_get_schema('users');
-  if (!empty($users_table['fields'][$form_state['values']['name']])) {
-    form_set_error('name', t('The specified form name is reserved for use by Drupal.'));
-  }
-  // Validate the category:
-  if (!$form_state['values']['category']) {
-    form_set_error('category', t('You must enter a category.'));
-  }
-  if (strtolower($form_state['values']['category']) == 'account') {
-    form_set_error('category', t('The specified category name is reserved for use by Drupal.'));
-  }
-  $query = db_select('profile_field');
-  $query->fields('profile_field', array('fid'));
-
-  if (isset($form_state['values']['fid'])) {
-    $query->condition('fid', $form_state['values']['fid'], '<>');
-  }
-  $query_name = clone $query;
-
-  $title = $query
-    ->condition('title', $form_state['values']['title'])
-    ->condition('category', $form_state['values']['category'])
-    ->execute()
-    ->fetchField();
-  if ($title) {
-    form_set_error('title', t('The specified title is already in use.'));
-  }
-  $name = $query_name
-    ->condition('name', $form_state['values']['name'])
-    ->execute()
-    ->fetchField();
-  if ($name) {
-    form_set_error('name', t('The specified name is already in use.'));
-  }
-  if ($form_state['values']['visibility'] == PROFILE_HIDDEN) {
-    if ($form_state['values']['required']) {
-      form_set_error('required', t('A hidden field cannot be required.'));
-    }
-    if ($form_state['values']['register']) {
-      form_set_error('register', t('A hidden field cannot be set to visible on the user registration form.'));
-    }
-  }
-}
-
-/**
- * Process profile_field_form submissions.
- */
-function profile_field_form_submit($form, &$form_state) {
-  if (!isset($form_state['values']['options'])) {
-    $form_state['values']['options'] = '';
-  }
-  if (!isset($form_state['values']['page'])) {
-    $form_state['values']['page'] = '';
-  }
-  // Remove all elements that are not profile_field columns.
-  $values = array_intersect_key($form_state['values'], array_flip(array('type', 'category', 'title', 'name', 'explanation', 'visibility', 'page', 'weight', 'autocomplete', 'required', 'register', 'options')));
-  if (!isset($form_state['values']['fid'])) {
-    db_insert('profile_field')
-      ->fields($values)
-      ->execute();
-    drupal_set_message(t('The field has been created.'));
-    watchdog('profile', 'Profile field %field added under category %category.', array('%field' => $form_state['values']['title'], '%category' => $form_state['values']['category']), WATCHDOG_NOTICE, l(t('view'), 'admin/config/people/profile'));
-  }
-  else {
-    db_update('profile_field')
-      ->fields($values)
-      ->condition('fid', $form_state['values']['fid'])
-      ->execute();
-    drupal_set_message(t('The field has been updated.'));
-  }
-  cache_clear_all();
-  menu_rebuild();
-
-  $form_state['redirect'] = 'admin/config/people/profile';
-  return;
-}
-
-/**
- * Menu callback; deletes a field from all user profiles.
- */
-function profile_field_delete($form, &$form_state, $fid) {
-  $field = db_query("SELECT title FROM {profile_field} WHERE fid = :fid", array(':fid' => $fid))->fetchObject();
-  if (!$field) {
-    drupal_not_found();
-    return;
-  }
-  $form['fid'] = array('#type' => 'value', '#value' => $fid);
-  $form['title'] = array('#type' => 'value', '#value' => $field->title);
-
-  return confirm_form($form,
-    t('Are you sure you want to delete the field %field?', array('%field' => $field->title)), 'admin/config/people/profile',
-    t('This action cannot be undone. If users have entered values into this field in their profile, these entries will also be deleted. If you want to keep the user-entered data, instead of deleting the field you may wish to <a href="@edit-field">edit this field</a> and change it to a hidden profile field so that it may only be accessed by administrators.', array('@edit-field' => url('admin/config/people/profile/edit/' . $fid))),
-    t('Delete'), t('Cancel'));
-}
-
-/**
- * Process a field delete form submission.
- */
-function profile_field_delete_submit($form, &$form_state) {
-  db_delete('profile_field')
-    ->condition('fid', $form_state['values']['fid'])
-    ->execute();
-  db_delete('profile_value')
-    ->condition('fid', $form_state['values']['fid'])
-    ->execute();
-
-  cache_clear_all();
-
-  drupal_set_message(t('The field %field has been deleted.', array('%field' => $form_state['values']['title'])));
-  watchdog('profile', 'Profile field %field deleted.', array('%field' => $form_state['values']['title']), WATCHDOG_NOTICE, l(t('view'), 'admin/config/people/profile'));
-
-  $form_state['redirect'] = 'admin/config/people/profile';
-  return;
-}
-
-/**
- * Retrieve a pipe delimited string of autocomplete suggestions for profile categories
- */
-function profile_admin_settings_autocomplete($string) {
-  $matches = array();
-  $result = db_select('profile_field')
-    ->fields('profile_field', array('category'))
-    ->condition('category', db_like($string) . '%', 'LIKE')
-    ->range(0, 10)
-    ->execute();
-
-  foreach ($result as $data) {
-    $matches[$data->category] = check_plain($data->category);
-  }
-  drupal_json_output($matches);
-}
diff --git a/modules/profile/profile.css b/modules/profile/profile.css
deleted file mode 100644
index c3132f9..0000000
--- a/modules/profile/profile.css
+++ /dev/null
@@ -1,10 +0,0 @@
-
-#profile-fields td.category {
-  font-weight: bold;
-}
-#profile-fields tr.category-message {
-  color: #999;
-}
-#profile-fields tr.category-populated {
-  display: none;
-}
diff --git a/modules/profile/profile.info b/modules/profile/profile.info
deleted file mode 100644
index e45f4c5..0000000
--- a/modules/profile/profile.info
+++ /dev/null
@@ -1,12 +0,0 @@
-name = Profile
-description = Supports configurable user profiles.
-package = Core
-version = VERSION
-core = 7.x
-files[] = profile.test
-configure = admin/config/people/profile
-; The Profile module is deprecated, and included in Drupal 7 for legacy
-; purposes only. By default, the module will be hidden from the UI unless you
-; are upgrading a site that uses the Profile module to extend user profiles.
-; See user_system_info_alter().
-hidden = TRUE
diff --git a/modules/profile/profile.install b/modules/profile/profile.install
deleted file mode 100644
index 5e4a17c..0000000
--- a/modules/profile/profile.install
+++ /dev/null
@@ -1,172 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the profile module.
- */
-
-/**
- * Implements hook_uninstall().
- */
-function profile_uninstall() {
-  variable_del('profile_block_author_fields');
-}
-
-/**
- * Implements hook_schema().
- */
-function profile_schema() {
-  $schema['profile_field'] = array(
-    'description' => 'Stores profile field information.',
-    'fields' => array(
-      'fid' => array(
-        'type' => 'serial',
-        'not null' => TRUE,
-        'description' => 'Primary Key: Unique profile field ID.',
-      ),
-      'title' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => FALSE,
-        'description' => 'Title of the field shown to the end user.',
-      ),
-      'name' => array(
-        'type' => 'varchar',
-        'length' => 128,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Internal name of the field used in the form HTML and URLs.',
-      ),
-      'explanation' => array(
-        'type' => 'text',
-        'not null' => FALSE,
-        'description' => 'Explanation of the field to end users.',
-      ),
-      'category' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => FALSE,
-        'description' => 'Profile category that the field will be grouped under.',
-      ),
-      'page' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => FALSE,
-        'description' => "Title of page used for browsing by the field's value",
-      ),
-      'type' => array(
-        'type' => 'varchar',
-        'length' => 128,
-        'not null' => FALSE,
-        'description' => 'Type of form field.',
-      ),
-      'weight' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Weight of field in relation to other profile fields.',
-      ),
-      'required' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'size' => 'tiny',
-        'description' => 'Whether the user is required to enter a value. (0 = no, 1 = yes)',
-      ),
-      'register' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'size' => 'tiny',
-        'description' => 'Whether the field is visible in the user registration form. (1 = yes, 0 = no)',
-      ),
-      'visibility' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'size' => 'tiny',
-        'description' => 'The level of visibility for the field. (0 = hidden, 1 = private, 2 = public on profile but not member list pages, 3 = public on profile and list pages)',
-      ),
-      'autocomplete' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'size' => 'tiny',
-        'description' => 'Whether form auto-completion is enabled. (0 = disabled, 1 = enabled)',
-      ),
-      'options' => array(
-        'type' => 'text',
-        'not null' => FALSE,
-        'description' => 'List of options to be used in a list selection field.',
-      ),
-    ),
-    'indexes' => array(
-      'category' => array('category'),
-    ),
-    'unique keys' => array(
-      'name' => array('name'),
-    ),
-    'primary key' => array('fid'),
-  );
-
-  $schema['profile_value'] = array(
-    'description' => 'Stores values for profile fields.',
-    'fields' => array(
-      'fid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The {profile_field}.fid of the field.',
-      ),
-      'uid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The {users}.uid of the profile user.',
-      ),
-      'value' => array(
-        'type' => 'text',
-        'not null' => FALSE,
-        'description' => 'The value for the field.',
-      ),
-    ),
-    'primary key' => array('uid', 'fid'),
-    'indexes' => array(
-      'fid' => array('fid'),
-    ),
-    'foreign keys' => array(
-      'profile_field' => array(
-        'table' => 'profile_field',
-        'columns' => array('fid' => 'fid'),
-      ),
-      'profile_user' => array(
-        'table' => 'users',
-        'columns' => array('uid' => 'uid'),
-      ),
-    ),
-  );
-
-  return $schema;
-}
-
-/**
- * Rename {profile_fields} table to {profile_field} and {profile_values} to {profile_value}.
- */
-function profile_update_7001() {
-  db_rename_table('profile_fields', 'profile_field');
-  db_rename_table('profile_values', 'profile_value');
-}
-
-/**
- * Change the weight column to normal int.
- */
-function profile_update_7002() {
-  db_change_field('profile_field', 'weight', 'weight', array(
-    'type' => 'int',
-    'not null' => TRUE,
-    'default' => 0,
-    'description' => 'Weight of field in relation to other profile fields.',
-  ));
-}
diff --git a/modules/profile/profile.js b/modules/profile/profile.js
deleted file mode 100644
index f262560..0000000
--- a/modules/profile/profile.js
+++ /dev/null
@@ -1,58 +0,0 @@
-(function ($) {
-
-/**
- * Add functionality to the profile drag and drop table.
- *
- * This behavior is dependent on the tableDrag behavior, since it uses the
- * objects initialized in that behavior to update the row. It shows and hides
- * a warning message when removing the last field from a profile category.
- */
-Drupal.behaviors.profileDrag = {
-  attach: function (context, settings) {
-    var table = $('#profile-fields');
-    var tableDrag = Drupal.tableDrag['profile-fields']; // Get the profile tableDrag object.
-
-    // Add a handler for when a row is swapped, update empty categories.
-    tableDrag.row.prototype.onSwap = function (swappedRow) {
-      var rowObject = this;
-      $('tr.category-message', table).each(function () {
-        // If the dragged row is in this category, but above the message row, swap it down one space.
-        if ($(this).prev('tr').get(0) == rowObject.element) {
-          // Prevent a recursion problem when using the keyboard to move rows up.
-          if ((rowObject.method != 'keyboard' || rowObject.direction == 'down')) {
-            rowObject.swap('after', this);
-          }
-        }
-        // This category has become empty
-        if ($(this).next('tr').is(':not(.draggable)') || $(this).next('tr').length == 0) {
-          $(this).removeClass('category-populated').addClass('category-empty');
-        }
-        // This category has become populated.
-        else if ($(this).is('.category-empty')) {
-          $(this).removeClass('category-empty').addClass('category-populated');
-        }
-      });
-    };
-
-    // Add a handler so when a row is dropped, update fields dropped into new categories.
-    tableDrag.onDrop = function () {
-      dragObject = this;
-      if ($(dragObject.rowObject.element).prev('tr').is('.category-message')) {
-        var categoryRow = $(dragObject.rowObject.element).prev('tr').get(0);
-        var categoryNum = categoryRow.className.replace(/([^ ]+[ ]+)*category-([^ ]+)-message([ ]+[^ ]+)*/, '$2');
-        var categoryField = $('select.profile-category', dragObject.rowObject.element);
-        var weightField = $('select.profile-weight', dragObject.rowObject.element);
-        var oldcategoryNum = weightField[0].className.replace(/([^ ]+[ ]+)*profile-weight-([^ ]+)([ ]+[^ ]+)*/, '$2');
-
-        if (!categoryField.is('.profile-category-' + categoryNum)) {
-          categoryField.removeClass('profile-category-' + oldcategoryNum).addClass('profile-category-' + categoryNum);
-          weightField.removeClass('profile-weight-' + oldcategoryNum).addClass('profile-weight-' + categoryNum);
-
-          categoryField.val(categoryField[0].options[categoryNum].value);
-        }
-      }
-    };
-  }
-};
-
-})(jQuery);
diff --git a/modules/profile/profile.test b/modules/profile/profile.test
deleted file mode 100644
index 42a1a42..0000000
--- a/modules/profile/profile.test
+++ /dev/null
@@ -1,530 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for profile.module.
- */
-
-/**
- * A class for common methods for testing profile fields.
- */
-class ProfileTestCase extends DrupalWebTestCase {
-  protected $admin_user;
-  protected $normal_user;
-
-  function setUp() {
-    parent::setUp('profile');
-    variable_set('user_register', USER_REGISTER_VISITORS);
-
-    $this->admin_user = $this->drupalCreateUser(array('administer users', 'access user profiles', 'administer blocks'));
-
-    // This is the user whose profile will be edited.
-    $this->normal_user = $this->drupalCreateUser();
-  }
-
-  /**
-   * Create a profile field.
-   *
-   * @param $type
-   *   The field type to be created.
-   * @param $category
-   *   The category in which the field should be created.
-   * @param $edit
-   *   Additional parameters to be submitted.
-   * @return
-   *   The fid of the field that was just created.
-   */
-  function createProfileField($type = 'textfield', $category = 'simpletest', $edit = array()) {
-    $edit['title'] = $title = $this->randomName(8);
-    $edit['name'] = $form_name = 'profile_' . $title;
-    $edit['category'] = $category;
-    $edit['explanation'] = $this->randomName(50);
-
-    $this->drupalPost('admin/config/people/profile/add/' . $type, $edit, t('Save field'));
-    $fid = db_query("SELECT fid FROM {profile_field} WHERE title = :title", array(':title' => $title))->fetchField();
-    $this->assertTrue($fid, 'New Profile field has been entered in the database');
-
-    // Check that the new field is appearing on the user edit form.
-    $this->drupalGet('user/' . $this->admin_user->uid . '/edit/' . $category);
-
-    // Checking field.
-    if ($type == 'date') {
-      $this->assertField($form_name . '[month]', 'Found month selection field');
-      $this->assertField($form_name . '[day]', 'Found day selection field');
-      $this->assertField($form_name . '[year]', 'Found day selection field');
-    }
-    else {
-      $this->assertField($form_name , format_string('Found form named @name', array('@name' => $form_name)));
-    }
-
-    // Checking name.
-    $this->assertText($title, format_string('Checking title for field %title', array('%title' => $title)));
-    // Checking explanation.
-    $this->assertText($edit['explanation'], format_string('Checking explanation for field %title', array('%title' => $title)));
-
-    return array(
-      'fid' => $fid,
-      'type' => $type,
-      'form_name' => $form_name,
-      'title' => $title,
-      'category' => $category,
-    );
-  }
-
-  /**
-   * Update a profile field.
-   *
-   * @param $fid
-   *   The fid of the field to be updated.
-   * @param $type
-   *   The type of field to be updated.
-   * @param $edit
-   *   Field parameters to be submitted.
-   * @return
-   *   Array representation of the updated field.
-   */
-  function updateProfileField($fid, $type = 'textfield', $edit = array()) {
-
-    $form_name = $edit['name'];
-    $title = $edit['title'];
-    $category = $edit['category'];
-
-    $this->drupalPost('admin/config/people/profile/edit/' . $fid, $edit, t('Save field'));
-
-    // Check that the updated field is appearing on the user edit form.
-    $this->drupalGet('user/' . $this->admin_user->uid . '/edit/' . $category);
-
-    // Checking field.
-    if ($type == 'date') {
-      $this->assertField($form_name . '[month]', 'Found month selection field');
-      $this->assertField($form_name . '[day]', 'Found day selection field');
-      $this->assertField($form_name . '[year]', 'Found day selection field');
-    }
-    else {
-      $this->assertField($form_name , format_string('Found form named @name', array('@name' => $form_name)));
-    }
-
-    // Checking name.
-    $this->assertText($title, format_string('Checking title for field %title', array('%title' => $title)));
-    // Checking explanation.
-    $this->assertText($edit['explanation'], format_string('Checking explanation for field %title', array('%title' => $title)));
-
-    return array(
-      'fid' => $fid,
-      'type' => $type,
-      'form_name' => $form_name,
-      'title' => $title,
-      'category' => $category,
-    );
-  }
-
-  /**
-   * Set the profile field to a random value
-   *
-   * @param $field
-   *   The field that should be set.
-   * @param $value
-   *   The value for the field, defaults to a random string.
-   * @return
-   *   The value that has been assigned to
-   */
-  function setProfileField($field, $value = NULL) {
-
-    if (!isset($value)) {
-      $value = $this->randomName();
-    }
-
-    $edit = array(
-      $field['form_name'] => $value,
-    );
-    $this->drupalPost('user/' . $this->normal_user->uid . '/edit/' . $field['category'], $edit, t('Save'));
-
-    // Check profile page.
-    $content = $this->drupalGet('user/' . $this->normal_user->uid);
-    $this->assertText($field['title'], format_string('Found profile field with title %title', array('%title' => $field['title'])));
-
-    if ($field['type'] != 'checkbox') {
-      // $value must be cast to a string in order to be found by assertText.
-      $this->assertText("$value", format_string('Found profile field with value %value', array('%value' => $value)));
-    }
-
-    return $value;
-  }
-
-  /**
-   * Delete a profile field.
-   *
-   * @param $field
-   *   The field to be deleted.
-   */
-  function deleteProfileField($field) {
-    $this->drupalPost('admin/config/people/profile/delete/' . $field['fid'], array(), t('Delete'));
-    $this->drupalGet('admin/config/people/profile');
-    $this->assertNoText($field['title'], format_string('Checking deleted field %title', array('%title' => $field['title'])));
-  }
-}
-
-class ProfileTestFields extends ProfileTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Test single fields',
-      'description' => 'Testing profile module with add/edit/delete textfield, textarea, list, checkbox, and url fields into profile page',
-      'group' => 'Profile'
-    );
-  }
-
-  /**
-   * Test each of the field types. List selection and date fields are tested
-   * separately because they need some special handling.
-   */
-  function testProfileFields() {
-    $this->drupalLogin($this->admin_user);
-
-    // Set test values for every field type.
-    $field_types = array(
-      'textfield' => $this->randomName(),
-      'textarea' => $this->randomName(),
-      'list' => $this->randomName(),
-      'checkbox' => 1,
-      // An underscore is an invalid character in a domain name. The method randomName can
-      // return an underscore.
-      'url' => 'http://www.' . str_replace('_', '', $this->randomName(10)) . '.org',
-    );
-
-    // For each field type, create a field, give it a value, update the field,
-    // and delete the field.
-    foreach ($field_types as $type => $value) {
-      $field = $this->createProfileField($type);
-      $this->setProfileField($field, $value);
-      $edit = array(
-        'name' => $field['form_name'],
-        'title' => $this->randomName(),
-        'category' => $field['category'],
-        'explanation' => $this->randomName(),
-      );
-      $field = $this->updateProfileField($field['fid'], $field['type'], $edit);
-      $this->deleteProfileField($field);
-    }
-  }
-}
-
-class ProfileTestSelect extends ProfileTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Test select field',
-      'description' => 'Testing profile module with add/edit/delete a select field',
-      'group' => 'Profile'
-    );
-  }
-
-  /**
-   * Create a list selection field, give it a value, update and delete the field.
-   */
-  function testProfileSelectionField() {
-    $this->drupalLogin($this->admin_user);
-
-    $edit = array(
-      'options' => implode("\n", range(1, 10)),
-    );
-    $field = $this->createProfileField('selection', 'simpletest', $edit);
-
-    $this->setProfileField($field, rand(1, 10));
-
-    $edit = array(
-      'name' => $field['form_name'],
-      'title' => $this->randomName(),
-      'category' => $field['category'],
-      'explanation' => $this->randomName(),
-    );
-    $field = $this->updateProfileField($field['fid'], $field['type'], $edit);
-    $this->deleteProfileField($field);
-  }
-}
-
-class ProfileTestDate extends ProfileTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Test date field',
-      'description' => 'Testing profile module with add/edit/delete a date field',
-      'group' => 'Profile'
-    );
-  }
-
-  /**
-   * Create a date field, give it a value, update and delete the field.
-   */
-  function testProfileDateField() {
-    $this->drupalLogin($this->admin_user);
-
-    variable_set('date_format_short', 'm/d/Y - H:i');
-    $field = $this->createProfileField('date');
-
-    // Set date to January 09, 1983
-    $edit = array(
-      $field['form_name'] . '[month]' => 1,
-      $field['form_name'] . '[day]' => 9,
-      $field['form_name'] . '[year]' => 1983,
-    );
-
-    $this->drupalPost('user/' . $this->normal_user->uid . '/edit/' . $field['category'], $edit, t('Save'));
-
-    // Check profile page.
-    $this->drupalGet('user/' . $this->normal_user->uid);
-    $this->assertText($field['title'], format_string('Found profile field with title %title', array('%title' => $field['title'])));
-
-    $this->assertText('01/09/1983', 'Found date profile field.');
-
-    $edit = array(
-      'name' => $field['form_name'],
-      'title' => $this->randomName(),
-      'category' => $field['category'],
-      'explanation' => $this->randomName(),
-    );
-    $field = $this->updateProfileField($field['fid'], $field['type'], $edit);
-    $this->deleteProfileField($field);
-  }
-}
-
-class ProfileTestWeights extends ProfileTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Test field weights',
-      'description' => 'Testing profile modules weigting of fields',
-      'group' => 'Profile'
-    );
-  }
-
-  function testProfileFieldWeights() {
-    $this->drupalLogin($this->admin_user);
-
-    $category = $this->randomName();
-    $field1 = $this->createProfileField('textfield', $category, array('weight' => 1));
-    $field2 = $this->createProfileField('textfield', $category, array('weight' => -1));
-
-    $this->setProfileField($field1, $this->randomName(8));
-    $this->setProfileField($field2, $this->randomName(8));
-
-    $profile_edit = $this->drupalGet('user/' . $this->normal_user->uid . '/edit/' . $category);
-    $this->assertTrue(strpos($profile_edit, $field1['title']) > strpos($profile_edit, $field2['title']), 'Profile field weights are respected on the user edit form.');
-
-    $profile_page = $this->drupalGet('user/' . $this->normal_user->uid);
-    $this->assertTrue(strpos($profile_page, $field1['title']) > strpos($profile_page, $field2['title']), 'Profile field weights are respected on the user profile page.');
-  }
-}
-
-/**
- * Test profile field autocompletion and access.
- */
-class ProfileTestAutocomplete extends ProfileTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Autocompletion',
-      'description' => 'Test profile fields with autocompletion.',
-      'group' => 'Profile'
-    );
-  }
-
-  /**
-   * Tests profile field autocompletion and access.
-   */
-  function testAutocomplete() {
-    $this->drupalLogin($this->admin_user);
-
-    // Create a new profile field with autocompletion enabled.
-    $category = $this->randomName();
-    $field = $this->createProfileField('textfield', $category, array('weight' => 1, 'autocomplete' => 1));
-
-    // Enter profile field value.
-    $field['value'] = $this->randomName();
-    $this->setProfileField($field, $field['value']);
-
-    // Set some html for what we want to see in the page output later.
-    $autocomplete_html = '<input type="hidden" id="' . drupal_html_id('edit-' . $field['form_name'] . '-autocomplete') . '" value="' . url('profile/autocomplete/' . $field['fid'], array('absolute' => TRUE)) . '" disabled="disabled" class="autocomplete" />';
-    $field_html = '<input type="text" maxlength="255" name="' . $field['form_name'] . '" id="' . drupal_html_id('edit-' . $field['form_name']) . '" size="60" value="' . $field['value'] . '" class="form-text form-autocomplete required" />';
-
-    // Check that autocompletion html is found on the user's profile edit page.
-    $this->drupalGet('user/' . $this->admin_user->uid . '/edit/' . $category);
-    $this->assertRaw($autocomplete_html, 'Autocomplete found.');
-    $this->assertRaw('misc/autocomplete.js', 'Autocomplete JavaScript found.');
-    $this->assertRaw('class="form-text form-autocomplete"', 'Autocomplete form element class found.');
-
-    // Check the autocompletion path using the first letter of our user's profile
-    // field value to make sure access is allowed and a valid result if found.
-    $this->drupalGet('profile/autocomplete/' . $field['fid'] . '/' . $field['value'][0]);
-    $this->assertResponse(200, 'Autocomplete path allowed to user with permission.');
-    $this->assertRaw($field['value'], 'Autocomplete value found.');
-
-    // Logout and login with a user without the 'access user profiles' permission.
-    $this->drupalLogout();
-    $this->drupalLogin($this->normal_user);
-
-    // Check that autocompletion html is not found on the user's profile edit page.
-    $this->drupalGet('user/' . $this->normal_user->uid . '/edit/' . $category);
-    $this->assertNoRaw($autocomplete_html, 'Autocomplete not found.');
-
-    // User should be denied access to the profile autocomplete path.
-    $this->drupalGet('profile/autocomplete/' . $field['fid'] . '/' . $field['value'][0]);
-    $this->assertResponse(403, 'Autocomplete path denied to user without permission.');
-  }
-}
-
-class ProfileBlockTestCase extends ProfileTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Block availability',
-      'description' => 'Check if the Author Information block is available.',
-      'group' => 'Profile',
-    );
-  }
-
-  function setUp() {
-    parent::setUp();
-
-    // Login the admin user.
-    $this->drupalLogin($this->admin_user);
-
-    // Create two fields.
-    $category = $this->randomName();
-    $this->field1 = $this->createProfileField('textfield', $category, array('weight' => 0));
-    $this->field2 = $this->createProfileField('textfield', $category, array('weight' => 1));
-
-    // Assign values to those fields.
-    $this->value1 = $this->setProfileField($this->field1);
-    $this->value2 = $this->setProfileField($this->field2);
-
-    // Create a node authored by the normal user.
-    $this->node = $this->drupalCreateNode(array(
-      'uid' => $this->normal_user->uid,
-    ));
-  }
-
-  function testAuthorInformationBlock() {
-    // Set the block to a region to confirm the block is available.
-    $edit = array();
-    $edit['blocks[profile_author-information][region]'] = 'footer';
-    $this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
-    $this->assertText(t('The block settings have been updated.'), 'Block successfully move to footer region.');
-
-    // Enable field 1.
-    $this->drupalPost('admin/structure/block/manage/profile/author-information/configure', array(
-      'profile_block_author_fields[' . $this->field1['form_name'] . ']' => TRUE,
-    ), t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), 'Block configuration set.');
-
-    // Visit the node and confirm that the field is displayed.
-    $this->drupalGet('node/' . $this->node->nid);
-    $this->assertRaw($this->value1, 'Field 1 is displayed');
-    $this->assertNoRaw($this->value2, 'Field 2 is not displayed');
-
-    // Enable only field 2.
-    $this->drupalPost('admin/structure/block/manage/profile/author-information/configure', array(
-      'profile_block_author_fields[' . $this->field1['form_name'] . ']' => FALSE,
-      'profile_block_author_fields[' . $this->field2['form_name'] . ']' => TRUE,
-    ), t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), 'Block configuration set.');
-
-    // Visit the node and confirm that the field is displayed.
-    $this->drupalGet('node/' . $this->node->nid);
-    $this->assertNoRaw($this->value1, 'Field 1 is not displayed');
-    $this->assertRaw($this->value2, 'Field 2 is displayed');
-
-    // Enable both fields.
-    $this->drupalPost('admin/structure/block/manage/profile/author-information/configure', array(
-      'profile_block_author_fields[' . $this->field1['form_name'] . ']' => TRUE,
-      'profile_block_author_fields[' . $this->field2['form_name'] . ']' => TRUE,
-    ), t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), 'Block configuration set.');
-
-    // Visit the node and confirm that the field is displayed.
-    $this->drupalGet('node/' . $this->node->nid);
-    $this->assertRaw($this->value1, 'Field 1 is displayed');
-    $this->assertRaw($this->value2, 'Field 2 is displayed');
-
-    // Enable the link to the user profile.
-    $this->drupalPost('admin/structure/block/manage/profile/author-information/configure', array(
-      'profile_block_author_fields[user_profile]' => TRUE,
-    ), t('Save block'));
-    $this->assertText(t('The block configuration has been saved.'), 'Block configuration set.');
-
-    // Visit the node and confirm that the user profile link is displayed.
-    $this->drupalGet('node/' . $this->node->nid);
-    $this->clickLink(t('View full user profile'));
-    $this->assertEqual($this->getUrl(), url('user/' . $this->normal_user->uid, array('absolute' => TRUE)));
-  }
-}
-
-/**
- * Test profile browsing.
- */
-class ProfileTestBrowsing extends ProfileTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Profile browsing',
-      'description' => 'Test profile browsing.',
-      'group' => 'Profile',
-    );
-  }
-
-  /**
-   * Test profile browsing.
-   */
-  function testProfileBrowsing() {
-    $this->drupalLogin($this->admin_user);
-    $field = $this->createProfileField('list', 'simpletest', array('page' => '%value'));
-
-    // Set a random value for the profile field.
-    $value = $this->setProfileField($field);
-
-    // Check that user is found on the profile browse page.
-    $this->drupalGet("profile/{$field['form_name']}/$value");
-    $this->assertText($this->normal_user->name);
-  }
-}
-
-/**
- * Test profile integration with user CRUD operations.
- */
-class ProfileCrudTestCase extends ProfileTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Profile CRUD tests',
-      'description' => 'Test profile integration with user create, read, update, delete.',
-      'group' => 'Profile',
-    );
-  }
-
-  /**
-   * Test profile integration with user CRUD operations.
-   */
-  public function testUserCRUD() {
-    // @todo Add profile fields in addition to base user properties.
-    $edit = array(
-      'name' => 'Test user',
-      'mail' => 'test@example.com',
-    );
-
-    // Create.
-    // @todo Add assertions.
-    $account = user_save(NULL, $edit);
-
-    // Read.
-    // @todo Add assertions.
-    $account = user_load($account->uid);
-
-    // Update.
-    // @todo Add assertions.
-    $account = user_save($account, $edit);
-
-    // Delete.
-    // @todo Add assertions.
-    user_delete($account->uid);
-  }
-}
-
-  /**
-   * TODO:
-   * - Test field visibility
-   * - Test required fields
-   * - Test fields on registration form
-   * - Test updating fields
-   */
diff --git a/modules/rdf/rdf.api.php b/modules/rdf/rdf.api.php
deleted file mode 100644
index 691f7ef..0000000
--- a/modules/rdf/rdf.api.php
+++ /dev/null
@@ -1,106 +0,0 @@
-<?php
-
-/**
- * @file
- * Hooks provided by the RDF module.
- */
-
-/**
- * @addtogroup hooks
- * @{
- */
-
-/**
- * Allow modules to define RDF mappings for field bundles.
- *
- * Modules defining their own field bundles can specify which RDF semantics
- * should be used to annotate these bundles. These mappings are then used for
- * automatic RDFa output in the HTML code.
- *
- * @return
- *   A list of mapping structures, where each mapping is an associative array:
- *   - type: The name of an entity type (e.g., 'node', 'comment', and so on.)
- *   - bundle: The name of the bundle (e.g., 'page', 'blog', or
- *     RDF_DEFAULT_BUNDLE for default mappings.)
- *   - mapping: The mapping structure which applies to the entity type and
- *     bundle. A mapping structure is an array with keys corresponding to
- *     existing field instances in the bundle. Each field is then described in
- *     terms of the RDF mapping:
- *     - predicates: An array of RDF predicates which describe the relation
- *       between the bundle (RDF subject) and the value of the field (RDF
- *       object). This value is either some text, another bundle, or a URI in
- *       general.
- *     - datatype: Is used along with 'callback' to format data so that it is
- *       readable by machines. A typical example is a date which can be written
- *       in many different formats but should be translated into a uniform
- *       format for machine consumption.
- *     - callback: A function name to invoke for 'datatype'.
- *     - type: A string used to determine the type of RDFa markup which will be
- *       used in the final HTML output, depending on whether the RDF object is a
- *       literal text or another RDF resource.
- *     - rdftype: A special property used to define the type of the instance.
- *       Its value should be an array of RDF classes.
- *
- *       @ingroup rdf
- */
-function hook_rdf_mapping() {
-  return array(
-    array(
-      'type' => 'node',
-      'bundle' => 'blog',
-      'mapping' => array(
-        'rdftype' => array('sioct:Weblog'),
-        'title' => array(
-          'predicates' => array('dc:title'),
-        ),
-        'created' => array(
-          'predicates' => array('dc:date', 'dc:created'),
-          'datatype' => 'xsd:dateTime',
-          'callback' => 'date_iso8601',
-        ),
-        'body' => array(
-          'predicates' => array('content:encoded'),
-        ),
-        'uid' => array(
-          'predicates' => array('sioc:has_creator'),
-          'type' => 'rel',
-        ),
-        'name' => array(
-          'predicates' => array('foaf:name'),
-        ),
-      ),
-    ),
-  );
-}
-
-/**
- * Allow modules to define namespaces for RDF mappings.
- *
- * Many common namespace prefixes are defined in rdf_rdf_namespaces(). However,
- * if a module implements hook_rdf_mapping() and uses a prefix that is not
- * defined in rdf_rdf_namespaces(), this hook should be used to define the new
- * namespace prefix.
- *
- * @return
- *   An associative array of namespaces where the key is the namespace prefix
- *   and the value is the namespace URI.
- *
- * @ingroup rdf
- */
-function hook_rdf_namespaces() {
-  return array(
-    'content'  => 'http://purl.org/rss/1.0/modules/content/',
-    'dc'       => 'http://purl.org/dc/terms/',
-    'foaf'     => 'http://xmlns.com/foaf/0.1/',
-    'og'       => 'http://ogp.me/ns#',
-    'rdfs'     => 'http://www.w3.org/2000/01/rdf-schema#',
-    'sioc'     => 'http://rdfs.org/sioc/ns#',
-    'sioct'    => 'http://rdfs.org/sioc/types#',
-    'skos'     => 'http://www.w3.org/2004/02/skos/core#',
-    'xsd'      => 'http://www.w3.org/2001/XMLSchema#',
-  );
-}
-
-/**
- * @} End of "addtogroup hooks".
- */
diff --git a/modules/rdf/rdf.info b/modules/rdf/rdf.info
deleted file mode 100644
index dd5c63b..0000000
--- a/modules/rdf/rdf.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = RDF
-description = Enriches your content with metadata to let other applications (e.g. search engines, aggregators) better understand its relationships and attributes.
-package = Core
-version = VERSION
-core = 7.x
-files[] = rdf.test
diff --git a/modules/rdf/rdf.install b/modules/rdf/rdf.install
deleted file mode 100644
index 10d3f8d..0000000
--- a/modules/rdf/rdf.install
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the rdf module.
- */
-
-/**
- * Implements hook_schema().
- */
-function rdf_schema() {
-  $schema['rdf_mapping'] = array(
-    'description' => 'Stores custom RDF mappings for user defined content types or overriden module-defined mappings',
-    'fields' => array(
-      'type' => array(
-        'type' => 'varchar',
-        'length' => 128,
-        'not null' => TRUE,
-        'description' => 'The name of the entity type a mapping applies to (node, user, comment, etc.).',
-      ),
-      'bundle' => array(
-        'type' => 'varchar',
-        'length' => 128,
-        'not null' => TRUE,
-        'description' => 'The name of the bundle a mapping applies to.',
-      ),
-      'mapping' => array(
-        'description' => 'The serialized mapping of the bundle type and fields to RDF terms.',
-        'type' => 'blob',
-        'not null' => FALSE,
-        'size' => 'big',
-        'serialize' => TRUE,
-      ),
-    ),
-    'primary key' => array('type', 'bundle'),
-  );
-
-  return $schema;
-}
-
-/**
- * Implements hook_install().
- */
-function rdf_install() {
-  // Collect any RDF mappings that were declared by modules installed before
-  // this one.
-  $modules = module_implements('rdf_mapping');
-  rdf_modules_installed($modules);
-}
diff --git a/modules/rdf/tests/rdf_test.info b/modules/rdf/tests/rdf_test.info
deleted file mode 100644
index b64e9a5..0000000
--- a/modules/rdf/tests/rdf_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "RDF module tests"
-description = "Support module for RDF module testing."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/rdf/tests/rdf_test.install b/modules/rdf/tests/rdf_test.install
deleted file mode 100644
index 91a3392..0000000
--- a/modules/rdf/tests/rdf_test.install
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the rdf module.
- */
-
-/**
- * Implements hook_install().
- */
-function rdf_test_install() {
-  $rdf_mappings = array(
-    array(
-      'type' => 'node',
-      'bundle' => 'test_bundle_hook_install',
-      'mapping' => array(
-        'rdftype' => array('foo:mapping_install1', 'bar:mapping_install2'),
-      ),
-    ),
-  );
-
-  foreach ($rdf_mappings as $rdf_mapping) {
-    rdf_mapping_save($rdf_mapping);
-  }
-}
diff --git a/modules/rdf/tests/rdf_test.module b/modules/rdf/tests/rdf_test.module
deleted file mode 100644
index c133a33..0000000
--- a/modules/rdf/tests/rdf_test.module
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-
-/**
- * @file
- * Test API interaction with the RDF module.
- */
-
-/**
- * Implements hook_rdf_mapping().
- */
-function rdf_test_rdf_mapping() {
-  return array(
-    array(
-      'type' => 'test_entity',
-      'bundle' => 'test_bundle',
-      'mapping' => array(
-        'rdftype' => array('sioc:Post'),
-        'title' => array(
-          'predicates' => array('dc:title'),
-        ),
-        'created' => array(
-          'predicates' => array('dc:created'),
-          'datatype' => 'xsd:dateTime',
-          'callback' => 'date_iso8601',
-        ),
-        'uid' => array(
-          'predicates' => array('sioc:has_creator', 'dc:creator'),
-          'type' => 'rel',
-        ),
-        'foobar' => array(
-          'predicates' => array('foo:bar'),
-        ),
-        'foobar1' => array(
-          'datatype' => 'foo:bar1type',
-          'predicates' => array('foo:bar1'),
-        ),
-        'foobar_objproperty1' => array(
-          'predicates' => array('sioc:has_creator', 'dc:creator'),
-          'type' => 'rel',
-        ),
-        'foobar_objproperty2' => array(
-          'predicates' => array('sioc:reply_of'),
-          'type' => 'rev',
-        ),
-      ),
-    ),
-    array(
-      'type' => 'node',
-      'bundle' => 'blog',
-      'mapping' => array(
-        'rdftype' => array('sioct:Weblog'),
-      ),
-    ),
-  );
-}
-
-/**
- * Implements hook_rdf_namespaces().
- */
-function rdf_test_rdf_namespaces() {
-  return array(
-    'dc'       => 'http://purl.org/conflicting/namespace',
-    'foaf'     => 'http://xmlns.com/foaf/0.1/',
-    'foaf1'    => 'http://xmlns.com/foaf/0.1/',
-  );
-}
diff --git a/modules/search/search-block-form.tpl.php b/modules/search/search-block-form.tpl.php
deleted file mode 100644
index da58403..0000000
--- a/modules/search/search-block-form.tpl.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-/**
- * @file
- * Displays the search form block.
- *
- * Available variables:
- * - $search_form: The complete search form ready for print.
- * - $search: Associative array of search elements. Can be used to print each
- *   form element separately.
- *
- * Default elements within $search:
- * - $search['search_block_form']: Text input area wrapped in a div.
- * - $search['actions']: Rendered form buttons.
- * - $search['hidden']: Hidden form elements. Used to validate forms when
- *   submitted.
- *
- * Modules can add to the search form, so it is recommended to check for their
- * existence before printing. The default keys will always exist. To check for
- * a module-provided field, use code like this:
- * @code
- *   <?php if (isset($search['extra_field'])): ?>
- *     <div class="extra-field">
- *       <?php print $search['extra_field']; ?>
- *     </div>
- *   <?php endif; ?>
- * @endcode
- *
- * @see template_preprocess_search_block_form()
- */
-?>
-<div class="container-inline">
-  <?php if (empty($variables['form']['#block']->subject)): ?>
-    <h2 class="element-invisible"><?php print t('Search form'); ?></h2>
-  <?php endif; ?>
-  <?php print $search_form; ?>
-</div>
diff --git a/modules/search/search-results.tpl.php b/modules/search/search-results.tpl.php
deleted file mode 100644
index aa9bf8d..0000000
--- a/modules/search/search-results.tpl.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation for displaying search results.
- *
- * This template collects each invocation of theme_search_result(). This and
- * the child template are dependent to one another sharing the markup for
- * definition lists.
- *
- * Note that modules may implement their own search type and theme function
- * completely bypassing this template.
- *
- * Available variables:
- * - $search_results: All results as it is rendered through
- *   search-result.tpl.php
- * - $module: The machine-readable name of the module (tab) being searched, such
- *   as "node" or "user".
- *
- *
- * @see template_preprocess_search_results()
- *
- * @ingroup themeable
- */
-?>
-<?php if ($search_results): ?>
-  <h2><?php print t('Search results');?></h2>
-  <ol class="search-results <?php print $module; ?>-results">
-    <?php print $search_results; ?>
-  </ol>
-  <?php print $pager; ?>
-<?php else : ?>
-  <h2><?php print t('Your search yielded no results');?></h2>
-  <?php print search_help('search#noresults', drupal_help_arg()); ?>
-<?php endif; ?>
diff --git a/modules/search/search-rtl.css b/modules/search/search-rtl.css
deleted file mode 100644
index da9e8d9..0000000
--- a/modules/search/search-rtl.css
+++ /dev/null
@@ -1,13 +0,0 @@
-
-.search-advanced .criterion {
-  float: right;
-  margin-right: 0;
-  margin-left: 2em;
-}
-.search-advanced .action {
-  float: right;
-  clear: right;
-}
-.search-results .search-snippet-info {
-  padding-right: 1em; /* LTR */
-}
\ No newline at end of file
diff --git a/modules/search/search.admin.inc b/modules/search/search.admin.inc
deleted file mode 100644
index a609485..0000000
--- a/modules/search/search.admin.inc
+++ /dev/null
@@ -1,186 +0,0 @@
-<?php
-
-/**
- * @file
- * Admin page callbacks for the search module.
- */
-
-/**
- * Menu callback: confirm wiping of the index.
- */
-function search_reindex_confirm() {
-  return confirm_form(array(), t('Are you sure you want to re-index the site?'),
-                  'admin/config/search/settings', t('The search index is not cleared but systematically updated to reflect the new settings. Searching will continue to work but new content won\'t be indexed until all existing content has been re-indexed. This action cannot be undone.'), t('Re-index site'), t('Cancel'));
-}
-
-/**
- * Handler for wipe confirmation
- */
-function search_reindex_confirm_submit(&$form, &$form_state) {
-  if ($form['confirm']) {
-    search_reindex();
-    drupal_set_message(t('The index will be rebuilt.'));
-    $form_state['redirect'] = 'admin/config/search/settings';
-    return;
-  }
-}
-
-/**
- * Helper function to get real module names.
- */
-function _search_get_module_names() {
-
-  $search_info = search_get_info(TRUE);
-  $system_info = system_get_info('module');
-  $names = array();
-  foreach ($search_info as $module => $info) {
-    $names[$module] = $system_info[$module]['name'];
-  }
-  asort($names, SORT_STRING);
-  return $names;
-}
-
-/**
- * Menu callback: displays the search module settings page.
- *
- * @ingroup forms
- *
- * @see search_admin_settings_validate()
- * @see search_admin_settings_submit()
- * @see search_admin_reindex_submit()
- */
-function search_admin_settings($form) {
-  // Collect some stats
-  $remaining = 0;
-  $total = 0;
-  foreach (variable_get('search_active_modules', array('node', 'user')) as $module) {
-    if ($status = module_invoke($module, 'search_status')) {
-      $remaining += $status['remaining'];
-      $total += $status['total'];
-    }
-  }
-
-  $count = format_plural($remaining, 'There is 1 item left to index.', 'There are @count items left to index.');
-  $percentage = ((int)min(100, 100 * ($total - $remaining) / max(1, $total))) . '%';
-  $status = '<p><strong>' . t('%percentage of the site has been indexed.', array('%percentage' => $percentage)) . ' ' . $count . '</strong></p>';
-  $form['status'] = array('#type' => 'fieldset', '#title' => t('Indexing status'));
-  $form['status']['status'] = array('#markup' => $status);
-  $form['status']['wipe'] = array('#type' => 'submit', '#value' => t('Re-index site'), '#submit' => array('search_admin_reindex_submit'));
-
-  $items = drupal_map_assoc(array(10, 20, 50, 100, 200, 500));
-
-  // Indexing throttle:
-  $form['indexing_throttle'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Indexing throttle')
-  );
-  $form['indexing_throttle']['search_cron_limit'] = array(
-    '#type' => 'select',
-    '#title' => t('Number of items to index per cron run'),
-    '#default_value' => variable_get('search_cron_limit', 100),
-    '#options' => $items,
-    '#description' => t('The maximum number of items indexed in each pass of a <a href="@cron">cron maintenance task</a>. If necessary, reduce the number of items to prevent timeouts and memory errors while indexing.', array('@cron' => url('admin/reports/status')))
-  );
-  // Indexing settings:
-  $form['indexing_settings'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Indexing settings')
-  );
-  $form['indexing_settings']['info'] = array(
-    '#markup' => t('<p><em>Changing the settings below will cause the site index to be rebuilt. The search index is not cleared but systematically updated to reflect the new settings. Searching will continue to work but new content won\'t be indexed until all existing content has been re-indexed.</em></p><p><em>The default settings should be appropriate for the majority of sites.</em></p>')
-  );
-  $form['indexing_settings']['minimum_word_size'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Minimum word length to index'),
-    '#default_value' => variable_get('minimum_word_size', 3),
-    '#size' => 5,
-    '#maxlength' => 3,
-    '#description' => t('The number of characters a word has to be to be indexed. A lower setting means better search result ranking, but also a larger database. Each search query must contain at least one keyword that is this size (or longer).'),
-    '#element_validate' => array('element_validate_integer_positive'),
-  );
-  $form['indexing_settings']['overlap_cjk'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Simple CJK handling'),
-    '#default_value' => variable_get('overlap_cjk', TRUE),
-    '#description' => t('Whether to apply a simple Chinese/Japanese/Korean tokenizer based on overlapping sequences. Turn this off if you want to use an external preprocessor for this instead. Does not affect other languages.')
-  );
-
-  $form['active'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Active search modules')
-  );
-  $module_options = _search_get_module_names();
-  $form['active']['search_active_modules'] = array(
-    '#type' => 'checkboxes',
-    '#title' => t('Active modules'),
-    '#title_display' => 'invisible',
-    '#default_value' => variable_get('search_active_modules', array('node', 'user')),
-    '#options' => $module_options,
-    '#description' => t('Choose which search modules are active from the available modules.')
-  );
-  $form['active']['search_default_module'] = array(
-    '#title' => t('Default search module'),
-    '#type' => 'radios',
-    '#default_value' => variable_get('search_default_module', 'node'),
-    '#options' => $module_options,
-    '#description' => t('Choose which search module is the default.')
-  );
-  $form['#validate'][] = 'search_admin_settings_validate';
-  $form['#submit'][] = 'search_admin_settings_submit';
-
-  // Per module settings
-  foreach (variable_get('search_active_modules', array('node', 'user')) as $module) {
-    $added_form = module_invoke($module, 'search_admin');
-    if (is_array($added_form)) {
-      $form = array_merge($form, $added_form);
-    }
-  }
-
-  return system_settings_form($form);
-}
-
-/**
- * Form validation handler for search_admin_settings().
- */
-function search_admin_settings_validate($form, &$form_state) {
-  // Check whether we selected a valid default.
-  if ($form_state['triggering_element']['#value'] != t('Reset to defaults')) {
-    $new_modules = array_filter($form_state['values']['search_active_modules']);
-    $default = $form_state['values']['search_default_module'];
-    if (!in_array($default, $new_modules, TRUE)) {
-      form_set_error('search_default_module', t('Your default search module is not selected as an active module.'));
-    }
-  }
-}
-
-/**
- * Form submission handler for search_admin_settings().
- */
-function search_admin_settings_submit($form, &$form_state) {
-  // If these settings change, the index needs to be rebuilt.
-  if ((variable_get('minimum_word_size', 3) != $form_state['values']['minimum_word_size']) ||
-      (variable_get('overlap_cjk', TRUE) != $form_state['values']['overlap_cjk'])) {
-    drupal_set_message(t('The index will be rebuilt.'));
-    search_reindex();
-  }
-  $current_modules = variable_get('search_active_modules', array('node', 'user'));
-  // Check whether we are resetting the values.
-  if ($form_state['triggering_element']['#value'] == t('Reset to defaults')) {
-    $new_modules = array('node', 'user');
-  }
-  else {
-    $new_modules = array_filter($form_state['values']['search_active_modules']);
-  }
-  if (array_diff($current_modules, $new_modules)) {
-    drupal_set_message(t('The active search modules have been changed.'));
-    variable_set('menu_rebuild_needed', TRUE);
-  }
-}
-
-/**
- * Form submission handler for reindex button on search_admin_settings_form().
- */
-function search_admin_reindex_submit($form, &$form_state) {
-  // send the user to the confirmation page
-  $form_state['redirect'] = 'admin/config/search/settings/reindex';
-}
diff --git a/modules/search/search.api.php b/modules/search/search.api.php
deleted file mode 100644
index 62d53b8..0000000
--- a/modules/search/search.api.php
+++ /dev/null
@@ -1,376 +0,0 @@
-<?php
-
-/**
- * @file
- * Hooks provided by the Search module.
- */
-
-/**
- * @addtogroup hooks
- * @{
- */
-
-/**
- * Define a custom search type.
- *
- * This hook allows a module to tell search.module that it wishes to perform
- * searches on content it defines (custom node types, users, or comments for
- * example) when a site search is performed.
- *
- * In order for the search to do anything, your module must also implement
- * hook_search_execute(), which is called when someone requests a search
- * on your module's type of content. If you want to have your content
- * indexed in the standard search index, your module should also implement
- * hook_update_index(). If your search type has settings, you can implement
- * hook_search_admin() to add them to the search settings page. You can use
- * hook_form_FORM_ID_alter(), with FORM_ID set to 'search_form', to add fields
- * to the search form (see node_form_search_form_alter() for an example).
- * You can use hook_search_access() to limit access to searching,
- * and hook_search_page() to override how search results are displayed.
- *
- * @return
- *   Array with optional keys:
- *   - title: Title for the tab on the search page for this module. Defaults
- *     to the module name if not given.
- *   - path: Path component after 'search/' for searching with this module.
- *     Defaults to the module name if not given.
- *   - conditions_callback: An implementation of callback_search_conditions().
- *
- * @ingroup search
- */
-function hook_search_info() {
-  return array(
-    'title' => 'Content',
-    'path' => 'node',
-    'conditions_callback' => 'callback_search_conditions',
-  );
-}
-
-/**
- * Define access to a custom search routine.
- *
- * This hook allows a module to define permissions for a search tab.
- *
- * @ingroup search
- */
-function hook_search_access() {
-  return user_access('access content');
-}
-
-/**
- * Take action when the search index is going to be rebuilt.
- *
- * Modules that use hook_update_index() should update their indexing
- * bookkeeping so that it starts from scratch the next time
- * hook_update_index() is called.
- *
- * @ingroup search
- */
-function hook_search_reset() {
-  db_update('search_dataset')
-    ->fields(array('reindex' => REQUEST_TIME))
-    ->condition('type', 'node')
-    ->execute();
-}
-
-/**
- * Report the status of indexing.
- *
- * The core search module only invokes this hook on active modules.
- * Implementing modules do not need to check whether they are active when
- * calculating their return values.
- *
- * @return
- *  An associative array with the key-value pairs:
- *  - 'remaining': The number of items left to index.
- *  - 'total': The total number of items to index.
- *
- * @ingroup search
- */
-function hook_search_status() {
-  $total = db_query('SELECT COUNT(*) FROM {node} WHERE status = 1')->fetchField();
-  $remaining = db_query("SELECT COUNT(*) FROM {node} n LEFT JOIN {search_dataset} d ON d.type = 'node' AND d.sid = n.nid WHERE n.status = 1 AND d.sid IS NULL OR d.reindex <> 0")->fetchField();
-  return array('remaining' => $remaining, 'total' => $total);
-}
-
-/**
- * Add elements to the search settings form.
- *
- * @return
- *   Form array for the Search settings page at admin/config/search/settings.
- *
- * @ingroup search
- */
-function hook_search_admin() {
-  // Output form for defining rank factor weights.
-  $form['content_ranking'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Content ranking'),
-  );
-  $form['content_ranking']['#theme'] = 'node_search_admin';
-  $form['content_ranking']['info'] = array(
-    '#value' => '<em>' . t('The following numbers control which properties the content search should favor when ordering the results. Higher numbers mean more influence, zero means the property is ignored. Changing these numbers does not require the search index to be rebuilt. Changes take effect immediately.') . '</em>'
-  );
-
-  // Note: reversed to reflect that higher number = higher ranking.
-  $options = drupal_map_assoc(range(0, 10));
-  foreach (module_invoke_all('ranking') as $var => $values) {
-    $form['content_ranking']['factors']['node_rank_' . $var] = array(
-      '#title' => $values['title'],
-      '#type' => 'select',
-      '#options' => $options,
-      '#default_value' => variable_get('node_rank_' . $var, 0),
-    );
-  }
-  return $form;
-}
-
-/**
- * Execute a search for a set of key words.
- *
- * Use database API with the 'PagerDefault' query extension to perform your
- * search.
- *
- * If your module uses hook_update_index() and search_index() to index its
- * items, use table 'search_index' aliased to 'i' as the main table in your
- * query, with the 'SearchQuery' extension. You can join to your module's table
- * using the 'i.sid' field, which will contain the $sid values you provided to
- * search_index(). Add the main keywords to the query by using method
- * searchExpression(). The functions search_expression_extract() and
- * search_expression_insert() may also be helpful for adding custom search
- * parameters to the search expression.
- *
- * See node_search_execute() for an example of a module that uses the search
- * index, and user_search_execute() for an example that doesn't use the search
- * index.
- *
- * @param $keys
- *   The search keywords as entered by the user.
- * @param $conditions
- *   An optional array of additional conditions, such as filters.
- *
- * @return
- *   An array of search results. To use the default search result
- *   display, each item should have the following keys':
- *   - 'link': Required. The URL of the found item.
- *   - 'type': The type of item (such as the content type).
- *   - 'title': Required. The name of the item.
- *   - 'user': The author of the item.
- *   - 'date': A timestamp when the item was last modified.
- *   - 'extra': An array of optional extra information items.
- *   - 'snippet': An excerpt or preview to show with the result (can be
- *     generated with search_excerpt()).
- *   - 'language': Language code for the item (usually two characters).
- *
- * @ingroup search
- */
-function hook_search_execute($keys = NULL, $conditions = NULL) {
-  // Build matching conditions
-  $query = db_select('search_index', 'i', array('target' => 'slave'))->extend('SearchQuery')->extend('PagerDefault');
-  $query->join('node', 'n', 'n.nid = i.sid');
-  $query
-    ->condition('n.status', 1)
-    ->addTag('node_access')
-    ->searchExpression($keys, 'node');
-
-  // Insert special keywords.
-  $query->setOption('type', 'n.type');
-  $query->setOption('language', 'n.language');
-  if ($query->setOption('term', 'ti.tid')) {
-    $query->join('taxonomy_index', 'ti', 'n.nid = ti.nid');
-  }
-  // Only continue if the first pass query matches.
-  if (!$query->executeFirstPass()) {
-    return array();
-  }
-
-  // Add the ranking expressions.
-  _node_rankings($query);
-
-  // Load results.
-  $find = $query
-    ->limit(10)
-    ->execute();
-  $results = array();
-  foreach ($find as $item) {
-    // Build the node body.
-    $node = node_load($item->sid);
-    node_build_content($node, 'search_result');
-    $node->body = drupal_render($node->content);
-
-    // Fetch comments for snippet.
-    $node->rendered .= ' ' . module_invoke('comment', 'node_update_index', $node);
-    // Fetch terms for snippet.
-    $node->rendered .= ' ' . module_invoke('taxonomy', 'node_update_index', $node);
-
-    $extra = module_invoke_all('node_search_result', $node);
-
-    $results[] = array(
-      'link' => url('node/' . $item->sid, array('absolute' => TRUE)),
-      'type' => check_plain(node_type_get_name($node)),
-      'title' => $node->title,
-      'user' => theme('username', array('account' => $node)),
-      'date' => $node->changed,
-      'node' => $node,
-      'extra' => $extra,
-      'score' => $item->calculated_score,
-      'snippet' => search_excerpt($keys, $node->body),
-    );
-  }
-  return $results;
-}
-
-/**
- * Override the rendering of search results.
- *
- * A module that implements hook_search_info() to define a type of search may
- * implement this hook in order to override the default theming of its search
- * results, which is otherwise themed using theme('search_results').
- *
- * Note that by default, theme('search_results') and theme('search_result')
- * work together to create an ordered list (OL). So your hook_search_page()
- * implementation should probably do this as well.
- *
- * @param $results
- *   An array of search results.
- *
- * @return
- *   A renderable array, which will render the formatted search results with a
- *   pager included.
- *
- * @see search-result.tpl.php
- * @see search-results.tpl.php
- */
-function hook_search_page($results) {
-  $output['prefix']['#markup'] = '<ol class="search-results">';
-
-  foreach ($results as $entry) {
-    $output[] = array(
-      '#theme' => 'search_result',
-      '#result' => $entry,
-      '#module' => 'my_module_name',
-    );
-  }
-  $output['suffix']['#markup'] = '</ol>' . theme('pager');
-
-  return $output;
-}
-
-/**
- * Preprocess text for search.
- *
- * This hook is called to preprocess both the text added to the search index and
- * the keywords users have submitted for searching.
- *
- * Possible uses:
- * - Adding spaces between words of Chinese or Japanese text.
- * - Stemming words down to their root words to allow matches between, for
- *   instance, walk, walked, walking, and walks in searching.
- * - Expanding abbreviations and acronymns that occur in text.
- *
- * @param $text
- *   The text to preprocess. This is a single piece of plain text extracted
- *   from between two HTML tags or from the search query. It will not contain
- *   any HTML entities or HTML tags.
- *
- * @return
- *   The text after preprocessing. Note that if your module decides not to alter
- *   the text, it should return the original text. Also, after preprocessing,
- *   words in the text should be separated by a space.
- *
- * @ingroup search
- */
-function hook_search_preprocess($text) {
-  // Do processing on $text
-  return $text;
-}
-
-/**
- * Update the search index for this module.
- *
- * This hook is called every cron run if search.module is enabled, your
- * module has implemented hook_search_info(), and your module has been set as
- * an active search module on the Search settings page
- * (admin/config/search/settings). It allows your module to add items to the
- * built-in search index using search_index(), or to add them to your module's
- * own indexing mechanism.
- *
- * When implementing this hook, your module should index content items that
- * were modified or added since the last run. PHP has a time limit
- * for cron, though, so it is advisable to limit how many items you index
- * per run using variable_get('search_cron_limit') (see example below). Also,
- * since the cron run could time out and abort in the middle of your run, you
- * should update your module's internal bookkeeping on when items have last
- * been indexed as you go rather than waiting to the end of indexing.
- *
- * @ingroup search
- */
-function hook_update_index() {
-  $limit = (int)variable_get('search_cron_limit', 100);
-
-  $result = db_query_range("SELECT n.nid FROM {node} n LEFT JOIN {search_dataset} d ON d.type = 'node' AND d.sid = n.nid WHERE d.sid IS NULL OR d.reindex <> 0 ORDER BY d.reindex ASC, n.nid ASC", 0, $limit);
-
-  foreach ($result as $node) {
-    $node = node_load($node->nid);
-
-    // Save the changed time of the most recent indexed node, for the search
-    // results half-life calculation.
-    variable_set('node_cron_last', $node->changed);
-
-    // Render the node.
-    node_build_content($node, 'search_index');
-    $node->rendered = drupal_render($node->content);
-
-    $text = '<h1>' . check_plain($node->title) . '</h1>' . $node->rendered;
-
-    // Fetch extra data normally not visible
-    $extra = module_invoke_all('node_update_index', $node);
-    foreach ($extra as $t) {
-      $text .= $t;
-    }
-
-    // Update index
-    search_index($node->nid, 'node', $text);
-  }
-}
-/**
- * @} End of "addtogroup hooks".
- */
-
-/**
- * Provide search query conditions.
- *
- * Callback for hook_search_info().
- *
- * This callback is invoked by search_view() to get an array of additional
- * search conditions to pass to search_data(). For example, a search module
- * may get additional keywords, filters, or modifiers for the search from
- * the query string.
- *
- * This example pulls additional search keywords out of the $_REQUEST variable,
- * (i.e. from the query string of the request). The conditions may also be
- * generated internally - for example based on a module's settings.
- *
- * @param $keys
- *   The search keywords string.
- *
- * @return
- *   An array of additional conditions, such as filters.
- *
- * @ingroup callbacks
- * @ingroup search
- */
-function callback_search_conditions($keys) {
-  $conditions = array();
-
-  if (!empty($_REQUEST['keys'])) {
-    $conditions['keys'] = $_REQUEST['keys'];
-  }
-  if (!empty($_REQUEST['sample_search_keys'])) {
-    $conditions['sample_search_keys'] = $_REQUEST['sample_search_keys'];
-  }
-  if ($force_keys = config('sample_search.settings')->get('force_keywords')) {
-    $conditions['sample_search_force_keywords'] = $force_keys;
-  }
-  return $conditions;
-}
diff --git a/modules/search/search.css b/modules/search/search.css
deleted file mode 100644
index ff7230f..0000000
--- a/modules/search/search.css
+++ /dev/null
@@ -1,34 +0,0 @@
-
-.search-form {
-  margin-bottom: 1em;
-}
-.search-form input {
-  margin-top: 0;
-  margin-bottom: 0;
-}
-.search-results {
-  list-style: none;
-}
-.search-results p {
-  margin-top: 0;
-}
-.search-results .title {
-  font-size: 1.2em;
-}
-.search-results li {
-  margin-bottom: 1em;
-}
-.search-results .search-snippet-info {
-  padding-left: 1em; /* LTR */
-}
-.search-results .search-info {
-  font-size: 0.85em;
-}
-.search-advanced .criterion {
-  float: left; /* LTR */
-  margin-right: 2em; /* LTR */
-}
-.search-advanced .action {
-  float: left; /* LTR */
-  clear: left; /* LTR */
-}
diff --git a/modules/search/search.info b/modules/search/search.info
deleted file mode 100644
index 77cab05..0000000
--- a/modules/search/search.info
+++ /dev/null
@@ -1,9 +0,0 @@
-name = Search
-description = Enables site-wide keyword searching.
-package = Core
-version = VERSION
-core = 7.x
-files[] = search.extender.inc
-files[] = search.test
-configure = admin/config/search/settings
-stylesheets[all][] = search.css
diff --git a/modules/search/search.install b/modules/search/search.install
deleted file mode 100644
index f0113b3..0000000
--- a/modules/search/search.install
+++ /dev/null
@@ -1,182 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the search module.
- */
-
-/**
- * Implements hook_uninstall().
- */
-function search_uninstall() {
-  variable_del('minimum_word_size');
-  variable_del('overlap_cjk');
-  variable_del('search_cron_limit');
-}
-
-/**
- * Implements hook_schema().
- */
-function search_schema() {
-  $schema['search_dataset'] = array(
-    'description' => 'Stores items that will be searched.',
-    'fields' => array(
-      'sid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Search item ID, e.g. node ID for nodes.',
-      ),
-      'type' => array(
-        'type' => 'varchar',
-        'length' => 16,
-        'not null' => TRUE,
-        'description' => 'Type of item, e.g. node.',
-      ),
-      'data' => array(
-        'type' => 'text',
-        'not null' => TRUE,
-        'size' => 'big',
-        'description' => 'List of space-separated words from the item.',
-      ),
-      'reindex' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Set to force node reindexing.',
-      ),
-    ),
-    'primary key' => array('sid', 'type'),
-  );
-
-  $schema['search_index'] = array(
-    'description' => 'Stores the search index, associating words, items and scores.',
-    'fields' => array(
-      'word' => array(
-        'type' => 'varchar',
-        'length' => 50,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'The {search_total}.word that is associated with the search item.',
-      ),
-      'sid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The {search_dataset}.sid of the searchable item to which the word belongs.',
-      ),
-      'type' => array(
-        'type' => 'varchar',
-        'length' => 16,
-        'not null' => TRUE,
-        'description' => 'The {search_dataset}.type of the searchable item to which the word belongs.',
-      ),
-      'score' => array(
-        'type' => 'float',
-        'not null' => FALSE,
-        'description' => 'The numeric score of the word, higher being more important.',
-      ),
-    ),
-    'indexes' => array(
-      'sid_type' => array('sid', 'type'),
-    ),
-    'foreign keys' => array(
-      'search_dataset' => array(
-        'table' => 'search_dataset',
-        'columns' => array(
-          'sid' => 'sid',
-          'type' => 'type',
-        ),
-      ),
-    ),
-    'primary key' => array('word', 'sid', 'type'),
-  );
-
-  $schema['search_total'] = array(
-    'description' => 'Stores search totals for words.',
-    'fields' => array(
-      'word' => array(
-        'description' => 'Primary Key: Unique word in the search index.',
-        'type' => 'varchar',
-        'length' => 50,
-        'not null' => TRUE,
-        'default' => '',
-      ),
-      'count' => array(
-        'description' => "The count of the word in the index using Zipf's law to equalize the probability distribution.",
-        'type' => 'float',
-        'not null' => FALSE,
-      ),
-    ),
-    'primary key' => array('word'),
-  );
-
-  $schema['search_node_links'] = array(
-    'description' => 'Stores items (like nodes) that link to other nodes, used to improve search scores for nodes that are frequently linked to.',
-    'fields' => array(
-      'sid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The {search_dataset}.sid of the searchable item containing the link to the node.',
-      ),
-      'type' => array(
-        'type' => 'varchar',
-        'length' => 16,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'The {search_dataset}.type of the searchable item containing the link to the node.',
-      ),
-      'nid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The {node}.nid that this item links to.',
-      ),
-      'caption' => array(
-        'type' => 'text',
-        'size' => 'big',
-        'not null' => FALSE,
-        'description' => 'The text used to link to the {node}.nid.',
-      ),
-    ),
-    'primary key' => array('sid', 'type', 'nid'),
-    'indexes' => array(
-      'nid' => array('nid'),
-    ),
-  );
-
-  return $schema;
-}
-
-/**
- * Replace unique keys in 'search_dataset' and 'search_index' by primary keys.
- */
-function search_update_7000() {
-  db_drop_unique_key('search_dataset', 'sid_type');
-  $dataset_type_spec = array(
-    'type' => 'varchar',
-    'length' => 16,
-    'not null' => TRUE,
-    'description' => 'Type of item, e.g. node.',
-  );
-  db_change_field('search_dataset', 'type', 'type', $dataset_type_spec);
-  db_add_primary_key('search_dataset', array('sid', 'type'));
-
-  db_drop_index('search_index', 'word');
-  db_drop_unique_key('search_index', 'word_sid_type');
-  $index_type_spec = array(
-    'type' => 'varchar',
-    'length' => 16,
-    'not null' => TRUE,
-    'description' => 'The {search_dataset}.type of the searchable item to which the word belongs.',
-  );
-  db_change_field('search_index', 'type', 'type', $index_type_spec);
-  db_add_primary_key('search_index', array('word', 'sid', 'type'));
-}
-
diff --git a/modules/search/search.module b/modules/search/search.module
deleted file mode 100644
index 7542f98..0000000
--- a/modules/search/search.module
+++ /dev/null
@@ -1,1356 +0,0 @@
-<?php
-
-/**
- * @file
- * Enables site-wide keyword searching.
- */
-
-/**
- * Matches all 'N' Unicode character classes (numbers)
- */
-define('PREG_CLASS_NUMBERS',
-  '\x{30}-\x{39}\x{b2}\x{b3}\x{b9}\x{bc}-\x{be}\x{660}-\x{669}\x{6f0}-\x{6f9}' .
-  '\x{966}-\x{96f}\x{9e6}-\x{9ef}\x{9f4}-\x{9f9}\x{a66}-\x{a6f}\x{ae6}-\x{aef}' .
-  '\x{b66}-\x{b6f}\x{be7}-\x{bf2}\x{c66}-\x{c6f}\x{ce6}-\x{cef}\x{d66}-\x{d6f}' .
-  '\x{e50}-\x{e59}\x{ed0}-\x{ed9}\x{f20}-\x{f33}\x{1040}-\x{1049}\x{1369}-' .
-  '\x{137c}\x{16ee}-\x{16f0}\x{17e0}-\x{17e9}\x{17f0}-\x{17f9}\x{1810}-\x{1819}' .
-  '\x{1946}-\x{194f}\x{2070}\x{2074}-\x{2079}\x{2080}-\x{2089}\x{2153}-\x{2183}' .
-  '\x{2460}-\x{249b}\x{24ea}-\x{24ff}\x{2776}-\x{2793}\x{3007}\x{3021}-\x{3029}' .
-  '\x{3038}-\x{303a}\x{3192}-\x{3195}\x{3220}-\x{3229}\x{3251}-\x{325f}\x{3280}-' .
-  '\x{3289}\x{32b1}-\x{32bf}\x{ff10}-\x{ff19}');
-
-/**
- * Matches all 'P' Unicode character classes (punctuation)
- */
-define('PREG_CLASS_PUNCTUATION',
-  '\x{21}-\x{23}\x{25}-\x{2a}\x{2c}-\x{2f}\x{3a}\x{3b}\x{3f}\x{40}\x{5b}-\x{5d}' .
-  '\x{5f}\x{7b}\x{7d}\x{a1}\x{ab}\x{b7}\x{bb}\x{bf}\x{37e}\x{387}\x{55a}-\x{55f}' .
-  '\x{589}\x{58a}\x{5be}\x{5c0}\x{5c3}\x{5f3}\x{5f4}\x{60c}\x{60d}\x{61b}\x{61f}' .
-  '\x{66a}-\x{66d}\x{6d4}\x{700}-\x{70d}\x{964}\x{965}\x{970}\x{df4}\x{e4f}' .
-  '\x{e5a}\x{e5b}\x{f04}-\x{f12}\x{f3a}-\x{f3d}\x{f85}\x{104a}-\x{104f}\x{10fb}' .
-  '\x{1361}-\x{1368}\x{166d}\x{166e}\x{169b}\x{169c}\x{16eb}-\x{16ed}\x{1735}' .
-  '\x{1736}\x{17d4}-\x{17d6}\x{17d8}-\x{17da}\x{1800}-\x{180a}\x{1944}\x{1945}' .
-  '\x{2010}-\x{2027}\x{2030}-\x{2043}\x{2045}-\x{2051}\x{2053}\x{2054}\x{2057}' .
-  '\x{207d}\x{207e}\x{208d}\x{208e}\x{2329}\x{232a}\x{23b4}-\x{23b6}\x{2768}-' .
-  '\x{2775}\x{27e6}-\x{27eb}\x{2983}-\x{2998}\x{29d8}-\x{29db}\x{29fc}\x{29fd}' .
-  '\x{3001}-\x{3003}\x{3008}-\x{3011}\x{3014}-\x{301f}\x{3030}\x{303d}\x{30a0}' .
-  '\x{30fb}\x{fd3e}\x{fd3f}\x{fe30}-\x{fe52}\x{fe54}-\x{fe61}\x{fe63}\x{fe68}' .
-  '\x{fe6a}\x{fe6b}\x{ff01}-\x{ff03}\x{ff05}-\x{ff0a}\x{ff0c}-\x{ff0f}\x{ff1a}' .
-  '\x{ff1b}\x{ff1f}\x{ff20}\x{ff3b}-\x{ff3d}\x{ff3f}\x{ff5b}\x{ff5d}\x{ff5f}-' .
-  '\x{ff65}');
-
-/**
- * Matches CJK (Chinese, Japanese, Korean) letter-like characters.
- *
- * This list is derived from the "East Asian Scripts" section of
- * http://www.unicode.org/charts/index.html, as well as a comment on
- * http://unicode.org/reports/tr11/tr11-11.html listing some character
- * ranges that are reserved for additional CJK ideographs.
- *
- * The character ranges do not include numbers, punctuation, or symbols, since
- * these are handled separately in search. Note that radicals and strokes are
- * considered symbols. (See
- * http://www.unicode.org/Public/UNIDATA/extracted/DerivedGeneralCategory.txt)
- *
- * @see search_expand_cjk()
- */
-define('PREG_CLASS_CJK', '\x{1100}-\x{11FF}\x{3040}-\x{309F}\x{30A1}-\x{318E}' .
-  '\x{31A0}-\x{31B7}\x{31F0}-\x{31FF}\x{3400}-\x{4DBF}\x{4E00}-\x{9FCF}' .
-  '\x{A000}-\x{A48F}\x{A4D0}-\x{A4FD}\x{A960}-\x{A97F}\x{AC00}-\x{D7FF}' .
-  '\x{F900}-\x{FAFF}\x{FF21}-\x{FF3A}\x{FF41}-\x{FF5A}\x{FF66}-\x{FFDC}' .
-  '\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}');
-
-/**
- * Implements hook_help().
- */
-function search_help($path, $arg) {
-  switch ($path) {
-    case 'admin/help#search':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Search module provides the ability to index and search for content by exact keywords, and for users by username or e-mail. For more information, see the online handbook entry for <a href="@search-module">Search module</a>.', array('@search-module' => 'http://drupal.org/documentation/modules/search/', '@search' => url('search'))) . '</p>';
-      $output .= '<h3>' . t('Uses') . '</h3>';
-      $output .= '<dl>';
-      $output .= '<dt>' . t('Searching content and users') . '</dt>';
-      $output .= '<dd>' . t('Users with <em>Use search</em> permission can use the search block and <a href="@search">Search page</a>. Users with the <em>View published content</em> permission can search for content containing exact keywords. Users with the <em>View user profiles</em> permission can search for users containing the keyword anywhere in the user name, and users with the <em>Administer users</em> permission can search for users by email address. Additionally, users with <em>Use advanced search</em> permission can find content using more complex search methods and filtering by choosing the <em>Advanced search</em> option on the <a href="@search">Search page</a>.', array('@search' => url('search'))) . '</dd>';
-      $output .= '<dt>' . t('Indexing content with cron') . '</dt>';
-      $output .= '<dd>' . t('To provide keyword searching, the search engine maintains an index of words found in the content and its fields, along with text added to your content by other modules (such as comments from the core Comment module, and taxonomy terms from the core Taxonomy module). To build and maintain this index, a correctly configured <a href="@cron">cron maintenance task</a> is required. Users with <em>Administer search</em> permission can further configure the cron settings on the <a href="@searchsettings">Search settings page</a>.', array('@cron' => 'http://drupal.org/cron', '@searchsettings' => url('admin/config/search/settings'))) . '</dd>';
-      $output .= '<dt>' . t('Content reindexing') . '</dt>';
-      $output .= '<dd>' . t('Content-related actions on your site (creating, editing, or deleting content and comments) automatically cause affected content items to be marked for indexing or reindexing at the next cron run. When content is marked for reindexing, the previous content remains in the index until cron runs, at which time it is replaced by the new content. Unlike content-related actions, actions related to the structure of your site do not cause affected content to be marked for reindexing. Examples of structure-related actions that affect content include deleting or editing taxonomy terms, enabling or disabling modules that add text to content (such as Taxonomy, Comment, and field-providing modules), and modifying the fields or display parameters of your content types. If you take one of these actions and you want to ensure that the search index is updated to reflect your changed site structure, you can mark all content for reindexing by clicking the "Re-index site" button on the <a href="@searchsettings">Search settings page</a>. If you have a lot of content on your site, it may take several cron runs for the content to be reindexed.', array('@searchsettings' => url('admin/config/search/settings'))) . '</dd>';
-      $output .= '<dt>' . t('Configuring search settings') . '</dt>';
-      $output .= '<dd>' . t('Indexing behavior can be adjusted using the <a href="@searchsettings">Search settings page</a>. Users with <em>Administer search</em> permission can control settings such as the <em>Number of items to index per cron run</em>, <em>Indexing settings</em> (word length), <em>Active search modules</em>, and <em>Content ranking</em>, which lets you adjust the priority in which indexed content is returned in results.', array('@searchsettings' => url('admin/config/search/settings'))) . '</dd>';
-      $output .= '<dt>' . t('Search block') . '</dt>';
-      $output .= '<dd>' . t('The Search module includes a default <em>Search form</em> block, which can be enabled and configured on the <a href="@blocks">Blocks administration page</a>. The block is available to users with the <em>Search content</em> permission.', array('@blocks' => url('admin/structure/block'))) . '</dd>';
-      $output .= '<dt>' . t('Extending Search module') . '</dt>';
-      $output .= '<dd>' . t('By default, the Search module only supports exact keyword matching in content searches. You can modify this behavior by installing a language-specific stemming module for your language (such as <a href="http://drupal.org/project/porterstemmer">Porter Stemmer</a> for American English), which allows words such as walk, walking, and walked to be matched in the Search module. Another approach is to use a third-party search technology with stemming or partial word matching features built in, such as <a href="http://drupal.org/project/apachesolr">Apache Solr</a> or <a href="http://drupal.org/project/sphinx">Sphinx</a>. These and other <a href="@contrib-search">search-related contributed modules</a> can be downloaded by visiting Drupal.org.', array('@contrib-search' => 'http://drupal.org/project/modules?filters=tid%3A105')) . '</dd>';
-      $output .= '</dl>';
-      return $output;
-    case 'admin/config/search/settings':
-      return '<p>' . t('The search engine maintains an index of words found in your site\'s content. To build and maintain this index, a correctly configured <a href="@cron">cron maintenance task</a> is required. Indexing behavior can be adjusted using the settings below.', array('@cron' => url('admin/reports/status'))) . '</p>';
-    case 'search#noresults':
-      return t('<ul>
-<li>Check if your spelling is correct.</li>
-<li>Remove quotes around phrases to search for each word individually. <em>bike shed</em> will often show more results than <em>&quot;bike shed&quot;</em>.</li>
-<li>Consider loosening your query with <em>OR</em>. <em>bike OR shed</em> will often show more results than <em>bike shed</em>.</li>
-</ul>');
-  }
-}
-
-/**
- * Implements hook_theme().
- */
-function search_theme() {
-  return array(
-    'search_block_form' => array(
-      'render element' => 'form',
-      'template' => 'search-block-form',
-    ),
-    'search_result' => array(
-      'variables' => array('result' => NULL, 'module' => NULL),
-      'file' => 'search.pages.inc',
-      'template' => 'search-result',
-    ),
-    'search_results' => array(
-      'variables' => array('results' => NULL, 'module' => NULL),
-      'file' => 'search.pages.inc',
-      'template' => 'search-results',
-    ),
-  );
-}
-
-/**
- * Implements hook_permission().
- */
-function search_permission() {
-  return array(
-    'administer search' => array(
-      'title' => t('Administer search'),
-    ),
-    'search content' => array(
-      'title' => t('Use search'),
-    ),
-    'use advanced search' => array(
-      'title' => t('Use advanced search'),
-    ),
-  );
-}
-
-/**
- * Implements hook_block_info().
- */
-function search_block_info() {
-  $blocks['form']['info'] = t('Search form');
-  // Not worth caching.
-  $blocks['form']['cache'] = DRUPAL_NO_CACHE;
-  $blocks['form']['properties']['administrative'] = TRUE;
-  return $blocks;
-}
-
-/**
- * Implements hook_block_view().
- */
-function search_block_view($delta = '') {
-  if (user_access('search content')) {
-    $block['content'] = drupal_get_form('search_block_form');
-    return $block;
-  }
-}
-
-/**
- * Implements hook_menu().
- */
-function search_menu() {
-  $items['search'] = array(
-    'title' => 'Search',
-    'page callback' => 'search_view',
-    'access callback' => 'search_is_active',
-    'type' => MENU_SUGGESTED_ITEM,
-    'file' => 'search.pages.inc',
-  );
-  $items['admin/config/search/settings'] = array(
-    'title' => 'Search settings',
-    'description' => 'Configure relevance settings for search and other indexing options.',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('search_admin_settings'),
-    'access arguments' => array('administer search'),
-    'weight' => -10,
-    'file' => 'search.admin.inc',
-  );
-  $items['admin/config/search/settings/reindex'] = array(
-    'title' => 'Clear index',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('search_reindex_confirm'),
-    'access arguments' => array('administer search'),
-    'type' => MENU_VISIBLE_IN_BREADCRUMB,
-    'file' => 'search.admin.inc',
-  );
-
-  // Add paths for searching. We add each module search path twice: once without
-  // and once with %menu_tail appended. The reason for this is that we want to
-  // preserve keywords when switching tabs, and also to have search tabs
-  // highlighted properly. The only way to do that within the Drupal menu
-  // system appears to be having two sets of tabs. See discussion on issue
-  // http://drupal.org/node/245103 for details.
-
-  drupal_static_reset('search_get_info');
-  $default_info = search_get_default_module_info();
-  if ($default_info) {
-    foreach (search_get_info() as $module => $search_info) {
-      $path = 'search/' . $search_info['path'];
-      $items[$path] = array(
-        'title' => $search_info['title'],
-        'page callback' => 'search_view',
-        'page arguments' => array($module, ''),
-        'access callback' => '_search_menu_access',
-        'access arguments' => array($module),
-        'type' => MENU_LOCAL_TASK,
-        'file' => 'search.pages.inc',
-        'weight' => $module == $default_info['module'] ? -10 : 0,
-      );
-      $items["$path/%menu_tail"] = array(
-        'title' => $search_info['title'],
-        'load arguments' => array('%map', '%index'),
-        'page callback' => 'search_view',
-        'page arguments' => array($module, 2),
-        'access callback' => '_search_menu_access',
-        'access arguments' => array($module),
-        // The default local task points to its parent, but this item points to
-        // where it should so it should not be changed.
-        'type' => MENU_LOCAL_TASK,
-        'file' => 'search.pages.inc',
-        'weight' => 0,
-        // These tabs are not subtabs.
-        'tab_root' => 'search/' . $default_info['path'] . '/%',
-        // These tabs need to display at the same level.
-        'tab_parent' => 'search/' . $default_info['path'],
-      );
-    }
-  }
-  return $items;
-}
-
-/**
- * Determines access for the ?q=search path.
- */
-function search_is_active() {
-  // This path cannot be accessed if there are no active modules.
-  return user_access('search content') && search_get_info();
-}
-
-/**
- * Returns information about available search modules.
- *
- * @param $all
- *   If TRUE, information about all enabled modules implementing
- *   hook_search_info() will be returned. If FALSE (default), only modules that
- *   have been set to active on the search settings page will be returned.
- *
- * @return
- *   Array of hook_search_info() return values, keyed by module name. The
- *   'title' and 'path' array elements will be set to defaults for each module
- *   if not supplied by hook_search_info(), and an additional array element of
- *   'module' will be added (set to the module name).
- */
-function search_get_info($all = FALSE) {
-  $search_hooks = &drupal_static(__FUNCTION__);
-
-  if (!isset($search_hooks)) {
-    foreach (module_implements('search_info') as $module) {
-      $search_hooks[$module] = call_user_func($module . '_search_info');
-      // Use module name as the default value.
-      $search_hooks[$module] += array('title' => $module, 'path' => $module);
-      // Include the module name itself in the array.
-      $search_hooks[$module]['module'] = $module;
-    }
-  }
-
-  if ($all) {
-    return $search_hooks;
-  }
-
-  $active = variable_get('search_active_modules', array('node', 'user'));
-  return array_intersect_key($search_hooks, array_flip($active));
-}
-
-/**
- * Returns information about the default search module.
- *
- * @return
- *    The search_get_info() array element for the default search module, if any.
- */
-function search_get_default_module_info() {
-  $info = search_get_info();
-  $default = variable_get('search_default_module', 'node');
-  if (isset($info[$default])) {
-    return $info[$default];
-  }
-  // The variable setting does not match any active module, so just return
-  // the info for the first active module (if any).
-  return reset($info);
-}
-
-/**
- * Access callback for search tabs.
- */
-function _search_menu_access($name) {
-  return user_access('search content') && (!function_exists($name . '_search_access') || module_invoke($name, 'search_access'));
-}
-
-/**
- * Clears a part of or the entire search index.
- *
- * @param $sid
- *   (optional) The ID of the item to remove from the search index. If
- *   specified, $module must also be given. Omit both $sid and $module to clear
- *   the entire search index.
- * @param $module
- *   (optional) The machine-readable name of the module for the item to remove
- *   from the search index.
- */
-function search_reindex($sid = NULL, $module = NULL, $reindex = FALSE) {
-  if ($module == NULL && $sid == NULL) {
-    module_invoke_all('search_reset');
-  }
-  else {
-    db_delete('search_dataset')
-      ->condition('sid', $sid)
-      ->condition('type', $module)
-      ->execute();
-    db_delete('search_index')
-      ->condition('sid', $sid)
-      ->condition('type', $module)
-      ->execute();
-    // Don't remove links if re-indexing.
-    if (!$reindex) {
-      db_delete('search_node_links')
-        ->condition('sid', $sid)
-        ->condition('type', $module)
-        ->execute();
-    }
-  }
-}
-
-/**
- * Marks a word as "dirty" (changed), or retrieves the list of dirty words.
- *
- * This is used during indexing (cron). Words that are dirty have outdated
- * total counts in the search_total table, and need to be recounted.
- */
-function search_dirty($word = NULL) {
-  $dirty = &drupal_static(__FUNCTION__, array());
-  if ($word !== NULL) {
-    $dirty[$word] = TRUE;
-  }
-  else {
-    return $dirty;
-  }
-}
-
-/**
- * Implements hook_cron().
- *
- * Fires hook_update_index() in all modules and cleans up dirty words.
- *
- * @see search_dirty()
- */
-function search_cron() {
-  // We register a shutdown function to ensure that search_total is always up
-  // to date.
-  drupal_register_shutdown_function('search_update_totals');
-
-  foreach (variable_get('search_active_modules', array('node', 'user')) as $module) {
-    // Update word index
-    module_invoke($module, 'update_index');
-  }
-}
-
-/**
- * Updates the {search_total} database table.
- *
- * This function is called on shutdown to ensure that {search_total} is always
- * up to date (even if cron times out or otherwise fails).
- */
-function search_update_totals() {
-  // Update word IDF (Inverse Document Frequency) counts for new/changed words.
-  foreach (search_dirty() as $word => $dummy) {
-    // Get total count
-    $total = db_query("SELECT SUM(score) FROM {search_index} WHERE word = :word", array(':word' => $word), array('target' => 'slave'))->fetchField();
-    // Apply Zipf's law to equalize the probability distribution.
-    $total = log10(1 + 1/(max(1, $total)));
-    db_merge('search_total')
-      ->key(array('word' => $word))
-      ->fields(array('count' => $total))
-      ->execute();
-  }
-  // Find words that were deleted from search_index, but are still in
-  // search_total. We use a LEFT JOIN between the two tables and keep only the
-  // rows which fail to join.
-  $result = db_query("SELECT t.word AS realword, i.word FROM {search_total} t LEFT JOIN {search_index} i ON t.word = i.word WHERE i.word IS NULL", array(), array('target' => 'slave'));
-  $or = db_or();
-  foreach ($result as $word) {
-    $or->condition('word', $word->realword);
-  }
-  if (count($or) > 0) {
-    db_delete('search_total')
-      ->condition($or)
-      ->execute();
-  }
-}
-
-/**
- * Simplifies a string according to indexing rules.
- *
- * @param $text
- *   Text to simplify.
- *
- * @return
- *   Simplified text.
- *
- * @see hook_search_preprocess()
- */
-function search_simplify($text) {
-  // Decode entities to UTF-8
-  $text = decode_entities($text);
-
-  // Lowercase
-  $text = drupal_strtolower($text);
-
-  // Call an external processor for word handling.
-  search_invoke_preprocess($text);
-
-  // Simple CJK handling
-  if (variable_get('overlap_cjk', TRUE)) {
-    $text = preg_replace_callback('/[' . PREG_CLASS_CJK . ']+/u', 'search_expand_cjk', $text);
-  }
-
-  // To improve searching for numerical data such as dates, IP addresses
-  // or version numbers, we consider a group of numerical characters
-  // separated only by punctuation characters to be one piece.
-  // This also means that searching for e.g. '20/03/1984' also returns
-  // results with '20-03-1984' in them.
-  // Readable regexp: ([number]+)[punctuation]+(?=[number])
-  $text = preg_replace('/([' . PREG_CLASS_NUMBERS . ']+)[' . PREG_CLASS_PUNCTUATION . ']+(?=[' . PREG_CLASS_NUMBERS . '])/u', '\1', $text);
-
-  // Multiple dot and dash groups are word boundaries and replaced with space.
-  // No need to use the unicode modifer here because 0-127 ASCII characters
-  // can't match higher UTF-8 characters as the leftmost bit of those are 1.
-  $text = preg_replace('/[.-]{2,}/', ' ', $text);
-
-  // The dot, underscore and dash are simply removed. This allows meaningful
-  // search behavior with acronyms and URLs. See unicode note directly above.
-  $text = preg_replace('/[._-]+/', '', $text);
-
-  // With the exception of the rules above, we consider all punctuation,
-  // marks, spacers, etc, to be a word boundary.
-  $text = preg_replace('/[' . PREG_CLASS_UNICODE_WORD_BOUNDARY . ']+/u', ' ', $text);
-
-  // Truncate everything to 50 characters.
-  $words = explode(' ', $text);
-  array_walk($words, '_search_index_truncate');
-  $text = implode(' ', $words);
-
-  return $text;
-}
-
-/**
- * Splits CJK (Chinese, Japanese, Korean) text into tokens.
- *
- * The Search module matches exact words, where a word is defined to be a
- * sequence of characters delimited by spaces or punctuation. CJK languages are
- * written in long strings of characters, though, not split up into words. So
- * in order to allow search matching, we split up CJK text into tokens
- * consisting of consecutive, overlapping sequences of characters whose length
- * is equal to the 'minimum_word_size' variable. This tokenizing is only done if
- * the 'overlap_cjk' variable is TRUE.
- *
- * @param $matches
- *   This function is a callback for preg_replace_callback(), which is called
- *   from search_simplify(). So, $matches is an array of regular expression
- *   matches, which means that $matches[0] contains the matched text -- a string
- *   of CJK characters to tokenize.
- *
- * @return
- *   Tokenized text, starting and ending with a space character.
- */
-function search_expand_cjk($matches) {
-  $min = variable_get('minimum_word_size', 3);
-  $str = $matches[0];
-  $length = drupal_strlen($str);
-  // If the text is shorter than the minimum word size, don't tokenize it.
-  if ($length <= $min) {
-    return ' ' . $str . ' ';
-  }
-  $tokens = ' ';
-  // Build a FIFO queue of characters.
-  $chars = array();
-  for ($i = 0; $i < $length; $i++) {
-    // Add the next character off the beginning of the string to the queue.
-    $current = drupal_substr($str, 0, 1);
-    $str = substr($str, strlen($current));
-    $chars[] = $current;
-    if ($i >= $min - 1) {
-      // Make a token of $min characters, and add it to the token string.
-      $tokens .= implode('', $chars) . ' ';
-      // Shift out the first character in the queue.
-      array_shift($chars);
-    }
-  }
-  return $tokens;
-}
-
-/**
- * Simplifies and splits a string into tokens for indexing.
- */
-function search_index_split($text) {
-  $last = &drupal_static(__FUNCTION__);
-  $lastsplit = &drupal_static(__FUNCTION__ . ':lastsplit');
-
-  if ($last == $text) {
-    return $lastsplit;
-  }
-  // Process words
-  $text = search_simplify($text);
-  $words = explode(' ', $text);
-
-  // Save last keyword result
-  $last = $text;
-  $lastsplit = $words;
-
-  return $words;
-}
-
-/**
- * Helper function for array_walk in search_index_split.
- */
-function _search_index_truncate(&$text) {
-  if (is_numeric($text)) {
-    $text = ltrim($text, '0');
-  }
-  $text = truncate_utf8($text, 50);
-}
-
-/**
- * Invokes hook_search_preprocess() in modules.
- */
-function search_invoke_preprocess(&$text) {
-  foreach (module_implements('search_preprocess') as $module) {
-    $text = module_invoke($module, 'search_preprocess', $text);
-  }
-}
-
-/**
- * Update the full-text search index for a particular item.
- *
- * @param $sid
- *   An ID number identifying this particular item (e.g., node ID).
- * @param $module
- *   The machine-readable name of the module that this item comes from (a module
- *   that implements hook_search_info()).
- * @param $text
- *   The content of this item. Must be a piece of HTML or plain text.
- *
- * @ingroup search
- */
-function search_index($sid, $module, $text) {
-  $minimum_word_size = variable_get('minimum_word_size', 3);
-
-  // Link matching
-  global $base_url;
-  $node_regexp = '@href=[\'"]?(?:' . preg_quote($base_url, '@') . '/|' . preg_quote(base_path(), '@') . ')(?:\?q=)?/?((?![a-z]+:)[^\'">]+)[\'">]@i';
-
-  // Multipliers for scores of words inside certain HTML tags. The weights are stored
-  // in a variable so that modules can overwrite the default weights.
-  // Note: 'a' must be included for link ranking to work.
-  $tags = variable_get('search_tag_weights', array(
-    'h1' => 25,
-    'h2' => 18,
-    'h3' => 15,
-    'h4' => 12,
-    'h5' => 9,
-    'h6' => 6,
-    'u' => 3,
-    'b' => 3,
-    'i' => 3,
-    'strong' => 3,
-    'em' => 3,
-    'a' => 10));
-
-  // Strip off all ignored tags to speed up processing, but insert space before/after
-  // them to keep word boundaries.
-  $text = str_replace(array('<', '>'), array(' <', '> '), $text);
-  $text = strip_tags($text, '<' . implode('><', array_keys($tags)) . '>');
-
-  // Split HTML tags from plain text.
-  $split = preg_split('/\s*<([^>]+?)>\s*/', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
-  // Note: PHP ensures the array consists of alternating delimiters and literals
-  // and begins and ends with a literal (inserting $null as required).
-
-  $tag = FALSE; // Odd/even counter. Tag or no tag.
-  $link = FALSE; // State variable for link analyzer
-  $score = 1; // Starting score per word
-  $accum = ' '; // Accumulator for cleaned up data
-  $tagstack = array(); // Stack with open tags
-  $tagwords = 0; // Counter for consecutive words
-  $focus = 1; // Focus state
-
-  $results = array(0 => array()); // Accumulator for words for index
-
-  foreach ($split as $value) {
-    if ($tag) {
-      // Increase or decrease score per word based on tag
-      list($tagname) = explode(' ', $value, 2);
-      $tagname = drupal_strtolower($tagname);
-      // Closing or opening tag?
-      if ($tagname[0] == '/') {
-        $tagname = substr($tagname, 1);
-        // If we encounter unexpected tags, reset score to avoid incorrect boosting.
-        if (!count($tagstack) || $tagstack[0] != $tagname) {
-          $tagstack = array();
-          $score = 1;
-        }
-        else {
-          // Remove from tag stack and decrement score
-          $score = max(1, $score - $tags[array_shift($tagstack)]);
-        }
-        if ($tagname == 'a') {
-          $link = FALSE;
-        }
-      }
-      else {
-        if (isset($tagstack[0]) && $tagstack[0] == $tagname) {
-          // None of the tags we look for make sense when nested identically.
-          // If they are, it's probably broken HTML.
-          $tagstack = array();
-          $score = 1;
-        }
-        else {
-          // Add to open tag stack and increment score
-          array_unshift($tagstack, $tagname);
-          $score += $tags[$tagname];
-        }
-        if ($tagname == 'a') {
-          // Check if link points to a node on this site
-          if (preg_match($node_regexp, $value, $match)) {
-            $path = drupal_get_normal_path($match[1]);
-            if (preg_match('!(?:node|book)/(?:view/)?([0-9]+)!i', $path, $match)) {
-              $linknid = $match[1];
-              if ($linknid > 0) {
-                $node = db_query('SELECT title, nid, vid FROM {node} WHERE nid = :nid', array(':nid' => $linknid), array('target' => 'slave'))->fetchObject();
-                $link = TRUE;
-                $linktitle = $node->title;
-              }
-            }
-          }
-        }
-      }
-      // A tag change occurred, reset counter.
-      $tagwords = 0;
-    }
-    else {
-      // Note: use of PREG_SPLIT_DELIM_CAPTURE above will introduce empty values
-      if ($value != '') {
-        if ($link) {
-          // Check to see if the node link text is its URL. If so, we use the target node title instead.
-          if (preg_match('!^https?://!i', $value)) {
-            $value = $linktitle;
-          }
-        }
-        $words = search_index_split($value);
-        foreach ($words as $word) {
-          // Add word to accumulator
-          $accum .= $word . ' ';
-          // Check wordlength
-          if (is_numeric($word) || drupal_strlen($word) >= $minimum_word_size) {
-            // Links score mainly for the target.
-            if ($link) {
-              if (!isset($results[$linknid])) {
-                $results[$linknid] = array();
-              }
-              $results[$linknid][] = $word;
-              // Reduce score of the link caption in the source.
-              $focus *= 0.2;
-            }
-            // Fall-through
-            if (!isset($results[0][$word])) {
-              $results[0][$word] = 0;
-            }
-            $results[0][$word] += $score * $focus;
-
-            // Focus is a decaying value in terms of the amount of unique words up to this point.
-            // From 100 words and more, it decays, to e.g. 0.5 at 500 words and 0.3 at 1000 words.
-            $focus = min(1, .01 + 3.5 / (2 + count($results[0]) * .015));
-          }
-          $tagwords++;
-          // Too many words inside a single tag probably mean a tag was accidentally left open.
-          if (count($tagstack) && $tagwords >= 15) {
-            $tagstack = array();
-            $score = 1;
-          }
-        }
-      }
-    }
-    $tag = !$tag;
-  }
-
-  search_reindex($sid, $module, TRUE);
-
-  // Insert cleaned up data into dataset
-  db_insert('search_dataset')
-    ->fields(array(
-      'sid' => $sid,
-      'type' => $module,
-      'data' => $accum,
-      'reindex' => 0,
-    ))
-    ->execute();
-
-  // Insert results into search index
-  foreach ($results[0] as $word => $score) {
-    // If a word already exists in the database, its score gets increased
-    // appropriately. If not, we create a new record with the appropriate
-    // starting score.
-    db_merge('search_index')
-      ->key(array(
-        'word' => $word,
-        'sid' => $sid,
-        'type' => $module,
-      ))
-      ->fields(array('score' => $score))
-      ->expression('score', 'score + :score', array(':score' => $score))
-      ->execute();
-    search_dirty($word);
-  }
-  unset($results[0]);
-
-  // Get all previous links from this item.
-  $result = db_query("SELECT nid, caption FROM {search_node_links} WHERE sid = :sid AND type = :type", array(
-    ':sid' => $sid,
-    ':type' => $module
-  ), array('target' => 'slave'));
-  $links = array();
-  foreach ($result as $link) {
-    $links[$link->nid] = $link->caption;
-  }
-
-  // Now store links to nodes.
-  foreach ($results as $nid => $words) {
-    $caption = implode(' ', $words);
-    if (isset($links[$nid])) {
-      if ($links[$nid] != $caption) {
-        // Update the existing link and mark the node for reindexing.
-        db_update('search_node_links')
-          ->fields(array('caption' => $caption))
-          ->condition('sid', $sid)
-          ->condition('type', $module)
-          ->condition('nid', $nid)
-          ->execute();
-        search_touch_node($nid);
-      }
-      // Unset the link to mark it as processed.
-      unset($links[$nid]);
-    }
-    elseif ($sid != $nid || $module != 'node') {
-      // Insert the existing link and mark the node for reindexing, but don't
-      // reindex if this is a link in a node pointing to itself.
-      db_insert('search_node_links')
-        ->fields(array(
-          'caption' => $caption,
-          'sid' => $sid,
-          'type' => $module,
-          'nid' => $nid,
-        ))
-        ->execute();
-      search_touch_node($nid);
-    }
-  }
-  // Any left-over links in $links no longer exist. Delete them and mark the nodes for reindexing.
-  foreach ($links as $nid => $caption) {
-    db_delete('search_node_links')
-      ->condition('sid', $sid)
-      ->condition('type', $module)
-      ->condition('nid', $nid)
-      ->execute();
-    search_touch_node($nid);
-  }
-}
-
-/**
- * Changes a node's changed timestamp to 'now' to force reindexing.
- *
- * @param $nid
- *   The node ID of the node that needs reindexing.
- */
-function search_touch_node($nid) {
-  db_update('search_dataset')
-    ->fields(array('reindex' => REQUEST_TIME))
-    ->condition('type', 'node')
-    ->condition('sid', $nid)
-    ->execute();
-}
-
-/**
- * Implements hook_node_update_index().
- */
-function search_node_update_index($node) {
-  // Transplant links to a node into the target node.
-  $result = db_query("SELECT caption FROM {search_node_links} WHERE nid = :nid", array(':nid' => $node->nid), array('target' => 'slave'));
-  $output = array();
-  foreach ($result as $link) {
-    $output[] = $link->caption;
-  }
-  if (count($output)) {
-    return '<a>(' . implode(', ', $output) . ')</a>';
-  }
-}
-
-/**
- * Implements hook_node_update().
- */
-function search_node_update($node) {
-  // Reindex the node when it is updated. The node is automatically indexed
-  // when it is added, simply by being added to the node table.
-  search_touch_node($node->nid);
-}
-
-/**
- * Implements hook_comment_insert().
- */
-function search_comment_insert($comment) {
-  // Reindex the node when comments are added.
-  search_touch_node($comment->nid);
-}
-
-/**
- * Implements hook_comment_update().
- */
-function search_comment_update($comment) {
-  // Reindex the node when comments are changed.
-  search_touch_node($comment->nid);
-}
-
-/**
- * Implements hook_comment_delete().
- */
-function search_comment_delete($comment) {
-  // Reindex the node when comments are deleted.
-  search_touch_node($comment->nid);
-}
-
-/**
- * Implements hook_comment_publish().
- */
-function search_comment_publish($comment) {
-  // Reindex the node when comments are published.
-  search_touch_node($comment->nid);
-}
-
-/**
- * Implements hook_comment_unpublish().
- */
-function search_comment_unpublish($comment) {
-  // Reindex the node when comments are unpublished.
-  search_touch_node($comment->nid);
-}
-
-/**
- * Extracts a module-specific search option from a search expression.
- *
- * Search options are added using search_expression_insert(), and retrieved
- * using search_expression_extract(). They take the form option:value, and
- * are added to the ordinary keywords in the search expression.
- *
- * @param $expression
- *   The search expression to extract from.
- * @param $option
- *   The name of the option to retrieve from the search expression.
- *
- * @return
- *   The value previously stored in the search expression for option $option,
- *   if any. Trailing spaces in values will not be included.
- */
-function search_expression_extract($expression, $option) {
-  if (preg_match('/(^| )' . $option . ':([^ ]*)( |$)/i', $expression, $matches)) {
-    return $matches[2];
-  }
-}
-
-/**
- * Adds a module-specific search option to a search expression.
- *
- * Search options are added using search_expression_insert(), and retrieved
- * using search_expression_extract(). They take the form option:value, and
- * are added to the ordinary keywords in the search expression.
- *
- * @param $expression
- *   The search expression to add to.
- * @param $option
- *   The name of the option to add to the search expression.
- * @param $value
- *   The value to add for the option. If present, it will replace any previous
- *   value added for the option. Cannot contain any spaces or | characters, as
- *   these are used as delimiters. If you want to add a blank value $option: to
- *   the search expression, pass in an empty string or a string that is composed
- *   of only spaces. To clear a previously-stored option without adding a
- *   replacement, pass in NULL for $value or omit.
- *
- * @return
- *   $expression, with any previous value for this option removed, and a new
- *   $option:$value pair added if $value was provided.
- */
-function search_expression_insert($expression, $option, $value = NULL) {
-  // Remove any previous values stored with $option.
-  $expression = trim(preg_replace('/(^| )' . $option . ':[^ ]*/i', '', $expression));
-
-  // Set new value, if provided.
-  if (isset($value)) {
-    $expression .= ' ' . $option . ':' . trim($value);
-  }
-  return $expression;
-}
-
-/**
- * @defgroup search Search interface
- * @{
- * The Drupal search interface manages a global search mechanism.
- *
- * Modules may plug into this system to provide searches of different types of
- * data. Most of the system is handled by search.module, so this must be enabled
- * for all of the search features to work.
- *
- * There are three ways to interact with the search system:
- * - Specifically for searching nodes, you can implement
- *   hook_node_update_index() and hook_node_search_result(). However, note that
- *   the search system already indexes all visible output of a node; i.e.,
- *   everything displayed normally by hook_view() and hook_node_view(). This is
- *   usually sufficient. You should only use this mechanism if you want
- *   additional, non-visible data to be indexed.
- * - Implement hook_search_info(). This will create a search tab for your module
- *   on the /search page with a simple keyword search form. You will also need
- *   to implement hook_search_execute() to perform the search.
- * - Implement hook_update_index(). This allows your module to use Drupal's
- *   HTML indexing mechanism for searching full text efficiently.
- *
- * If your module needs to provide a more complicated search form, then you need
- * to implement it yourself without hook_search_info(). In that case, you should
- * define it as a local task (tab) under the /search page (e.g. /search/mymodule)
- * so that users can easily find it.
- */
-
-/**
- * Builds a search form.
- *
- * @param $action
- *   Form action. Defaults to "search/$path", where $path is the search path
- *   associated with the module in its hook_search_info(). This will be
- *   run through url().
- * @param $keys
- *   The search string entered by the user, containing keywords for the search.
- * @param $module
- *   The search module to render the form for: a module that implements
- *   hook_search_info(). If not supplied, the default search module is used.
- * @param $prompt
- *   Label for the keywords field. Defaults to t('Enter your keywords') if NULL.
- *   Supply '' to omit.
- *
- * @return
- *   A Form API array for the search form.
- */
-function search_form($form, &$form_state, $action = '', $keys = '', $module = NULL, $prompt = NULL) {
-  $module_info = FALSE;
-  if (!$module) {
-    $module_info = search_get_default_module_info();
-  }
-  else {
-    $info = search_get_info();
-    $module_info = isset($info[$module]) ? $info[$module] : FALSE;
-  }
-
-  // Sanity check.
-  if (!$module_info) {
-    form_set_error(NULL, t('Search is currently disabled.'), 'error');
-    return $form;
-  }
-
-  if (!$action) {
-    $action = 'search/' . $module_info['path'];
-  }
-  if (!isset($prompt)) {
-    $prompt = t('Enter your keywords');
-  }
-
-  $form['#action'] = url($action);
-  // Record the $action for later use in redirecting.
-  $form_state['action'] = $action;
-  $form['#attributes']['class'][] = 'search-form';
-  $form['module'] = array('#type' => 'value', '#value' => $module);
-  $form['basic'] = array('#type' => 'container', '#attributes' => array('class' => array('container-inline')));
-  $form['basic']['keys'] = array(
-    '#type' => 'textfield',
-    '#title' => $prompt,
-    '#default_value' => $keys,
-    '#size' => $prompt ? 40 : 20,
-    '#maxlength' => 255,
-  );
-  // processed_keys is used to coordinate keyword passing between other forms
-  // that hook into the basic search form.
-  $form['basic']['processed_keys'] = array('#type' => 'value', '#value' => '');
-  $form['basic']['submit'] = array('#type' => 'submit', '#value' => t('Search'));
-
-  return $form;
-}
-
-/**
- * Form builder; Output a search form for the search block's search box.
- *
- * @ingroup forms
- * @see search_box_form_submit()
- * @see search-block-form.tpl.php
- */
-function search_box($form, &$form_state, $form_id) {
-  $form[$form_id] = array(
-    '#type' => 'textfield',
-    '#title' => t('Search'),
-    '#title_display' => 'invisible',
-    '#size' => 15,
-    '#default_value' => '',
-    '#attributes' => array('title' => t('Enter the terms you wish to search for.')),
-  );
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Search'));
-  $form['#submit'][] = 'search_box_form_submit';
-
-  return $form;
-}
-
-/**
- * Process a block search form submission.
- */
-function search_box_form_submit($form, &$form_state) {
-  // The search form relies on control of the redirect destination for its
-  // functionality, so we override any static destination set in the request,
-  // for example by drupal_access_denied() or drupal_not_found()
-  // (see http://drupal.org/node/292565).
-  if (isset($_GET['destination'])) {
-    unset($_GET['destination']);
-  }
-
-  // Check to see if the form was submitted empty.
-  // If it is empty, display an error message.
-  // (This method is used instead of setting #required to TRUE for this field
-  // because that results in a confusing error message.  It would say a plain
-  // "field is required" because the search keywords field has no title.
-  // The error message would also complain about a missing #title field.)
-  if ($form_state['values']['search_block_form'] == '') {
-    form_set_error('keys', t('Please enter some keywords.'));
-  }
-
-  $form_id = $form['form_id']['#value'];
-  $info = search_get_default_module_info();
-  if ($info) {
-    $form_state['redirect'] = 'search/' . $info['path'] . '/' . trim($form_state['values'][$form_id]);
-  }
-  else {
-    form_set_error(NULL, t('Search is currently disabled.'), 'error');
-  }
-}
-
-/**
- * Process variables for search-block-form.tpl.php.
- *
- * The $variables array contains the following arguments:
- * - $form
- *
- * @see search-block-form.tpl.php
- */
-function template_preprocess_search_block_form(&$variables) {
-  $variables['search'] = array();
-  $hidden = array();
-  // Provide variables named after form keys so themers can print each element independently.
-  foreach (element_children($variables['form']) as $key) {
-    $type = isset($variables['form'][$key]['#type']) ? $variables['form'][$key]['#type'] : '';
-    if ($type == 'hidden' || $type == 'token') {
-      $hidden[] = drupal_render($variables['form'][$key]);
-    }
-    else {
-      $variables['search'][$key] = drupal_render($variables['form'][$key]);
-    }
-  }
-  // Hidden form elements have no value to themers. No need for separation.
-  $variables['search']['hidden'] = implode($hidden);
-  // Collect all form elements to make it easier to print the whole form.
-  $variables['search_form'] = implode($variables['search']);
-}
-
-/**
- * Performs a search by calling hook_search_execute().
- *
- * @param $keys
- *   Keyword query to search on.
- * @param $module
- *   Search module to search.
- * @param $conditions
- *   Optional array of additional search conditions.
- *
- * @return
- *   Renderable array of search results. No return value if $keys are not
- *   supplied or if the given search module is not active.
- */
-function search_data($keys, $module, $conditions = NULL) {
-  if (module_hook($module, 'search_execute')) {
-    $results = module_invoke($module, 'search_execute', $keys, $conditions);
-    if (module_hook($module, 'search_page')) {
-      return module_invoke($module, 'search_page', $results);
-    }
-    else {
-      return array(
-        '#theme' => 'search_results',
-        '#results' => $results,
-        '#module' => $module,
-      );
-    }
-  }
-}
-
-/**
- * Returns snippets from a piece of text, with certain keywords highlighted.
- * Used for formatting search results.
- *
- * @param $keys
- *   A string containing a search query.
- *
- * @param $text
- *   The text to extract fragments from.
- *
- * @return
- *   A string containing HTML for the excerpt.
- */
-function search_excerpt($keys, $text) {
-  // We highlight around non-indexable or CJK characters.
-  $boundary = '(?:(?<=[' . PREG_CLASS_UNICODE_WORD_BOUNDARY . PREG_CLASS_CJK . '])|(?=[' . PREG_CLASS_UNICODE_WORD_BOUNDARY . PREG_CLASS_CJK . ']))';
-
-  // Extract positive keywords and phrases
-  preg_match_all('/ ("([^"]+)"|(?!OR)([^" ]+))/', ' ' . $keys, $matches);
-  $keys = array_merge($matches[2], $matches[3]);
-
-  // Prepare text by stripping HTML tags and decoding HTML entities.
-  $text = strip_tags(str_replace(array('<', '>'), array(' <', '> '), $text));
-  $text = decode_entities($text);
-
-  // Slash-escape quotes in the search keyword string.
-  array_walk($keys, '_search_excerpt_replace');
-  $workkeys = $keys;
-
-  // Extract fragments around keywords.
-  // First we collect ranges of text around each keyword, starting/ending
-  // at spaces, trying to get to 256 characters.
-  // If the sum of all fragments is too short, we look for second occurrences.
-  $ranges = array();
-  $included = array();
-  $foundkeys = array();
-  $length = 0;
-  while ($length < 256 && count($workkeys)) {
-    foreach ($workkeys as $k => $key) {
-      if (strlen($key) == 0) {
-        unset($workkeys[$k]);
-        unset($keys[$k]);
-        continue;
-      }
-      if ($length >= 256) {
-        break;
-      }
-      // Remember occurrence of key so we can skip over it if more occurrences
-      // are desired.
-      if (!isset($included[$key])) {
-        $included[$key] = 0;
-      }
-      // Locate a keyword (position $p, always >0 because $text starts with a
-      // space). First try bare keyword, but if that doesn't work, try to find a
-      // derived form from search_simplify().
-      $p = 0;
-      if (preg_match('/' . $boundary . $key . $boundary . '/iu', $text, $match, PREG_OFFSET_CAPTURE, $included[$key])) {
-        $p = $match[0][1];
-      }
-      else {
-        $info = search_simplify_excerpt_match($key, $text, $included[$key], $boundary);
-        if ($info['where']) {
-          $p = $info['where'];
-          if ($info['keyword']) {
-            $foundkeys[] = $info['keyword'];
-          }
-        }
-      }
-      // Now locate a space in front (position $q) and behind it (position $s),
-      // leaving about 60 characters extra before and after for context.
-      // Note that a space was added to the front and end of $text above.
-      if ($p) {
-        if (($q = strpos(' ' . $text, ' ', max(0, $p - 61))) !== FALSE) {
-          $end = substr($text . ' ', $p, 80);
-          if (($s = strrpos($end, ' ')) !== FALSE) {
-            // Account for the added spaces.
-            $q = max($q - 1, 0);
-            $s = min($s, strlen($end) - 1);
-            $ranges[$q] = $p + $s;
-            $length += $p + $s - $q;
-            $included[$key] = $p + 1;
-          }
-          else {
-            unset($workkeys[$k]);
-          }
-        }
-        else {
-          unset($workkeys[$k]);
-        }
-      }
-      else {
-        unset($workkeys[$k]);
-      }
-    }
-  }
-
-  if (count($ranges) == 0) {
-    // We didn't find any keyword matches, so just return the first part of the
-    // text. We also need to re-encode any HTML special characters that we
-    // entity-decoded above.
-    return check_plain(truncate_utf8($text, 256, TRUE, TRUE));
-  }
-
-  // Sort the text ranges by starting position.
-  ksort($ranges);
-
-  // Now we collapse overlapping text ranges into one. The sorting makes it O(n).
-  $newranges = array();
-  foreach ($ranges as $from2 => $to2) {
-    if (!isset($from1)) {
-      $from1 = $from2;
-      $to1 = $to2;
-      continue;
-    }
-    if ($from2 <= $to1) {
-      $to1 = max($to1, $to2);
-    }
-    else {
-      $newranges[$from1] = $to1;
-      $from1 = $from2;
-      $to1 = $to2;
-    }
-  }
-  $newranges[$from1] = $to1;
-
-  // Fetch text
-  $out = array();
-  foreach ($newranges as $from => $to) {
-    $out[] = substr($text, $from, $to - $from);
-  }
-
-  // Let translators have the ... separator text as one chunk.
-  $dots = explode('!excerpt', t('... !excerpt ... !excerpt ...'));
-
-  $text = (isset($newranges[0]) ? '' : $dots[0]) . implode($dots[1], $out) . $dots[2];
-  $text = check_plain($text);
-
-  // Slash-escape quotes in keys found in a derived form and merge with original keys.
-  array_walk($foundkeys, '_search_excerpt_replace');
-  $keys = array_merge($keys, $foundkeys);
-
-  // Highlight keywords. Must be done at once to prevent conflicts ('strong' and '<strong>').
-  $text = preg_replace('/' . $boundary . '(' . implode('|', $keys) . ')' . $boundary . '/iu', '<strong>\0</strong>', $text);
-  return $text;
-}
-
-/**
- * @} End of "defgroup search".
- */
-
-/**
- * Helper function for array_walk() in search_excerpt().
- */
-function _search_excerpt_replace(&$text) {
-  $text = preg_quote($text, '/');
-}
-
-/**
- * Find words in the original text that matched via search_simplify().
- *
- * This is called in search_excerpt() if an exact match is not found in the
- * text, so that we can find the derived form that matches.
- *
- * @param $key
- *   The keyword to find.
- * @param $text
- *   The text to search for the keyword.
- * @param $offset
- *   Offset position in $text to start searching at.
- * @param $boundary
- *   Text to include in a regular expression that will match a word boundary.
- *
- * @return
- *   FALSE if no match is found. If a match is found, return an associative
- *   array with element 'where' giving the position of the match, and element
- *   'keyword' giving the actual word found in the text at that position.
- */
-function search_simplify_excerpt_match($key, $text, $offset, $boundary) {
-  $pos = NULL;
-  $simplified_key = search_simplify($key);
-  $simplified_text = search_simplify($text);
-
-  // Return immediately if simplified key or text are empty.
-  if (!$simplified_key || !$simplified_text) {
-    return FALSE;
-  }
-
-  // Check if we have a match after simplification in the text.
-  if (!preg_match('/' . $boundary . $simplified_key . $boundary . '/iu', $simplified_text, $match, PREG_OFFSET_CAPTURE, $offset)) {
-    return FALSE;
-  }
-
-  // If we get here, we have a match. Now find the exact location of the match
-  // and the original text that matched. Start by splitting up the text by all
-  // potential starting points of the matching text and iterating through them.
-  $split = array_filter(preg_split('/' . $boundary . '/iu', $text, -1, PREG_SPLIT_OFFSET_CAPTURE), '_search_excerpt_match_filter');
-  foreach ($split as $value) {
-    // Skip starting points before the offset.
-    if ($value[1] < $offset) {
-      continue;
-    }
-
-    // Check a window of 80 characters after the starting point for a match,
-    // based on the size of the excerpt window.
-    $window = substr($text, $value[1], 80);
-    $simplified_window = search_simplify($window);
-    if (strpos($simplified_window, $simplified_key) === 0) {
-      // We have a match in this window. Store the position of the match.
-      $pos = $value[1];
-      // Iterate through the text in the window until we find the full original
-      // matching text.
-      $length = strlen($window);
-      for ($i = 1; $i <= $length; $i++) {
-        $keyfound = substr($text, $value[1], $i);
-        if ($simplified_key == search_simplify($keyfound)) {
-          break;
-        }
-      }
-      break;
-    }
-  }
-
-  return $pos ? array('where' => $pos, 'keyword' => $keyfound) : FALSE;
-}
-
-/**
- * Helper function for array_filter() in search_search_excerpt_match().
- */
-function _search_excerpt_match_filter($var) {
-  return strlen(trim($var[0]));
-}
-
-/**
- * Implements hook_forms().
- */
-function search_forms() {
-  $forms['search_block_form']= array(
-    'callback' => 'search_box',
-    'callback arguments' => array('search_block_form'),
-  );
-  return $forms;
-}
-
diff --git a/modules/search/search.pages.inc b/modules/search/search.pages.inc
deleted file mode 100644
index 9dd00a6..0000000
--- a/modules/search/search.pages.inc
+++ /dev/null
@@ -1,158 +0,0 @@
-<?php
-
-/**
- * @file
- * User page callbacks for the search module.
- */
-
-/**
- * Menu callback; presents the search form and/or search results.
- *
- * @param $module
- *   Search module to use for the search.
- * @param $keys
- *   Keywords to use for the search.
- */
-function search_view($module = NULL, $keys = '') {
-  $info = FALSE;
-  $keys = trim($keys);
-  // Also try to pull search keywords out of the $_REQUEST variable to
-  // support old GET format of searches for existing links.
-  if (!$keys && !empty($_REQUEST['keys'])) {
-    $keys = trim($_REQUEST['keys']);
-  }
-
-  if (!empty($module)) {
-    $active_module_info = search_get_info();
-    if (isset($active_module_info[$module])) {
-      $info = $active_module_info[$module];
-    }
-  }
-
-  if (empty($info)) {
-    // No path or invalid path: find the default module. Note that if there
-    // are no enabled search modules, this function should never be called,
-    // since hook_menu() would not have defined any search paths.
-    $info = search_get_default_module_info();
-    // Redirect from bare /search or an invalid path to the default search path.
-    $path = 'search/' . $info['path'];
-    if ($keys) {
-      $path .= '/' . $keys;
-    }
-    drupal_goto($path);
-  }
-
-  // Default results output is an empty string.
-  $results = array('#markup' => '');
-  // Process the search form. Note that if there is $_POST data,
-  // search_form_submit() will cause a redirect to search/[module path]/[keys],
-  // which will get us back to this page callback. In other words, the search
-  // form submits with POST but redirects to GET. This way we can keep
-  // the search query URL clean as a whistle.
-  if (empty($_POST['form_id']) || $_POST['form_id'] != 'search_form') {
-    $conditions =  NULL;
-    if (isset($info['conditions_callback']) && function_exists($info['conditions_callback'])) {
-      // Build an optional array of more search conditions.
-      $conditions = call_user_func($info['conditions_callback'], $keys);
-    }
-    // Only search if there are keywords or non-empty conditions.
-    if ($keys || !empty($conditions)) {
-      // Log the search keys.
-      watchdog('search', 'Searched %type for %keys.', array('%keys' => $keys, '%type' => $info['title']), WATCHDOG_NOTICE, l(t('results'), 'search/' . $info['path'] . '/' . $keys));
-
-      // Collect the search results.
-      $results = search_data($keys, $info['module'], $conditions);
-    }
-  }
-  // The form may be altered based on whether the search was run.
-  $build['search_form'] = drupal_get_form('search_form', NULL, $keys, $info['module']);
-  $build['search_results'] = $results;
-
-  return $build;
-}
-
-/**
- * Process variables for search-results.tpl.php.
- *
- * The $variables array contains the following arguments:
- * - $results: Search results array.
- * - $module: Module the search results came from (module implementing
- *   hook_search_info()).
- *
- * @see search-results.tpl.php
- */
-function template_preprocess_search_results(&$variables) {
-  $variables['search_results'] = '';
-  if (!empty($variables['module'])) {
-    $variables['module'] = check_plain($variables['module']);
-  }
-  foreach ($variables['results'] as $result) {
-    $variables['search_results'] .= theme('search_result', array('result' => $result, 'module' => $variables['module']));
-  }
-  $variables['pager'] = theme('pager', array('tags' => NULL));
-  $variables['theme_hook_suggestions'][] = 'search_results__' . $variables['module'];
-}
-
-/**
- * Process variables for search-result.tpl.php.
- *
- * The $variables array contains the following arguments:
- * - $result
- * - $module
- *
- * @see search-result.tpl.php
- */
-function template_preprocess_search_result(&$variables) {
-  global $language;
-
-  $result = $variables['result'];
-  $variables['url'] = check_url($result['link']);
-  $variables['title'] = check_plain($result['title']);
-  if (isset($result['language']) && $result['language'] != $language->language && $result['language'] != LANGUAGE_NONE) {
-    $variables['title_attributes_array']['xml:lang'] = $result['language'];
-    $variables['content_attributes_array']['xml:lang'] = $result['language'];
-  }
-
-  $info = array();
-  if (!empty($result['module'])) {
-    $info['module'] = check_plain($result['module']);
-  }
-  if (!empty($result['user'])) {
-    $info['user'] = $result['user'];
-  }
-  if (!empty($result['date'])) {
-    $info['date'] = format_date($result['date'], 'short');
-  }
-  if (isset($result['extra']) && is_array($result['extra'])) {
-    $info = array_merge($info, $result['extra']);
-  }
-  // Check for existence. User search does not include snippets.
-  $variables['snippet'] = isset($result['snippet']) ? $result['snippet'] : '';
-  // Provide separated and grouped meta information..
-  $variables['info_split'] = $info;
-  $variables['info'] = implode(' - ', $info);
-  $variables['theme_hook_suggestions'][] = 'search_result__' . $variables['module'];
-}
-
-/**
- * As the search form collates keys from other modules hooked in via
- * hook_form_alter, the validation takes place in _submit.
- * search_form_validate() is used solely to set the 'processed_keys' form
- * value for the basic search form.
- */
-function search_form_validate($form, &$form_state) {
-  form_set_value($form['basic']['processed_keys'], trim($form_state['values']['keys']), $form_state);
-}
-
-/**
- * Process a search form submission.
- */
-function search_form_submit($form, &$form_state) {
-  $keys = $form_state['values']['processed_keys'];
-  if ($keys == '') {
-    form_set_error('keys', t('Please enter some keywords.'));
-    // Fall through to the form redirect.
-  }
-
-  $form_state['redirect'] = $form_state['action'] . '/' . $keys;
-}
diff --git a/modules/search/tests/UnicodeTest.txt b/modules/search/tests/UnicodeTest.txt
deleted file mode 100644
index af8a65c..0000000
--- a/modules/search/tests/UnicodeTest.txt
+++ /dev/null
@@ -1,333 +0,0 @@
-
- !"#$%&'()*+,-./
-0123456789
-:;<=>?@
-ABCDEFGHIJKLMNOPQRSTUVWXYZ
-[\]^_`
-abcdefghijklmnopqrstuvwxyz
-{|}~ ¡¢£¤¥¦§¨©
-ª
-«¬­®¯°±
-²³
-´
-µ
-¶·¸
-¹º
-»
-¼½¾
-¿
-ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ
-×
-ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö
-÷
-øùúûüýþÿĀāĂăĄąĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıĲĳĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňŉŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſƀƁƂƃƄƅƆƇƈƉƊƋƌƍƎƏƐƑƒƓƔƕƖƗƘƙƚƛƜƝƞƟƠơƢƣƤƥƦƧƨƩƪƫƬƭƮƯưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿǀǁǂǃǄǅǆǇǈǉǊǋǌǍǎǏǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟǠǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯǰǱǲǳǴǵǶǷǸǹǺǻǼǽǾǿȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏȐȑȒȓȔȕȖȗȘșȚțȜȝȞȟȠȡȢȣȤȥȦȧȨȩȪȫȬȭȮȯȰȱȲȳȴȵȶȷȸȹȺȻȼȽȾȿɀɁɂɃɄɅɆɇɈɉɊɋɌɍɎɏɐɑɒɓɔɕɖɗɘəɚɛɜɝɞɟɠɡɢɣɤɥɦɧɨɩɪɫɬɭɮɯɰɱɲɳɴɵɶɷɸɹɺɻɼɽɾɿʀʁʂʃʄʅʆʇʈʉʊʋʌʍʎʏʐʑʒʓʔʕʖʗʘʙʚʛʜʝʞʟʠʡʢʣʤʥʦʧʨʩʪʫʬʭʮʯʰʱʲʳʴʵʶʷʸʹʺʻʼʽʾʿˀˁ
-˂˃˄˅
-ˆˇˈˉˊˋˌˍˎˏːˑ
-˒˓˔˕˖˗˘˙˚˛˜˝˞˟
-ˠˡˢˣˤ
-˥˦˧˨˩˪˫
-ˬ
-˭
-ˮ
-˯˰˱˲˳˴˵˶˷˸˹˺˻˼˽˾˿
-̴̵̶̷̸̡̢̧̨̛̖̗̘̙̜̝̞̟̠̣̤̥̦̩̪̫̬̭̮̯̰̱̲̳̹̺̻̼͇͈͉͍͎̀́̂̃̄̅̆̇̈̉̊̋̌̍̎̏̐̑̒̓̔̽̾̿̀́͂̓̈́͆͊͋͌̕̚ͅ͏͓͔͕͖͙͚͐͑͒͗͛ͣͤͥͦͧͨͩͪͫͬͭͮͯ͘͜͟͢͝͞͠͡ͰͱͲͳʹ
-͵
-Ͷͷͺͻͼͽ
-;΄΅
-Ά
-·
-ΈΉΊΌΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώϏϐϑϒϓϔϕϖϗϘϙϚϛϜϝϞϟϠϡϢϣϤϥϦϧϨϩϪϫϬϭϮϯϰϱϲϳϴϵ
-϶
-ϷϸϹϺϻϼϽϾϿЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяѐёђѓєѕіїјљњћќѝўџѠѡѢѣѤѥѦѧѨѩѪѫѬѭѮѯѰѱѲѳѴѵѶѷѸѹѺѻѼѽѾѿҀҁ
-҂
-҃҄҅҆҇҈҉ҊҋҌҍҎҏҐґҒғҔҕҖҗҘҙҚқҜҝҞҟҠҡҢңҤҥҦҧҨҩҪҫҬҭҮүҰұҲҳҴҵҶҷҸҹҺһҼҽҾҿӀӁӂӃӄӅӆӇӈӉӊӋӌӍӎӏӐӑӒӓӔӕӖӗӘәӚӛӜӝӞӟӠӡӢӣӤӥӦӧӨөӪӫӬӭӮӯӰӱӲӳӴӵӶӷӸӹӺӻӼӽӾӿԀԁԂԃԄԅԆԇԈԉԊԋԌԍԎԏԐԑԒԓԔԕԖԗԘԙԚԛԜԝԞԟԠԡԢԣԤԥԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿՀՁՂՃՄՅՆՇՈՉՊՋՌՍՎՏՐՑՒՓՔՕՖՙ
-՚՛՜՝՞՟
-աբգդեզէըթժիլխծկհձղճմյնշոչպջռսվտրցւփքօֆև
-։֊
-ְֱֲֳִֵֶַָֹֺֻּֽ֑֖֛֢֣֤֥֦֧֪֚֭֮֒֓֔֕֗֘֙֜֝֞֟֠֡֨֩֫֬֯
-־
-ֿ
-׀
-ׁׂ
-׃
-ׅׄ
-׆
-ׇאבגדהוזחטיךכלםמןנסעףפץצקרשתװױײ
-׳״؀؁؂؃؆؇؈؉؊؋،؍؎؏
-ؘؙؚؐؑؒؓؔؕؖؗ
-؛؞؟
-ءآأؤإئابةتثجحخدذرزسشصضطظعغػؼؽؾؿـفقكلمنهوىيًٌٍَُِّْٕٖٜٓٔٗ٘ٙٚٛٝٞ٠١٢٣٤٥٦٧٨٩
-٪٫٬٭
-ٮٯٰٱٲٳٴٵٶٷٸٹٺٻټٽپٿڀځڂڃڄڅچڇڈډڊڋڌڍڎڏڐڑڒړڔڕږڗژڙښڛڜڝڞڟڠڡڢڣڤڥڦڧڨکڪګڬڭڮگڰڱڲڳڴڵڶڷڸڹںڻڼڽھڿۀہۂۃۄۅۆۇۈۉۊۋیۍێۏېۑےۓ
-۔
-ەۖۗۘۙۚۛۜ
-۝
-۞ۣ۟۠ۡۢۤۥۦۧۨ
-۩
-۪ۭ۫۬ۮۯ۰۱۲۳۴۵۶۷۸۹ۺۻۼ
-۽۾
-ۿ
-܀܁܂܃܄܅܆܇܈܉܊܋܌܍܏
-ܐܑܒܓܔܕܖܗܘܙܚܛܜܝܞܟܠܡܢܣܤܥܦܧܨܩܪܫܬܭܮܯܱܴܷܸܹܻܼܾ݂݄݆݈ܰܲܳܵܶܺܽܿ݀݁݃݅݇݉݊ݍݎݏݐݑݒݓݔݕݖݗݘݙݚݛݜݝݞݟݠݡݢݣݤݥݦݧݨݩݪݫݬݭݮݯݰݱݲݳݴݵݶݷݸݹݺݻݼݽݾݿހށނރބޅކއވމފދތލގޏސޑޒޓޔޕޖޗޘޙޚޛޜޝޞޟޠޡޢޣޤޥަާިީުޫެޭޮޯްޱ߀߁߂߃߄߅߆߇߈߉ߊߋߌߍߎߏߐߑߒߓߔߕߖߗߘߙߚߛߜߝߞߟߠߡߢߣߤߥߦߧߨߩߪ߲߫߬߭߮߯߰߱߳ߴߵ
-߶߷߸߹
-ߺࠀࠁࠂࠃࠄࠅࠆࠇࠈࠉࠊࠋࠌࠍࠎࠏࠐࠑࠒࠓࠔࠕࠖࠗ࠘࠙ࠚࠛࠜࠝࠞࠟࠠࠡࠢࠣࠤࠥࠦࠧࠨࠩࠪࠫࠬ࠭
-࠰࠱࠲࠳࠴࠵࠶࠷࠸࠹࠺࠻࠼࠽࠾
-ऀँंःऄअआइईउऊऋऌऍऎएऐऑऒओऔकखगघङचछजझञटठडढणतथदधनऩपफबभमयरऱलळऴवशषसह़ऽािीुूृॄॅॆेैॉॊोौ्ॎॐ॒॑॓॔ॕक़ख़ग़ज़ड़ढ़फ़य़ॠॡॢॣ
-।॥
-०१२३४५६७८९
-॰
-ॱॲॹॺॻॼॽॾॿঁংঃঅআইঈউঊঋঌএঐওঔকখগঘঙচছজঝঞটঠডঢণতথদধনপফবভমযরলশষসহ়ঽািীুূৃৄেৈোৌ্ৎৗড়ঢ়য়ৠৡৢৣ০১২৩৪৫৬৭৮৯ৰৱ
-৲৳
-৴৵৶৷৸৹
-৺৻
-ਁਂਃਅਆਇਈਉਊਏਐਓਔਕਖਗਘਙਚਛਜਝਞਟਠਡਢਣਤਥਦਧਨਪਫਬਭਮਯਰਲਲ਼ਵਸ਼ਸਹ਼ਾਿੀੁੂੇੈੋੌ੍ੑਖ਼ਗ਼ਜ਼ੜਫ਼੦੧੨੩੪੫੬੭੮੯ੰੱੲੳੴੵઁંઃઅઆઇઈઉઊઋઌઍએઐઑઓઔકખગઘઙચછજઝઞટઠડઢણતથદધનપફબભમયરલળવશષસહ઼ઽાિીુૂૃૄૅેૈૉોૌ્ૐૠૡૢૣ૦૧૨૩૪૫૬૭૮૯
-૱
-ଁଂଃଅଆଇଈଉଊଋଌଏଐଓଔକଖଗଘଙଚଛଜଝଞଟଠଡଢଣତଥଦଧନପଫବଭମଯରଲଳଵଶଷସହ଼ଽାିୀୁୂୃୄେୈୋୌ୍ୖୗଡ଼ଢ଼ୟୠୡୢୣ୦୧୨୩୪୫୬୭୮୯
-୰
-ୱஂஃஅஆஇஈஉஊஎஏஐஒஓஔகஙசஜஞடணதநனபமயரறலளழவஶஷஸஹாிீுூெேைொோௌ்ௐௗ௦௧௨௩௪௫௬௭௮௯௰௱௲
-௳௴௵௶௷௸௹௺
-ఁంఃఅఆఇఈఉఊఋఌఎఏఐఒఓఔకఖగఘఙచఛజఝఞటఠడఢణతథదధనపఫబభమయరఱలళవశషసహఽాిీుూృౄెేైొోౌ్ౕౖౘౙౠౡౢౣ౦౧౨౩౪౫౬౭౮౯౸౹౺౻౼౽౾
-౿
-ಂಃಅಆಇಈಉಊಋಌಎಏಐಒಓಔಕಖಗಘಙಚಛಜಝಞಟಠಡಢಣತಥದಧನಪಫಬಭಮಯರಱಲಳವಶಷಸಹ಼ಽಾಿೀುೂೃೄೆೇೈೊೋೌ್ೕೖೞೠೡೢೣ೦೧೨೩೪೫೬೭೮೯
-ೱೲ
-ംഃഅആഇഈഉഊഋഌഎഏഐഒഓഔകഖഗഘങചഛജഝഞടഠഡഢണതഥദധനപഫബഭമയരറലളഴവശഷസഹഽാിീുൂൃൄെേൈൊോൌ്ൗൠൡൢൣ൦൧൨൩൪൫൬൭൮൯൰൱൲൳൴൵
-൹
-ൺൻർൽൾൿංඃඅආඇඈඉඊඋඌඍඎඏඐඑඒඓඔඕඖකඛගඝඞඟචඡජඣඤඥඦටඨඩඪණඬතථදධනඳපඵබභමඹයරලවශෂසහළෆ්ාැෑිීුූෘෙේෛොෝෞෟෲෳ
-෴
-กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู
-฿
-เแโใไๅๆ็่้๊๋์ํ๎
-๏
-๐๑๒๓๔๕๖๗๘๙
-๚๛
-ກຂຄງຈຊຍດຕຖທນບປຜຝພຟມຢຣລວສຫອຮຯະັາຳິີຶືຸູົຼຽເແໂໃໄໆ່້໊໋໌ໍ໐໑໒໓໔໕໖໗໘໙ໜໝༀ
-༁༂༃༄༅༆༇༈༉༊་༌།༎༏༐༑༒༓༔༕༖༗
-༘༙
-༚༛༜༝༞༟
-༠༡༢༣༤༥༦༧༨༩༪༫༬༭༮༯༰༱༲༳
-༴
-༵
-༶
-༷
-༸
-༹
-༺༻༼༽
-༾༿ཀཁགགྷངཅཆཇཉཊཋཌཌྷཎཏཐདདྷནཔཕབབྷམཙཚཛཛྷཝཞཟའཡརལཤཥསཧཨཀྵཪཫཬཱཱཱིིུུྲྀཷླྀཹེཻོཽཾཿ྄ཱྀྀྂྃ
-྅
-྆྇ྈྉྊྋྐྑྒྒྷྔྕྖྗྙྚྛྜྜྷྞྟྠྡྡྷྣྤྥྦྦྷྨྩྪྫྫྷྭྮྯྰྱྲླྴྵྶྷྸྐྵྺྻྼ
-྾྿࿀࿁࿂࿃࿄࿅
-࿆
-࿇࿈࿉࿊࿋࿌࿎࿏࿐࿑࿒࿓࿔࿕࿖࿗࿘
-ကခဂဃငစဆဇဈဉညဋဌဍဎဏတထဒဓနပဖဗဘမယရလဝသဟဠအဢဣဤဥဦဧဨဩဪါာိီုူေဲဳဴဵံ့း္်ျြွှဿ၀၁၂၃၄၅၆၇၈၉
-၊။၌၍၎၏
-ၐၑၒၓၔၕၖၗၘၙၚၛၜၝၞၟၠၡၢၣၤၥၦၧၨၩၪၫၬၭၮၯၰၱၲၳၴၵၶၷၸၹၺၻၼၽၾၿႀႁႂႃႄႅႆႇႈႉႊႋႌႍႎႏ႐႑႒႓႔႕႖႗႘႙ႚႛႜႝ
-႞႟
-ႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿჀჁჂჃჄჅაბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶჷჸჹჺ
-჻
-ჼᄀᄁᄂᄃᄄᄅᄆᄇᄈᄉᄊᄋᄌᄍᄎᄏᄐᄑᄒᄓᄔᄕᄖᄗᄘᄙᄚᄛᄜᄝᄞᄟᄠᄡᄢᄣᄤᄥᄦᄧᄨᄩᄪᄫᄬᄭᄮᄯᄰᄱᄲᄳᄴᄵᄶᄷᄸᄹᄺᄻᄼᄽᄾᄿᅀᅁᅂᅃᅄᅅᅆᅇᅈᅉᅊᅋᅌᅍᅎᅏᅐᅑᅒᅓᅔᅕᅖᅗᅘᅙᅚᅛᅜᅝᅞᅟᅠᅡᅢᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯᅰᅱᅲᅳᅴᅵᅶᅷᅸᅹᅺᅻᅼᅽᅾᅿᆀᆁᆂᆃᆄᆅᆆᆇᆈᆉᆊᆋᆌᆍᆎᆏᆐᆑᆒᆓᆔᆕᆖᆗᆘᆙᆚᆛᆜᆝᆞᆟᆠᆡᆢᆣᆤᆥᆦᆧᆨᆩᆪᆫᆬᆭᆮᆯᆰᆱᆲᆳᆴᆵᆶᆷᆸᆹᆺᆻᆼᆽᆾᆿᇀᇁᇂᇃᇄᇅᇆᇇᇈᇉᇊᇋᇌᇍᇎᇏᇐᇑᇒᇓᇔᇕᇖᇗᇘᇙᇚᇛᇜᇝᇞᇟᇠᇡᇢᇣᇤᇥᇦᇧᇨᇩᇪᇫᇬᇭᇮᇯᇰᇱᇲᇳᇴᇵᇶᇷᇸᇹᇺᇻᇼᇽᇾᇿሀሁሂሃሄህሆሇለሉሊላሌልሎሏሐሑሒሓሔሕሖሗመሙሚማሜምሞሟሠሡሢሣሤሥሦሧረሩሪራሬርሮሯሰሱሲሳሴስሶሷሸሹሺሻሼሽሾሿቀቁቂቃቄቅቆቇቈቊቋቌቍቐቑቒቓቔቕቖቘቚቛቜቝበቡቢባቤብቦቧቨቩቪቫቬቭቮቯተቱቲታቴትቶቷቸቹቺቻቼችቾቿኀኁኂኃኄኅኆኇኈኊኋኌኍነኑኒናኔንኖኗኘኙኚኛኜኝኞኟአኡኢኣኤእኦኧከኩኪካኬክኮኯኰኲኳኴኵኸኹኺኻኼኽኾዀዂዃዄዅወዉዊዋዌውዎዏዐዑዒዓዔዕዖዘዙዚዛዜዝዞዟዠዡዢዣዤዥዦዧየዩዪያዬይዮዯደዱዲዳዴድዶዷዸዹዺዻዼዽዾዿጀጁጂጃጄጅጆጇገጉጊጋጌግጎጏጐጒጓጔጕጘጙጚጛጜጝጞጟጠጡጢጣጤጥጦጧጨጩጪጫጬጭጮጯጰጱጲጳጴጵጶጷጸጹጺጻጼጽጾጿፀፁፂፃፄፅፆፇፈፉፊፋፌፍፎፏፐፑፒፓፔፕፖፗፘፙፚ፟
-፠፡።፣፤፥፦፧፨
-፩፪፫፬፭፮፯፰፱፲፳፴፵፶፷፸፹፺፻፼ᎀᎁᎂᎃᎄᎅᎆᎇᎈᎉᎊᎋᎌᎍᎎᎏ
-᎐᎑᎒᎓᎔᎕᎖᎗᎘᎙
-ᎠᎡᎢᎣᎤᎥᎦᎧᎨᎩᎪᎫᎬᎭᎮᎯᎰᎱᎲᎳᎴᎵᎶᎷᎸᎹᎺᎻᎼᎽᎾᎿᏀᏁᏂᏃᏄᏅᏆᏇᏈᏉᏊᏋᏌᏍᏎᏏᏐᏑᏒᏓᏔᏕᏖᏗᏘᏙᏚᏛᏜᏝᏞᏟᏠᏡᏢᏣᏤᏥᏦᏧᏨᏩᏪᏫᏬᏭᏮᏯᏰᏱᏲᏳᏴ
-᐀
-ᐁᐂᐃᐄᐅᐆᐇᐈᐉᐊᐋᐌᐍᐎᐏᐐᐑᐒᐓᐔᐕᐖᐗᐘᐙᐚᐛᐜᐝᐞᐟᐠᐡᐢᐣᐤᐥᐦᐧᐨᐩᐪᐫᐬᐭᐮᐯᐰᐱᐲᐳᐴᐵᐶᐷᐸᐹᐺᐻᐼᐽᐾᐿᑀᑁᑂᑃᑄᑅᑆᑇᑈᑉᑊᑋᑌᑍᑎᑏᑐᑑᑒᑓᑔᑕᑖᑗᑘᑙᑚᑛᑜᑝᑞᑟᑠᑡᑢᑣᑤᑥᑦᑧᑨᑩᑪᑫᑬᑭᑮᑯᑰᑱᑲᑳᑴᑵᑶᑷᑸᑹᑺᑻᑼᑽᑾᑿᒀᒁᒂᒃᒄᒅᒆᒇᒈᒉᒊᒋᒌᒍᒎᒏᒐᒑᒒᒓᒔᒕᒖᒗᒘᒙᒚᒛᒜᒝᒞᒟᒠᒡᒢᒣᒤᒥᒦᒧᒨᒩᒪᒫᒬᒭᒮᒯᒰᒱᒲᒳᒴᒵᒶᒷᒸᒹᒺᒻᒼᒽᒾᒿᓀᓁᓂᓃᓄᓅᓆᓇᓈᓉᓊᓋᓌᓍᓎᓏᓐᓑᓒᓓᓔᓕᓖᓗᓘᓙᓚᓛᓜᓝᓞᓟᓠᓡᓢᓣᓤᓥᓦᓧᓨᓩᓪᓫᓬᓭᓮᓯᓰᓱᓲᓳᓴᓵᓶᓷᓸᓹᓺᓻᓼᓽᓾᓿᔀᔁᔂᔃᔄᔅᔆᔇᔈᔉᔊᔋᔌᔍᔎᔏᔐᔑᔒᔓᔔᔕᔖᔗᔘᔙᔚᔛᔜᔝᔞᔟᔠᔡᔢᔣᔤᔥᔦᔧᔨᔩᔪᔫᔬᔭᔮᔯᔰᔱᔲᔳᔴᔵᔶᔷᔸᔹᔺᔻᔼᔽᔾᔿᕀᕁᕂᕃᕄᕅᕆᕇᕈᕉᕊᕋᕌᕍᕎᕏᕐᕑᕒᕓᕔᕕᕖᕗᕘᕙᕚᕛᕜᕝᕞᕟᕠᕡᕢᕣᕤᕥᕦᕧᕨᕩᕪᕫᕬᕭᕮᕯᕰᕱᕲᕳᕴᕵᕶᕷᕸᕹᕺᕻᕼᕽᕾᕿᖀᖁᖂᖃᖄᖅᖆᖇᖈᖉᖊᖋᖌᖍᖎᖏᖐᖑᖒᖓᖔᖕᖖᖗᖘᖙᖚᖛᖜᖝᖞᖟᖠᖡᖢᖣᖤᖥᖦᖧᖨᖩᖪᖫᖬᖭᖮᖯᖰᖱᖲᖳᖴᖵᖶᖷᖸᖹᖺᖻᖼᖽᖾᖿᗀᗁᗂᗃᗄᗅᗆᗇᗈᗉᗊᗋᗌᗍᗎᗏᗐᗑᗒᗓᗔᗕᗖᗗᗘᗙᗚᗛᗜᗝᗞᗟᗠᗡᗢᗣᗤᗥᗦᗧᗨᗩᗪᗫᗬᗭᗮᗯᗰᗱᗲᗳᗴᗵᗶᗷᗸᗹᗺᗻᗼᗽᗾᗿᘀᘁᘂᘃᘄᘅᘆᘇᘈᘉᘊᘋᘌᘍᘎᘏᘐᘑᘒᘓᘔᘕᘖᘗᘘᘙᘚᘛᘜᘝᘞᘟᘠᘡᘢᘣᘤᘥᘦᘧᘨᘩᘪᘫᘬᘭᘮᘯᘰᘱᘲᘳᘴᘵᘶᘷᘸᘹᘺᘻᘼᘽᘾᘿᙀᙁᙂᙃᙄᙅᙆᙇᙈᙉᙊᙋᙌᙍᙎᙏᙐᙑᙒᙓᙔᙕᙖᙗᙘᙙᙚᙛᙜᙝᙞᙟᙠᙡᙢᙣᙤᙥᙦᙧᙨᙩᙪᙫᙬ
-᙭᙮
-ᙯᙰᙱᙲᙳᙴᙵᙶᙷᙸᙹᙺᙻᙼᙽᙾᙿ
- 
-ᚁᚂᚃᚄᚅᚆᚇᚈᚉᚊᚋᚌᚍᚎᚏᚐᚑᚒᚓᚔᚕᚖᚗᚘᚙᚚ
-᚛᚜
-ᚠᚡᚢᚣᚤᚥᚦᚧᚨᚩᚪᚫᚬᚭᚮᚯᚰᚱᚲᚳᚴᚵᚶᚷᚸᚹᚺᚻᚼᚽᚾᚿᛀᛁᛂᛃᛄᛅᛆᛇᛈᛉᛊᛋᛌᛍᛎᛏᛐᛑᛒᛓᛔᛕᛖᛗᛘᛙᛚᛛᛜᛝᛞᛟᛠᛡᛢᛣᛤᛥᛦᛧᛨᛩᛪ
-᛫᛬᛭
-ᛮᛯᛰᜀᜁᜂᜃᜄᜅᜆᜇᜈᜉᜊᜋᜌᜎᜏᜐᜑᜒᜓ᜔ᜠᜡᜢᜣᜤᜥᜦᜧᜨᜩᜪᜫᜬᜭᜮᜯᜰᜱᜲᜳ᜴
-᜵᜶
-ᝀᝁᝂᝃᝄᝅᝆᝇᝈᝉᝊᝋᝌᝍᝎᝏᝐᝑᝒᝓᝠᝡᝢᝣᝤᝥᝦᝧᝨᝩᝪᝫᝬᝮᝯᝰᝲᝳកខគឃងចឆជឈញដឋឌឍណតថទធនបផពភមយរលវឝឞសហឡអឣឤឥឦឧឨឩឪឫឬឭឮឯឰឱឲឳ
-឴឵
-ាិីឹឺុូួើឿៀេែៃោៅំះៈ៉៊់៌៍៎៏័៑្៓
-។៕៖
-ៗ
-៘៙៚៛
-ៜ៝០១២៣៤៥៦៧៨៩៰៱៲៳៴៵៶៷៸៹
-᠀᠁᠂᠃᠄᠅᠆᠇᠈᠉᠊
-᠋᠌᠍
-᠎
-᠐᠑᠒᠓᠔᠕᠖᠗᠘᠙ᠠᠡᠢᠣᠤᠥᠦᠧᠨᠩᠪᠫᠬᠭᠮᠯᠰᠱᠲᠳᠴᠵᠶᠷᠸᠹᠺᠻᠼᠽᠾᠿᡀᡁᡂᡃᡄᡅᡆᡇᡈᡉᡊᡋᡌᡍᡎᡏᡐᡑᡒᡓᡔᡕᡖᡗᡘᡙᡚᡛᡜᡝᡞᡟᡠᡡᡢᡣᡤᡥᡦᡧᡨᡩᡪᡫᡬᡭᡮᡯᡰᡱᡲᡳᡴᡵᡶᡷᢀᢁᢂᢃᢄᢅᢆᢇᢈᢉᢊᢋᢌᢍᢎᢏᢐᢑᢒᢓᢔᢕᢖᢗᢘᢙᢚᢛᢜᢝᢞᢟᢠᢡᢢᢣᢤᢥᢦᢧᢨᢩᢪᢰᢱᢲᢳᢴᢵᢶᢷᢸᢹᢺᢻᢼᢽᢾᢿᣀᣁᣂᣃᣄᣅᣆᣇᣈᣉᣊᣋᣌᣍᣎᣏᣐᣑᣒᣓᣔᣕᣖᣗᣘᣙᣚᣛᣜᣝᣞᣟᣠᣡᣢᣣᣤᣥᣦᣧᣨᣩᣪᣫᣬᣭᣮᣯᣰᣱᣲᣳᣴᣵᤀᤁᤂᤃᤄᤅᤆᤇᤈᤉᤊᤋᤌᤍᤎᤏᤐᤑᤒᤓᤔᤕᤖᤗᤘᤙᤚᤛᤜᤠᤡᤢᤣᤤᤥᤦᤧᤨᤩᤪᤫᤰᤱᤲᤳᤴᤵᤶᤷᤸ᤻᤹᤺
-᥀᥄᥅
-᥆᥇᥈᥉᥊᥋᥌᥍᥎᥏ᥐᥑᥒᥓᥔᥕᥖᥗᥘᥙᥚᥛᥜᥝᥞᥟᥠᥡᥢᥣᥤᥥᥦᥧᥨᥩᥪᥫᥬᥭᥰᥱᥲᥳᥴᦀᦁᦂᦃᦄᦅᦆᦇᦈᦉᦊᦋᦌᦍᦎᦏᦐᦑᦒᦓᦔᦕᦖᦗᦘᦙᦚᦛᦜᦝᦞᦟᦠᦡᦢᦣᦤᦥᦦᦧᦨᦩᦪᦫᦰᦱᦲᦳᦴᦵᦶᦷᦸᦹᦺᦻᦼᦽᦾᦿᧀᧁᧂᧃᧄᧅᧆᧇᧈᧉ᧐᧑᧒᧓᧔᧕᧖᧗᧘᧙᧚
-᧞᧟᧠᧡᧢᧣᧤᧥᧦᧧᧨᧩᧪᧫᧬᧭᧮᧯᧰᧱᧲᧳᧴᧵᧶᧷᧸᧹᧺᧻᧼᧽᧾᧿
-ᨀᨁᨂᨃᨄᨅᨆᨇᨈᨉᨊᨋᨌᨍᨎᨏᨐᨑᨒᨓᨔᨕᨖᨘᨗᨙᨚᨛ
-᨞᨟
-ᨠᨡᨢᨣᨤᨥᨦᨧᨨᨩᨪᨫᨬᨭᨮᨯᨰᨱᨲᨳᨴᨵᨶᨷᨸᨹᨺᨻᨼᨽᨾᨿᩀᩁᩂᩃᩄᩅᩆᩇᩈᩉᩊᩋᩌᩍᩎᩏᩐᩑᩒᩓᩔᩕᩖᩗᩘᩙᩚᩛᩜᩝᩞ᩠ᩡᩢᩣᩤᩥᩦᩧᩨᩩᩪᩫᩬᩭᩮᩯᩰᩱᩲᩳᩴ᩿᩵᩶᩷᩸᩹᩺᩻᩼᪀᪁᪂᪃᪄᪅᪆᪇᪈᪉᪐᪑᪒᪓᪔᪕᪖᪗᪘᪙
-᪠᪡᪢᪣᪤᪥᪦
-ᪧ
-᪨᪩᪪᪫᪬᪭
-ᬀᬁᬂᬃᬄᬅᬆᬇᬈᬉᬊᬋᬌᬍᬎᬏᬐᬑᬒᬓᬔᬕᬖᬗᬘᬙᬚᬛᬜᬝᬞᬟᬠᬡᬢᬣᬤᬥᬦᬧᬨᬩᬪᬫᬬᬭᬮᬯᬰᬱᬲᬳ᬴ᬵᬶᬷᬸᬹᬺᬻᬼᬽᬾᬿᭀᭁᭂᭃ᭄ᭅᭆᭇᭈᭉᭊᭋ᭐᭑᭒᭓᭔᭕᭖᭗᭘᭙
-᭚᭛᭜᭝᭞᭟᭠᭡᭢᭣᭤᭥᭦᭧᭨᭩᭪
-᭬᭫᭭᭮᭯᭰᭱᭲᭳
-᭴᭵᭶᭷᭸᭹᭺᭻᭼
-ᮀᮁᮂᮃᮄᮅᮆᮇᮈᮉᮊᮋᮌᮍᮎᮏᮐᮑᮒᮓᮔᮕᮖᮗᮘᮙᮚᮛᮜᮝᮞᮟᮠᮡᮢᮣᮤᮥᮦᮧᮨᮩ᮪ᮮᮯ᮰᮱᮲᮳᮴᮵᮶᮷᮸᮹ᰀᰁᰂᰃᰄᰅᰆᰇᰈᰉᰊᰋᰌᰍᰎᰏᰐᰑᰒᰓᰔᰕᰖᰗᰘᰙᰚᰛᰜᰝᰞᰟᰠᰡᰢᰣᰤᰥᰦᰧᰨᰩᰪᰫᰬᰭᰮᰯᰰᰱᰲᰳᰴᰵᰶ᰷
-᰻᰼᰽᰾᰿
-᱀᱁᱂᱃᱄᱅᱆᱇᱈᱉ᱍᱎᱏ᱐᱑᱒᱓᱔᱕᱖᱗᱘᱙ᱚᱛᱜᱝᱞᱟᱠᱡᱢᱣᱤᱥᱦᱧᱨᱩᱪᱫᱬᱭᱮᱯᱰᱱᱲᱳᱴᱵᱶᱷᱸᱹᱺᱻᱼᱽ
-᱾᱿
-᳐᳑᳒
-᳓
-᳔᳕᳖᳗᳘᳙᳜᳝᳞᳟᳚᳛᳠᳡᳢᳣᳤᳥᳦᳧᳨ᳩᳪᳫᳬ᳭ᳮᳯᳰᳱᳲᴀᴁᴂᴃᴄᴅᴆᴇᴈᴉᴊᴋᴌᴍᴎᴏᴐᴑᴒᴓᴔᴕᴖᴗᴘᴙᴚᴛᴜᴝᴞᴟᴠᴡᴢᴣᴤᴥᴦᴧᴨᴩᴪᴫᴬᴭᴮᴯᴰᴱᴲᴳᴴᴵᴶᴷᴸᴹᴺᴻᴼᴽᴾᴿᵀᵁᵂᵃᵄᵅᵆᵇᵈᵉᵊᵋᵌᵍᵎᵏᵐᵑᵒᵓᵔᵕᵖᵗᵘᵙᵚᵛᵜᵝᵞᵟᵠᵡᵢᵣᵤᵥᵦᵧᵨᵩᵪᵫᵬᵭᵮᵯᵰᵱᵲᵳᵴᵵᵶᵷᵸᵹᵺᵻᵼᵽᵾᵿᶀᶁᶂᶃᶄᶅᶆᶇᶈᶉᶊᶋᶌᶍᶎᶏᶐᶑᶒᶓᶔᶕᶖᶗᶘᶙᶚᶛᶜᶝᶞᶟᶠᶡᶢᶣᶤᶥᶦᶧᶨᶩᶪᶫᶬᶭᶮᶯᶰᶱᶲᶳᶴᶵᶶᶷᶸᶹᶺᶻᶼᶽᶾᶿ᷐᷎᷂᷊᷏᷽᷿᷀᷁᷃᷄᷅᷆᷇᷈᷉᷋᷌᷑᷒ᷓᷔᷕᷖᷗᷘᷙᷚᷛᷜᷝᷞᷟᷠᷡᷢᷣᷤᷥᷦ᷾᷍ḀḁḂḃḄḅḆḇḈḉḊḋḌḍḎḏḐḑḒḓḔḕḖḗḘḙḚḛḜḝḞḟḠḡḢḣḤḥḦḧḨḩḪḫḬḭḮḯḰḱḲḳḴḵḶḷḸḹḺḻḼḽḾḿṀṁṂṃṄṅṆṇṈṉṊṋṌṍṎṏṐṑṒṓṔṕṖṗṘṙṚṛṜṝṞṟṠṡṢṣṤṥṦṧṨṩṪṫṬṭṮṯṰṱṲṳṴṵṶṷṸṹṺṻṼṽṾṿẀẁẂẃẄẅẆẇẈẉẊẋẌẍẎẏẐẑẒẓẔẕẖẗẘẙẚẛẜẝẞẟẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặẸẹẺẻẼẽẾếỀềỂểỄễỆệỈỉỊịỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞởỠỡỢợỤụỦủỨứỪừỬửỮữỰựỲỳỴỵỶỷỸỹỺỻỼỽỾỿἀἁἂἃἄἅἆἇἈἉἊἋἌἍἎἏἐἑἒἓἔἕἘἙἚἛἜἝἠἡἢἣἤἥἦἧἨἩἪἫἬἭἮἯἰἱἲἳἴἵἶἷἸἹἺἻἼἽἾἿὀὁὂὃὄὅὈὉὊὋὌὍὐὑὒὓὔὕὖὗὙὛὝὟὠὡὢὣὤὥὦὧὨὩὪὫὬὭὮὯὰάὲέὴήὶίὸόὺύὼώᾀᾁᾂᾃᾄᾅᾆᾇᾈᾉᾊᾋᾌᾍᾎᾏᾐᾑᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜᾝᾞᾟᾠᾡᾢᾣᾤᾥᾦᾧᾨᾩᾪᾫᾬᾭᾮᾯᾰᾱᾲᾳᾴᾶᾷᾸᾹᾺΆᾼ
-᾽
-ι
-᾿῀῁
-ῂῃῄῆῇῈΈῊΉῌ
-῍῎῏
-ῐῑῒΐῖῗῘῙῚΊ
-῝῞῟
-ῠῡῢΰῤῥῦῧῨῩῪΎῬ
-῭΅`
-ῲῳῴῶῷῸΌῺΏῼ
-´῾           ​‌‍‎‏‐‑‒–—―‖‗‘’‚‛“”„‟†‡•‣․‥…‧  ‪‫‬‭‮ ‰‱′″‴‵‶‷‸‹›※‼‽‾‿⁀⁁⁂⁃⁄⁅⁆⁇⁈⁉⁊⁋⁌⁍⁎⁏⁐⁑⁒⁓⁔⁕⁖⁗⁘⁙⁚⁛⁜⁝⁞ ⁠⁡⁢⁣⁤⁪⁫⁬⁭⁮⁯
-⁰ⁱ⁴⁵⁶⁷⁸⁹
-⁺⁻⁼⁽⁾
-ⁿ₀₁₂₃₄₅₆₇₈₉
-₊₋₌₍₎
-ₐₑₒₓₔ
-₠₡₢₣₤₥₦₧₨₩₪₫€₭₮₯₰₱₲₳₴₵₶₷₸
-⃒⃓⃘⃙⃚⃐⃑⃔⃕⃖⃗⃛⃜⃝⃞⃟⃠⃡⃢⃣⃤⃥⃦⃪⃫⃨⃬⃭⃮⃯⃧⃩⃰
-℀℁
-ℂ
-℃℄℅℆
-ℇ
-℈℉
-ℊℋℌℍℎℏℐℑℒℓ
-℔
-ℕ
-№℗℘
-ℙℚℛℜℝ
-℞℟℠℡™℣
-ℤ
-℥
-Ω
-℧
-ℨ
-℩
-KÅℬℭ
-℮
-ℯℰℱℲℳℴℵℶℷℸℹ
-℺℻
-ℼℽℾℿ
-⅀⅁⅂⅃⅄
-ⅅⅆⅇⅈⅉ
-⅊⅋⅌⅍
-ⅎ
-⅏
-⅐⅑⅒⅓⅔⅕⅖⅗⅘⅙⅚⅛⅜⅝⅞⅟ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅬⅭⅮⅯⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⅼⅽⅾⅿↀↁↂↃↄↅↆↇↈ↉
-←↑→↓↔↕↖↗↘↙↚↛↜↝↞↟↠↡↢↣↤↥↦↧↨↩↪↫↬↭↮↯↰↱↲↳↴↵↶↷↸↹↺↻↼↽↾↿⇀⇁⇂⇃⇄⇅⇆⇇⇈⇉⇊⇋⇌⇍⇎⇏⇐⇑⇒⇓⇔⇕⇖⇗⇘⇙⇚⇛⇜⇝⇞⇟⇠⇡⇢⇣⇤⇥⇦⇧⇨⇩⇪⇫⇬⇭⇮⇯⇰⇱⇲⇳⇴⇵⇶⇷⇸⇹⇺⇻⇼⇽⇾⇿∀∁∂∃∄∅∆∇∈∉∊∋∌∍∎∏∐∑−∓∔∕∖∗∘∙√∛∜∝∞∟∠∡∢∣∤∥∦∧∨∩∪∫∬∭∮∯∰∱∲∳∴∵∶∷∸∹∺∻∼∽∾∿≀≁≂≃≄≅≆≇≈≉≊≋≌≍≎≏≐≑≒≓≔≕≖≗≘≙≚≛≜≝≞≟≠≡≢≣≤≥≦≧≨≩≪≫≬≭≮≯≰≱≲≳≴≵≶≷≸≹≺≻≼≽≾≿⊀⊁⊂⊃⊄⊅⊆⊇⊈⊉⊊⊋⊌⊍⊎⊏⊐⊑⊒⊓⊔⊕⊖⊗⊘⊙⊚⊛⊜⊝⊞⊟⊠⊡⊢⊣⊤⊥⊦⊧⊨⊩⊪⊫⊬⊭⊮⊯⊰⊱⊲⊳⊴⊵⊶⊷⊸⊹⊺⊻⊼⊽⊾⊿⋀⋁⋂⋃⋄⋅⋆⋇⋈⋉⋊⋋⋌⋍⋎⋏⋐⋑⋒⋓⋔⋕⋖⋗⋘⋙⋚⋛⋜⋝⋞⋟⋠⋡⋢⋣⋤⋥⋦⋧⋨⋩⋪⋫⋬⋭⋮⋯⋰⋱⋲⋳⋴⋵⋶⋷⋸⋹⋺⋻⋼⋽⋾⋿⌀⌁⌂⌃⌄⌅⌆⌇⌈⌉⌊⌋⌌⌍⌎⌏⌐⌑⌒⌓⌔⌕⌖⌗⌘⌙⌚⌛⌜⌝⌞⌟⌠⌡⌢⌣⌤⌥⌦⌧⌨〈〉⌫⌬⌭⌮⌯⌰⌱⌲⌳⌴⌵⌶⌷⌸⌹⌺⌻⌼⌽⌾⌿⍀⍁⍂⍃⍄⍅⍆⍇⍈⍉⍊⍋⍌⍍⍎⍏⍐⍑⍒⍓⍔⍕⍖⍗⍘⍙⍚⍛⍜⍝⍞⍟⍠⍡⍢⍣⍤⍥⍦⍧⍨⍩⍪⍫⍬⍭⍮⍯⍰⍱⍲⍳⍴⍵⍶⍷⍸⍹⍺⍻⍼⍽⍾⍿⎀⎁⎂⎃⎄⎅⎆⎇⎈⎉⎊⎋⎌⎍⎎⎏⎐⎑⎒⎓⎔⎕⎖⎗⎘⎙⎚⎛⎜⎝⎞⎟⎠⎡⎢⎣⎤⎥⎦⎧⎨⎩⎪⎫⎬⎭⎮⎯⎰⎱⎲⎳⎴⎵⎶⎷⎸⎹⎺⎻⎼⎽⎾⎿⏀⏁⏂⏃⏄⏅⏆⏇⏈⏉⏊⏋⏌⏍⏎⏏⏐⏑⏒⏓⏔⏕⏖⏗⏘⏙⏚⏛⏜⏝⏞⏟⏠⏡⏢⏣⏤⏥⏦⏧⏨␀␁␂␃␄␅␆␇␈␉␊␋␌␍␎␏␐␑␒␓␔␕␖␗␘␙␚␛␜␝␞␟␠␡␢␣␤␥␦⑀⑁⑂⑃⑄⑅⑆⑇⑈⑉⑊
-①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛
-⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ
-⓪⓫⓬⓭⓮⓯⓰⓱⓲⓳⓴⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾⓿
-─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋╌╍╎╏═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳╴╵╶╷╸╹╺╻╼╽╾╿▀▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▐░▒▓▔▕▖▗▘▙▚▛▜▝▞▟■□▢▣▤▥▦▧▨▩▪▫▬▭▮▯▰▱▲△▴▵▶▷▸▹►▻▼▽▾▿◀◁◂◃◄◅◆◇◈◉◊○◌◍◎●◐◑◒◓◔◕◖◗◘◙◚◛◜◝◞◟◠◡◢◣◤◥◦◧◨◩◪◫◬◭◮◯◰◱◲◳◴◵◶◷◸◹◺◻◼◽◾◿☀☁☂☃☄★☆☇☈☉☊☋☌☍☎☏☐☑☒☓☔☕☖☗☘☙☚☛☜☝☞☟☠☡☢☣☤☥☦☧☨☩☪☫☬☭☮☯☰☱☲☳☴☵☶☷☸☹☺☻☼☽☾☿♀♁♂♃♄♅♆♇♈♉♊♋♌♍♎♏♐♑♒♓♔♕♖♗♘♙♚♛♜♝♞♟♠♡♢♣♤♥♦♧♨♩♪♫♬♭♮♯♰♱♲♳♴♵♶♷♸♹♺♻♼♽♾♿⚀⚁⚂⚃⚄⚅⚆⚇⚈⚉⚊⚋⚌⚍⚎⚏⚐⚑⚒⚓⚔⚕⚖⚗⚘⚙⚚⚛⚜⚝⚞⚟⚠⚡⚢⚣⚤⚥⚦⚧⚨⚩⚪⚫⚬⚭⚮⚯⚰⚱⚲⚳⚴⚵⚶⚷⚸⚹⚺⚻⚼⚽⚾⚿⛀⛁⛂⛃⛄⛅⛆⛇⛈⛉⛊⛋⛌⛍⛏⛐⛑⛒⛓⛔⛕⛖⛗⛘⛙⛚⛛⛜⛝⛞⛟⛠⛡⛣⛨⛩⛪⛫⛬⛭⛮⛯⛰⛱⛲⛳⛴⛵⛶⛷⛸⛹⛺⛻⛼⛽⛾⛿✁✂✃✄✆✇✈✉✌✍✎✏✐✑✒✓✔✕✖✗✘✙✚✛✜✝✞✟✠✡✢✣✤✥✦✧✩✪✫✬✭✮✯✰✱✲✳✴✵✶✷✸✹✺✻✼✽✾✿❀❁❂❃❄❅❆❇❈❉❊❋❍❏❐❑❒❖❗❘❙❚❛❜❝❞❡❢❣❤❥❦❧❨❩❪❫❬❭❮❯❰❱❲❳❴❵
-❶❷❸❹❺❻❼❽❾❿➀➁➂➃➄➅➆➇➈➉➊➋➌➍➎➏➐➑➒➓
-➔➘➙➚➛➜➝➞➟➠➡➢➣➤➥➦➧➨➩➪➫➬➭➮➯➱➲➳➴➵➶➷➸➹➺➻➼➽➾⟀⟁⟂⟃⟄⟅⟆⟇⟈⟉⟊⟌⟐⟑⟒⟓⟔⟕⟖⟗⟘⟙⟚⟛⟜⟝⟞⟟⟠⟡⟢⟣⟤⟥⟦⟧⟨⟩⟪⟫⟬⟭⟮⟯⟰⟱⟲⟳⟴⟵⟶⟷⟸⟹⟺⟻⟼⟽⟾⟿⠀⠁⠂⠃⠄⠅⠆⠇⠈⠉⠊⠋⠌⠍⠎⠏⠐⠑⠒⠓⠔⠕⠖⠗⠘⠙⠚⠛⠜⠝⠞⠟⠠⠡⠢⠣⠤⠥⠦⠧⠨⠩⠪⠫⠬⠭⠮⠯⠰⠱⠲⠳⠴⠵⠶⠷⠸⠹⠺⠻⠼⠽⠾⠿⡀⡁⡂⡃⡄⡅⡆⡇⡈⡉⡊⡋⡌⡍⡎⡏⡐⡑⡒⡓⡔⡕⡖⡗⡘⡙⡚⡛⡜⡝⡞⡟⡠⡡⡢⡣⡤⡥⡦⡧⡨⡩⡪⡫⡬⡭⡮⡯⡰⡱⡲⡳⡴⡵⡶⡷⡸⡹⡺⡻⡼⡽⡾⡿⢀⢁⢂⢃⢄⢅⢆⢇⢈⢉⢊⢋⢌⢍⢎⢏⢐⢑⢒⢓⢔⢕⢖⢗⢘⢙⢚⢛⢜⢝⢞⢟⢠⢡⢢⢣⢤⢥⢦⢧⢨⢩⢪⢫⢬⢭⢮⢯⢰⢱⢲⢳⢴⢵⢶⢷⢸⢹⢺⢻⢼⢽⢾⢿⣀⣁⣂⣃⣄⣅⣆⣇⣈⣉⣊⣋⣌⣍⣎⣏⣐⣑⣒⣓⣔⣕⣖⣗⣘⣙⣚⣛⣜⣝⣞⣟⣠⣡⣢⣣⣤⣥⣦⣧⣨⣩⣪⣫⣬⣭⣮⣯⣰⣱⣲⣳⣴⣵⣶⣷⣸⣹⣺⣻⣼⣽⣾⣿⤀⤁⤂⤃⤄⤅⤆⤇⤈⤉⤊⤋⤌⤍⤎⤏⤐⤑⤒⤓⤔⤕⤖⤗⤘⤙⤚⤛⤜⤝⤞⤟⤠⤡⤢⤣⤤⤥⤦⤧⤨⤩⤪⤫⤬⤭⤮⤯⤰⤱⤲⤳⤴⤵⤶⤷⤸⤹⤺⤻⤼⤽⤾⤿⥀⥁⥂⥃⥄⥅⥆⥇⥈⥉⥊⥋⥌⥍⥎⥏⥐⥑⥒⥓⥔⥕⥖⥗⥘⥙⥚⥛⥜⥝⥞⥟⥠⥡⥢⥣⥤⥥⥦⥧⥨⥩⥪⥫⥬⥭⥮⥯⥰⥱⥲⥳⥴⥵⥶⥷⥸⥹⥺⥻⥼⥽⥾⥿⦀⦁⦂⦃⦄⦅⦆⦇⦈⦉⦊⦋⦌⦍⦎⦏⦐⦑⦒⦓⦔⦕⦖⦗⦘⦙⦚⦛⦜⦝⦞⦟⦠⦡⦢⦣⦤⦥⦦⦧⦨⦩⦪⦫⦬⦭⦮⦯⦰⦱⦲⦳⦴⦵⦶⦷⦸⦹⦺⦻⦼⦽⦾⦿⧀⧁⧂⧃⧄⧅⧆⧇⧈⧉⧊⧋⧌⧍⧎⧏⧐⧑⧒⧓⧔⧕⧖⧗⧘⧙⧚⧛⧜⧝⧞⧟⧠⧡⧢⧣⧤⧥⧦⧧⧨⧩⧪⧫⧬⧭⧮⧯⧰⧱⧲⧳⧴⧵⧶⧷⧸⧹⧺⧻⧼⧽⧾⧿⨀⨁⨂⨃⨄⨅⨆⨇⨈⨉⨊⨋⨌⨍⨎⨏⨐⨑⨒⨓⨔⨕⨖⨗⨘⨙⨚⨛⨜⨝⨞⨟⨠⨡⨢⨣⨤⨥⨦⨧⨨⨩⨪⨫⨬⨭⨮⨯⨰⨱⨲⨳⨴⨵⨶⨷⨸⨹⨺⨻⨼⨽⨾⨿⩀⩁⩂⩃⩄⩅⩆⩇⩈⩉⩊⩋⩌⩍⩎⩏⩐⩑⩒⩓⩔⩕⩖⩗⩘⩙⩚⩛⩜⩝⩞⩟⩠⩡⩢⩣⩤⩥⩦⩧⩨⩩⩪⩫⩬⩭⩮⩯⩰⩱⩲⩳⩴⩵⩶⩷⩸⩹⩺⩻⩼⩽⩾⩿⪀⪁⪂⪃⪄⪅⪆⪇⪈⪉⪊⪋⪌⪍⪎⪏⪐⪑⪒⪓⪔⪕⪖⪗⪘⪙⪚⪛⪜⪝⪞⪟⪠⪡⪢⪣⪤⪥⪦⪧⪨⪩⪪⪫⪬⪭⪮⪯⪰⪱⪲⪳⪴⪵⪶⪷⪸⪹⪺⪻⪼⪽⪾⪿⫀⫁⫂⫃⫄⫅⫆⫇⫈⫉⫊⫋⫌⫍⫎⫏⫐⫑⫒⫓⫔⫕⫖⫗⫘⫙⫚⫛⫝̸⫝⫞⫟⫠⫡⫢⫣⫤⫥⫦⫧⫨⫩⫪⫫⫬⫭⫮⫯⫰⫱⫲⫳⫴⫵⫶⫷⫸⫹⫺⫻⫼⫽⫾⫿⬀⬁⬂⬃⬄⬅⬆⬇⬈⬉⬊⬋⬌⬍⬎⬏⬐⬑⬒⬓⬔⬕⬖⬗⬘⬙⬚⬛⬜⬝⬞⬟⬠⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬⬭⬮⬯⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿⭀⭁⭂⭃⭄⭅⭆⭇⭈⭉⭊⭋⭌⭐⭑⭒⭓⭔⭕⭖⭗⭘⭙
-ⰀⰁⰂⰃⰄⰅⰆⰇⰈⰉⰊⰋⰌⰍⰎⰏⰐⰑⰒⰓⰔⰕⰖⰗⰘⰙⰚⰛⰜⰝⰞⰟⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬⰭⰮⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿⱀⱁⱂⱃⱄⱅⱆⱇⱈⱉⱊⱋⱌⱍⱎⱏⱐⱑⱒⱓⱔⱕⱖⱗⱘⱙⱚⱛⱜⱝⱞⱠⱡⱢⱣⱤⱥⱦⱧⱨⱩⱪⱫⱬⱭⱮⱯⱰⱱⱲⱳⱴⱵⱶⱷⱸⱹⱺⱻⱼⱽⱾⱿⲀⲁⲂⲃⲄⲅⲆⲇⲈⲉⲊⲋⲌⲍⲎⲏⲐⲑⲒⲓⲔⲕⲖⲗⲘⲙⲚⲛⲜⲝⲞⲟⲠⲡⲢⲣⲤⲥⲦⲧⲨⲩⲪⲫⲬⲭⲮⲯⲰⲱⲲⲳⲴⲵⲶⲷⲸⲹⲺⲻⲼⲽⲾⲿⳀⳁⳂⳃⳄⳅⳆⳇⳈⳉⳊⳋⳌⳍⳎⳏⳐⳑⳒⳓⳔⳕⳖⳗⳘⳙⳚⳛⳜⳝⳞⳟⳠⳡⳢⳣⳤ
-⳥⳦⳧⳨⳩⳪
-ⳫⳬⳭⳮ⳯⳰⳱
-⳹⳺⳻⳼
-⳽
-⳾⳿
-ⴀⴁⴂⴃⴄⴅⴆⴇⴈⴉⴊⴋⴌⴍⴎⴏⴐⴑⴒⴓⴔⴕⴖⴗⴘⴙⴚⴛⴜⴝⴞⴟⴠⴡⴢⴣⴤⴥⴰⴱⴲⴳⴴⴵⴶⴷⴸⴹⴺⴻⴼⴽⴾⴿⵀⵁⵂⵃⵄⵅⵆⵇⵈⵉⵊⵋⵌⵍⵎⵏⵐⵑⵒⵓⵔⵕⵖⵗⵘⵙⵚⵛⵜⵝⵞⵟⵠⵡⵢⵣⵤⵥⵯⶀⶁⶂⶃⶄⶅⶆⶇⶈⶉⶊⶋⶌⶍⶎⶏⶐⶑⶒⶓⶔⶕⶖⶠⶡⶢⶣⶤⶥⶦⶨⶩⶪⶫⶬⶭⶮⶰⶱⶲⶳⶴⶵⶶⶸⶹⶺⶻⶼⶽⶾⷀⷁⷂⷃⷄⷅⷆⷈⷉⷊⷋⷌⷍⷎⷐⷑⷒⷓⷔⷕⷖⷘⷙⷚⷛⷜⷝⷞⷠⷡⷢⷣⷤⷥⷦⷧⷨⷩⷪⷫⷬⷭⷮⷯⷰⷱⷲⷳⷴⷵⷶⷷⷸⷹⷺⷻⷼⷽⷾⷿ
-⸀⸁⸂⸃⸄⸅⸆⸇⸈⸉⸊⸋⸌⸍⸎⸏⸐⸑⸒⸓⸔⸕⸖⸗⸘⸙⸚⸛⸜⸝⸞⸟⸠⸡⸢⸣⸤⸥⸦⸧⸨⸩⸪⸫⸬⸭⸮
-ⸯ
-⸰⸱⺀⺁⺂⺃⺄⺅⺆⺇⺈⺉⺊⺋⺌⺍⺎⺏⺐⺑⺒⺓⺔⺕⺖⺗⺘⺙⺛⺜⺝⺞⺟⺠⺡⺢⺣⺤⺥⺦⺧⺨⺩⺪⺫⺬⺭⺮⺯⺰⺱⺲⺳⺴⺵⺶⺷⺸⺹⺺⺻⺼⺽⺾⺿⻀⻁⻂⻃⻄⻅⻆⻇⻈⻉⻊⻋⻌⻍⻎⻏⻐⻑⻒⻓⻔⻕⻖⻗⻘⻙⻚⻛⻜⻝⻞⻟⻠⻡⻢⻣⻤⻥⻦⻧⻨⻩⻪⻫⻬⻭⻮⻯⻰⻱⻲⻳⼀⼁⼂⼃⼄⼅⼆⼇⼈⼉⼊⼋⼌⼍⼎⼏⼐⼑⼒⼓⼔⼕⼖⼗⼘⼙⼚⼛⼜⼝⼞⼟⼠⼡⼢⼣⼤⼥⼦⼧⼨⼩⼪⼫⼬⼭⼮⼯⼰⼱⼲⼳⼴⼵⼶⼷⼸⼹⼺⼻⼼⼽⼾⼿⽀⽁⽂⽃⽄⽅⽆⽇⽈⽉⽊⽋⽌⽍⽎⽏⽐⽑⽒⽓⽔⽕⽖⽗⽘⽙⽚⽛⽜⽝⽞⽟⽠⽡⽢⽣⽤⽥⽦⽧⽨⽩⽪⽫⽬⽭⽮⽯⽰⽱⽲⽳⽴⽵⽶⽷⽸⽹⽺⽻⽼⽽⽾⽿⾀⾁⾂⾃⾄⾅⾆⾇⾈⾉⾊⾋⾌⾍⾎⾏⾐⾑⾒⾓⾔⾕⾖⾗⾘⾙⾚⾛⾜⾝⾞⾟⾠⾡⾢⾣⾤⾥⾦⾧⾨⾩⾪⾫⾬⾭⾮⾯⾰⾱⾲⾳⾴⾵⾶⾷⾸⾹⾺⾻⾼⾽⾾⾿⿀⿁⿂⿃⿄⿅⿆⿇⿈⿉⿊⿋⿌⿍⿎⿏⿐⿑⿒⿓⿔⿕⿰⿱⿲⿳⿴⿵⿶⿷⿸⿹⿺⿻　、。〃〄
-々〆〇
-〈〉《》「」『』【】〒〓〔〕〖〗〘〙〚〛〜〝〞〟〠
-〡〢〣〤〥〦〧〨〩〪〭〮〯〫〬
-〰
-〱〲〳〴〵
-〶〷
-〸〹〺〻〼
-〽〾〿
-ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんゔゕゖ゙゚
-゛゜
-ゝゞゟ
-゠
-ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶヷヸヹヺ
-・
-ーヽヾヿㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩㄪㄫㄬㄭㄱㄲㄳㄴㄵㄶㄷㄸㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅃㅄㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣㅤㅥㅦㅧㅨㅩㅪㅫㅬㅭㅮㅯㅰㅱㅲㅳㅴㅵㅶㅷㅸㅹㅺㅻㅼㅽㅾㅿㆀㆁㆂㆃㆄㆅㆆㆇㆈㆉㆊㆋㆌㆍㆎ
-㆐㆑
-㆒㆓㆔㆕
-㆖㆗㆘㆙㆚㆛㆜㆝㆞㆟
-ㆠㆡㆢㆣㆤㆥㆦㆧㆨㆩㆪㆫㆬㆭㆮㆯㆰㆱㆲㆳㆴㆵㆶㆷ
-㇀㇁㇂㇃㇄㇅㇆㇇㇈㇉㇊㇋㇌㇍㇎㇏㇐㇑㇒㇓㇔㇕㇖㇗㇘㇙㇚㇛㇜㇝㇞㇟㇠㇡㇢㇣
-ㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺㇻㇼㇽㇾㇿ
-㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓㈔㈕㈖㈗㈘㈙㈚㈛㈜㈝㈞
-㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩
-㈪㈫㈬㈭㈮㈯㈰㈱㈲㈳㈴㈵㈶㈷㈸㈹㈺㈻㈼㈽㈾㈿㉀㉁㉂㉃㉄㉅㉆㉇㉈㉉㉊㉋㉌㉍㉎㉏㉐
-㉑㉒㉓㉔㉕㉖㉗㉘㉙㉚㉛㉜㉝㉞㉟
-㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻㉼㉽㉾㉿
-㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉
-㊊㊋㊌㊍㊎㊏㊐㊑㊒㊓㊔㊕㊖㊗㊘㊙㊚㊛㊜㊝㊞㊟㊠㊡㊢㊣㊤㊥㊦㊧㊨㊩㊪㊫㊬㊭㊮㊯㊰
-㊱㊲㊳㊴㊵㊶㊷㊸㊹㊺㊻㊼㊽㊾㊿
-㋀㋁㋂㋃㋄㋅㋆㋇㋈㋉㋊㋋㋌㋍㋎㋏㋐㋑㋒㋓㋔㋕㋖㋗㋘㋙㋚㋛㋜㋝㋞㋟㋠㋡㋢㋣㋤㋥㋦㋧㋨㋩㋪㋫㋬㋭㋮㋯㋰㋱㋲㋳㋴㋵㋶㋷㋸㋹㋺㋻㋼㋽㋾㌀㌁㌂㌃㌄㌅㌆㌇㌈㌉㌊㌋㌌㌍㌎㌏㌐㌑㌒㌓㌔㌕㌖㌗㌘㌙㌚㌛㌜㌝㌞㌟㌠㌡㌢㌣㌤㌥㌦㌧㌨㌩㌪㌫㌬㌭㌮㌯㌰㌱㌲㌳㌴㌵㌶㌷㌸㌹㌺㌻㌼㌽㌾㌿㍀㍁㍂㍃㍄㍅㍆㍇㍈㍉㍊㍋㍌㍍㍎㍏㍐㍑㍒㍓㍔㍕㍖㍗㍘㍙㍚㍛㍜㍝㍞㍟㍠㍡㍢㍣㍤㍥㍦㍧㍨㍩㍪㍫㍬㍭㍮㍯㍰㍱㍲㍳㍴㍵㍶㍷㍸㍹㍺㍻㍼㍽㍾㍿㎀㎁㎂㎃㎄㎅㎆㎇㎈㎉㎊㎋㎌㎍㎎㎏㎐㎑㎒㎓㎔㎕㎖㎗㎘㎙㎚㎛㎜㎝㎞㎟㎠㎡㎢㎣㎤㎥㎦㎧㎨㎩㎪㎫㎬㎭㎮㎯㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎺㎻㎼㎽㎾㎿㏀㏁㏂㏃㏄㏅㏆㏇㏈㏉㏊㏋㏌㏍㏎㏏㏐㏑㏒㏓㏔㏕㏖㏗㏘㏙㏚㏛㏜㏝㏞㏟㏠㏡㏢㏣㏤㏥㏦㏧㏨㏩㏪㏫㏬㏭㏮㏯㏰㏱㏲㏳㏴㏵㏶㏷㏸㏹㏺㏻㏼㏽㏾㏿
-㐀䶵
-䷀䷁䷂䷃䷄䷅䷆䷇䷈䷉䷊䷋䷌䷍䷎䷏䷐䷑䷒䷓䷔䷕䷖䷗䷘䷙䷚䷛䷜䷝䷞䷟䷠䷡䷢䷣䷤䷥䷦䷧䷨䷩䷪䷫䷬䷭䷮䷯䷰䷱䷲䷳䷴䷵䷶䷷䷸䷹䷺䷻䷼䷽䷾䷿
-一鿋ꀀꀁꀂꀃꀄꀅꀆꀇꀈꀉꀊꀋꀌꀍꀎꀏꀐꀑꀒꀓꀔꀕꀖꀗꀘꀙꀚꀛꀜꀝꀞꀟꀠꀡꀢꀣꀤꀥꀦꀧꀨꀩꀪꀫꀬꀭꀮꀯꀰꀱꀲꀳꀴꀵꀶꀷꀸꀹꀺꀻꀼꀽꀾꀿꁀꁁꁂꁃꁄꁅꁆꁇꁈꁉꁊꁋꁌꁍꁎꁏꁐꁑꁒꁓꁔꁕꁖꁗꁘꁙꁚꁛꁜꁝꁞꁟꁠꁡꁢꁣꁤꁥꁦꁧꁨꁩꁪꁫꁬꁭꁮꁯꁰꁱꁲꁳꁴꁵꁶꁷꁸꁹꁺꁻꁼꁽꁾꁿꂀꂁꂂꂃꂄꂅꂆꂇꂈꂉꂊꂋꂌꂍꂎꂏꂐꂑꂒꂓꂔꂕꂖꂗꂘꂙꂚꂛꂜꂝꂞꂟꂠꂡꂢꂣꂤꂥꂦꂧꂨꂩꂪꂫꂬꂭꂮꂯꂰꂱꂲꂳꂴꂵꂶꂷꂸꂹꂺꂻꂼꂽꂾꂿꃀꃁꃂꃃꃄꃅꃆꃇꃈꃉꃊꃋꃌꃍꃎꃏꃐꃑꃒꃓꃔꃕꃖꃗꃘꃙꃚꃛꃜꃝꃞꃟꃠꃡꃢꃣꃤꃥꃦꃧꃨꃩꃪꃫꃬꃭꃮꃯꃰꃱꃲꃳꃴꃵꃶꃷꃸꃹꃺꃻꃼꃽꃾꃿꄀꄁꄂꄃꄄꄅꄆꄇꄈꄉꄊꄋꄌꄍꄎꄏꄐꄑꄒꄓꄔꄕꄖꄗꄘꄙꄚꄛꄜꄝꄞꄟꄠꄡꄢꄣꄤꄥꄦꄧꄨꄩꄪꄫꄬꄭꄮꄯꄰꄱꄲꄳꄴꄵꄶꄷꄸꄹꄺꄻꄼꄽꄾꄿꅀꅁꅂꅃꅄꅅꅆꅇꅈꅉꅊꅋꅌꅍꅎꅏꅐꅑꅒꅓꅔꅕꅖꅗꅘꅙꅚꅛꅜꅝꅞꅟꅠꅡꅢꅣꅤꅥꅦꅧꅨꅩꅪꅫꅬꅭꅮꅯꅰꅱꅲꅳꅴꅵꅶꅷꅸꅹꅺꅻꅼꅽꅾꅿꆀꆁꆂꆃꆄꆅꆆꆇꆈꆉꆊꆋꆌꆍꆎꆏꆐꆑꆒꆓꆔꆕꆖꆗꆘꆙꆚꆛꆜꆝꆞꆟꆠꆡꆢꆣꆤꆥꆦꆧꆨꆩꆪꆫꆬꆭꆮꆯꆰꆱꆲꆳꆴꆵꆶꆷꆸꆹꆺꆻꆼꆽꆾꆿꇀꇁꇂꇃꇄꇅꇆꇇꇈꇉꇊꇋꇌꇍꇎꇏꇐꇑꇒꇓꇔꇕꇖꇗꇘꇙꇚꇛꇜꇝꇞꇟꇠꇡꇢꇣꇤꇥꇦꇧꇨꇩꇪꇫꇬꇭꇮꇯꇰꇱꇲꇳꇴꇵꇶꇷꇸꇹꇺꇻꇼꇽꇾꇿꈀꈁꈂꈃꈄꈅꈆꈇꈈꈉꈊꈋꈌꈍꈎꈏꈐꈑꈒꈓꈔꈕꈖꈗꈘꈙꈚꈛꈜꈝꈞꈟꈠꈡꈢꈣꈤꈥꈦꈧꈨꈩꈪꈫꈬꈭꈮꈯꈰꈱꈲꈳꈴꈵꈶꈷꈸꈹꈺꈻꈼꈽꈾꈿꉀꉁꉂꉃꉄꉅꉆꉇꉈꉉꉊꉋꉌꉍꉎꉏꉐꉑꉒꉓꉔꉕꉖꉗꉘꉙꉚꉛꉜꉝꉞꉟꉠꉡꉢꉣꉤꉥꉦꉧꉨꉩꉪꉫꉬꉭꉮꉯꉰꉱꉲꉳꉴꉵꉶꉷꉸꉹꉺꉻꉼꉽꉾꉿꊀꊁꊂꊃꊄꊅꊆꊇꊈꊉꊊꊋꊌꊍꊎꊏꊐꊑꊒꊓꊔꊕꊖꊗꊘꊙꊚꊛꊜꊝꊞꊟꊠꊡꊢꊣꊤꊥꊦꊧꊨꊩꊪꊫꊬꊭꊮꊯꊰꊱꊲꊳꊴꊵꊶꊷꊸꊹꊺꊻꊼꊽꊾꊿꋀꋁꋂꋃꋄꋅꋆꋇꋈꋉꋊꋋꋌꋍꋎꋏꋐꋑꋒꋓꋔꋕꋖꋗꋘꋙꋚꋛꋜꋝꋞꋟꋠꋡꋢꋣꋤꋥꋦꋧꋨꋩꋪꋫꋬꋭꋮꋯꋰꋱꋲꋳꋴꋵꋶꋷꋸꋹꋺꋻꋼꋽꋾꋿꌀꌁꌂꌃꌄꌅꌆꌇꌈꌉꌊꌋꌌꌍꌎꌏꌐꌑꌒꌓꌔꌕꌖꌗꌘꌙꌚꌛꌜꌝꌞꌟꌠꌡꌢꌣꌤꌥꌦꌧꌨꌩꌪꌫꌬꌭꌮꌯꌰꌱꌲꌳꌴꌵꌶꌷꌸꌹꌺꌻꌼꌽꌾꌿꍀꍁꍂꍃꍄꍅꍆꍇꍈꍉꍊꍋꍌꍍꍎꍏꍐꍑꍒꍓꍔꍕꍖꍗꍘꍙꍚꍛꍜꍝꍞꍟꍠꍡꍢꍣꍤꍥꍦꍧꍨꍩꍪꍫꍬꍭꍮꍯꍰꍱꍲꍳꍴꍵꍶꍷꍸꍹꍺꍻꍼꍽꍾꍿꎀꎁꎂꎃꎄꎅꎆꎇꎈꎉꎊꎋꎌꎍꎎꎏꎐꎑꎒꎓꎔꎕꎖꎗꎘꎙꎚꎛꎜꎝꎞꎟꎠꎡꎢꎣꎤꎥꎦꎧꎨꎩꎪꎫꎬꎭꎮꎯꎰꎱꎲꎳꎴꎵꎶꎷꎸꎹꎺꎻꎼꎽꎾꎿꏀꏁꏂꏃꏄꏅꏆꏇꏈꏉꏊꏋꏌꏍꏎꏏꏐꏑꏒꏓꏔꏕꏖꏗꏘꏙꏚꏛꏜꏝꏞꏟꏠꏡꏢꏣꏤꏥꏦꏧꏨꏩꏪꏫꏬꏭꏮꏯꏰꏱꏲꏳꏴꏵꏶꏷꏸꏹꏺꏻꏼꏽꏾꏿꐀꐁꐂꐃꐄꐅꐆꐇꐈꐉꐊꐋꐌꐍꐎꐏꐐꐑꐒꐓꐔꐕꐖꐗꐘꐙꐚꐛꐜꐝꐞꐟꐠꐡꐢꐣꐤꐥꐦꐧꐨꐩꐪꐫꐬꐭꐮꐯꐰꐱꐲꐳꐴꐵꐶꐷꐸꐹꐺꐻꐼꐽꐾꐿꑀꑁꑂꑃꑄꑅꑆꑇꑈꑉꑊꑋꑌꑍꑎꑏꑐꑑꑒꑓꑔꑕꑖꑗꑘꑙꑚꑛꑜꑝꑞꑟꑠꑡꑢꑣꑤꑥꑦꑧꑨꑩꑪꑫꑬꑭꑮꑯꑰꑱꑲꑳꑴꑵꑶꑷꑸꑹꑺꑻꑼꑽꑾꑿꒀꒁꒂꒃꒄꒅꒆꒇꒈꒉꒊꒋꒌ
-꒐꒑꒒꒓꒔꒕꒖꒗꒘꒙꒚꒛꒜꒝꒞꒟꒠꒡꒢꒣꒤꒥꒦꒧꒨꒩꒪꒫꒬꒭꒮꒯꒰꒱꒲꒳꒴꒵꒶꒷꒸꒹꒺꒻꒼꒽꒾꒿꓀꓁꓂꓃꓄꓅꓆
-ꓐꓑꓒꓓꓔꓕꓖꓗꓘꓙꓚꓛꓜꓝꓞꓟꓠꓡꓢꓣꓤꓥꓦꓧꓨꓩꓪꓫꓬꓭꓮꓯꓰꓱꓲꓳꓴꓵꓶꓷꓸꓹꓺꓻꓼꓽ
-꓾꓿
-ꔀꔁꔂꔃꔄꔅꔆꔇꔈꔉꔊꔋꔌꔍꔎꔏꔐꔑꔒꔓꔔꔕꔖꔗꔘꔙꔚꔛꔜꔝꔞꔟꔠꔡꔢꔣꔤꔥꔦꔧꔨꔩꔪꔫꔬꔭꔮꔯꔰꔱꔲꔳꔴꔵꔶꔷꔸꔹꔺꔻꔼꔽꔾꔿꕀꕁꕂꕃꕄꕅꕆꕇꕈꕉꕊꕋꕌꕍꕎꕏꕐꕑꕒꕓꕔꕕꕖꕗꕘꕙꕚꕛꕜꕝꕞꕟꕠꕡꕢꕣꕤꕥꕦꕧꕨꕩꕪꕫꕬꕭꕮꕯꕰꕱꕲꕳꕴꕵꕶꕷꕸꕹꕺꕻꕼꕽꕾꕿꖀꖁꖂꖃꖄꖅꖆꖇꖈꖉꖊꖋꖌꖍꖎꖏꖐꖑꖒꖓꖔꖕꖖꖗꖘꖙꖚꖛꖜꖝꖞꖟꖠꖡꖢꖣꖤꖥꖦꖧꖨꖩꖪꖫꖬꖭꖮꖯꖰꖱꖲꖳꖴꖵꖶꖷꖸꖹꖺꖻꖼꖽꖾꖿꗀꗁꗂꗃꗄꗅꗆꗇꗈꗉꗊꗋꗌꗍꗎꗏꗐꗑꗒꗓꗔꗕꗖꗗꗘꗙꗚꗛꗜꗝꗞꗟꗠꗡꗢꗣꗤꗥꗦꗧꗨꗩꗪꗫꗬꗭꗮꗯꗰꗱꗲꗳꗴꗵꗶꗷꗸꗹꗺꗻꗼꗽꗾꗿꘀꘁꘂꘃꘄꘅꘆꘇꘈꘉꘊꘋꘌ
-꘍꘎꘏
-ꘐꘑꘒꘓꘔꘕꘖꘗꘘꘙꘚꘛꘜꘝꘞꘟ꘠꘡꘢꘣꘤꘥꘦꘧꘨꘩ꘪꘫꙀꙁꙂꙃꙄꙅꙆꙇꙈꙉꙊꙋꙌꙍꙎꙏꙐꙑꙒꙓꙔꙕꙖꙗꙘꙙꙚꙛꙜꙝꙞꙟꙢꙣꙤꙥꙦꙧꙨꙩꙪꙫꙬꙭꙮ꙯꙰꙱꙲
-꙳
-꙼꙽
-꙾
-ꙿꚀꚁꚂꚃꚄꚅꚆꚇꚈꚉꚊꚋꚌꚍꚎꚏꚐꚑꚒꚓꚔꚕꚖꚗꚠꚡꚢꚣꚤꚥꚦꚧꚨꚩꚪꚫꚬꚭꚮꚯꚰꚱꚲꚳꚴꚵꚶꚷꚸꚹꚺꚻꚼꚽꚾꚿꛀꛁꛂꛃꛄꛅꛆꛇꛈꛉꛊꛋꛌꛍꛎꛏꛐꛑꛒꛓꛔꛕꛖꛗꛘꛙꛚꛛꛜꛝꛞꛟꛠꛡꛢꛣꛤꛥꛦꛧꛨꛩꛪꛫꛬꛭꛮꛯ꛰꛱
-꛲꛳꛴꛵꛶꛷꜀꜁꜂꜃꜄꜅꜆꜇꜈꜉꜊꜋꜌꜍꜎꜏꜐꜑꜒꜓꜔꜕꜖
-ꜗꜘꜙꜚꜛꜜꜝꜞꜟ
-꜠꜡
-ꜢꜣꜤꜥꜦꜧꜨꜩꜪꜫꜬꜭꜮꜯꜰꜱꜲꜳꜴꜵꜶꜷꜸꜹꜺꜻꜼꜽꜾꜿꝀꝁꝂꝃꝄꝅꝆꝇꝈꝉꝊꝋꝌꝍꝎꝏꝐꝑꝒꝓꝔꝕꝖꝗꝘꝙꝚꝛꝜꝝꝞꝟꝠꝡꝢꝣꝤꝥꝦꝧꝨꝩꝪꝫꝬꝭꝮꝯꝰꝱꝲꝳꝴꝵꝶꝷꝸꝹꝺꝻꝼꝽꝾꝿꞀꞁꞂꞃꞄꞅꞆꞇꞈ
-꞉꞊
-Ꞌꞌꟻꟼꟽꟾꟿꠀꠁꠂꠃꠄꠅ꠆ꠇꠈꠉꠊꠋꠌꠍꠎꠏꠐꠑꠒꠓꠔꠕꠖꠗꠘꠙꠚꠛꠜꠝꠞꠟꠠꠡꠢꠣꠤꠥꠦꠧ
-꠨꠩꠪꠫
-꠰꠱꠲꠳꠴꠵
-꠶꠷꠸꠹
-ꡀꡁꡂꡃꡄꡅꡆꡇꡈꡉꡊꡋꡌꡍꡎꡏꡐꡑꡒꡓꡔꡕꡖꡗꡘꡙꡚꡛꡜꡝꡞꡟꡠꡡꡢꡣꡤꡥꡦꡧꡨꡩꡪꡫꡬꡭꡮꡯꡰꡱꡲꡳ
-꡴꡵꡶꡷
-ꢀꢁꢂꢃꢄꢅꢆꢇꢈꢉꢊꢋꢌꢍꢎꢏꢐꢑꢒꢓꢔꢕꢖꢗꢘꢙꢚꢛꢜꢝꢞꢟꢠꢡꢢꢣꢤꢥꢦꢧꢨꢩꢪꢫꢬꢭꢮꢯꢰꢱꢲꢳꢴꢵꢶꢷꢸꢹꢺꢻꢼꢽꢾꢿꣀꣁꣂꣃ꣄
-꣎꣏
-꣐꣑꣒꣓꣔꣕꣖꣗꣘꣙꣠꣡꣢꣣꣤꣥꣦꣧꣨꣩꣪꣫꣬꣭꣮꣯꣰꣱ꣲꣳꣴꣵꣶꣷ
-꣸꣹꣺
-ꣻ꤀꤁꤂꤃꤄꤅꤆꤇꤈꤉ꤊꤋꤌꤍꤎꤏꤐꤑꤒꤓꤔꤕꤖꤗꤘꤙꤚꤛꤜꤝꤞꤟꤠꤡꤢꤣꤤꤥꤦꤧꤨꤩꤪ꤫꤬꤭
-꤮꤯
-ꤰꤱꤲꤳꤴꤵꤶꤷꤸꤹꤺꤻꤼꤽꤾꤿꥀꥁꥂꥃꥄꥅꥆꥇꥈꥉꥊꥋꥌꥍꥎꥏꥐꥑꥒ꥓
-꥟
-ꥠꥡꥢꥣꥤꥥꥦꥧꥨꥩꥪꥫꥬꥭꥮꥯꥰꥱꥲꥳꥴꥵꥶꥷꥸꥹꥺꥻꥼꦀꦁꦂꦃꦄꦅꦆꦇꦈꦉꦊꦋꦌꦍꦎꦏꦐꦑꦒꦓꦔꦕꦖꦗꦘꦙꦚꦛꦜꦝꦞꦟꦠꦡꦢꦣꦤꦥꦦꦧꦨꦩꦪꦫꦬꦭꦮꦯꦰꦱꦲ꦳ꦴꦵꦶꦷꦸꦹꦺꦻꦼꦽꦾꦿ꧀
-꧁꧂꧃꧄꧅꧆꧇꧈꧉꧊꧋꧌꧍
-ꧏ꧐꧑꧒꧓꧔꧕꧖꧗꧘꧙
-꧞꧟
-ꨀꨁꨂꨃꨄꨅꨆꨇꨈꨉꨊꨋꨌꨍꨎꨏꨐꨑꨒꨓꨔꨕꨖꨗꨘꨙꨚꨛꨜꨝꨞꨟꨠꨡꨢꨣꨤꨥꨦꨧꨨꨩꨪꨫꨬꨭꨮꨯꨰꨱꨲꨳꨴꨵꨶꩀꩁꩂꩃꩄꩅꩆꩇꩈꩉꩊꩋꩌꩍ꩐꩑꩒꩓꩔꩕꩖꩗꩘꩙
-꩜꩝꩞꩟
-ꩠꩡꩢꩣꩤꩥꩦꩧꩨꩩꩪꩫꩬꩭꩮꩯꩰꩱꩲꩳꩴꩵꩶ
-꩷꩸꩹
-ꩺꩻꪀꪁꪂꪃꪄꪅꪆꪇꪈꪉꪊꪋꪌꪍꪎꪏꪐꪑꪒꪓꪔꪕꪖꪗꪘꪙꪚꪛꪜꪝꪞꪟꪠꪡꪢꪣꪤꪥꪦꪧꪨꪩꪪꪫꪬꪭꪮꪯꪰꪱꪴꪲꪳꪵꪶꪷꪸꪹꪺꪻꪼꪽꪾ꪿ꫀ꫁ꫂꫛꫜꫝ
-꫞꫟
-ꯀꯁꯂꯃꯄꯅꯆꯇꯈꯉꯊꯋꯌꯍꯎꯏꯐꯑꯒꯓꯔꯕꯖꯗꯘꯙꯚꯛꯜꯝꯞꯟꯠꯡꯢꯣꯤꯥꯦꯧꯨꯩꯪ
-꯫
-꯬꯭꯰꯱꯲꯳꯴꯵꯶꯷꯸꯹가힣ힰힱힲힳힴힵힶힷힸힹힺힻힼힽힾힿퟀퟁퟂퟃퟄퟅퟆퟋퟌퟍퟎퟏퟐퟑퟒퟓퟔퟕퟖퟗퟘퟙퟚퟛퟜퟝퟞퟟퟠퟡퟢퟣퟤퟥퟦퟧퟨퟩퟪퟫퟬퟭퟮퟯퟰퟱퟲퟳퟴퟵퟶퟷퟸퟹퟺퟻ
-
-豈更車賈滑串句龜龜契金喇奈懶癩羅蘿螺裸邏樂洛烙珞落酪駱亂卵欄爛蘭鸞嵐濫藍襤拉臘蠟廊朗浪狼郎來冷勞擄櫓爐盧老蘆虜路露魯鷺碌祿綠菉錄鹿論壟弄籠聾牢磊賂雷壘屢樓淚漏累縷陋勒肋凜凌稜綾菱陵讀拏樂諾丹寧怒率異北磻便復不泌數索參塞省葉說殺辰沈拾若掠略亮兩凉梁糧良諒量勵呂女廬旅濾礪閭驪麗黎力曆歷轢年憐戀撚漣煉璉秊練聯輦蓮連鍊列劣咽烈裂說廉念捻殮簾獵令囹寧嶺怜玲瑩羚聆鈴零靈領例禮醴隸惡了僚寮尿料樂燎療蓼遼龍暈阮劉杻柳流溜琉留硫紐類六戮陸倫崙淪輪律慄栗率隆利吏履易李梨泥理痢罹裏裡里離匿溺吝燐璘藺隣鱗麟林淋臨立笠粒狀炙識什茶刺切度拓糖宅洞暴輻行降見廓兀嗀﨎﨏塚﨑晴﨓﨔凞猪益礼神祥福靖精羽﨟蘒﨡諸﨣﨤逸都﨧﨨﨩飯飼館鶴侮僧免勉勤卑喝嘆器塀墨層屮悔慨憎懲敏既暑梅海渚漢煮爫琢碑社祉祈祐祖祝禍禎穀突節練縉繁署者臭艹艹著褐視謁謹賓贈辶逸難響頻恵𤋮舘並况全侀充冀勇勺喝啕喙嗢塚墳奄奔婢嬨廒廙彩徭惘慎愈憎慠懲戴揄搜摒敖晴朗望杖歹殺流滛滋漢瀞煮瞧爵犯猪瑱甆画瘝瘟益盛直睊着磌窱節类絛練缾者荒華蝹襁覆視調諸請謁諾諭謹變贈輸遲醙鉶陼難靖韛響頋頻鬒龜𢡊𢡄𣏕㮝䀘䀹𥉉𥳐𧻓齃龎ﬀﬁﬂﬃﬄﬅﬆﬓﬔﬕﬖﬗיִﬞײַﬠﬡﬢﬣﬤﬥﬦﬧﬨ
-﬩
-שׁשׂשּׁשּׂאַאָאּבּגּדּהּוּזּטּיּךּכּלּמּנּסּףּפּצּקּרּשּתּוֹבֿכֿפֿﭏﭐﭑﭒﭓﭔﭕﭖﭗﭘﭙﭚﭛﭜﭝﭞﭟﭠﭡﭢﭣﭤﭥﭦﭧﭨﭩﭪﭫﭬﭭﭮﭯﭰﭱﭲﭳﭴﭵﭶﭷﭸﭹﭺﭻﭼﭽﭾﭿﮀﮁﮂﮃﮄﮅﮆﮇﮈﮉﮊﮋﮌﮍﮎﮏﮐﮑﮒﮓﮔﮕﮖﮗﮘﮙﮚﮛﮜﮝﮞﮟﮠﮡﮢﮣﮤﮥﮦﮧﮨﮩﮪﮫﮬﮭﮮﮯﮰﮱﯓﯔﯕﯖﯗﯘﯙﯚﯛﯜﯝﯞﯟﯠﯡﯢﯣﯤﯥﯦﯧﯨﯩﯪﯫﯬﯭﯮﯯﯰﯱﯲﯳﯴﯵﯶﯷﯸﯹﯺﯻﯼﯽﯾﯿﰀﰁﰂﰃﰄﰅﰆﰇﰈﰉﰊﰋﰌﰍﰎﰏﰐﰑﰒﰓﰔﰕﰖﰗﰘﰙﰚﰛﰜﰝﰞﰟﰠﰡﰢﰣﰤﰥﰦﰧﰨﰩﰪﰫﰬﰭﰮﰯﰰﰱﰲﰳﰴﰵﰶﰷﰸﰹﰺﰻﰼﰽﰾﰿﱀﱁﱂﱃﱄﱅﱆﱇﱈﱉﱊﱋﱌﱍﱎﱏﱐﱑﱒﱓﱔﱕﱖﱗﱘﱙﱚﱛﱜﱝﱞﱟﱠﱡﱢﱣﱤﱥﱦﱧﱨﱩﱪﱫﱬﱭﱮﱯﱰﱱﱲﱳﱴﱵﱶﱷﱸﱹﱺﱻﱼﱽﱾﱿﲀﲁﲂﲃﲄﲅﲆﲇﲈﲉﲊﲋﲌﲍﲎﲏﲐﲑﲒﲓﲔﲕﲖﲗﲘﲙﲚﲛﲜﲝﲞﲟﲠﲡﲢﲣﲤﲥﲦﲧﲨﲩﲪﲫﲬﲭﲮﲯﲰﲱﲲﲳﲴﲵﲶﲷﲸﲹﲺﲻﲼﲽﲾﲿﳀﳁﳂﳃﳄﳅﳆﳇﳈﳉﳊﳋﳌﳍﳎﳏﳐﳑﳒﳓﳔﳕﳖﳗﳘﳙﳚﳛﳜﳝﳞﳟﳠﳡﳢﳣﳤﳥﳦﳧﳨﳩﳪﳫﳬﳭﳮﳯﳰﳱﳲﳳﳴﳵﳶﳷﳸﳹﳺﳻﳼﳽﳾﳿﴀﴁﴂﴃﴄﴅﴆﴇﴈﴉﴊﴋﴌﴍﴎﴏﴐﴑﴒﴓﴔﴕﴖﴗﴘﴙﴚﴛﴜﴝﴞﴟﴠﴡﴢﴣﴤﴥﴦﴧﴨﴩﴪﴫﴬﴭﴮﴯﴰﴱﴲﴳﴴﴵﴶﴷﴸﴹﴺﴻﴼﴽ
-﴾﴿
-ﵐﵑﵒﵓﵔﵕﵖﵗﵘﵙﵚﵛﵜﵝﵞﵟﵠﵡﵢﵣﵤﵥﵦﵧﵨﵩﵪﵫﵬﵭﵮﵯﵰﵱﵲﵳﵴﵵﵶﵷﵸﵹﵺﵻﵼﵽﵾﵿﶀﶁﶂﶃﶄﶅﶆﶇﶈﶉﶊﶋﶌﶍﶎﶏﶒﶓﶔﶕﶖﶗﶘﶙﶚﶛﶜﶝﶞﶟﶠﶡﶢﶣﶤﶥﶦﶧﶨﶩﶪﶫﶬﶭﶮﶯﶰﶱﶲﶳﶴﶵﶶﶷﶸﶹﶺﶻﶼﶽﶾﶿﷀﷁﷂﷃﷄﷅﷆﷇﷰﷱﷲﷳﷴﷵﷶﷷﷸﷹﷺﷻ
-﷼﷽
-︀︁︂︃︄︅︆︇︈︉︊︋︌︍︎️
-︐︑︒︓︔︕︖︗︘︙
-︠︡︢︣︤︥︦
-︰︱︲︳︴︵︶︷︸︹︺︻︼︽︾︿﹀﹁﹂﹃﹄﹅﹆﹇﹈﹉﹊﹋﹌﹍﹎﹏﹐﹑﹒﹔﹕﹖﹗﹘﹙﹚﹛﹜﹝﹞﹟﹠﹡﹢﹣﹤﹥﹦﹨﹩﹪﹫
-ﹰﹱﹲﹳﹴﹶﹷﹸﹹﹺﹻﹼﹽﹾﹿﺀﺁﺂﺃﺄﺅﺆﺇﺈﺉﺊﺋﺌﺍﺎﺏﺐﺑﺒﺓﺔﺕﺖﺗﺘﺙﺚﺛﺜﺝﺞﺟﺠﺡﺢﺣﺤﺥﺦﺧﺨﺩﺪﺫﺬﺭﺮﺯﺰﺱﺲﺳﺴﺵﺶﺷﺸﺹﺺﺻﺼﺽﺾﺿﻀﻁﻂﻃﻄﻅﻆﻇﻈﻉﻊﻋﻌﻍﻎﻏﻐﻑﻒﻓﻔﻕﻖﻗﻘﻙﻚﻛﻜﻝﻞﻟﻠﻡﻢﻣﻤﻥﻦﻧﻨﻩﻪﻫﻬﻭﻮﻯﻰﻱﻲﻳﻴﻵﻶﻷﻸﻹﻺﻻﻼ
-﻿！＂＃＄％＆＇（）＊＋，－．／
-０１２３４５６７８９
-：；＜＝＞？＠
-ＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺ
-［＼］＾＿｀
-ａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔｕｖｗｘｙｚ
-｛｜｝～｟｠｡｢｣､･
-ｦｧｨｩｪｫｬｭｮｯｰｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜﾝﾞﾟﾠﾡﾢﾣﾤﾥﾦﾧﾨﾩﾪﾫﾬﾭﾮﾯﾰﾱﾲﾳﾴﾵﾶﾷﾸﾹﾺﾻﾼﾽﾾￂￃￄￅￆￇￊￋￌￍￎￏￒￓￔￕￖￗￚￛￜ
-￠￡￢￣￤￥￦￨￩￪￫￬￭￮￹￺￻￼�
-𐀀
\ No newline at end of file
diff --git a/modules/search/tests/search_embedded_form.info b/modules/search/tests/search_embedded_form.info
deleted file mode 100644
index 02e4c1f..0000000
--- a/modules/search/tests/search_embedded_form.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Search embedded form"
-description = "Support module for search module testing of embedded forms."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/search/tests/search_embedded_form.module b/modules/search/tests/search_embedded_form.module
deleted file mode 100644
index 4845796..0000000
--- a/modules/search/tests/search_embedded_form.module
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-/**
- * @file
- * Test module implementing a form that can be embedded in search results.
- *
- * Embedded form are important, for example, for ecommerce sites where each
- * search result may included an embedded form with buttons like "Add to cart"
- * for each individual product (node) listed in the search results.
- */
-
-/**
-  * Implements hook_menu().
-  */
-function search_embedded_form_menu() {
-  $items['search_embedded_form'] = array(
-    'title' => 'Search_Embed_Form',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('search_embedded_form_form'),
-    'access arguments' => array('search content'),
-    'type' => MENU_CALLBACK,
-  );
-
-  return $items;
-}
-
-/**
- * Builds a form for embedding in search results for testing.
- *
- * @see search_embedded_form_form_submit().
- */
-function search_embedded_form_form($form, &$form_state) {
-  $count = variable_get('search_embedded_form_submitted', 0);
-
-  $form['name'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Your name'),
-    '#maxlength' => 255,
-    '#default_value' => '',
-    '#required' => TRUE,
-    '#description' => t('Times form has been submitted: %count', array('%count' => $count)),
-  );
-
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Send away'),
-  );
-
-  $form['#submit'][] = 'search_embedded_form_form_submit';
-
-  return $form;
-}
-
-/**
- * Submit handler for search_embedded_form_form().
- */
-function search_embedded_form_form_submit($form, &$form_state) {
-  $count = variable_get('search_embedded_form_submitted', 0) + 1;
-  variable_set('search_embedded_form_submitted', $count);
-  drupal_set_message(t('Test form was submitted'));
-}
-
-/**
- * Adds the test form to search results.
- */
-function search_embedded_form_preprocess_search_result(&$variables) {
-  $form = drupal_get_form('search_embedded_form_form');
-  $variables['snippet'] .= drupal_render($form);
-}
diff --git a/modules/search/tests/search_extra_type.info b/modules/search/tests/search_extra_type.info
deleted file mode 100644
index 5c3293c..0000000
--- a/modules/search/tests/search_extra_type.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Test search type"
-description = "Support module for search module testing."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/search/tests/search_extra_type.module b/modules/search/tests/search_extra_type.module
deleted file mode 100644
index 80c050c..0000000
--- a/modules/search/tests/search_extra_type.module
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-
-/**
- * @file
- * Dummy module implementing a search type for search module testing.
- */
-
-/**
- * Implements hook_search_info().
- */
-function search_extra_type_search_info() {
-  return array(
-    'title' => 'Dummy search type',
-    'path' => 'dummy_path',
-    'conditions_callback' => 'search_extra_type_conditions',
-  );
-}
-
-/**
- * Test conditions callback for hook_search_info().
- */
-function search_extra_type_conditions() {
-  $conditions = array();
-
-  if (!empty($_REQUEST['search_conditions'])) {
-    $conditions['search_conditions'] = $_REQUEST['search_conditions'];
-  }
-  return $conditions;
-}
-
-/**
- * Implements hook_search_execute().
- *
- * This is a dummy search, so when search "executes", we just return a dummy
- * result containing the keywords and a list of conditions.
- */
-function search_extra_type_search_execute($keys = NULL, $conditions = NULL) {
-  if (!$keys) {
-    $keys = '';
-  }
-  return array(
-    array(
-      'link' => url('node'),
-      'type' => 'Dummy result type',
-      'title' => 'Dummy title',
-      'snippet' => "Dummy search snippet to display. Keywords: {$keys}\n\nConditions: " . print_r($conditions, TRUE),
-    ),
-  );
-}
-
-/**
- * Implements hook_search_page().
- *
- * Adds some text to the search page so we can verify that it runs.
- */
-function search_extra_type_search_page($results) {
-  $output['prefix']['#markup'] = '<h2>Test page text is here</h2> <ol class="search-results">';
-
-  foreach ($results as $entry) {
-    $output[] = array(
-      '#theme' => 'search_result',
-      '#result' => $entry,
-      '#module' => 'search_extra_type',
-    );
-  }
-  $output['suffix']['#markup'] = '</ol>' . theme('pager');
-
-  return $output;
-}
diff --git a/modules/shortcut/shortcut-rtl.css b/modules/shortcut/shortcut-rtl.css
deleted file mode 100644
index 5dec957..0000000
--- a/modules/shortcut/shortcut-rtl.css
+++ /dev/null
@@ -1,48 +0,0 @@
-
-div#toolbar a#edit-shortcuts {
-  position: absolute;
-  left: 0;
-  top: 0;
-  padding: 5px 5px 5px 10px;
-}
-div#toolbar div.toolbar-shortcuts ul {
-  float: none;
-  margin-right: 5px;
-  margin-left: 10em;
-}
-div#toolbar div.toolbar-shortcuts ul li a {
-  margin-left: 5px;
-  margin-right: 0;
-  padding: 0 5px;
-}
-div#toolbar div.toolbar-shortcuts span.icon {
-  float: right;
-}
-div.add-or-remove-shortcuts a span.icon {
-  float: right;
-  margin-right: 8px;
-  margin-left: 0;
-}
-div.add-or-remove-shortcuts a span.text {
-  float: right;
-  padding-right: 10px;
-  padding-left: 0;
-}
-div.add-or-remove-shortcuts a:focus span.text,
-div.add-or-remove-shortcuts a:hover span.text {
-  -moz-border-radius: 5px 0 0 5px;
-  -webkit-border-top-left-radius: 5px;
-  -webkit-border-bottom-left-radius: 5px;
-  border-radius: 5px 0 0 5px;
-  padding-left: 6px;
-}
-#shortcut-set-switch .form-item-new {
-  padding-right: 17px;
-  padding-left: 0;
-}
-div.add-shortcut a:hover span.icon {
-  background-position: 0 -24px;
-}
-div.remove-shortcut a:hover span.icon {
-  background-position: -12px -24px;
-}
diff --git a/modules/shortcut/shortcut.admin.css b/modules/shortcut/shortcut.admin.css
deleted file mode 100644
index 8ca03be..0000000
--- a/modules/shortcut/shortcut.admin.css
+++ /dev/null
@@ -1,8 +0,0 @@
-
-.shortcut-slot-hidden {
-  display: none;
-}
-
-div.form-item-set div.form-item-new {
-  display: inline;
-}
diff --git a/modules/shortcut/shortcut.admin.js b/modules/shortcut/shortcut.admin.js
deleted file mode 100644
index 422cc4c..0000000
--- a/modules/shortcut/shortcut.admin.js
+++ /dev/null
@@ -1,115 +0,0 @@
-(function ($) {
-
-/**
- * Handle the concept of a fixed number of slots.
- *
- * This behavior is dependent on the tableDrag behavior, since it uses the
- * objects initialized in that behavior to update the row.
- */
-Drupal.behaviors.shortcutDrag = {
-  attach: function (context, settings) {
-    if (Drupal.tableDrag) {
-      var table = $('table#shortcuts'),
-        visibleLength = 0,
-        slots = 0,
-        tableDrag = Drupal.tableDrag.shortcuts;
-      $('> tbody > tr, > tr', table)
-        .filter(':visible')
-          .filter(':odd').filter('.odd')
-            .removeClass('odd').addClass('even')
-          .end().end()
-          .filter(':even').filter('.even')
-            .removeClass('even').addClass('odd')
-          .end().end()
-        .end()
-        .filter('.shortcut-slot-empty').each(function(index) {
-          if ($(this).is(':visible')) {
-            visibleLength++;
-          }
-          slots++;
-        });
-
-      // Add a handler for when a row is swapped.
-      tableDrag.row.prototype.onSwap = function (swappedRow) {
-        var disabledIndex = $(table).find('tr').index($(table).find('tr.shortcut-status-disabled')) - slots - 2,
-          count = 0;
-        $(table).find('tr.shortcut-status-enabled').nextAll(':not(.shortcut-slot-empty)').each(function(index) {
-          if (index < disabledIndex) {
-            count++;
-          }
-        });
-        var total = slots - count;
-        if (total == -1) {
-          var disabled = $(table).find('tr.shortcut-status-disabled');
-          // To maintain the shortcut links limit, we need to move the last
-          // element from the enabled section to the disabled section.
-          var changedRow = disabled.prevAll(':not(.shortcut-slot-empty)').not($(this.element)).get(0);
-          disabled.after(changedRow);
-          if ($(changedRow).hasClass('draggable')) {
-            // The dropped element will automatically be marked as changed by
-            // the tableDrag system. However, the row that swapped with it
-            // has moved to the "disabled" section, so we need to force its
-            // status to be disabled and mark it also as changed.
-            var changedRowObject = new tableDrag.row(changedRow, 'mouse', false, 0, true);
-            changedRowObject.markChanged();
-            tableDrag.rowStatusChange(changedRowObject);
-          }
-        }
-        else if (total != visibleLength) {
-          if (total > visibleLength) {
-            // Less slots on screen than needed.
-            $('.shortcut-slot-empty:hidden:last').show();
-            visibleLength++;
-          }
-          else {
-            // More slots on screen than needed.
-            $('.shortcut-slot-empty:visible:last').hide();
-            visibleLength--;
-          }
-        }
-      };
-
-      // Add a handler so when a row is dropped, update fields dropped into new regions.
-      tableDrag.onDrop = function () {
-        tableDrag.rowStatusChange(this.rowObject);
-        return true;
-      };
-
-      tableDrag.rowStatusChange = function (rowObject) {
-        // Use "status-message" row instead of "status" row because
-        // "status-{status_name}-message" is less prone to regexp match errors.
-        var statusRow = $(rowObject.element).prevAll('tr.shortcut-status').get(0);
-        var statusName = statusRow.className.replace(/([^ ]+[ ]+)*shortcut-status-([^ ]+)([ ]+[^ ]+)*/, '$2');
-        var statusField = $('select.shortcut-status-select', rowObject.element);
-        statusField.val(statusName);
-      };
-
-      tableDrag.restripeTable = function () {
-        // :even and :odd are reversed because jQuery counts from 0 and
-        // we count from 1, so we're out of sync.
-        // Match immediate children of the parent element to allow nesting.
-        $('> tbody > tr:visible, > tr:visible', this.table)
-          .filter(':odd').filter('.odd')
-            .removeClass('odd').addClass('even')
-          .end().end()
-          .filter(':even').filter('.even')
-            .removeClass('even').addClass('odd');
-      };
-    }
-  }
-};
-
-/**
- * Make it so when you enter text into the "New set" textfield, the
- * corresponding radio button gets selected.
- */
-Drupal.behaviors.newSet = {
-  attach: function (context, settings) {
-    var selectDefault = function() {
-      $(this).closest('form').find('.form-item-set .form-type-radio:last input').attr('checked', 'checked');
-    };
-    $('div.form-item-new input').focus(selectDefault).keyup(selectDefault);
-  }
-};
-
-})(jQuery);
diff --git a/modules/shortcut/shortcut.api.php b/modules/shortcut/shortcut.api.php
deleted file mode 100644
index 717a7c9..0000000
--- a/modules/shortcut/shortcut.api.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/**
- * @file
- * Hooks provided by the Shortcut module.
- */
-
-/**
- * @addtogroup hooks
- * @{
- */
-
-/**
- * Return the name of a default shortcut set for the provided user account.
- *
- * This hook allows modules to define default shortcut sets for a particular
- * user that differ from the site-wide default (for example, a module may want
- * to define default shortcuts on a per-role basis).
- *
- * The default shortcut set is used only when the user does not have any other
- * shortcut set explicitly assigned to them.
- *
- * Note that only one default shortcut set can exist per user, so when multiple
- * modules implement this hook, the last (i.e., highest weighted) module which
- * returns a valid shortcut set name will prevail.
- *
- * @param $account
- *   The user account whose default shortcut set is being requested.
- * @return
- *   The name of the shortcut set that this module recommends for that user, if
- *   there is one.
- */
-function hook_shortcut_default_set($account) {
-  // Use a special set of default shortcuts for administrators only.
-  if (in_array(variable_get('user_admin_role', 0), $account->roles)) {
-    return variable_get('mymodule_shortcut_admin_default_set');
-  }
-}
-
-/**
- * @} End of "addtogroup hooks".
- */
diff --git a/modules/shortcut/shortcut.css b/modules/shortcut/shortcut.css
deleted file mode 100644
index 3afcb94..0000000
--- a/modules/shortcut/shortcut.css
+++ /dev/null
@@ -1,106 +0,0 @@
-div#toolbar a#edit-shortcuts {
-  float: right;
-  padding: 5px 10px 5px 5px;
-  line-height: 24px;
-  color: #fefefe;
-}
-div#toolbar a#edit-shortcuts:focus,
-div#toolbar a#edit-shortcuts:hover,
-div#toolbar a#edit-shortcuts.active {
-  color: #fff;
-  text-decoration: underline;
-}
-
-div#toolbar div.toolbar-shortcuts ul {
-  padding: 5px 0 2px 0;
-  height: 28px;
-  line-height: 24px;
-  float: left; /* LTR */
-  margin-left:5px; /* LTR */
-}
-
-div#toolbar div.toolbar-shortcuts ul li a {
-  padding: 0 5px 0 5px;
-  margin-right: 5px; /* LTR */
-  -moz-border-radius: 5px;
-  -webkit-border-radius: 5px;
-  border-radius: 5px;
-}
-
-div#toolbar div.toolbar-shortcuts ul li a:focus,
-div#toolbar div.toolbar-shortcuts ul li a:hover,
-div#toolbar div.toolbar-shortcuts ul li a.active:focus {
-  background: #555;
-}
-
-div#toolbar div.toolbar-shortcuts ul li a.active:hover,
-div#toolbar div.toolbar-shortcuts ul li a.active {
-  background: #000;
-}
-
-div#toolbar div.toolbar-shortcuts span.icon {
-  float: left; /* LTR */
-  background: #444;
-  width: 30px;
-  height: 30px;
-  margin-right: 5px; /* LTR */
-  -moz-border-radius: 5px;
-  -webkit-border-radius: 5px;
-  border-radius: 5px;
-}
-
-div.add-or-remove-shortcuts {
-  padding-top: 5px;
-}
-
-div.add-or-remove-shortcuts a span.icon {
-  display: block;
-  width: 12px;
-  background: transparent url(shortcut.png) no-repeat scroll 0 0;
-  height: 12px;
-  float: left;
-  margin-left:8px;
-}
-
-div.add-shortcut a:focus span.icon,
-div.add-shortcut a:hover span.icon {
-  background-position: 0 -12px;
-}
-div.remove-shortcut a span.icon {
-  background-position: -12px 0;
-}
-div.remove-shortcut a:focus span.icon,
-div.remove-shortcut a:hover span.icon {
-  background-position: -12px -12px;
-}
-
-div.add-or-remove-shortcuts a span.text {
-  float: left;
-  padding-left:10px;
-  display: none;
-}
-
-div.add-or-remove-shortcuts a:focus span.text,
-div.add-or-remove-shortcuts a:hover span.text {
-  font-size: 10px;
-  line-height: 12px;
-  color: #fff;
-  background-color: #5f605b;
-  display: block;
-  padding-right: 6px; /* LTR */
-  cursor: pointer;
-  -moz-border-radius: 0 5px 5px 0; /* LTR */
-  -webkit-border-top-right-radius: 5px; /* LTR */
-  -webkit-border-bottom-right-radius: 5px; /* LTR */
-  border-radius: 0 5px 5px 0; /* LTR */
-}
-
-#shortcut-set-switch .form-type-radios {
-  padding-bottom: 0;
-  margin-bottom: 0;
-}
-
-#shortcut-set-switch .form-item-new {
-  padding-top: 0;
-  padding-left: 17px; /* LTR */
-}
diff --git a/modules/shortcut/shortcut.info b/modules/shortcut/shortcut.info
deleted file mode 100644
index 8132b3c..0000000
--- a/modules/shortcut/shortcut.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Shortcut
-description = Allows users to manage customizable lists of shortcut links.
-package = Core
-version = VERSION
-core = 7.x
-files[] = shortcut.test
-configure = admin/config/user-interface/shortcut
diff --git a/modules/shortcut/shortcut.install b/modules/shortcut/shortcut.install
deleted file mode 100644
index 60ee6be..0000000
--- a/modules/shortcut/shortcut.install
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the shortcut module.
- */
-
-/**
- * Implements hook_install().
- */
-function shortcut_install() {
-  $t = get_t();
-  // Create an initial default shortcut set.
-  $shortcut_set = new stdClass();
-  $shortcut_set->title = $t('Default');
-  $shortcut_set->links = array(
-    array(
-      'link_path' => 'node/add',
-      'link_title' => $t('Add content'),
-      'weight' => -20,
-    ),
-    array(
-      'link_path' => 'admin/content',
-      'link_title' => $t('Find content'),
-      'weight' => -19,
-    ),
-  );
-  // If Drupal is being installed, rebuild the menu before saving the shortcut
-  // set, to make sure the links defined above can be correctly saved. (During
-  // installation, the menu might not have been built at all yet, or it might
-  // have been built but without the node module's links in it.)
-  if (drupal_installation_attempted()) {
-    menu_rebuild();
-  }
-  shortcut_set_save($shortcut_set);
-}
-
-/**
- * Implements hook_uninstall().
- */
-function shortcut_uninstall() {
-  drupal_load('module', 'shortcut');
-  // Delete the menu links associated with each shortcut set.
-  foreach (shortcut_sets() as $shortcut_set) {
-    menu_delete_links($shortcut_set->set_name);
-  }
-}
-
-/**
- * Implements hook_schema().
- */
-function shortcut_schema() {
-  $schema['shortcut_set'] = array(
-    'description' => 'Stores information about sets of shortcuts links.',
-    'fields' => array(
-      'set_name' => array(
-        'type' => 'varchar',
-        'length' => 32,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => "Primary Key: The {menu_links}.menu_name under which the set's links are stored.",
-      ),
-      'title' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'The title of the set.',
-      ),
-    ),
-    'primary key' => array('set_name'),
-    'foreign keys' => array(
-      'menu_name' => array(
-        'table' => 'menu_links',
-        'columns' => array('set_name' => 'menu_name'),
-      ),
-    ),
-  );
-
-  $schema['shortcut_set_users'] = array(
-    'description' => 'Maps users to shortcut sets.',
-    'fields' => array(
-      'uid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The {users}.uid for this set.',
-      ),
-      'set_name' => array(
-        'type' => 'varchar',
-        'length' => 32,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => "The {shortcut_set}.set_name that will be displayed for this user.",
-      ),
-    ),
-    'primary key' => array('uid'),
-    'indexes' => array(
-      'set_name' => array('set_name'),
-    ),
-    'foreign keys' => array(
-      'set_user' => array(
-        'table' => 'users',
-        'columns' => array('uid' => 'uid'),
-      ),
-      'set_name' => array(
-        'table' => 'shortcut_set',
-        'columns' => array('set_name' => 'set_name'),
-      ),
-    ),
-  );
-
-  return $schema;
-}
diff --git a/modules/shortcut/shortcut.module b/modules/shortcut/shortcut.module
deleted file mode 100644
index 2f6db0a..0000000
--- a/modules/shortcut/shortcut.module
+++ /dev/null
@@ -1,767 +0,0 @@
-<?php
-
-/**
- * @file
- * Allows users to manage customizable lists of shortcut links.
- */
-
-/**
- * The name of the default shortcut set.
- *
- * This set will be displayed to any user that does not have another set
- * assigned, unless overridden by a hook_shortcut_default_set() implementation.
- */
-define('SHORTCUT_DEFAULT_SET_NAME', 'shortcut-set-1');
-
-/**
- * Implements hook_help().
- */
-function shortcut_help($path, $arg) {
-  global $user;
-
-  switch ($path) {
-    case 'admin/help#shortcut':
-      $output = '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Shortcut module allows users to create sets of <em>shortcut</em> links to commonly-visited pages of the site. Shortcuts are contained within <em>sets</em>. Each user with <em>Select any shortcut set</em> permission can select a shortcut set created by anyone at the site. For more information, see the online handbook entry for <a href="@shortcut">Shortcut module</a>.', array('@shortcut' => 'http://drupal.org/documentation/modules/shortcut/')) . '</p>';
-      $output .= '<h3>' . t('Uses') . '</h3>';
-      $output .= '<dl><dt>' . t('Administering shortcuts') . '</dt>';
-      $output .= '<dd>' . t('Users with the <em>Administer shortcuts</em> permission can manage shortcut sets and edit the shortcuts within sets from the <a href="@shortcuts">Shortcuts administration page</a>.', array('@shortcuts' => url('admin/config/user-interface/shortcut'))) . '</dd>';
-      $output .= '<dt>' . t('Choosing shortcut sets') . '</dt>';
-      $output .= '<dd>' . t('Users with permission to switch shortcut sets can choose a shortcut set to use from the Shortcuts tab of their user account page.') . '</dd>';
-      $output .= '<dt>' . t('Adding and removing shortcuts') . '</dt>';
-      $output .= '<dd>' . t('The Shortcut module creates an add/remove link for each page on your site; the link lets you add or remove the current page from the currently-enabled set of shortcuts (if your theme displays it and you have permission to edit your shortcut set). The core Seven administration theme displays this link next to the page title, as a small + or - sign. If you click on the + sign, you will add that page to your preferred set of shortcuts. If the page is already part of your shortcut set, the link will be a - sign, and will allow you to remove the current page from your shortcut set.') . '</dd>';
-      $output .= '<dt>' . t('Displaying shortcuts') . '</dt>';
-      $output .= '<dd>' . t('You can display your shortcuts by enabling the Shortcuts block on the <a href="@blocks">Blocks administration page</a>. Certain administrative modules also display your shortcuts; for example, the core <a href="@toolbar-help">Toolbar module</a> displays them near the top of the page, along with an <em>Edit shortcuts</em> link.', array('@blocks' => url('admin/structure/block'), '@toolbar-help' => url('admin/help/toolbar'))) . '</dd>';
-      $output .= '</dl>';
-      return $output;
-
-    case 'admin/config/user-interface/shortcut':
-    case 'admin/config/user-interface/shortcut/%':
-      if (user_access('switch shortcut sets')) {
-        $output = '<p>' . t('Define which shortcut set you are using on the <a href="@shortcut-link">Shortcuts tab</a> of your account page.', array('@shortcut-link' => url("user/{$user->uid}/shortcuts"))) . '</p>';
-        return $output;
-      }
-  }
-}
-
-/**
- * Implements hook_permission().
- */
-function shortcut_permission() {
-  return array(
-    'administer shortcuts' => array(
-      'title' => t('Administer shortcuts'),
-    ),
-    'customize shortcut links' => array(
-      'title' => t('Edit current shortcut set'),
-      'description' => t('Editing the current shortcut set will affect other users if that set has been assigned to or selected by other users. Granting "Select any shortcut set" permission along with this permission will grant permission to edit any shortcut set.'),
-    ),
-    'switch shortcut sets' => array(
-      'title' => t('Select any shortcut set'),
-      'description' => t('From all shortcut sets, select one to be own active set. Without this permission, an administrator selects shortcut sets for users.'),
-    ),
-  );
-}
-
-/**
- * Implements hook_menu().
- */
-function shortcut_menu() {
-  $items['admin/config/user-interface/shortcut'] = array(
-    'title' => 'Shortcuts',
-    'description' => 'Add and modify shortcut sets.',
-    'page callback' => 'shortcut_set_admin',
-    'access arguments' => array('administer shortcuts'),
-    'file' => 'shortcut.admin.inc',
-  );
-  $items['admin/config/user-interface/shortcut/add-set'] = array(
-    'title' => 'Add shortcut set',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('shortcut_set_add_form'),
-    'access arguments' => array('administer shortcuts'),
-    'type' => MENU_LOCAL_ACTION,
-    'file' => 'shortcut.admin.inc',
-  );
-  $items['admin/config/user-interface/shortcut/%shortcut_set'] = array(
-    'title' => 'Edit shortcuts',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('shortcut_set_customize', 4),
-    'title callback' => 'shortcut_set_title_callback',
-    'title arguments' => array(4),
-    'access callback' => 'shortcut_set_edit_access',
-    'access arguments' => array(4),
-    'file' => 'shortcut.admin.inc',
-  );
-  $items['admin/config/user-interface/shortcut/%shortcut_set/links'] = array(
-    'title' => 'List links',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-  );
-  $items['admin/config/user-interface/shortcut/%shortcut_set/edit'] = array(
-    'title' => 'Edit set name',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('shortcut_set_edit_form', 4),
-    'access callback' => 'shortcut_set_edit_access',
-    'access arguments' => array(4),
-    'type' => MENU_LOCAL_TASK,
-    'file' => 'shortcut.admin.inc',
-    'weight' => 10,
-  );
-  $items['admin/config/user-interface/shortcut/%shortcut_set/delete'] = array(
-    'title' => 'Delete shortcut set',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('shortcut_set_delete_form', 4),
-    'access callback' => 'shortcut_set_delete_access',
-    'access arguments' => array(4),
-    'file' => 'shortcut.admin.inc',
-  );
-  $items['admin/config/user-interface/shortcut/%shortcut_set/add-link'] = array(
-    'title' => 'Add shortcut',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('shortcut_link_add', 4),
-    'access callback' => 'shortcut_set_edit_access',
-    'access arguments' => array(4),
-    'type' => MENU_LOCAL_ACTION,
-    'file' => 'shortcut.admin.inc',
-  );
-  $items['admin/config/user-interface/shortcut/%shortcut_set/add-link-inline'] = array(
-    'title' => 'Add shortcut',
-    'page callback' => 'shortcut_link_add_inline',
-    'page arguments' => array(4),
-    'access callback' => 'shortcut_set_edit_access',
-    'access arguments' => array(4),
-    'type' => MENU_CALLBACK,
-    'file' => 'shortcut.admin.inc',
-  );
-  $items['admin/config/user-interface/shortcut/link/%menu_link'] = array(
-    'title' => 'Edit shortcut',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('shortcut_link_edit', 5),
-    'access callback' => 'shortcut_link_access',
-    'access arguments' => array(5),
-    'file' => 'shortcut.admin.inc',
-  );
-  $items['admin/config/user-interface/shortcut/link/%menu_link/delete'] = array(
-    'title' => 'Delete shortcut',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('shortcut_link_delete', 5),
-    'access callback' => 'shortcut_link_access',
-    'access arguments' => array(5),
-    'file' => 'shortcut.admin.inc',
-  );
-  $items['user/%user/shortcuts'] = array(
-    'title' => 'Shortcuts',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('shortcut_set_switch', 1),
-    'access callback' => 'shortcut_set_switch_access',
-    'access arguments' => array(1),
-    'type' => MENU_LOCAL_TASK,
-    'file' => 'shortcut.admin.inc',
-  );
-
-  return $items;
-}
-
-/**
- * Implements hook_admin_paths().
- */
-function shortcut_admin_paths() {
-  $paths = array(
-    'user/*/shortcuts' => TRUE,
-  );
-  return $paths;
-}
-
-/**
- * Implements hook_theme().
- */
-function shortcut_theme() {
-  return array(
-    'shortcut_set_customize' => array(
-      'render element' => 'form',
-      'file' => 'shortcut.admin.inc',
-    ),
-  );
-}
-
-/**
- * Implements hook_block_info().
- */
-function shortcut_block_info() {
-  $blocks['shortcuts']['info'] = t('Shortcuts');
-  // Shortcut blocks can't be cached because each menu item can have a custom
-  // access callback. menu.inc manages its own caching.
-  $blocks['shortcuts']['cache'] = DRUPAL_NO_CACHE;
-  return $blocks;
-}
-
-/**
- * Implements hook_block_view().
- */
-function shortcut_block_view($delta = '') {
-  if ($delta == 'shortcuts') {
-    $shortcut_set = shortcut_current_displayed_set();
-    $data['subject'] = t('@shortcut_set shortcuts', array('@shortcut_set' => $shortcut_set->title));
-    $data['content'] = shortcut_renderable_links($shortcut_set);
-    return $data;
-  }
-}
-
-/**
- * Access callback for editing a shortcut set.
- *
- * @param object $shortcut_set
- *   (optional) The shortcut set to be edited. If not set, the current user's
- *   shortcut set will be used.
- *
- * @return
- *   TRUE if the current user has access to edit the shortcut set, FALSE
- *   otherwise.
- */
-function shortcut_set_edit_access($shortcut_set = NULL) {
-  // Sufficiently-privileged users can edit their currently displayed shortcut
-  // set, but not other sets. Shortcut administrators can edit any set.
-  if (user_access('administer shortcuts')) {
-    return TRUE;
-  }
-  if (user_access('customize shortcut links')) {
-    return !isset($shortcut_set) || $shortcut_set == shortcut_current_displayed_set();
-  }
-  return FALSE;
-}
-
-/**
- * Access callback for deleting a shortcut set.
- *
- * @param $shortcut_set
- *   The shortcut set to be deleted.
- *
- * @return
- *   TRUE if the current user has access to delete shortcut sets and this is
- *   not the site-wide default set; FALSE otherwise.
- */
-function shortcut_set_delete_access($shortcut_set) {
-  // Only admins can delete sets.
-  if (!user_access('administer shortcuts')) {
-    return FALSE;
-  }
-
-  // Never let the default shortcut set be deleted.
-  if ($shortcut_set->set_name == SHORTCUT_DEFAULT_SET_NAME) {
-    return FALSE;
-  }
-
-  return TRUE;
-}
-
-/**
- * Access callback for switching the shortcut set assigned to a user account.
- *
- * @param object $account
- *   (optional) The user account whose shortcuts will be switched. If not set,
- *   permissions will be checked for switching the logged-in user's own
- *   shortcut set.
- *
- * @return
- *   TRUE if the current user has access to switch the shortcut set of the
- *   provided account, FALSE otherwise.
- */
-function shortcut_set_switch_access($account = NULL) {
-  global $user;
-
-  if (user_access('administer shortcuts')) {
-    // Administrators can switch anyone's shortcut set.
-    return TRUE;
-  }
-
-  if (!user_access('switch shortcut sets')) {
-    // The user has no permission to switch anyone's shortcut set.
-    return FALSE;
-  }
-
-  if (!isset($account) || $user->uid == $account->uid) {
-    // Users with the 'switch shortcut sets' permission can switch their own
-    // shortcuts sets.
-    return TRUE;
-  }
-
-  return FALSE;
-}
-
-/**
- * Access callback for editing a link in a shortcut set.
- */
-function shortcut_link_access($menu_link) {
-  // The link must belong to a shortcut set that the current user has access
-  // to edit.
-  if ($shortcut_set = shortcut_set_load($menu_link['menu_name'])) {
-    return shortcut_set_edit_access($shortcut_set);
-  }
-  return FALSE;
-}
-
-/**
- * Loads the data for a shortcut set.
- *
- * @param $set_name
- *   The name of the shortcut set to load.
- *
- * @return object
- *   If the shortcut set exists, an object containing the following properties:
- *   - 'set_name': The internal name of the shortcut set.
- *   - 'title': The title of the shortcut set.
- *   - 'links': An array of links associated with this shortcut set.
- *   If the shortcut set does not exist, the function returns FALSE.
- */
-function shortcut_set_load($set_name) {
-  $set = db_select('shortcut_set', 'ss')
-  ->fields('ss')
-  ->condition('set_name', $set_name)
-  ->execute()
-  ->fetchObject();
-  if (!$set) {
-    return FALSE;
-  }
-  $set->links = menu_load_links($set_name);
-  return $set;
-}
-
-/**
- * Saves a shortcut set.
- *
- * @param $shortcut_set
- *   An object containing the following properties:
- *   - 'title': The title of the shortcut set.
- *   - 'set_name': (optional) The internal name of the shortcut set. If
- *     omitted, a new shortcut set will be created, and the 'set_name' property
- *     will be added to the passed-in object.
- *   - 'links': (optional) An array of menu links to save for the shortcut set.
- *     Each link is an array containing at least the following keys (which will
- *     be expanded to fill in other default values after the shortcut set is
- *     saved):
- *     - 'link_path': The Drupal path or external path that the link points to.
- *     - 'link_title': The title of the link.
- *     Any other keys accepted by menu_link_save() may also be provided.
- *
- * @return
- *   A constant which is either SAVED_NEW or SAVED_UPDATED depending on whether
- *   a new set was created or an existing one was updated.
- *
- * @see menu_link_save()
- */
-function shortcut_set_save(&$shortcut_set) {
-  // First save the shortcut set itself.
-  if (isset($shortcut_set->set_name)) {
-    $return = drupal_write_record('shortcut_set', $shortcut_set, 'set_name');
-  }
-  else {
-    $shortcut_set->set_name = shortcut_set_get_unique_name();
-    $return = drupal_write_record('shortcut_set', $shortcut_set);
-  }
-  // If links were provided for the set, save them.
-  if (isset($shortcut_set->links)) {
-    foreach ($shortcut_set->links as &$link) {
-      // Do not specifically associate these links with the shortcut module,
-      // since other modules may make them editable via the menu system.
-      // However, we do need to specify the correct menu name.
-      $link['menu_name'] = $shortcut_set->set_name;
-      $link['plid'] = 0;
-      menu_link_save($link);
-    }
-    // Make sure that we have a return value, since if the links were updated
-    // but the shortcut set was not, the call to drupal_write_record() above
-    // would not return an indication that anything had changed.
-    if (empty($return)) {
-      $return = SAVED_UPDATED;
-    }
-  }
-  return $return;
-}
-
-/**
- * Deletes a shortcut set.
- *
- * Note that the default set cannot be deleted.
- *
- * @param $shortcut_set
- *   An object representing the shortcut set to delete.
- *
- * @return
- *   TRUE if the set was deleted, FALSE otherwise.
- */
-function shortcut_set_delete($shortcut_set) {
-  // Don't allow deletion of the system default shortcut set.
-  if ($shortcut_set->set_name == SHORTCUT_DEFAULT_SET_NAME) {
-    return FALSE;
-  }
-
-  // First, delete any user assignments for this set, so that each of these
-  // users will go back to using whatever default set applies.
-  db_delete('shortcut_set_users')
-    ->condition('set_name', $shortcut_set->set_name)
-    ->execute();
-
-  // Next, delete the menu links for this set.
-  menu_delete_links($shortcut_set->set_name);
-
-  // Finally, delete the set itself.
-  $deleted = db_delete('shortcut_set')
-    ->condition('set_name', $shortcut_set->set_name)
-    ->execute();
-
-  return (bool) $deleted;
-}
-
-/**
- * Resets the link weights in a shortcut set to match their current order.
- *
- * This function can be used, for example, when a new shortcut link is added to
- * the set. If the link is added to the end of the array and this function is
- * called, it will force that link to display at the end of the list.
- *
- * @param object $shortcut_set
- *   An object representing a shortcut set. The link weights of the passed-in
- *   object will be reset as described above.
- */
-function shortcut_set_reset_link_weights(&$shortcut_set) {
-  $weight = -50;
-  foreach ($shortcut_set->links as &$link) {
-    $link['weight'] = $weight;
-    $weight++;
-  }
-}
-
-/**
- * Assigns a user to a particular shortcut set.
- *
- * @param $shortcut_set
- *   An object representing the shortcut set.
- * @param $account
- *   A user account that will be assigned to use the set.
- */
-function shortcut_set_assign_user($shortcut_set, $account) {
-  db_merge('shortcut_set_users')
-    ->key(array('uid' => $account->uid))
-    ->fields(array('set_name' => $shortcut_set->set_name))
-    ->execute();
-  drupal_static_reset('shortcut_current_displayed_set');
-}
-
-/**
- * Unassigns a user from any shortcut set they may have been assigned to.
- *
- * The user will go back to using whatever default set applies.
- *
- * @param $account
- *   A user account that will be removed from the shortcut set assignment.
- *
- * @return
- *   TRUE if the user was previously assigned to a shortcut set and has been
- *   successfully removed from it. FALSE if the user was already not assigned
- *   to any set.
- */
-function shortcut_set_unassign_user($account) {
-  $deleted = db_delete('shortcut_set_users')
-    ->condition('uid', $account->uid)
-    ->execute();
-  return (bool) $deleted;
-}
-
-/**
- * Returns the current displayed shortcut set for the provided user account.
- *
- * @param $account
- *   (optional) The user account whose shortcuts will be returned. Defaults to
- *   the currently logged-in user.
- *
- * @return
- *   An object representing the shortcut set that should be displayed to the
- *   current user. If the user does not have an explicit shortcut set defined,
- *   the default set is returned.
- */
-function shortcut_current_displayed_set($account = NULL) {
-  $shortcut_sets = &drupal_static(__FUNCTION__, array());
-  global $user;
-  if (!isset($account)) {
-    $account = $user;
-  }
-  // Try to return a shortcut set from the static cache.
-  if (isset($shortcut_sets[$account->uid])) {
-    return $shortcut_sets[$account->uid];
-  }
-  // If none was found, try to find a shortcut set that is explicitly assigned
-  // to this user.
-  $query = db_select('shortcut_set', 's');
-  $query->addField('s', 'set_name');
-  $query->join('shortcut_set_users', 'u', 's.set_name = u.set_name');
-  $query->condition('u.uid', $account->uid);
-  $shortcut_set_name = $query->execute()->fetchField();
-  if ($shortcut_set_name) {
-    $shortcut_set = shortcut_set_load($shortcut_set_name);
-  }
-  // Otherwise, use the default set.
-  else {
-    $shortcut_set = shortcut_default_set($account);
-  }
-
-  $shortcut_sets[$account->uid] = $shortcut_set;
-  return $shortcut_set;
-}
-
-/**
- * Returns the default shortcut set for a given user account.
- *
- * @param object $account
- *   (optional) The user account whose default shortcut set will be returned.
- *   If not provided, the function will return the currently logged-in user's
- *   default shortcut set.
- *
- * @return
- *   An object representing the default shortcut set.
- */
-function shortcut_default_set($account = NULL) {
-  global $user;
-  if (!isset($account)) {
-    $account = $user;
-  }
-
-  // Allow modules to return a default shortcut set name. Since we can only
-  // have one, we allow the last module which returns a valid result to take
-  // precedence. If no module returns a valid set, fall back on the site-wide
-  // default, which is the lowest-numbered shortcut set.
-  $suggestions = array_reverse(module_invoke_all('shortcut_default_set', $account));
-  $suggestions[] = SHORTCUT_DEFAULT_SET_NAME;
-  foreach ($suggestions as $name) {
-    if ($shortcut_set = shortcut_set_load($name)) {
-      break;
-    }
-  }
-
-  return $shortcut_set;
-}
-
-/**
- * Returns a unique, machine-readable shortcut set name.
- */
-function shortcut_set_get_unique_name() {
-  // Shortcut sets are numbered sequentially, so we keep trying until we find
-  // one that is available. For better performance, we start with a number
-  // equal to one more than the current number of shortcut sets, so that if
-  // no shortcut sets have been deleted from the database, this will
-  // automatically give us the correct one.
-  $number = db_query("SELECT COUNT(*) FROM {shortcut_set}")->fetchField() + 1;
-  do {
-    $name = shortcut_set_name($number);
-    $number++;
-  } while ($shortcut_set = shortcut_set_load($name));
-  return $name;
-}
-
-/**
- * Returns the name of a shortcut set, based on a provided number.
- *
- * All shortcut sets have names like "shortcut-set-N" so that they can be
- * matched with a properly-namespaced entry in the {menu_links} table.
- *
- * @param $number
- *   A number representing the shortcut set whose name should be retrieved.
- *
- * @return
- *   A string representing the expected shortcut name.
- */
-function shortcut_set_name($number) {
-  return "shortcut-set-$number";
-}
-
-/**
- * Returns an array of all shortcut sets, keyed by the set name.
- *
- * @return
- *   An array of shortcut sets. Note that only the basic shortcut set
- *   properties (name and title) are returned by this function, not the list
- *   of menu links that belong to the set.
- */
-function shortcut_sets() {
-  return db_select('shortcut_set', 'ss')
-  ->fields('ss')
-  ->execute()
-  ->fetchAllAssoc('set_name');
-}
-
-/**
- * Check to see if a shortcut set with the given title already exists.
- *
- * @param $title
- *   Human-readable name of the shortcut set to check.
- *
- * @return
- *   TRUE if a shortcut set with that title exists; FALSE otherwise.
- */
-function shortcut_set_title_exists($title) {
-  return (bool) db_query_range('SELECT 1 FROM {shortcut_set} WHERE title = :title', 0, 1, array(':title' => $title))->fetchField();
-}
-
-/**
- * Determines if a path corresponds to a valid shortcut link.
- *
- * @param $path
- *   The path to the link.
- * @return
- *   TRUE if the shortcut link is valid, FALSE otherwise. Valid links are ones
- *   that correspond to actual paths on the site.
- *
- * @see menu_edit_item_validate()
- */
-function shortcut_valid_link($path) {
-  // Do not use URL aliases.
-  $normal_path = drupal_get_normal_path($path);
-  if ($path != $normal_path) {
-    $path = $normal_path;
-  }
-  // An empty path is valid too and will be converted to <front>.
-  return (!url_is_external($path) && menu_get_item($path)) || empty($path) || $path == '<front>';
-}
-
-/**
- * Returns an array of shortcut links, suitable for rendering.
- *
- * @param $shortcut_set
- *   (optional) An object representing the set whose links will be displayed.
- *   If not provided, the user's current set will be displayed.
- * @return
- *   An array of shortcut links, in the format returned by the menu system.
- *
- * @see menu_tree()
- */
-function shortcut_renderable_links($shortcut_set = NULL) {
-  if (!isset($shortcut_set)) {
-    $shortcut_set = shortcut_current_displayed_set();
-  }
-  return menu_tree($shortcut_set->set_name);
-}
-
-/**
- * Implements hook_preprocess_page().
- */
-function shortcut_preprocess_page(&$variables) {
-  // Only display the shortcut link if the user has the ability to edit
-  // shortcuts and if the page's actual content is being shown (for example,
-  // we do not want to display it on "access denied" or "page not found"
-  // pages).
-  if (shortcut_set_edit_access() && ($item = menu_get_item()) && $item['access']) {
-    $link = $_GET['q'];
-    $query_parameters = drupal_get_query_parameters();
-    if (!empty($query_parameters)) {
-     $link .= '?' . drupal_http_build_query($query_parameters);
-    }
-    $query = array(
-     'link' => $link,
-     'name' => drupal_get_title(),
-    );
-    $query += drupal_get_destination();
-
-    $shortcut_set = shortcut_current_displayed_set();
-
-    // Check if $link is already a shortcut and set $link_mode accordingly.
-    foreach ($shortcut_set->links as $shortcut) {
-      if ($link == $shortcut['link_path']) {
-        $mlid = $shortcut['mlid'];
-        break;
-      }
-    }
-    $link_mode = isset($mlid) ? "remove" : "add";
-
-    if ($link_mode == "add") {
-      $query['token'] = drupal_get_token('shortcut-add-link');
-      $link_text = shortcut_set_switch_access() ? t('Add to %shortcut_set shortcuts', array('%shortcut_set' => $shortcut_set->title)) : t('Add to shortcuts');
-      $link_path = 'admin/config/user-interface/shortcut/' . $shortcut_set->set_name . '/add-link-inline';
-    }
-    else {
-      $query['mlid'] = $mlid;
-      $link_text = shortcut_set_switch_access() ? t('Remove from %shortcut_set shortcuts', array('%shortcut_set' => $shortcut_set->title)) : t('Remove from shortcuts');
-      $link_path = 'admin/config/user-interface/shortcut/link/' . $mlid . '/delete';
-    }
-
-    if (theme_get_setting('shortcut_module_link')) {
-      $variables['title_suffix']['add_or_remove_shortcut'] = array(
-        '#attached' => array('css' => array(drupal_get_path('module', 'shortcut') . '/shortcut.css')),
-        '#prefix' => '<div class="add-or-remove-shortcuts ' . $link_mode . '-shortcut">',
-        '#type' => 'link',
-        '#title' => '<span class="icon"></span><span class="text">' . $link_text . '</span>',
-        '#href' => $link_path,
-        '#options' => array('query' => $query, 'html' => TRUE),
-        '#suffix' => '</div>',
-      );
-    }
-  }
-}
-
-/**
- * Implements hook_page_alter().
- */
-function shortcut_page_alter(&$page) {
-  if (isset($page['page_top']['toolbar'])) {
-    // If the toolbar is available, add a pre-render function to display the
-    // current shortcuts in the toolbar drawer.
-    $page['page_top']['toolbar']['#pre_render'][] = 'shortcut_toolbar_pre_render';
-  }
-}
-
-/**
- * Pre-render function for adding shortcuts to the toolbar drawer.
- */
-function shortcut_toolbar_pre_render($toolbar) {
-  $links = shortcut_renderable_links();
-  $links['#attached'] = array('css' => array(drupal_get_path('module', 'shortcut') . '/shortcut.css'));
-  $links['#prefix'] = '<div class="toolbar-shortcuts">';
-  $links['#suffix'] = '</div>';
-  $shortcut_set = shortcut_current_displayed_set();
-  $configure_link = NULL;
-  if (shortcut_set_edit_access($shortcut_set)) {
-    $configure_link = array(
-      '#type' => 'link',
-      '#title' => t('Edit shortcuts'),
-      '#href' => 'admin/config/user-interface/shortcut/' . $shortcut_set->set_name,
-      '#options' => array('attributes' => array('id' => 'edit-shortcuts')),
-    );
-  }
-
-  $drawer = array(
-    'shortcuts' => $links,
-    'configure' => $configure_link,
-  );
-
-  $toolbar['toolbar_drawer'][] = $drawer;
-  return $toolbar;
-}
-
-/**
- * Returns the sanitized title of a shortcut set.
- *
- * Deprecated. This function was previously used as a menu item title callback
- * but has been replaced by shortcut_set_title_callback() (which does not
- * sanitize the title, since the menu system does that automatically). In
- * Drupal 7, use that function for title callbacks, and call check_plain()
- * directly if you need a sanitized title. In Drupal 8, this function will be
- * restored as a title callback and therefore will no longer sanitize its
- * output.
- *
- * @param $shortcut_set
- *   An object representing the shortcut set, as returned by
- *   shortcut_set_load().
- */
-function shortcut_set_title($shortcut_set) {
-  return check_plain($shortcut_set->title);
-}
-
-/**
- * Returns the title of a shortcut set.
- *
- * Title callback for the editing pages for shortcut sets.
- *
- * @param $shortcut_set
- *   An object representing the shortcut set, as returned by
- *   shortcut_set_load().
- */
-function shortcut_set_title_callback($shortcut_set) {
-  return $shortcut_set->title;
-}
diff --git a/modules/shortcut/shortcut.png b/modules/shortcut/shortcut.png
deleted file mode 100644
index 2924557..0000000
Binary files a/modules/shortcut/shortcut.png and /dev/null differ
diff --git a/modules/shortcut/shortcut.test b/modules/shortcut/shortcut.test
deleted file mode 100644
index 2bd9605..0000000
--- a/modules/shortcut/shortcut.test
+++ /dev/null
@@ -1,371 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for shortcut.module.
- */
-
-/**
- * Defines base class for shortcut test cases.
- */
-class ShortcutTestCase extends DrupalWebTestCase {
-
-  /**
-   * User with permission to administer shortcuts.
-   */
-  protected $admin_user;
-
-  /**
-   * User with permission to use shortcuts, but not administer them.
-   */
-  protected $shortcut_user;
-
-  /**
-   * Generic node used for testing.
-   */
-  protected $node;
-
-  /**
-   * Site-wide default shortcut set.
-   */
-  protected $set;
-
-  function setUp() {
-    parent::setUp('toolbar', 'shortcut');
-    // Create users.
-    $this->admin_user = $this->drupalCreateUser(array('access toolbar', 'administer shortcuts', 'view the administration theme', 'create article content', 'create page content', 'access content overview'));
-    $this->shortcut_user = $this->drupalCreateUser(array('customize shortcut links', 'switch shortcut sets'));
-
-    // Create a node.
-    $this->node = $this->drupalCreateNode(array('type' => 'article'));
-
-    // Log in as admin and grab the default shortcut set.
-    $this->drupalLogin($this->admin_user);
-    $this->set = shortcut_set_load(SHORTCUT_DEFAULT_SET_NAME);
-    shortcut_set_assign_user($this->set, $this->admin_user);
-  }
-
-  /**
-   * Creates a generic shortcut set.
-   */
-  function generateShortcutSet($title = '', $default_links = TRUE) {
-    $set = new stdClass();
-    $set->title = empty($title) ? $this->randomName(10) : $title;
-    if ($default_links) {
-      $set->links = array();
-      $set->links[] = $this->generateShortcutLink('node/add');
-      $set->links[] = $this->generateShortcutLink('admin/content');
-    }
-    shortcut_set_save($set);
-
-    return $set;
-  }
-
-  /**
-   * Creates a generic shortcut link.
-   */
-  function generateShortcutLink($path, $title = '') {
-    $link = array(
-      'link_path' => $path,
-      'link_title' => !empty($title) ? $title : $this->randomName(10),
-    );
-
-    return $link;
-  }
-
-  /**
-   * Extracts information from shortcut set links.
-   * 
-   * @param object $set
-   *   The shortcut set object to extract information from.
-   * @param string $key
-   *   The array key indicating what information to extract from each link:
-   *    - 'link_path': Extract link paths.
-   *    - 'link_title': Extract link titles.
-   *    - 'mlid': Extract the menu link item ID numbers.
-   *
-   * @return array
-   *   Array of the requested information from each link.
-   */
-  function getShortcutInformation($set, $key) {
-    $info = array();
-    foreach ($set->links as $link) {
-      $info[] = $link[$key];
-    }
-    return $info;
-  }
-}
-
-/**
- * Defines shortcut links test cases.
- */
-class ShortcutLinksTestCase extends ShortcutTestCase {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Shortcut link functionality',
-      'description' => 'Create, view, edit, delete, and change shortcut links.',
-      'group' => 'Shortcut',
-    );
-  }
-
-  /**
-   * Tests that creating a shortcut works properly.
-   */
-  function testShortcutLinkAdd() {
-    $set = $this->set;
-
-    // Create an alias for the node so we can test aliases.
-    $path = array(
-      'source' => 'node/' . $this->node->nid,
-      'alias' => $this->randomName(8),
-    );
-    path_save($path);
-
-    // Create some paths to test.
-    $test_cases = array(
-      array('path' => ''),
-      array('path' => 'admin'),
-      array('path' => 'admin/config/system/site-information'),
-      array('path' => "node/{$this->node->nid}/edit"),
-      array('path' => $path['alias']),
-    );
-
-    // Check that each new shortcut links where it should.
-    foreach ($test_cases as $test) {
-      $title = $this->randomName(10);
-      $form_data = array(
-        'shortcut_link[link_title]' => $title,
-        'shortcut_link[link_path]'  => $test['path'],
-      );
-      $this->drupalPost('admin/config/user-interface/shortcut/' . $set->set_name . '/add-link', $form_data, t('Save'));
-      $this->assertResponse(200);
-      $saved_set = shortcut_set_load($set->set_name);
-      $paths = $this->getShortcutInformation($saved_set, 'link_path');
-      $test_path = empty($test['path']) ? '<front>' : $test['path'];
-      $this->assertTrue(in_array(drupal_get_normal_path($test_path), $paths), 'Shortcut created: '. $test['path']);
-      $this->assertLink($title, 0, 'Shortcut link found on the page.');
-    }
-  }
-
-  /**
-   * Tests that the "add to shortcut" link changes to "remove shortcut".
-   */
-  function testShortcutQuickLink() {
-    $this->drupalGet($this->set->links[0]['link_path']);
-    $this->assertRaw(t('Remove from %title shortcuts', array('%title' => $this->set->title)), '"Add to shortcuts" link properly switched to "Remove from shortcuts".');
-  }
-
-  /**
-   * Tests that shortcut links can be renamed.
-   */
-  function testShortcutLinkRename() {
-    $set = $this->set;
-
-    // Attempt to rename shortcut link.
-    $new_link_name = $this->randomName(10);
-
-    $this->drupalPost('admin/config/user-interface/shortcut/link/' . $set->links[0]['mlid'], array('shortcut_link[link_title]' => $new_link_name, 'shortcut_link[link_path]' => $set->links[0]['link_path']), t('Save'));
-    $saved_set = shortcut_set_load($set->set_name);
-    $titles = $this->getShortcutInformation($saved_set, 'link_title');
-    $this->assertTrue(in_array($new_link_name, $titles), 'Shortcut renamed: ' . $new_link_name);
-    $this->assertLink($new_link_name, 0, 'Renamed shortcut link appears on the page.');
-  }
-
-  /**
-   * Tests that changing the path of a shortcut link works.
-   */
-  function testShortcutLinkChangePath() {
-    $set = $this->set;
-
-    // Tests changing a shortcut path.
-    $new_link_path = 'admin/config';
-
-    $this->drupalPost('admin/config/user-interface/shortcut/link/' . $set->links[0]['mlid'], array('shortcut_link[link_title]' => $set->links[0]['link_title'], 'shortcut_link[link_path]' => $new_link_path), t('Save'));
-    $saved_set = shortcut_set_load($set->set_name);
-    $paths = $this->getShortcutInformation($saved_set, 'link_path');
-    $this->assertTrue(in_array($new_link_path, $paths), 'Shortcut path changed: ' . $new_link_path);
-    $this->assertLinkByHref($new_link_path, 0, 'Shortcut with new path appears on the page.');
-  }
-
-  /**
-   * Tests deleting a shortcut link.
-   */
-  function testShortcutLinkDelete() {
-    $set = $this->set;
-
-    $this->drupalPost('admin/config/user-interface/shortcut/link/' . $set->links[0]['mlid'] . '/delete', array(), 'Delete');
-    $saved_set = shortcut_set_load($set->set_name);
-    $mlids = $this->getShortcutInformation($saved_set, 'mlid');
-    $this->assertFalse(in_array($set->links[0]['mlid'], $mlids), 'Successfully deleted a shortcut.');
-  }
-
-  /**
-   * Tests that the add shortcut link is not displayed for 404/403 errors.
-   *
-   * Tests that the "Add to shortcuts" link is not displayed on a page not
-   * found or a page the user does not have access to.
-   */
-  function testNoShortcutLink() {
-    // Change to a theme that displays shortcuts.
-    variable_set('theme_default', 'seven');
-
-    $this->drupalGet('page-that-does-not-exist');
-    $this->assertNoRaw('add-shortcut', 'Add to shortcuts link was not shown on a page not found.');
-
-    // The user does not have access to this path.
-    $this->drupalGet('admin/modules');
-    $this->assertNoRaw('add-shortcut', 'Add to shortcuts link was not shown on a page the user does not have access to.');
-
-    // Verify that the testing mechanism works by verifying the shortcut
-    // link appears on admin/content/node.
-    $this->drupalGet('admin/content/node');
-    $this->assertRaw('add-shortcut', 'Add to shortcuts link was shown on a page the user does have access to.');
-  }
-}
-
-/**
- * Defines shortcut set test cases.
- */
-class ShortcutSetsTestCase extends ShortcutTestCase {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Shortcut set functionality',
-      'description' => 'Create, view, edit, delete, and change shortcut sets.',
-      'group' => 'Shortcut',
-    );
-  }
-
-  /**
-   * Tests creating a shortcut set.
-   */
-  function testShortcutSetAdd() {
-    $new_set = $this->generateShortcutSet($this->randomName(10));
-    $sets = shortcut_sets();
-    $this->assertTrue(isset($sets[$new_set->set_name]), 'Successfully created a shortcut set.');
-    $this->drupalGet('user/' . $this->admin_user->uid . '/shortcuts');
-    $this->assertText($new_set->title, 'Generated shortcut set was listed as a choice on the user account page.');
-  }
-
-  /**
-   * Tests switching a user's own shortcut set.
-   */
-  function testShortcutSetSwitchOwn() {
-    $new_set = $this->generateShortcutSet($this->randomName(10));
-
-    // Attempt to switch the default shortcut set to the newly created shortcut
-    // set.
-    $this->drupalPost('user/' . $this->admin_user->uid . '/shortcuts', array('set' => $new_set->set_name), t('Change set'));
-    $this->assertResponse(200);
-    $current_set = shortcut_current_displayed_set($this->admin_user);
-    $this->assertTrue($new_set->set_name == $current_set->set_name, 'Successfully switched own shortcut set.');
-  }
-
-  /**
-   * Tests switching another user's shortcut set.
-   */
-  function testShortcutSetAssign() {
-    $new_set = $this->generateShortcutSet($this->randomName(10));
-
-    shortcut_set_assign_user($new_set, $this->shortcut_user);
-    $current_set = shortcut_current_displayed_set($this->shortcut_user);
-    $this->assertTrue($new_set->set_name == $current_set->set_name, "Successfully switched another user's shortcut set.");
-  }
-
-  /**
-   * Tests switching a user's shortcut set and creating one at the same time.
-   */
-  function testShortcutSetSwitchCreate() {
-    $edit = array(
-      'set' => 'new',
-      'new' => $this->randomName(10),
-    );
-    $this->drupalPost('user/' . $this->admin_user->uid . '/shortcuts', $edit, t('Change set'));
-    $current_set = shortcut_current_displayed_set($this->admin_user);
-    $this->assertNotEqual($current_set->set_name, $this->set->set_name, 'A shortcut set can be switched to at the same time as it is created.');
-    $this->assertEqual($current_set->title, $edit['new'], 'The new set is correctly assigned to the user.');
-  }
-
-  /**
-   * Tests switching a user's shortcut set without providing a new set name.
-   */
-  function testShortcutSetSwitchNoSetName() {
-    $edit = array('set' => 'new');
-    $this->drupalPost('user/' . $this->admin_user->uid . '/shortcuts', $edit, t('Change set'));
-    $this->assertText(t('The new set name is required.'));
-    $current_set = shortcut_current_displayed_set($this->admin_user);
-    $this->assertEqual($current_set->set_name, $this->set->set_name, 'Attempting to switch to a new shortcut set without providing a set name does not succeed.');
-  }
-
-  /**
-   * Tests that shortcut_set_save() correctly updates existing links.
-   */
-  function testShortcutSetSave() {
-    $set = $this->set;
-    $old_mlids = $this->getShortcutInformation($set, 'mlid');
-
-    $set->links[] = $this->generateShortcutLink('admin', $this->randomName(10));
-    shortcut_set_save($set);
-    $saved_set = shortcut_set_load($set->set_name);
-
-    $new_mlids = $this->getShortcutInformation($saved_set, 'mlid');
-    $this->assertTrue(count(array_intersect($old_mlids, $new_mlids)) == count($old_mlids), 'shortcut_set_save() did not inadvertently change existing mlids.');
-  }
-
-  /**
-   * Tests renaming a shortcut set.
-   */
-  function testShortcutSetRename() {
-    $set = $this->set;
-    
-    $new_title = $this->randomName(10);
-    $this->drupalPost('admin/config/user-interface/shortcut/' . $set->set_name . '/edit', array('title' => $new_title), t('Save'));
-    $set = shortcut_set_load($set->set_name);
-    $this->assertTrue($set->title == $new_title, 'Shortcut set has been successfully renamed.');
-  }
-
-  /**
-   * Tests renaming a shortcut set to the same name as another set.
-   */
-  function testShortcutSetRenameAlreadyExists() {
-    $set = $this->generateShortcutSet($this->randomName(10));
-    $existing_title = $this->set->title;
-    $this->drupalPost('admin/config/user-interface/shortcut/' . $set->set_name . '/edit', array('title' => $existing_title), t('Save'));
-    $this->assertRaw(t('The shortcut set %name already exists. Choose another name.', array('%name' => $existing_title)));
-    $set = shortcut_set_load($set->set_name);
-    $this->assertNotEqual($set->title, $existing_title, format_string('The shortcut set %title cannot be renamed to %new-title because a shortcut set with that title already exists.', array('%title' => $set->title, '%new-title' => $existing_title)));
-  }
-
-  /**
-   * Tests unassigning a shortcut set.
-   */
-  function testShortcutSetUnassign() {
-    $new_set = $this->generateShortcutSet($this->randomName(10));
-
-    shortcut_set_assign_user($new_set, $this->shortcut_user);
-    shortcut_set_unassign_user($this->shortcut_user);
-    $current_set = shortcut_current_displayed_set($this->shortcut_user);
-    $default_set = shortcut_default_set($this->shortcut_user);
-    $this->assertTrue($current_set->set_name == $default_set->set_name, "Successfully unassigned another user's shortcut set.");
-  }
-
-  /**
-   * Tests deleting a shortcut set.
-   */
-  function testShortcutSetDelete() {
-    $new_set = $this->generateShortcutSet($this->randomName(10));
-
-    $this->drupalPost('admin/config/user-interface/shortcut/' . $new_set->set_name . '/delete', array(), t('Delete'));
-    $sets = shortcut_sets();
-    $this->assertFalse(isset($sets[$new_set->set_name]), 'Successfully deleted a shortcut set.');
-  }
-
-  /**
-   * Tests deleting the default shortcut set.
-   */
-  function testShortcutSetDeleteDefault() {
-    $this->drupalGet('admin/config/user-interface/shortcut/' . SHORTCUT_DEFAULT_SET_NAME . '/delete');
-    $this->assertResponse(403);
-  }
-}
diff --git a/modules/simpletest/files/README.txt b/modules/simpletest/files/README.txt
deleted file mode 100644
index 680e7fe..0000000
--- a/modules/simpletest/files/README.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-These files are useful in tests that upload files or otherwise need to
-manipulate files, in which case they are copied to the files directory as
-specified in the site settings. Dummy files can also be generated by tests in
-order to save space.
diff --git a/modules/simpletest/files/css_test_files/comment_hacks.css b/modules/simpletest/files/css_test_files/comment_hacks.css
deleted file mode 100644
index c47e842..0000000
--- a/modules/simpletest/files/css_test_files/comment_hacks.css
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
-* A sample css file, designed to test the effectiveness and stability
-* of function <code>drupal_load_stylesheet_content()</code>.
-*
-*/
-/*
-A large comment block to test for segfaults and speed. This is 60K a's. Extreme but useful to demonstrate flaws in comment striping regexp. aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa*/
-.test1 { display:block;}
-
-/* A multiline IE-mac hack (v.2) taken fron Zen theme*/
-/* Hides from IE-mac \*/
-html .clear-block {
- height: 1%;
-}
-.clear-block {
- display: block;
- font:italic bold 12px/30px Georgia, serif;
-}
-
-/* End hide from IE-mac */
-.test2 { display:block; }
-
-/* v1 of the commented backslash hack. This \ character between rules appears to have the effect
-that macIE5 ignores the following rule. Odd, but extremely useful. */
-.bkslshv1 { background-color: #C00; }
-.test3 { display:block; }
-
-/**************** A multiline, multistar comment ***************
-****************************************************************/
-.test4 { display:block;}
-
-/**************************************/
-.comment-in-double-quotes:before {
-  content: "/* ";
-}
-.this_rule_must_stay {
-  color: #F00;
-  background-color: #FFF;
-}
-.comment-in-double-quotes:after {
-  content: " */";
-}
-/**************************************/
-.comment-in-single-quotes:before {
-  content: '/*';
-}
-.this_rule_must_stay {
-  color: #F00;
-  background-color: #FFF;
-}
-.comment-in-single-quotes:after {
-  content: '*/';
-}
-/**************************************/
-.comment-in-mixed-quotes:before {
-  content: '"/*"';
-}
-.this_rule_must_stay {
-  color: #F00;
-  background-color: #FFF;
-}
-.comment-in-mixed-quotes:after {
-  content: "'*/'";
-}
-/**************************************/
-.comment-in-quotes-with-escaped:before {
-  content: '/* \" \' */';
-}
-.this_rule_must_stay {
-  color: #F00;
-  background-color: #FFF;
-}
-.comment-in-quotes-with-escaped:after {
-  content: "*/ \" \ '";
-}
-/************************************/
-/*
-"This has to go"
-'This has to go'
-*/
diff --git a/modules/simpletest/files/css_test_files/comment_hacks.css.optimized.css b/modules/simpletest/files/css_test_files/comment_hacks.css.optimized.css
deleted file mode 100644
index 1feb8f1..0000000
--- a/modules/simpletest/files/css_test_files/comment_hacks.css.optimized.css
+++ /dev/null
@@ -1 +0,0 @@
-.test1{display:block;}html .clear-block{height:1%;}.clear-block{display:block;font:italic bold 12px/30px Georgia,serif;}.test2{display:block;}.bkslshv1{background-color:#C00;}.test3{display:block;}.test4{display:block;}.comment-in-double-quotes:before{content:"/* ";}.this_rule_must_stay{color:#F00;background-color:#FFF;}.comment-in-double-quotes:after{content:" */";}.comment-in-single-quotes:before{content:'/*';}.this_rule_must_stay{color:#F00;background-color:#FFF;}.comment-in-single-quotes:after{content:'*/';}.comment-in-mixed-quotes:before{content:'"/*"';}.this_rule_must_stay{color:#F00;background-color:#FFF;}.comment-in-mixed-quotes:after{content:"'*/'";}.comment-in-quotes-with-escaped:before{content:'/* \" \' */';}.this_rule_must_stay{color:#F00;background-color:#FFF;}.comment-in-quotes-with-escaped:after{content:"*/ \" \ '";}
diff --git a/modules/simpletest/files/css_test_files/comment_hacks.css.unoptimized.css b/modules/simpletest/files/css_test_files/comment_hacks.css.unoptimized.css
deleted file mode 100644
index c47e842..0000000
--- a/modules/simpletest/files/css_test_files/comment_hacks.css.unoptimized.css
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
-* A sample css file, designed to test the effectiveness and stability
-* of function <code>drupal_load_stylesheet_content()</code>.
-*
-*/
-/*
-A large comment block to test for segfaults and speed. This is 60K a's. Extreme but useful to demonstrate flaws in comment striping regexp. aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa*/
-.test1 { display:block;}
-
-/* A multiline IE-mac hack (v.2) taken fron Zen theme*/
-/* Hides from IE-mac \*/
-html .clear-block {
- height: 1%;
-}
-.clear-block {
- display: block;
- font:italic bold 12px/30px Georgia, serif;
-}
-
-/* End hide from IE-mac */
-.test2 { display:block; }
-
-/* v1 of the commented backslash hack. This \ character between rules appears to have the effect
-that macIE5 ignores the following rule. Odd, but extremely useful. */
-.bkslshv1 { background-color: #C00; }
-.test3 { display:block; }
-
-/**************** A multiline, multistar comment ***************
-****************************************************************/
-.test4 { display:block;}
-
-/**************************************/
-.comment-in-double-quotes:before {
-  content: "/* ";
-}
-.this_rule_must_stay {
-  color: #F00;
-  background-color: #FFF;
-}
-.comment-in-double-quotes:after {
-  content: " */";
-}
-/**************************************/
-.comment-in-single-quotes:before {
-  content: '/*';
-}
-.this_rule_must_stay {
-  color: #F00;
-  background-color: #FFF;
-}
-.comment-in-single-quotes:after {
-  content: '*/';
-}
-/**************************************/
-.comment-in-mixed-quotes:before {
-  content: '"/*"';
-}
-.this_rule_must_stay {
-  color: #F00;
-  background-color: #FFF;
-}
-.comment-in-mixed-quotes:after {
-  content: "'*/'";
-}
-/**************************************/
-.comment-in-quotes-with-escaped:before {
-  content: '/* \" \' */';
-}
-.this_rule_must_stay {
-  color: #F00;
-  background-color: #FFF;
-}
-.comment-in-quotes-with-escaped:after {
-  content: "*/ \" \ '";
-}
-/************************************/
-/*
-"This has to go"
-'This has to go'
-*/
diff --git a/modules/simpletest/files/css_test_files/css_input_with_import.css b/modules/simpletest/files/css_test_files/css_input_with_import.css
deleted file mode 100644
index 87afcb3..0000000
--- a/modules/simpletest/files/css_test_files/css_input_with_import.css
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-@import "import1.css";
-@import "import2.css";
-
-body {
-  margin: 0;
-  padding: 0;
-  background: #edf5fa;
-  font: 76%/170% Verdana, sans-serif;
-  color: #494949;
-}
-
-.this .is .a .test {
-  font: 1em/100% Verdana, sans-serif;
-  color: #494949;
-}
-.this
-.is
-.a
-.test {
-font: 1em/100% Verdana, sans-serif;
-color: #494949;
-}
-
-textarea, select {
-  font: 1em/160% Verdana, sans-serif;
-  color: #494949;
-}
-
diff --git a/modules/simpletest/files/css_test_files/css_input_with_import.css.optimized.css b/modules/simpletest/files/css_test_files/css_input_with_import.css.optimized.css
deleted file mode 100644
index 698d9aa..0000000
--- a/modules/simpletest/files/css_test_files/css_input_with_import.css.optimized.css
+++ /dev/null
@@ -1,6 +0,0 @@
-ul,select{font:1em/160% Verdana,sans-serif;color:#494949;}.ui-icon{background-image:url(images/icon.png);}
-p,select{font:1em/160% Verdana,sans-serif;color:#494949;}
-body{margin:0;padding:0;background:#edf5fa;font:76%/170% Verdana,sans-serif;color:#494949;}.this .is .a .test{font:1em/100% Verdana,sans-serif;color:#494949;}.this
-.is
-.a
-.test{font:1em/100% Verdana,sans-serif;color:#494949;}textarea,select{font:1em/160% Verdana,sans-serif;color:#494949;}
diff --git a/modules/simpletest/files/css_test_files/css_input_without_import.css b/modules/simpletest/files/css_test_files/css_input_without_import.css
deleted file mode 100644
index 620360a..0000000
--- a/modules/simpletest/files/css_test_files/css_input_without_import.css
+++ /dev/null
@@ -1,69 +0,0 @@
-
-/**
- * @file Basic css that does not use import
- */
-
-
-body {
-  margin: 0;
-  padding: 0;
-  background: #edf5fa;
-  font: 76%/170% Verdana, sans-serif;
-  color: #494949;
-}
-
-.this .is .a .test {
-  font: 1em/100% Verdana, sans-serif;
-  color: #494949;
-}
-
-/**
- * CSS spec says that all whitespace is valid whitespace, so this selector
- * should be just as good as the one above.
- */
-.this
-.is
-.a
-.test {
-font: 1em/100% Verdana, sans-serif;
-color: #494949;
-}
-
-some :pseudo .thing {
-  -moz-border-radius: 3px;
-  -webkit-border-radius: 3px;
-  border-radius: 3px;
-  filter: progid:DXImageTransform.Microsoft.Shadow(color=#000000, direction='180', strength='10');
-  -ms-filter: "progid:DXImageTransform.Microsoft.Shadow(color=#000000, direction='180', strength='10')";
-}
-
-::-moz-selection {
-  background: #000;
-  color:#fff;
-
-}
-::selection {
-  background: #000;
-  color: #fff;
-}
-
-@media print {
-  * {
-    background: #000 !important;
-    color: #fff !important;
-  }
-  @page {
-    margin: 0.5cm;
-  }
-}
-
-@media screen and (max-device-width: 480px) {
-  background: #000;
-  color: #fff;
-}
-
-textarea, select {
-  font: 1em/160% Verdana, sans-serif;
-  color: #494949;
-}
-
diff --git a/modules/simpletest/files/css_test_files/css_input_without_import.css.optimized.css b/modules/simpletest/files/css_test_files/css_input_without_import.css.optimized.css
deleted file mode 100644
index c7bb9dc..0000000
--- a/modules/simpletest/files/css_test_files/css_input_without_import.css.optimized.css
+++ /dev/null
@@ -1,4 +0,0 @@
-body{margin:0;padding:0;background:#edf5fa;font:76%/170% Verdana,sans-serif;color:#494949;}.this .is .a .test{font:1em/100% Verdana,sans-serif;color:#494949;}.this
-.is
-.a
-.test{font:1em/100% Verdana,sans-serif;color:#494949;}some :pseudo .thing{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;filter:progid:DXImageTransform.Microsoft.Shadow(color=#000000,direction='180',strength='10');-ms-filter:"progid:DXImageTransform.Microsoft.Shadow(color=#000000,direction='180',strength='10')";}::-moz-selection{background:#000;color:#fff;}::selection{background:#000;color:#fff;}@media print{*{background:#000 !important;color:#fff !important;}@page{margin:0.5cm;}}@media screen and (max-device-width:480px){background:#000;color:#fff;}textarea,select{font:1em/160% Verdana,sans-serif;color:#494949;}
diff --git a/modules/simpletest/files/css_test_files/css_input_without_import.css.unoptimized.css b/modules/simpletest/files/css_test_files/css_input_without_import.css.unoptimized.css
deleted file mode 100644
index 620360a..0000000
--- a/modules/simpletest/files/css_test_files/css_input_without_import.css.unoptimized.css
+++ /dev/null
@@ -1,69 +0,0 @@
-
-/**
- * @file Basic css that does not use import
- */
-
-
-body {
-  margin: 0;
-  padding: 0;
-  background: #edf5fa;
-  font: 76%/170% Verdana, sans-serif;
-  color: #494949;
-}
-
-.this .is .a .test {
-  font: 1em/100% Verdana, sans-serif;
-  color: #494949;
-}
-
-/**
- * CSS spec says that all whitespace is valid whitespace, so this selector
- * should be just as good as the one above.
- */
-.this
-.is
-.a
-.test {
-font: 1em/100% Verdana, sans-serif;
-color: #494949;
-}
-
-some :pseudo .thing {
-  -moz-border-radius: 3px;
-  -webkit-border-radius: 3px;
-  border-radius: 3px;
-  filter: progid:DXImageTransform.Microsoft.Shadow(color=#000000, direction='180', strength='10');
-  -ms-filter: "progid:DXImageTransform.Microsoft.Shadow(color=#000000, direction='180', strength='10')";
-}
-
-::-moz-selection {
-  background: #000;
-  color:#fff;
-
-}
-::selection {
-  background: #000;
-  color: #fff;
-}
-
-@media print {
-  * {
-    background: #000 !important;
-    color: #fff !important;
-  }
-  @page {
-    margin: 0.5cm;
-  }
-}
-
-@media screen and (max-device-width: 480px) {
-  background: #000;
-  color: #fff;
-}
-
-textarea, select {
-  font: 1em/160% Verdana, sans-serif;
-  color: #494949;
-}
-
diff --git a/modules/simpletest/files/css_test_files/import1.css b/modules/simpletest/files/css_test_files/import1.css
deleted file mode 100644
index 3d5842e..0000000
--- a/modules/simpletest/files/css_test_files/import1.css
+++ /dev/null
@@ -1,6 +0,0 @@
-
-ul, select {
-  font: 1em/160% Verdana, sans-serif;
-  color: #494949;
-}
-.ui-icon{background-image: url(images/icon.png);}
\ No newline at end of file
diff --git a/modules/simpletest/files/css_test_files/import2.css b/modules/simpletest/files/css_test_files/import2.css
deleted file mode 100644
index 367eb57..0000000
--- a/modules/simpletest/files/css_test_files/import2.css
+++ /dev/null
@@ -1,5 +0,0 @@
-
-p, select {
-  font: 1em/160% Verdana, sans-serif;
-  color: #494949;
-}
diff --git a/modules/simpletest/files/html-1.txt b/modules/simpletest/files/html-1.txt
deleted file mode 100644
index 494470d..0000000
--- a/modules/simpletest/files/html-1.txt
+++ /dev/null
@@ -1 +0,0 @@
-<h1>SimpleTest HTML</h1>
\ No newline at end of file
diff --git a/modules/simpletest/files/html-2.html b/modules/simpletest/files/html-2.html
deleted file mode 100644
index 494470d..0000000
--- a/modules/simpletest/files/html-2.html
+++ /dev/null
@@ -1 +0,0 @@
-<h1>SimpleTest HTML</h1>
\ No newline at end of file
diff --git a/modules/simpletest/files/image-1.png b/modules/simpletest/files/image-1.png
deleted file mode 100644
index 09e64d6..0000000
Binary files a/modules/simpletest/files/image-1.png and /dev/null differ
diff --git a/modules/simpletest/files/image-2.jpg b/modules/simpletest/files/image-2.jpg
deleted file mode 100644
index ace07d0..0000000
Binary files a/modules/simpletest/files/image-2.jpg and /dev/null differ
diff --git a/modules/simpletest/files/image-test.gif b/modules/simpletest/files/image-test.gif
deleted file mode 100644
index 432990b..0000000
Binary files a/modules/simpletest/files/image-test.gif and /dev/null differ
diff --git a/modules/simpletest/files/image-test.jpg b/modules/simpletest/files/image-test.jpg
deleted file mode 100644
index de4eace..0000000
Binary files a/modules/simpletest/files/image-test.jpg and /dev/null differ
diff --git a/modules/simpletest/files/image-test.png b/modules/simpletest/files/image-test.png
deleted file mode 100644
index 39c0419..0000000
Binary files a/modules/simpletest/files/image-test.png and /dev/null differ
diff --git a/modules/simpletest/files/javascript-1.txt b/modules/simpletest/files/javascript-1.txt
deleted file mode 100644
index efd44fd..0000000
--- a/modules/simpletest/files/javascript-1.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-<script>
-alert('SimpleTest PHP was executed!');
-</script>
diff --git a/modules/simpletest/files/javascript-2.script b/modules/simpletest/files/javascript-2.script
deleted file mode 100644
index e0206ba..0000000
--- a/modules/simpletest/files/javascript-2.script
+++ /dev/null
@@ -1,3 +0,0 @@
-<script>
-alert('SimpleTest PHP was executed!');
-</script>
\ No newline at end of file
diff --git a/modules/simpletest/files/php-1.txt b/modules/simpletest/files/php-1.txt
deleted file mode 100644
index 52788b6..0000000
--- a/modules/simpletest/files/php-1.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-<?php
-print 'SimpleTest PHP was executed!';
-?>
diff --git a/modules/simpletest/files/php-2.php b/modules/simpletest/files/php-2.php
deleted file mode 100644
index 615a8d7..0000000
--- a/modules/simpletest/files/php-2.php
+++ /dev/null
@@ -1,2 +0,0 @@
-<?php
-print 'SimpleTest PHP was executed!';
diff --git a/modules/simpletest/files/sql-1.txt b/modules/simpletest/files/sql-1.txt
deleted file mode 100644
index 22017e9..0000000
--- a/modules/simpletest/files/sql-1.txt
+++ /dev/null
@@ -1 +0,0 @@
-SELECT invalid_field FROM {invalid_table}
\ No newline at end of file
diff --git a/modules/simpletest/files/sql-2.sql b/modules/simpletest/files/sql-2.sql
deleted file mode 100644
index 22017e9..0000000
--- a/modules/simpletest/files/sql-2.sql
+++ /dev/null
@@ -1 +0,0 @@
-SELECT invalid_field FROM {invalid_table}
\ No newline at end of file
diff --git a/modules/simpletest/lib/Drupal/simpletest/Tests/PSR0WebTest.php b/modules/simpletest/lib/Drupal/simpletest/Tests/PSR0WebTest.php
deleted file mode 100644
index 0292956..0000000
--- a/modules/simpletest/lib/Drupal/simpletest/Tests/PSR0WebTest.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-namespace Drupal\simpletest\Tests;
-
-class PSR0WebTest extends \DrupalWebTestCase {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'PSR0 web test',
-      'description' => 'We want to assert that this PSR-0 test case is being discovered.',
-      'group' => 'SimpleTest',
-    );
-  }
-
-  function testArithmetics() {
-    $this->assert(1 + 1 == 2, '1 + 1 == 2');
-  }
-}
diff --git a/modules/simpletest/simpletest.api.php b/modules/simpletest/simpletest.api.php
deleted file mode 100644
index d262ad6..0000000
--- a/modules/simpletest/simpletest.api.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-/**
- * @file
- * Hooks provided by the SimpleTest module.
- */
-
-/**
- * @addtogroup hooks
- * @{
- */
-
-/**
- * Alter the list of tests.
- *
- * @param $groups
- *   A two dimension array, the first key is the test group (as defined in
- *   getInfo) the second is the name of the class and the value is the return
- *   value of the getInfo method.
- */
-function hook_simpletest_alter(&$groups) {
-  // An alternative session handler module would not want to run the original
-  // Session HTTPS handling test because it checks the sessions table in the
-  // database.
-  unset($groups['Session']['testHttpsSession']);
-}
-
-/**
- * A test group has started.
- *
- * This hook is called just once at the beginning of a test group.
- */
-function hook_test_group_started() {
-}
-
-/**
- * A test group has finished.
- *
- * This hook is called just once at the end of a test group.
- */
-function hook_test_group_finished() {
-}
-
-/**
- * An individual test has finished.
- *
- * This hook is called when an individual test has finished.
- *
- * @param
- *   $results The results of the test as gathered by DrupalWebTestCase.
- *
- * @see DrupalWebTestCase->results
- */
-function hook_test_finished($results) {
-}
-
-
-/**
- * @} End of "addtogroup hooks".
- */
diff --git a/modules/simpletest/simpletest.css b/modules/simpletest/simpletest.css
deleted file mode 100644
index 0cf9aaa..0000000
--- a/modules/simpletest/simpletest.css
+++ /dev/null
@@ -1,89 +0,0 @@
-
-/* Test Table */
-#simpletest-form-table th.select-all {
-  width: 1em;
-}
-th.simpletest_test {
-  width: 16em;
-}
-
-.simpletest-image {
-  display: inline-block;
-  cursor: pointer;
-  width: 1em;
-}
-.simpletest-group-label label {
-  display: inline;
-  font-weight: bold;
-}
-.simpletest-test-label label {
-  margin-left: 1em; /* LTR */
-}
-.simpletest-test-description .description {
-  margin: 0;
-}
-#simpletest-form-table tr td {
-  background-color: white;
-  color: #494949;
-}
-#simpletest-form-table tr.simpletest-group td {
-  background-color: #EDF5FA;
-  color: #494949;
-}
-
-table#simpletest-form-table tr.simpletest-group label {
-  display: inline;
-}
-
-div.message > div.item-list {
-  font-weight: normal;
-}
-
-div.simpletest-pass {
-  color: #33a333;
-}
-.simpletest-fail {
-  color: #981010;
-}
-
-tr.simpletest-pass.odd {
-  background-color: #b6ffb6;
-}
-tr.simpletest-pass.even {
-  background-color: #9bff9b;
-}
-tr.simpletest-fail.odd {
-  background-color: #ffc9c9;
-}
-tr.simpletest-fail.even {
-  background-color: #ffacac;
-}
-tr.simpletest-exception.odd {
-  background-color: #f4ea71;
-}
-tr.simpletest-exception.even {
-  background-color: #f5e742;
-}
-tr.simpletest-debug.odd {
-  background-color: #eee;
-}
-tr.simpletest-debug.even {
-  background-color: #fff;
-}
-
-a.simpletest-collapse {
-  height: 0;
-  width: 0;
-  top: -99em;
-  position: absolute;
-}
-a.simpletest-collapse:focus,
-a.simpletest-collapse:hover {
-  font-size: 80%;
-  top: 0px;
-  height: auto;
-  width: auto;
-  overflow: visible;
-  position: relative;
-  z-index: 1000;
-}
diff --git a/modules/simpletest/simpletest.install b/modules/simpletest/simpletest.install
deleted file mode 100644
index 6c6f569..0000000
--- a/modules/simpletest/simpletest.install
+++ /dev/null
@@ -1,182 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the simpletest module.
- */
-
-/**
- * Minimum value of PHP memory_limit for SimpleTest.
- */
-define('SIMPLETEST_MINIMUM_PHP_MEMORY_LIMIT', '64M');
-
-/**
- * Implements hook_requirements().
- */
-function simpletest_requirements($phase) {
-  $requirements = array();
-  $t = get_t();
-
-  $has_curl = function_exists('curl_init');
-  $has_hash = function_exists('hash_hmac');
-  $has_domdocument = method_exists('DOMDocument', 'loadHTML');
-  $open_basedir = ini_get('open_basedir');
-
-  $requirements['curl'] = array(
-    'title' => $t('cURL'),
-    'value' => $has_curl ? $t('Enabled') : $t('Not found'),
-  );
-  if (!$has_curl) {
-    $requirements['curl']['severity'] = REQUIREMENT_ERROR;
-    $requirements['curl']['description'] = $t('The testing framework could not be installed because the PHP <a href="@curl_url">cURL</a> library is not available.', array('@curl_url' => 'http://php.net/manual/en/curl.setup.php'));
-  }
-  $requirements['hash'] = array(
-    'title' => $t('hash'),
-    'value' => $has_hash ? $t('Enabled') : $t('Not found'),
-  );
-  if (!$has_hash) {
-    $requirements['hash']['severity'] = REQUIREMENT_ERROR;
-    $requirements['hash']['description'] = $t('The testing framework could not be installed because the PHP <a href="@hash_url">hash</a> extension is disabled.', array('@hash_url' => 'http://php.net/manual/en/book.hash.php'));
-  }
-
-  $requirements['php_domdocument'] = array(
-    'title' => $t('PHP DOMDocument class'),
-    'value' => $has_domdocument ? $t('Enabled') : $t('Not found'),
-  );
-  if (!$has_domdocument) {
-    $requirements['php_domdocument']['severity'] = REQUIREMENT_ERROR;
-    $requirements['php_domdocument']['description'] = $t('The testing framework requires the DOMDocument class to be available. Check the configure command at the <a href="@link-phpinfo">PHP info page</a>.', array('@link-phpinfo' => url('admin/reports/status/php')));
-  }
-
-  // SimpleTest currently needs 2 cURL options which are incompatible with
-  // having PHP's open_basedir restriction set.
-  // See http://drupal.org/node/674304.
-  $requirements['php_open_basedir'] = array(
-    'title' => $t('PHP open_basedir restriction'),
-    'value' => $open_basedir ? $t('Enabled') : $t('Disabled'),
-  );
-  if ($open_basedir) {
-    $requirements['php_open_basedir']['severity'] = REQUIREMENT_ERROR;
-    $requirements['php_open_basedir']['description'] = $t('The testing framework requires the PHP <a href="@open_basedir-url">open_basedir</a> restriction to be disabled. Check your webserver configuration or contact your web host.', array('@open_basedir-url' => 'http://php.net/manual/en/ini.core.php#ini.open-basedir'));
-  }
-
-  // Check the current memory limit. If it is set too low, SimpleTest will fail
-  // to load all tests and throw a fatal error.
-  $memory_limit = ini_get('memory_limit');
-  if (!drupal_check_memory_limit(SIMPLETEST_MINIMUM_PHP_MEMORY_LIMIT, $memory_limit)) {
-    $requirements['php_memory_limit']['severity'] = REQUIREMENT_ERROR;
-    $requirements['php_memory_limit']['description'] = $t('The testing framework requires the PHP memory limit to be at least %memory_minimum_limit. The current value is %memory_limit. <a href="@url">Follow these steps to continue</a>.', array('%memory_limit' => $memory_limit, '%memory_minimum_limit' => SIMPLETEST_MINIMUM_PHP_MEMORY_LIMIT, '@url' => 'http://drupal.org/node/207036'));
-  }
-
-  return $requirements;
-}
-
-/**
- * Implements hook_schema().
- */
-function simpletest_schema() {
-  $schema['simpletest'] = array(
-    'description' => 'Stores simpletest messages',
-    'fields' => array(
-      'message_id'  => array(
-        'type' => 'serial',
-        'not null' => TRUE,
-        'description' => 'Primary Key: Unique simpletest message ID.',
-      ),
-      'test_id' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Test ID, messages belonging to the same ID are reported together',
-      ),
-      'test_class' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'The name of the class that created this message.',
-      ),
-      'status' => array(
-        'type' => 'varchar',
-        'length' => 9,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Message status. Core understands pass, fail, exception.',
-      ),
-      'message' => array(
-        'type' => 'text',
-        'not null' => TRUE,
-        'description' => 'The message itself.',
-      ),
-      'message_group' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'The message group this message belongs to. For example: warning, browser, user.',
-      ),
-      'function' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Name of the assertion function or method that created this message.',
-      ),
-      'line' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Line number on which the function is called.',
-      ),
-      'file' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Name of the file where the function is called.',
-      ),
-    ),
-    'primary key' => array('message_id'),
-    'indexes' => array(
-      'reporter' => array('test_class', 'message_id'),
-    ),
-  );
-  $schema['simpletest_test_id'] = array(
-    'description' => 'Stores simpletest test IDs, used to auto-incrament the test ID so that a fresh test ID is used.',
-    'fields' => array(
-      'test_id'  => array(
-        'type' => 'serial',
-        'not null' => TRUE,
-        'description' => 'Primary Key: Unique simpletest ID used to group test results together. Each time a set of tests
-                            are run a new test ID is used.',
-      ),
-      'last_prefix' => array(
-        'type' => 'varchar',
-        'length' => 60,
-        'not null' => FALSE,
-        'default' => '',
-        'description' => 'The last database prefix used during testing.',
-      ),
-    ),
-    'primary key' => array('test_id'),
-  );
-  return $schema;
-}
-
-/**
- * Implements hook_uninstall().
- */
-function simpletest_uninstall() {
-  drupal_load('module', 'simpletest');
-  simpletest_clean_database();
-
-  // Remove settings variables.
-  variable_del('simpletest_httpauth_method');
-  variable_del('simpletest_httpauth_username');
-  variable_del('simpletest_httpauth_password');
-  variable_del('simpletest_clear_results');
-  variable_del('simpletest_verbose');
-
-  // Remove generated files.
-  file_unmanaged_delete_recursive('public://simpletest');
-}
diff --git a/modules/simpletest/simpletest.js b/modules/simpletest/simpletest.js
deleted file mode 100644
index 2199fed..0000000
--- a/modules/simpletest/simpletest.js
+++ /dev/null
@@ -1,104 +0,0 @@
-(function ($) {
-
-/**
- * Add the cool table collapsing on the testing overview page.
- */
-Drupal.behaviors.simpleTestMenuCollapse = {
-  attach: function (context, settings) {
-    var timeout = null;
-    // Adds expand-collapse functionality.
-    $('div.simpletest-image').once('simpletest-image', function () {
-      var $this = $(this);
-      var direction = settings.simpleTest[this.id].imageDirection;
-      $this.html(settings.simpleTest.images[direction]);
-
-      // Adds group toggling functionality to arrow images.
-      $this.click(function () {
-        var trs = $this.closest('tbody').children('.' + settings.simpleTest[this.id].testClass);
-        var direction = settings.simpleTest[this.id].imageDirection;
-        var row = direction ? trs.length - 1 : 0;
-
-        // If clicked in the middle of expanding a group, stop so we can switch directions.
-        if (timeout) {
-          clearTimeout(timeout);
-        }
-
-        // Function to toggle an individual row according to the current direction.
-        // We set a timeout of 20 ms until the next row will be shown/hidden to
-        // create a sliding effect.
-        function rowToggle() {
-          if (direction) {
-            if (row >= 0) {
-              $(trs[row]).hide();
-              row--;
-              timeout = setTimeout(rowToggle, 20);
-            }
-          }
-          else {
-            if (row < trs.length) {
-              $(trs[row]).removeClass('js-hide').show();
-              row++;
-              timeout = setTimeout(rowToggle, 20);
-            }
-          }
-        }
-
-        // Kick-off the toggling upon a new click.
-        rowToggle();
-
-        // Toggle the arrow image next to the test group title.
-        $this.html(settings.simpleTest.images[(direction ? 0 : 1)]);
-        settings.simpleTest[this.id].imageDirection = !direction;
-
-      });
-    });
-  }
-};
-
-/**
- * Select/deselect all the inner checkboxes when the outer checkboxes are
- * selected/deselected.
- */
-Drupal.behaviors.simpleTestSelectAll = {
-  attach: function (context, settings) {
-    $('td.simpletest-select-all').once('simpletest-select-all', function () {
-      var testCheckboxes = settings.simpleTest['simpletest-test-group-' + $(this).attr('id')].testNames;
-      var groupCheckbox = $('<input type="checkbox" class="form-checkbox" id="' + $(this).attr('id') + '-select-all" />');
-
-      // Each time a single-test checkbox is checked or unchecked, make sure
-      // that the associated group checkbox gets the right state too.
-      var updateGroupCheckbox = function () {
-        var checkedTests = 0;
-        for (var i = 0; i < testCheckboxes.length; i++) {
-          $('#' + testCheckboxes[i]).each(function () {
-            if (($(this).attr('checked'))) {
-              checkedTests++;
-            }
-          });
-        }
-        $(groupCheckbox).attr('checked', (checkedTests == testCheckboxes.length));
-      };
-
-      // Have the single-test checkboxes follow the group checkbox.
-      groupCheckbox.change(function () {
-        var checked = !!($(this).attr('checked'));
-        for (var i = 0; i < testCheckboxes.length; i++) {
-          $('#' + testCheckboxes[i]).attr('checked', checked);
-        }
-      });
-
-      // Have the group checkbox follow the single-test checkboxes.
-      for (var i = 0; i < testCheckboxes.length; i++) {
-        $('#' + testCheckboxes[i]).change(function () {
-          updateGroupCheckbox();
-        });
-      }
-
-      // Initialize status for the group checkbox correctly.
-      updateGroupCheckbox();
-      $(this).append(groupCheckbox);
-    });
-  }
-};
-
-})(jQuery);
diff --git a/modules/simpletest/simpletest.module b/modules/simpletest/simpletest.module
deleted file mode 100644
index 3103af0..0000000
--- a/modules/simpletest/simpletest.module
+++ /dev/null
@@ -1,626 +0,0 @@
-<?php
-
-/**
- * @file
- * Provides testing functionality.
- */
-
-/**
- * Implements hook_help().
- */
-function simpletest_help($path, $arg) {
-  switch ($path) {
-    case 'admin/help#simpletest':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Testing module provides a framework for running automated unit tests. It can be used to verify a working state of Drupal before and after any code changes, or as a means for developers to write and execute tests for their modules. For more information, see the online handbook entry for <a href="@simpletest">Testing module</a>.', array('@simpletest' => 'http://drupal.org/documentation/modules/simpletest', '@blocks' => url('admin/structure/block'))) . '</p>';
-      $output .= '<h3>' . t('Uses') . '</h3>';
-      $output .= '<dl>';
-      $output .= '<dt>' . t('Running tests') . '</dt>';
-      $output .= '<dd>' . t('Visit the <a href="@admin-simpletest">Testing page</a> to display a list of available tests. For comprehensive testing, select <em>all</em> tests, or individually select tests for more targeted testing. Note that it might take several minutes for all tests to complete. For more information on creating and modifying your own tests, see the <a href="@simpletest-api">Testing API Documentation</a> in the Drupal handbook.', array('@simpletest-api' => 'http://drupal.org/simpletest', '@admin-simpletest' => url('admin/config/development/testing'))) . '</dd>';
-      $output .= '<dd>' . t('After the tests run, a message will be displayed next to each test group indicating whether tests within it passed, failed, or had exceptions. A pass means that the test returned the expected results, while fail means that it did not. An exception normally indicates an error outside of the test, such as a PHP warning or notice. If there were failures or exceptions, the results will be expanded to show details, and the tests that had failures or exceptions will be indicated in red or pink rows. You can then use these results to refine your code and tests, until all tests pass.') . '</dd>';
-      $output .= '</dl>';
-      return $output;
-  }
-}
-
-/**
- * Implements hook_menu().
- */
-function simpletest_menu() {
-  $items['admin/config/development/testing'] = array(
-    'title' => 'Testing',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('simpletest_test_form'),
-    'description' => 'Run tests against Drupal core and your active modules. These tests help assure that your site code is working as designed.',
-    'access arguments' => array('administer unit tests'),
-    'file' => 'simpletest.pages.inc',
-    'weight' => -5,
-  );
-  $items['admin/config/development/testing/list'] = array(
-    'title' => 'List',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-  );
-  $items['admin/config/development/testing/settings'] = array(
-    'title' => 'Settings',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('simpletest_settings_form'),
-    'access arguments' => array('administer unit tests'),
-    'type' => MENU_LOCAL_TASK,
-    'file' => 'simpletest.pages.inc',
-  );
-  $items['admin/config/development/testing/results/%'] = array(
-    'title' => 'Test result',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('simpletest_result_form', 5),
-    'description' => 'View result of tests.',
-    'access arguments' => array('administer unit tests'),
-    'file' => 'simpletest.pages.inc',
-  );
-  return $items;
-}
-
-/**
- * Implements hook_permission().
- */
-function simpletest_permission() {
-  return array(
-    'administer unit tests' => array(
-      'title' => t('Administer tests'),
-      'restrict access' => TRUE,
-    ),
-  );
-}
-
-/**
- * Implements hook_theme().
- */
-function simpletest_theme() {
-  return array(
-    'simpletest_test_table' => array(
-      'render element' => 'table',
-      'file' => 'simpletest.pages.inc',
-    ),
-    'simpletest_result_summary' => array(
-      'render element' => 'form',
-      'file' => 'simpletest.pages.inc',
-    ),
-  );
-}
-
-/**
- * Implements hook_js_alter().
- */
-function simpletest_js_alter(&$javascript) {
-  // Since SimpleTest is a special use case for the table select, stick the
-  // SimpleTest JavaScript above the table select.
-  $simpletest = drupal_get_path('module', 'simpletest') . '/simpletest.js';
-  if (array_key_exists($simpletest, $javascript) && array_key_exists('misc/tableselect.js', $javascript)) {
-    $javascript[$simpletest]['weight'] = $javascript['misc/tableselect.js']['weight'] - 1;
-  }
-}
-
-function _simpletest_format_summary_line($summary) {
-  $args = array(
-    '@pass' => format_plural(isset($summary['#pass']) ? $summary['#pass'] : 0, '1 pass', '@count passes'),
-    '@fail' => format_plural(isset($summary['#fail']) ? $summary['#fail'] : 0, '1 fail', '@count fails'),
-    '@exception' => format_plural(isset($summary['#exception']) ? $summary['#exception'] : 0, '1 exception', '@count exceptions'),
-  );
-  if (!$summary['#debug']) {
-    return t('@pass, @fail, and @exception', $args);
-  }
-  $args['@debug'] = format_plural(isset($summary['#debug']) ? $summary['#debug'] : 0, '1 debug message', '@count debug messages');
-  return t('@pass, @fail, @exception, and @debug', $args);
-}
-
-/**
- * Actually runs tests.
- *
- * @param $test_list
- *   List of tests to run.
- * @param $reporter
- *   Which reporter to use. Allowed values are: text, xml, html and drupal,
- *   drupal being the default.
- */
-function simpletest_run_tests($test_list, $reporter = 'drupal') {
-  $test_id = db_insert('simpletest_test_id')
-    ->useDefaults(array('test_id'))
-    ->execute();
-
-  // Clear out the previous verbose files.
-  file_unmanaged_delete_recursive('public://simpletest/verbose');
-
-  // Get the info for the first test being run.
-  $first_test = array_shift($test_list);
-  $first_instance = new $first_test();
-  array_unshift($test_list, $first_test);
-  $info = $first_instance->getInfo();
-
-  $batch = array(
-    'title' => t('Running tests'),
-    'operations' => array(
-      array('_simpletest_batch_operation', array($test_list, $test_id)),
-    ),
-    'finished' => '_simpletest_batch_finished',
-    'progress_message' => '',
-    'css' => array(drupal_get_path('module', 'simpletest') . '/simpletest.css'),
-    'init_message' => t('Processing test @num of @max - %test.', array('%test' => $info['name'], '@num' => '1', '@max' => count($test_list))),
-  );
-  batch_set($batch);
-
-  module_invoke_all('test_group_started');
-
-  return $test_id;
-}
-
-/**
- * Batch operation callback.
- */
-function _simpletest_batch_operation($test_list_init, $test_id, &$context) {
-  simpletest_classloader_register();
-  // Get working values.
-  if (!isset($context['sandbox']['max'])) {
-    // First iteration: initialize working values.
-    $test_list = $test_list_init;
-    $context['sandbox']['max'] = count($test_list);
-    $test_results = array('#pass' => 0, '#fail' => 0, '#exception' => 0, '#debug' => 0);
-  }
-  else {
-    // Nth iteration: get the current values where we last stored them.
-    $test_list = $context['sandbox']['tests'];
-    $test_results = $context['sandbox']['test_results'];
-  }
-  $max = $context['sandbox']['max'];
-
-  // Perform the next test.
-  $test_class = array_shift($test_list);
-  $test = new $test_class($test_id);
-  $test->run();
-  $size = count($test_list);
-  $info = $test->getInfo();
-
-  module_invoke_all('test_finished', $test->results);
-
-  // Gather results and compose the report.
-  $test_results[$test_class] = $test->results;
-  foreach ($test_results[$test_class] as $key => $value) {
-    $test_results[$key] += $value;
-  }
-  $test_results[$test_class]['#name'] = $info['name'];
-  $items = array();
-  foreach (element_children($test_results) as $class) {
-    array_unshift($items, '<div class="simpletest-' . ($test_results[$class]['#fail'] + $test_results[$class]['#exception'] ? 'fail' : 'pass') . '">' . t('@name: @summary', array('@name' => $test_results[$class]['#name'], '@summary' => _simpletest_format_summary_line($test_results[$class]))) . '</div>');
-  }
-  $context['message'] = t('Processed test @num of @max - %test.', array('%test' => $info['name'], '@num' => $max - $size, '@max' => $max));
-  $context['message'] .= '<div class="simpletest-' . ($test_results['#fail'] + $test_results['#exception'] ? 'fail' : 'pass') . '">Overall results: ' . _simpletest_format_summary_line($test_results) . '</div>';
-  $context['message'] .= theme('item_list', array('items' => $items));
-
-  // Save working values for the next iteration.
-  $context['sandbox']['tests'] = $test_list;
-  $context['sandbox']['test_results'] = $test_results;
-  // The test_id is the only thing we need to save for the report page.
-  $context['results']['test_id'] = $test_id;
-
-  // Multistep processing: report progress.
-  $context['finished'] = 1 - $size / $max;
-}
-
-function _simpletest_batch_finished($success, $results, $operations, $elapsed) {
-  if ($success) {
-    drupal_set_message(t('The test run finished in @elapsed.', array('@elapsed' => $elapsed)));
-  }
-  else {
-    // Use the test_id passed as a parameter to _simpletest_batch_operation().
-    $test_id = $operations[0][1][1];
-
-    // Retrieve the last database prefix used for testing and the last test
-    // class that was run from. Use the information to read the lgo file
-    // in case any fatal errors caused the test to crash.
-    list($last_prefix, $last_test_class) = simpletest_last_test_get($test_id);
-    simpletest_log_read($test_id, $last_prefix, $last_test_class);
-
-    drupal_set_message(t('The test run did not successfully finish.'), 'error');
-    drupal_set_message(t('Use the <em>Clean environment</em> button to clean-up temporary files and tables.'), 'warning');
-  }
-  module_invoke_all('test_group_finished');
-}
-
-/**
- * Get information about the last test that ran given a test ID.
- *
- * @param $test_id
- *   The test ID to get the last test from.
- * @return
- *   Array containing the last database prefix used and the last test class
- *   that ran.
- */
-function simpletest_last_test_get($test_id) {
-  $last_prefix = db_query_range('SELECT last_prefix FROM {simpletest_test_id} WHERE test_id = :test_id', 0, 1, array(':test_id' => $test_id))->fetchField();
-  $last_test_class = db_query_range('SELECT test_class FROM {simpletest} WHERE test_id = :test_id ORDER BY message_id DESC', 0, 1, array(':test_id' => $test_id))->fetchField();
-  return array($last_prefix, $last_test_class);
-}
-
-/**
- * Read the error log and report any errors as assertion failures.
- *
- * The errors in the log should only be fatal errors since any other errors
- * will have been recorded by the error handler.
- *
- * @param $test_id
- *   The test ID to which the log relates.
- * @param $prefix
- *   The database prefix to which the log relates.
- * @param $test_class
- *   The test class to which the log relates.
- * @param $during_test
- *   Indicates that the current file directory path is a temporary file
- *   file directory used during testing.
- * @return
- *   Found any entries in log.
- */
-function simpletest_log_read($test_id, $prefix, $test_class, $during_test = FALSE) {
-  $log = 'public://' . ($during_test ? '' : '/simpletest/' . substr($prefix, 10)) . '/error.log';
-  $found = FALSE;
-  if (file_exists($log)) {
-    foreach (file($log) as $line) {
-      if (preg_match('/\[.*?\] (.*?): (.*?) in (.*) on line (\d+)/', $line, $match)) {
-        // Parse PHP fatal errors for example: PHP Fatal error: Call to
-        // undefined function break_me() in /path/to/file.php on line 17
-        $caller = array(
-          'line' => $match[4],
-          'file' => $match[3],
-        );
-        DrupalTestCase::insertAssert($test_id, $test_class, FALSE, $match[2], $match[1], $caller);
-      }
-      else {
-        // Unknown format, place the entire message in the log.
-        DrupalTestCase::insertAssert($test_id, $test_class, FALSE, $line, 'Fatal error');
-      }
-      $found = TRUE;
-    }
-  }
-  return $found;
-}
-
-/**
- * Get a list of all of the tests provided by the system.
- *
- * The list of test classes is loaded from the registry where it looks for
- * files ending in ".test". Once loaded the test list is cached and stored in
- * a static variable. In order to list tests provided by disabled modules
- * hook_registry_files_alter() is used to forcefully add them to the registry.
- *
- * PSR-0 classes are found by searching the designated directory for each module
- * for files matching the PSR-0 standard.
- *
- * @return
- *   An array of tests keyed with the groups specified in each of the tests
- *   getInfo() method and then keyed by the test class. An example of the array
- *   structure is provided below.
- *
- *   @code
- *     $groups['Blog'] => array(
- *       'BlogTestCase' => array(
- *         'name' => 'Blog functionality',
- *         'description' => 'Create, view, edit, delete, ...',
- *         'group' => 'Blog',
- *       ),
- *     );
- *   @endcode
- * @see simpletest_registry_files_alter()
- */
-function simpletest_test_get_all() {
-  $groups = &drupal_static(__FUNCTION__);
-
-  if (!$groups) {
-    // Register a simple class loader for PSR-0 test classes.
-    simpletest_classloader_register();
-
-    // Load test information from cache if available, otherwise retrieve the
-    // information from each tests getInfo() method.
-    if ($cache = cache_get('simpletest', 'cache')) {
-      $groups = $cache->data;
-    }
-    else {
-      // Select all clases in files ending with .test.
-      $classes = db_query("SELECT name FROM {registry} WHERE type = :type AND filename LIKE :name", array(':type' => 'class', ':name' => '%.test'))->fetchCol();
-
-      // Also discover PSR-0 test classes, if the PHP version allows it.
-      if (version_compare(PHP_VERSION, '5.3') > 0) {
-
-        // Select all PSR-0 classes in the Tests namespace of all modules.
-        $system_list = db_query("SELECT name, filename FROM {system}")->fetchAllKeyed();
-
-        foreach ($system_list as $name => $filename) {
-          // Build directory in which the test files would reside.
-          $tests_dir = DRUPAL_ROOT . '/' . dirname($filename) . '/lib/Drupal/' . $name . '/Tests';
-          // Scan it for test files if it exists.
-          if (is_dir($tests_dir)) {
-            $files = file_scan_directory($tests_dir, '/.*\.php/');
-            if (!empty($files)) {
-              $basedir = DRUPAL_ROOT . '/' . dirname($filename) . '/lib/';
-              foreach ($files as $file) {
-                // Convert the file name into the namespaced class name.
-                $replacements = array(
-                  '/' => '\\',
-                  $basedir => '',
-                  '.php' => '',
-                );
-                $classes[] = strtr($file->uri, $replacements);
-              }
-            }
-          }
-        }
-      }
-
-      // Check that each class has a getInfo() method and store the information
-      // in an array keyed with the group specified in the test information.
-      $groups = array();
-      foreach ($classes as $class) {
-        // Test classes need to implement getInfo() to be valid.
-        if (class_exists($class) && method_exists($class, 'getInfo')) {
-          $info = call_user_func(array($class, 'getInfo'));
-
-          // If this test class requires a non-existing module, skip it.
-          if (!empty($info['dependencies'])) {
-            foreach ($info['dependencies'] as $module) {
-              if (!drupal_get_filename('module', $module)) {
-                continue 2;
-              }
-            }
-          }
-
-          $groups[$info['group']][$class] = $info;
-        }
-      }
-
-      // Sort the groups and tests within the groups by name.
-      uksort($groups, 'strnatcasecmp');
-      foreach ($groups as $group => &$tests) {
-        uksort($tests, 'strnatcasecmp');
-      }
-
-      // Allow modules extending core tests to disable originals.
-      drupal_alter('simpletest', $groups);
-      cache_set('simpletest', $groups);
-    }
-  }
-  return $groups;
-}
-
-/*
- * Register a simple class loader that can find D8-style PSR-0 test classes.
- *
- * Other PSR-0 class loading can happen in contrib, but those contrib class
- * loader modules will not be enabled when testbot runs. So we need to do this
- * one in core.
- */
-function simpletest_classloader_register() {
-
-  // Prevent duplicate classloader registration.
-  static $first_run = TRUE;
-  if (!$first_run) {
-    return;
-  }
-  $first_run = FALSE;
-
-  // Only register PSR-0 class loading if we are on PHP 5.3 or higher.
-  if (version_compare(PHP_VERSION, '5.3') > 0) {
-    spl_autoload_register('_simpletest_autoload_psr0');
-  }
-}
-
-/**
- * Autoload callback to find PSR-0 test classes.
- *
- * This will only work on classes where the namespace is of the pattern
- *   "Drupal\$extension\Tests\.."
- */
-function _simpletest_autoload_psr0($class) {
-
-  // Static cache for extension paths.
-  // This cache is lazily filled as soon as it is needed.
-  static $extensions;
-
-  // Check that the first namespace fragment is "Drupal\"
-  if (substr($class, 0, 7) === 'Drupal\\') {
-    // Find the position of the second namespace separator.
-    $pos = strpos($class, '\\', 7);
-    // Check that the third namespace fragment is "\Tests\".
-    if (substr($class, $pos, 7) === '\\Tests\\') {
-
-      // Extract the second namespace fragment, which we expect to be the
-      // extension name.
-      $extension = substr($class, 7, $pos - 7);
-
-      // Lazy-load the extension paths, both enabled and disabled.
-      if (!isset($extensions)) {
-        $extensions = db_query("SELECT name, filename FROM {system}")->fetchAllKeyed();
-      }
-
-      // Check if the second namespace fragment is a known extension name.
-      if (isset($extensions[$extension])) {
-
-        // Split the class into namespace and classname.
-        $nspos = strrpos($class, '\\');
-        $namespace = substr($class, 0, $nspos);
-        $classname = substr($class, $nspos + 1);
-
-        // Build the filepath where we expect the class to be defined.
-        $path = dirname($extensions[$extension]) . '/lib/' .
-          str_replace('\\', '/', $namespace) . '/' .
-          str_replace('_', '/', $classname) . '.php';
-
-        // Include the file, if it does exist.
-        if (file_exists($path)) {
-          include $path;
-        }
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_registry_files_alter().
- *
- * Add the test files for disabled modules so that we get a list containing
- * all the avialable tests.
- */
-function simpletest_registry_files_alter(&$files, $modules) {
-  foreach ($modules as $module) {
-    // Only add test files for disabled modules, as enabled modules should
-    // already include any test files they provide.
-    if (!$module->status) {
-      $dir = $module->dir;
-      if (!empty($module->info['files'])) {
-        foreach ($module->info['files'] as $file) {
-          if (substr($file, -5) == '.test') {
-            $files["$dir/$file"] = array('module' => $module->name, 'weight' => $module->weight);
-          }
-        }
-      }
-    }
-  }
-}
-
-/**
- * Generate test file.
- */
-function simpletest_generate_file($filename, $width, $lines, $type = 'binary-text') {
-  $size = $width * $lines - $lines;
-
-  // Generate random text
-  $text = '';
-  for ($i = 0; $i < $size; $i++) {
-    switch ($type) {
-      case 'text':
-        $text .= chr(rand(32, 126));
-        break;
-      case 'binary':
-        $text .= chr(rand(0, 31));
-        break;
-      case 'binary-text':
-      default:
-        $text .= rand(0, 1);
-        break;
-    }
-  }
-  $text = wordwrap($text, $width - 1, "\n", TRUE) . "\n"; // Add \n for symmetrical file.
-
-  // Create filename.
-  file_put_contents('public://' . $filename . '.txt', $text);
-  return $filename;
-}
-
-/**
- * Remove all temporary database tables and directories.
- */
-function simpletest_clean_environment() {
-  simpletest_clean_database();
-  simpletest_clean_temporary_directories();
-  if (variable_get('simpletest_clear_results', TRUE)) {
-    $count = simpletest_clean_results_table();
-    drupal_set_message(format_plural($count, 'Removed 1 test result.', 'Removed @count test results.'));
-  }
-  else {
-    drupal_set_message(t('Clear results is disabled and the test results table will not be cleared.'), 'warning');
-  }
-
-  // Detect test classes that have been added, renamed or deleted.
-  registry_rebuild();
-  cache_clear_all('simpletest', 'cache');
-}
-
-/**
- * Removed prefixed tables from the database that are left over from crashed tests.
- */
-function simpletest_clean_database() {
-  $tables = db_find_tables(Database::getConnection()->prefixTables('{simpletest}') . '%');
-  $schema = drupal_get_schema_unprocessed('simpletest');
-  $count = 0;
-  foreach (array_diff_key($tables, $schema) as $table) {
-    // Strip the prefix and skip tables without digits following "simpletest",
-    // e.g. {simpletest_test_id}.
-    if (preg_match('/simpletest\d+.*/', $table, $matches)) {
-      db_drop_table($matches[0]);
-      $count++;
-    }
-  }
-
-  if ($count > 0) {
-    drupal_set_message(format_plural($count, 'Removed 1 leftover table.', 'Removed @count leftover tables.'));
-  }
-  else {
-    drupal_set_message(t('No leftover tables to remove.'));
-  }
-}
-
-/**
- * Find all leftover temporary directories and remove them.
- */
-function simpletest_clean_temporary_directories() {
-  $count = 0;
-  if (is_dir('public://simpletest')) {
-    $files = scandir('public://simpletest');
-    foreach ($files as $file) {
-      $path = 'public://simpletest/' . $file;
-      if (is_dir($path) && is_numeric($file)) {
-        file_unmanaged_delete_recursive($path);
-        $count++;
-      }
-    }
-  }
-
-  if ($count > 0) {
-    drupal_set_message(format_plural($count, 'Removed 1 temporary directory.', 'Removed @count temporary directories.'));
-  }
-  else {
-    drupal_set_message(t('No temporary directories to remove.'));
-  }
-}
-
-/**
- * Clear the test result tables.
- *
- * @param $test_id
- *   Test ID to remove results for, or NULL to remove all results.
- * @return
- *   The number of results removed.
- */
-function simpletest_clean_results_table($test_id = NULL) {
-  if (variable_get('simpletest_clear_results', TRUE)) {
-    if ($test_id) {
-      $count = db_query('SELECT COUNT(test_id) FROM {simpletest_test_id} WHERE test_id = :test_id', array(':test_id' => $test_id))->fetchField();
-
-      db_delete('simpletest')
-        ->condition('test_id', $test_id)
-        ->execute();
-      db_delete('simpletest_test_id')
-        ->condition('test_id', $test_id)
-        ->execute();
-    }
-    else {
-      $count = db_query('SELECT COUNT(test_id) FROM {simpletest_test_id}')->fetchField();
-
-      // Clear test results.
-      db_delete('simpletest')->execute();
-      db_delete('simpletest_test_id')->execute();
-    }
-
-    return $count;
-  }
-  return 0;
-}
-
-/**
- * Implements hook_mail_alter().
- *
- * Aborts sending of messages with ID 'simpletest_cancel_test'.
- *
- * @see MailTestCase::testCancelMessage()
- */
-function simpletest_mail_alter(&$message) {
-  if ($message['id'] == 'simpletest_cancel_test') {
-    $message['send'] = FALSE;
-  }
-}
diff --git a/modules/simpletest/simpletest.pages.inc b/modules/simpletest/simpletest.pages.inc
deleted file mode 100644
index 3127459..0000000
--- a/modules/simpletest/simpletest.pages.inc
+++ /dev/null
@@ -1,513 +0,0 @@
-<?php
-
-/**
- * @file
- * Page callbacks for simpletest module.
- */
-
-/**
- * List tests arranged in groups that can be selected and run.
- */
-function simpletest_test_form($form) {
-  $form['tests'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Tests'),
-    '#description' => t('Select the test(s) or test group(s) you would like to run, and click <em>Run tests</em>.'),
-  );
-
-  $form['tests']['table'] = array(
-    '#theme' => 'simpletest_test_table',
-  );
-
-  // Generate the list of tests arranged by group.
-  $groups = simpletest_test_get_all();
-  foreach ($groups as $group => $tests) {
-    $form['tests']['table'][$group] = array(
-      '#collapsed' => TRUE,
-    );
-
-    foreach ($tests as $class => $info) {
-      $form['tests']['table'][$group][$class] = array(
-        '#type' => 'checkbox',
-        '#title' => $info['name'],
-        '#description' => $info['description'],
-      );
-    }
-  }
-
-  // Operation buttons.
-  $form['tests']['op'] = array(
-    '#type' => 'submit',
-    '#value' => t('Run tests'),
-  );
-  $form['clean'] = array(
-    '#type' => 'fieldset',
-    '#collapsible' => FALSE,
-    '#collapsed' => FALSE,
-    '#title' => t('Clean test environment'),
-    '#description' => t('Remove tables with the prefix "simpletest" and temporary directories that are left over from tests that crashed. This is intended for developers when creating tests.'),
-  );
-  $form['clean']['op'] = array(
-    '#type' => 'submit',
-    '#value' => t('Clean environment'),
-    '#submit' => array('simpletest_clean_environment'),
-  );
-
-  return $form;
-}
-
-/**
- * Returns HTML for a test list generated by simpletest_test_form() into a table.
- *
- * @param $variables
- *   An associative array containing:
- *   - table: A render element representing the table.
- *
- * @ingroup themeable
- */
-function theme_simpletest_test_table($variables) {
-  $table = $variables['table'];
-
-  drupal_add_css(drupal_get_path('module', 'simpletest') . '/simpletest.css');
-  drupal_add_js(drupal_get_path('module', 'simpletest') . '/simpletest.js');
-  drupal_add_js('misc/tableselect.js');
-
-  // Create header for test selection table.
-  $header = array(
-    array('class' => array('select-all')),
-    array('data' => t('Test'), 'class' => array('simpletest_test')),
-    array('data' => t('Description'), 'class' => array('simpletest_description')),
-  );
-
-  // Define the images used to expand/collapse the test groups.
-  $js = array(
-    'images' => array(
-      theme('image', array('path' => 'misc/menu-collapsed.png', 'width' => 7, 'height' => 7, 'alt' => t('Expand'), 'title' => t('Expand'))) . ' <a href="#" class="simpletest-collapse">(' . t('Expand') . ')</a>',
-      theme('image', array('path' => 'misc/menu-expanded.png', 'width' => 7, 'height' => 7, 'alt' => t('Collapse'), 'title' => t('Collapse'))) . ' <a href="#" class="simpletest-collapse">(' . t('Collapse') . ')</a>',
-    ),
-  );
-
-  // Cycle through each test group and create a row.
-  $rows = array();
-  foreach (element_children($table) as $key) {
-    $element = &$table[$key];
-    $row = array();
-
-    // Make the class name safe for output on the page by replacing all
-    // non-word/decimal characters with a dash (-).
-    $test_class = strtolower(trim(preg_replace("/[^\w\d]/", "-", $key)));
-
-    // Select the right "expand"/"collapse" image, depending on whether the
-    // category is expanded (at least one test selected) or not.
-    $collapsed = !empty($element['#collapsed']);
-    $image_index = $collapsed ? 0 : 1;
-
-    // Place-holder for checkboxes to select group of tests.
-    $row[] = array('id' => $test_class, 'class' => array('simpletest-select-all'));
-
-    // Expand/collapse image and group title.
-    $row[] = array(
-      'data' => '<div class="simpletest-image" id="simpletest-test-group-' . $test_class . '"></div>' .
-        '<label for="' . $test_class . '-select-all" class="simpletest-group-label">' . $key . '</label>',
-      'class' => array('simpletest-group-label'),
-    );
-
-    $row[] = array(
-      'data' => '&nbsp;',
-      'class' => array('simpletest-group-description'),
-    );
-
-    $rows[] = array('data' => $row, 'class' => array('simpletest-group'));
-
-    // Add individual tests to group.
-    $current_js = array(
-      'testClass' => $test_class . '-test',
-      'testNames' => array(),
-      'imageDirection' => $image_index,
-      'clickActive' => FALSE,
-    );
-
-    // Sorting $element by children's #title attribute instead of by class name.
-    uasort($element, 'element_sort_by_title');
-
-    // Cycle through each test within the current group.
-    foreach (element_children($element) as $test_name) {
-      $test = $element[$test_name];
-      $row = array();
-
-      $current_js['testNames'][] = $test['#id'];
-
-      // Store test title and description so that checkbox won't render them.
-      $title = $test['#title'];
-      $description = $test['#description'];
-
-      $test['#title_display'] = 'invisible';
-      unset($test['#description']);
-
-      // Test name is used to determine what tests to run.
-      $test['#name'] = $test_name;
-
-      $row[] = array(
-        'data' => drupal_render($test),
-        'class' => array('simpletest-test-select'),
-      );
-      $row[] = array(
-        'data' => '<label for="' . $test['#id'] . '">' . $title . '</label>',
-        'class' => array('simpletest-test-label'),
-      );
-      $row[] = array(
-        'data' => '<div class="description">' . $description . '</div>',
-        'class' => array('simpletest-test-description'),
-      );
-
-      $rows[] = array('data' => $row, 'class' => array($test_class . '-test', ($collapsed ? 'js-hide' : '')));
-    }
-    $js['simpletest-test-group-' . $test_class] = $current_js;
-    unset($table[$key]);
-  }
-
-  // Add js array of settings.
-  drupal_add_js(array('simpleTest' => $js), 'setting');
-
-  if (empty($rows)) {
-    return '<strong>' . t('No tests to display.') . '</strong>';
-  }
-  else {
-    return theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('id' => 'simpletest-form-table')));
-  }
-}
-
-/**
- * Run selected tests.
- */
-function simpletest_test_form_submit($form, &$form_state) {
-  simpletest_classloader_register();
-  // Get list of tests.
-  $tests_list = array();
-  foreach ($form_state['values'] as $class_name => $value) {
-    // Since class_exists() will likely trigger an autoload lookup,
-    // we do the fast check first.
-    if ($value === 1 && class_exists($class_name)) {
-      $tests_list[] = $class_name;
-    }
-  }
-  if (count($tests_list) > 0 ) {
-    $test_id = simpletest_run_tests($tests_list, 'drupal');
-    $form_state['redirect'] = 'admin/config/development/testing/results/' . $test_id;
-  }
-  else {
-    drupal_set_message(t('No test(s) selected.'), 'error');
-  }
-}
-
-/**
- * Test results form for $test_id.
- */
-function simpletest_result_form($form, &$form_state, $test_id) {
-  // Make sure there are test results to display and a re-run is not being performed.
-  $results = array();
-  if (is_numeric($test_id) && !$results = simpletest_result_get($test_id)) {
-    drupal_set_message(t('No test results to display.'), 'error');
-    drupal_goto('admin/config/development/testing');
-    return $form;
-  }
-
-  // Load all classes and include CSS.
-  drupal_add_css(drupal_get_path('module', 'simpletest') . '/simpletest.css');
-
-  // Keep track of which test cases passed or failed.
-  $filter = array(
-    'pass' => array(),
-    'fail' => array(),
-  );
-
-  // Summary result fieldset.
-  $form['result'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Results'),
-  );
-  $form['result']['summary'] = $summary = array(
-    '#theme' => 'simpletest_result_summary',
-    '#pass' => 0,
-    '#fail' => 0,
-    '#exception' => 0,
-    '#debug' => 0,
-  );
-
-  simpletest_classloader_register();
-
-  // Cycle through each test group.
-  $header = array(t('Message'), t('Group'), t('Filename'), t('Line'), t('Function'), array('colspan' => 2, 'data' => t('Status')));
-  $form['result']['results'] = array();
-  foreach ($results as $group => $assertions) {
-    // Create group fieldset with summary information.
-    $info = call_user_func(array($group, 'getInfo'));
-    $form['result']['results'][$group] = array(
-      '#type' => 'fieldset',
-      '#title' => $info['name'],
-      '#description' => $info['description'],
-      '#collapsible' => TRUE,
-    );
-    $form['result']['results'][$group]['summary'] = $summary;
-    $group_summary = &$form['result']['results'][$group]['summary'];
-
-    // Create table of assertions for the group.
-    $rows = array();
-    foreach ($assertions as $assertion) {
-      $row = array();
-      $row[] = $assertion->message;
-      $row[] = $assertion->message_group;
-      $row[] = drupal_basename($assertion->file);
-      $row[] = $assertion->line;
-      $row[] = $assertion->function;
-      $row[] = simpletest_result_status_image($assertion->status);
-
-      $class = 'simpletest-' . $assertion->status;
-      if ($assertion->message_group == 'Debug') {
-        $class = 'simpletest-debug';
-      }
-      $rows[] = array('data' => $row, 'class' => array($class));
-
-      $group_summary['#' . $assertion->status]++;
-      $form['result']['summary']['#' . $assertion->status]++;
-    }
-    $form['result']['results'][$group]['table'] = array(
-      '#theme' => 'table',
-      '#header' => $header,
-      '#rows' => $rows,
-    );
-
-    // Set summary information.
-    $group_summary['#ok'] = $group_summary['#fail'] + $group_summary['#exception'] == 0;
-    $form['result']['results'][$group]['#collapsed'] = $group_summary['#ok'];
-
-    // Store test group (class) as for use in filter.
-    $filter[$group_summary['#ok'] ? 'pass' : 'fail'][] = $group;
-  }
-
-  // Overal summary status.
-  $form['result']['summary']['#ok'] = $form['result']['summary']['#fail'] + $form['result']['summary']['#exception'] == 0;
-
-  // Actions.
-  $form['#action'] = url('admin/config/development/testing/results/re-run');
-  $form['action'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Actions'),
-    '#attributes' => array('class' => array('container-inline')),
-    '#weight' => -11,
-  );
-
-  $form['action']['filter'] = array(
-    '#type' => 'select',
-    '#title' => 'Filter',
-    '#options' => array(
-      'all' => t('All (@count)', array('@count' => count($filter['pass']) + count($filter['fail']))),
-      'pass' => t('Pass (@count)', array('@count' => count($filter['pass']))),
-      'fail' => t('Fail (@count)', array('@count' => count($filter['fail']))),
-    ),
-  );
-  $form['action']['filter']['#default_value'] = ($filter['fail'] ? 'fail' : 'all');
-
-  // Categorized test classes for to be used with selected filter value.
-  $form['action']['filter_pass'] = array(
-    '#type' => 'hidden',
-    '#default_value' => implode(',', $filter['pass']),
-  );
-  $form['action']['filter_fail'] = array(
-    '#type' => 'hidden',
-    '#default_value' => implode(',', $filter['fail']),
-  );
-
-  $form['action']['op'] = array(
-    '#type' => 'submit',
-    '#value' => t('Run tests'),
-  );
-
-  $form['action']['return'] = array(
-    '#type' => 'link',
-    '#title' => t('Return to list'),
-    '#href' => 'admin/config/development/testing',
-  );
-
-  if (is_numeric($test_id)) {
-    simpletest_clean_results_table($test_id);
-  }
-
-  return $form;
-}
-
-/**
- * Re-run the tests that match the filter.
- */
-function simpletest_result_form_submit($form, &$form_state) {
-  $pass = $form_state['values']['filter_pass'] ? explode(',', $form_state['values']['filter_pass']) : array();
-  $fail = $form_state['values']['filter_fail'] ? explode(',', $form_state['values']['filter_fail']) : array();
-
-  if ($form_state['values']['filter'] == 'all') {
-    $classes = array_merge($pass, $fail);
-  }
-  elseif ($form_state['values']['filter'] == 'pass') {
-    $classes = $pass;
-  }
-  else {
-    $classes = $fail;
-  }
-
-  if (!$classes) {
-    $form_state['redirect'] = 'admin/config/development/testing';
-    return;
-  }
-
-  $form_state_execute = array('values' => array());
-  foreach ($classes as $class) {
-    $form_state_execute['values'][$class] = 1;
-  }
-
-  simpletest_test_form_submit(array(), $form_state_execute);
-  $form_state['redirect'] = $form_state_execute['redirect'];
-}
-
-/**
- * Returns HTML for the summary status of a simpletest result.
- *
- * @param $variables
- *   An associative array containing:
- *   - form: A render element representing the form.
- *
- * @ingroup themeable
- */
-function theme_simpletest_result_summary($variables) {
-  $form = $variables['form'];
-  return '<div class="simpletest-' . ($form['#ok'] ? 'pass' : 'fail') . '">' . _simpletest_format_summary_line($form) . '</div>';
-}
-
-/**
- * Get test results for $test_id.
- *
- * @param $test_id The test_id to retrieve results of.
- * @return Array of results grouped by test_class.
- */
-function simpletest_result_get($test_id) {
-  $results = db_select('simpletest')
-    ->fields('simpletest')
-    ->condition('test_id', $test_id)
-    ->orderBy('test_class')
-    ->orderBy('message_id')
-    ->execute();
-
-  $test_results = array();
-  foreach ($results as $result) {
-    if (!isset($test_results[$result->test_class])) {
-      $test_results[$result->test_class] = array();
-    }
-    $test_results[$result->test_class][] = $result;
-  }
-  return $test_results;
-}
-
-/**
- * Get the appropriate image for the status.
- *
- * @param $status Status string, either: pass, fail, exception.
- * @return HTML image or false.
- */
-function simpletest_result_status_image($status) {
-  // $map does not use drupal_static() as its value never changes.
-  static $map;
-
-  if (!isset($map)) {
-    $map = array(
-      'pass' => theme('image', array('path' => 'misc/watchdog-ok.png', 'width' => 18, 'height' => 18, 'alt' => t('Pass'))),
-      'fail' => theme('image', array('path' => 'misc/watchdog-error.png', 'width' => 18, 'height' => 18, 'alt' => t('Fail'))),
-      'exception' => theme('image', array('path' => 'misc/watchdog-warning.png', 'width' => 18, 'height' => 18, 'alt' => t('Exception'))),
-      'debug' => theme('image', array('path' => 'misc/watchdog-warning.png', 'width' => 18, 'height' => 18, 'alt' => t('Debug'))),
-    );
-  }
-  if (isset($map[$status])) {
-    return $map[$status];
-  }
-  return FALSE;
-}
-
-/**
- * Provides settings form for SimpleTest variables.
- *
- * @ingroup forms
- * @see simpletest_settings_form_validate()
- */
-function simpletest_settings_form($form, &$form_state) {
-  $form['general'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('General'),
-  );
-  $form['general']['simpletest_clear_results'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Clear results after each complete test suite run'),
-    '#description' => t('By default SimpleTest will clear the results after they have been viewed on the results page, but in some cases it may be useful to leave the results in the database. The results can then be viewed at <em>admin/config/development/testing/[test_id]</em>. The test ID can be found in the database, simpletest table, or kept track of when viewing the results the first time. Additionally, some modules may provide more analysis or features that require this setting to be disabled.'),
-    '#default_value' => variable_get('simpletest_clear_results', TRUE),
-  );
-  $form['general']['simpletest_verbose'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Provide verbose information when running tests'),
-    '#description' => t('The verbose data will be printed along with the standard assertions and is useful for debugging. The verbose data will be erased between each test suite run. The verbose data output is very detailed and should only be used when debugging.'),
-    '#default_value' => variable_get('simpletest_verbose', TRUE),
-  );
-
-  $form['httpauth'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('HTTP authentication'),
-    '#description' => t('HTTP auth settings to be used by the SimpleTest browser during testing. Useful when the site requires basic HTTP authentication.'),
-    '#collapsible' => TRUE,
-    '#collapsed' => TRUE,
-  );
-  $form['httpauth']['simpletest_httpauth_method'] = array(
-    '#type' => 'select',
-    '#title' => t('Method'),
-    '#options' => array(
-      CURLAUTH_BASIC => t('Basic'),
-      CURLAUTH_DIGEST => t('Digest'),
-      CURLAUTH_GSSNEGOTIATE => t('GSS negotiate'),
-      CURLAUTH_NTLM => t('NTLM'),
-      CURLAUTH_ANY => t('Any'),
-      CURLAUTH_ANYSAFE => t('Any safe'),
-    ),
-    '#default_value' => variable_get('simpletest_httpauth_method', CURLAUTH_BASIC),
-  );
-  $username = variable_get('simpletest_httpauth_username');
-  $password = variable_get('simpletest_httpauth_password');
-  $form['httpauth']['simpletest_httpauth_username'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Username'),
-    '#default_value' => $username,
-  );
-  if ($username && $password) {
-    $form['httpauth']['simpletest_httpauth_username']['#description'] = t('Leave this blank to delete both the existing username and password.');
-  }
-  $form['httpauth']['simpletest_httpauth_password'] = array(
-    '#type' => 'password',
-    '#title' => t('Password'),
-  );
-  if ($password) {
-    $form['httpauth']['simpletest_httpauth_password']['#description'] = t('To change the password, enter the new password here.');
-  }
-
-  return system_settings_form($form);
-}
-
-/**
- * Validation handler for simpletest_settings_form().
- */
-function simpletest_settings_form_validate($form, &$form_state) {
-  // If a username was provided but a password wasn't, preserve the existing
-  // password.
-  if (!empty($form_state['values']['simpletest_httpauth_username']) && empty($form_state['values']['simpletest_httpauth_password'])) {
-    $form_state['values']['simpletest_httpauth_password'] = variable_get('simpletest_httpauth_password', '');
-  }
-
-  // If a password was provided but a username wasn't, the credentials are
-  // incorrect, so throw an error.
-  if (empty($form_state['values']['simpletest_httpauth_username']) && !empty($form_state['values']['simpletest_httpauth_password'])) {
-    form_set_error('simpletest_httpauth_username', t('HTTP authentication credentials must include a username in addition to a password.'));
-  }
-}
-
diff --git a/modules/simpletest/simpletest.test b/modules/simpletest/simpletest.test
deleted file mode 100644
index dde162e..0000000
--- a/modules/simpletest/simpletest.test
+++ /dev/null
@@ -1,746 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for simpletest.module.
- */
-
-class SimpleTestFunctionalTest extends DrupalWebTestCase {
-  /**
-   * The results array that has been parsed by getTestResults().
-   */
-  protected $childTestResults;
-
-  /**
-   * Store the test ID from each test run for comparison, to ensure they are
-   * incrementing.
-   */
-  protected $test_ids = array();
-
-  public static function getInfo() {
-    return array(
-      'name' => 'SimpleTest functionality',
-      'description' => "Test SimpleTest's web interface: check that the intended tests were run and ensure that test reports display the intended results. Also test SimpleTest's internal browser and API's both explicitly and implicitly.",
-      'group' => 'SimpleTest'
-    );
-  }
-
-  function setUp() {
-    if (!$this->inCURL()) {
-      parent::setUp('simpletest');
-
-      // Create and login user
-      $admin_user = $this->drupalCreateUser(array('administer unit tests'));
-      $this->drupalLogin($admin_user);
-    }
-    else {
-      parent::setUp('non_existent_module');
-    }
-  }
-
-  /**
-   * Test the internal browsers functionality.
-   */
-  function testInternalBrowser() {
-    global $conf;
-    if (!$this->inCURL()) {
-      $this->drupalGet('node');
-      $this->assertTrue($this->drupalGetHeader('Date'), 'An HTTP header was received.');
-      $this->assertTitle(t('Welcome to @site-name | @site-name', array('@site-name' => variable_get('site_name', 'Drupal'))), 'Site title matches.');
-      $this->assertNoTitle('Foo', 'Site title does not match.');
-      // Make sure that we are locked out of the installer when prefixing
-      // using the user-agent header. This is an important security check.
-      global $base_url;
-
-      $this->drupalGet($base_url . '/install.php', array('external' => TRUE));
-      $this->assertResponse(403, 'Cannot access install.php with a "simpletest" user-agent header.');
-
-      $user = $this->drupalCreateUser();
-      $this->drupalLogin($user);
-      $headers = $this->drupalGetHeaders(TRUE);
-      $this->assertEqual(count($headers), 2, 'There was one intermediate request.');
-      $this->assertTrue(strpos($headers[0][':status'], '302') !== FALSE, 'Intermediate response code was 302.');
-      $this->assertFalse(empty($headers[0]['location']), 'Intermediate request contained a Location header.');
-      $this->assertEqual($this->getUrl(), $headers[0]['location'], 'HTTP redirect was followed');
-      $this->assertFalse($this->drupalGetHeader('Location'), 'Headers from intermediate request were reset.');
-      $this->assertResponse(200, 'Response code from intermediate request was reset.');
-
-      // Test the maximum redirection option.
-      $this->drupalLogout();
-      $edit = array(
-        'name' => $user->name,
-        'pass' => $user->pass_raw
-      );
-      variable_set('simpletest_maximum_redirects', 1);
-      $this->drupalPost('user?destination=user/logout', $edit, t('Log in'));
-      $headers = $this->drupalGetHeaders(TRUE);
-      $this->assertEqual(count($headers), 2, 'Simpletest stopped following redirects after the first one.');
-    }
-  }
-
-  /**
-   * Test validation of the User-Agent header we use to perform test requests.
-   */
-  function testUserAgentValidation() {
-    if (!$this->inCURL()) {
-      global $base_url;
-      $simpletest_path = $base_url . '/' . drupal_get_path('module', 'simpletest');
-      $HTTP_path = $simpletest_path .'/tests/http.php?q=node';
-      $https_path = $simpletest_path .'/tests/https.php?q=node';
-      // Generate a valid simpletest User-Agent to pass validation.
-      $this->assertTrue(preg_match('/simpletest\d+/', $this->databasePrefix, $matches), 'Database prefix contains simpletest prefix.');
-      $test_ua = drupal_generate_test_ua($matches[0]);
-      $this->additionalCurlOptions = array(CURLOPT_USERAGENT => $test_ua);
-
-      // Test pages only available for testing.
-      $this->drupalGet($HTTP_path);
-      $this->assertResponse(200, 'Requesting http.php with a legitimate simpletest User-Agent returns OK.');
-      $this->drupalGet($https_path);
-      $this->assertResponse(200, 'Requesting https.php with a legitimate simpletest User-Agent returns OK.');
-
-      // Now slightly modify the HMAC on the header, which should not validate.
-      $this->additionalCurlOptions = array(CURLOPT_USERAGENT => $test_ua . 'X');
-      $this->drupalGet($HTTP_path);
-      $this->assertResponse(403, 'Requesting http.php with a bad simpletest User-Agent fails.');
-      $this->drupalGet($https_path);
-      $this->assertResponse(403, 'Requesting https.php with a bad simpletest User-Agent fails.');
-
-      // Use a real User-Agent and verify that the special files http.php and
-      // https.php can't be accessed.
-      $this->additionalCurlOptions = array(CURLOPT_USERAGENT => 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12');
-      $this->drupalGet($HTTP_path);
-      $this->assertResponse(403, 'Requesting http.php with a normal User-Agent fails.');
-      $this->drupalGet($https_path);
-      $this->assertResponse(403, 'Requesting https.php with a normal User-Agent fails.');
-    }
-  }
-
-  /**
-   * Make sure that tests selected through the web interface are run and
-   * that the results are displayed correctly.
-   */
-  function testWebTestRunner() {
-    $this->pass = t('SimpleTest pass.');
-    $this->fail = t('SimpleTest fail.');
-    $this->valid_permission = 'access content';
-    $this->invalid_permission = 'invalid permission';
-
-    if ($this->inCURL()) {
-      // Only run following code if this test is running itself through a CURL request.
-      $this->stubTest();
-    }
-    else {
-
-      // Run twice so test_ids can be accumulated.
-      for ($i = 0; $i < 2; $i++) {
-        // Run this test from web interface.
-        $this->drupalGet('admin/config/development/testing');
-
-        $edit = array();
-        $edit['SimpleTestFunctionalTest'] = TRUE;
-        $this->drupalPost(NULL, $edit, t('Run tests'));
-
-        // Parse results and confirm that they are correct.
-        $this->getTestResults();
-        $this->confirmStubTestResults();
-      }
-
-      // Regression test for #290316.
-      // Check that test_id is incrementing.
-      $this->assertTrue($this->test_ids[0] != $this->test_ids[1], 'Test ID is incrementing.');
-    }
-  }
-
-  /**
-   * Test to be run and the results confirmed.
-   */
-  function stubTest() {
-    $this->pass($this->pass);
-    $this->fail($this->fail);
-
-    $this->drupalCreateUser(array($this->valid_permission));
-    $this->drupalCreateUser(array($this->invalid_permission));
-
-    $this->pass(t('Test ID is @id.', array('@id' => $this->testId)));
-
-    // Generates a warning.
-    $i = 1 / 0;
-
-    // Call an assert function specific to that class.
-    $this->assertNothing();
-
-    // Generates a warning inside a PHP function.
-    array_key_exists(NULL, NULL);
-
-    debug('Foo', 'Debug');
-  }
-
-  /**
-   * Assert nothing.
-   */
-  function assertNothing() {
-    $this->pass("This is nothing.");
-  }
-
-  /**
-   * Confirm that the stub test produced the desired results.
-   */
-  function confirmStubTestResults() {
-    $this->assertAssertion(t('Enabled modules: %modules', array('%modules' => 'non_existent_module')), 'Other', 'Fail', 'simpletest.test', 'SimpleTestFunctionalTest->setUp()');
-
-    $this->assertAssertion($this->pass, 'Other', 'Pass', 'simpletest.test', 'SimpleTestFunctionalTest->stubTest()');
-    $this->assertAssertion($this->fail, 'Other', 'Fail', 'simpletest.test', 'SimpleTestFunctionalTest->stubTest()');
-
-    $this->assertAssertion(t('Created permissions: @perms', array('@perms' => $this->valid_permission)), 'Role', 'Pass', 'simpletest.test', 'SimpleTestFunctionalTest->stubTest()');
-    $this->assertAssertion(t('Invalid permission %permission.', array('%permission' => $this->invalid_permission)), 'Role', 'Fail', 'simpletest.test', 'SimpleTestFunctionalTest->stubTest()');
-
-    // Check that a warning is caught by simpletest.
-    $this->assertAssertion('Division by zero', 'Warning', 'Fail', 'simpletest.test', 'SimpleTestFunctionalTest->stubTest()');
-
-    // Check that the backtracing code works for specific assert function.
-    $this->assertAssertion('This is nothing.', 'Other', 'Pass', 'simpletest.test', 'SimpleTestFunctionalTest->stubTest()');
-
-    // Check that errors that occur inside PHP internal functions are correctly reported.
-    // The exact error message differs between PHP versions so we check only
-    // the function name 'array_key_exists'.
-    $this->assertAssertion('array_key_exists', 'Warning', 'Fail', 'simpletest.test', 'SimpleTestFunctionalTest->stubTest()');
-
-    $this->assertAssertion("Debug: 'Foo'", 'Debug', 'Fail', 'simpletest.test', 'SimpleTestFunctionalTest->stubTest()');
-
-    $this->assertEqual('6 passes, 5 fails, 2 exceptions, and 1 debug message', $this->childTestResults['summary'], 'Stub test summary is correct');
-
-    $this->test_ids[] = $test_id = $this->getTestIdFromResults();
-    $this->assertTrue($test_id, 'Found test ID in results.');
-  }
-
-  /**
-   * Fetch the test id from the test results.
-   */
-  function getTestIdFromResults() {
-    foreach ($this->childTestResults['assertions'] as $assertion) {
-      if (preg_match('@^Test ID is ([0-9]*)\.$@', $assertion['message'], $matches)) {
-        return $matches[1];
-      }
-    }
-    return NULL;
-  }
-
-  /**
-   * Assert that an assertion with the specified values is displayed
-   * in the test results.
-   *
-   * @param string $message Assertion message.
-   * @param string $type Assertion type.
-   * @param string $status Assertion status.
-   * @param string $file File where the assertion originated.
-   * @param string $functuion Function where the assertion originated.
-   * @return Assertion result.
-   */
-  function assertAssertion($message, $type, $status, $file, $function) {
-    $message = trim(strip_tags($message));
-    $found = FALSE;
-    foreach ($this->childTestResults['assertions'] as $assertion) {
-      if ((strpos($assertion['message'], $message) !== FALSE) &&
-          $assertion['type'] == $type &&
-          $assertion['status'] == $status &&
-          $assertion['file'] == $file &&
-          $assertion['function'] == $function) {
-        $found = TRUE;
-        break;
-      }
-    }
-    return $this->assertTrue($found, format_string('Found assertion {"@message", "@type", "@status", "@file", "@function"}.', array('@message' => $message, '@type' => $type, '@status' => $status, "@file" => $file, "@function" => $function)));
-  }
-
-  /**
-   * Get the results from a test and store them in the class array $results.
-   */
-  function getTestResults() {
-    $results = array();
-    if ($this->parse()) {
-      if ($fieldset = $this->getResultFieldSet()) {
-        // Code assumes this is the only test in group.
-        $results['summary'] = $this->asText($fieldset->div->div[1]);
-        $results['name'] = $this->asText($fieldset->legend);
-
-        $results['assertions'] = array();
-        $tbody = $fieldset->div->table->tbody;
-        foreach ($tbody->tr as $row) {
-          $assertion = array();
-          $assertion['message'] = $this->asText($row->td[0]);
-          $assertion['type'] = $this->asText($row->td[1]);
-          $assertion['file'] = $this->asText($row->td[2]);
-          $assertion['line'] = $this->asText($row->td[3]);
-          $assertion['function'] = $this->asText($row->td[4]);
-          $ok_url = file_create_url('misc/watchdog-ok.png');
-          $assertion['status'] = ($row->td[5]->img['src'] == $ok_url) ? 'Pass' : 'Fail';
-          $results['assertions'][] = $assertion;
-        }
-      }
-    }
-    $this->childTestResults = $results;
-  }
-
-  /**
-   * Get the fieldset containing the results for group this test is in.
-   */
-  function getResultFieldSet() {
-    $fieldsets = $this->xpath('//fieldset');
-    $info = $this->getInfo();
-    foreach ($fieldsets as $fieldset) {
-      if ($this->asText($fieldset->legend) == $info['name']) {
-        return $fieldset;
-      }
-    }
-    return FALSE;
-  }
-
-  /**
-   * Extract the text contained by the element.
-   *
-   * @param $element
-   *   Element to extract text from.
-   * @return
-   *   Extracted text.
-   */
-  function asText(SimpleXMLElement $element) {
-    if (!is_object($element)) {
-      return $this->fail('The element is not an element.');
-    }
-    return trim(html_entity_decode(strip_tags($element->asXML())));
-  }
-
-  /**
-   * Check if the test is being run from inside a CURL request.
-   */
-  function inCURL() {
-    return (bool) drupal_valid_test_ua();
-  }
-}
-
-/**
- * Test internal testing framework browser.
- */
-class SimpleTestBrowserTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'SimpleTest browser',
-      'description' => 'Test the internal browser of the testing framework.',
-      'group' => 'SimpleTest',
-    );
-  }
-
-  function setUp() {
-    parent::setUp();
-    variable_set('user_register', USER_REGISTER_VISITORS);
-  }
-
-  /**
-   * Test DrupalWebTestCase::getAbsoluteUrl().
-   */
-  function testGetAbsoluteUrl() {
-    // Testbed runs with Clean URLs disabled, so disable it here.
-    variable_set('clean_url', 0);
-    $url = 'user/login';
-
-    $this->drupalGet($url);
-    $absolute = url($url, array('absolute' => TRUE));
-    $this->assertEqual($absolute, $this->url, 'Passed and requested URL are equal.');
-    $this->assertEqual($this->url, $this->getAbsoluteUrl($this->url), 'Requested and returned absolute URL are equal.');
-
-    $this->drupalPost(NULL, array(), t('Log in'));
-    $this->assertEqual($absolute, $this->url, 'Passed and requested URL are equal.');
-    $this->assertEqual($this->url, $this->getAbsoluteUrl($this->url), 'Requested and returned absolute URL are equal.');
-
-    $this->clickLink('Create new account');
-    $url = 'user/register';
-    $absolute = url($url, array('absolute' => TRUE));
-    $this->assertEqual($absolute, $this->url, 'Passed and requested URL are equal.');
-    $this->assertEqual($this->url, $this->getAbsoluteUrl($this->url), 'Requested and returned absolute URL are equal.');
-  }
-
-  /**
-   * Tests XPath escaping.
-   */
-  function testXPathEscaping() {
-    $testpage = <<< EOF
-<html>
-<body>
-<a href="link1">A "weird" link, just to bother the dumb "XPath 1.0"</a>
-<a href="link2">A second "even more weird" link, in memory of George O'Malley</a>
-</body>
-</html>
-EOF;
-    $this->drupalSetContent($testpage);
-
-    // Matches the first link.
-    $urls = $this->xpath('//a[text()=:text]', array(':text' => 'A "weird" link, just to bother the dumb "XPath 1.0"'));
-    $this->assertEqual($urls[0]['href'], 'link1', 'Match with quotes.');
-
-    $urls = $this->xpath('//a[text()=:text]', array(':text' => 'A second "even more weird" link, in memory of George O\'Malley'));
-    $this->assertEqual($urls[0]['href'], 'link2', 'Match with mixed single and double quotes.');
-  }
-}
-
-class SimpleTestMailCaptureTestCase extends DrupalWebTestCase {
-  /**
-   * Implement getInfo().
-   */
-  public static function getInfo() {
-    return array(
-      'name' => 'SimpleTest e-mail capturing',
-      'description' => 'Test the SimpleTest e-mail capturing logic, the assertMail assertion and the drupalGetMails function.',
-      'group' => 'SimpleTest',
-    );
-  }
-
-  /**
-   * Test to see if the wrapper function is executed correctly.
-   */
-  function testMailSend() {
-    // Create an e-mail.
-    $subject = $this->randomString(64);
-    $body = $this->randomString(128);
-    $message = array(
-      'id' => 'drupal_mail_test',
-      'headers' => array('Content-type'=> 'text/html'),
-      'subject' => $subject,
-      'to' => 'foobar@example.com',
-      'body' => $body,
-    );
-
-    // Before we send the e-mail, drupalGetMails should return an empty array.
-    $captured_emails = $this->drupalGetMails();
-    $this->assertEqual(count($captured_emails), 0, 'The captured e-mails queue is empty.', 'E-mail');
-
-    // Send the e-mail.
-    $response = drupal_mail_system('simpletest', 'drupal_mail_test')->mail($message);
-
-    // Ensure that there is one e-mail in the captured e-mails array.
-    $captured_emails = $this->drupalGetMails();
-    $this->assertEqual(count($captured_emails), 1, 'One e-mail was captured.', 'E-mail');
-
-    // Assert that the e-mail was sent by iterating over the message properties
-    // and ensuring that they are captured intact.
-    foreach ($message as $field => $value) {
-      $this->assertMail($field, $value, format_string('The e-mail was sent and the value for property @field is intact.', array('@field' => $field)), 'E-mail');
-    }
-
-    // Send additional e-mails so more than one e-mail is captured.
-    for ($index = 0; $index < 5; $index++) {
-      $message = array(
-        'id' => 'drupal_mail_test_' . $index,
-        'headers' => array('Content-type'=> 'text/html'),
-        'subject' => $this->randomString(64),
-        'to' => $this->randomName(32) . '@example.com',
-        'body' => $this->randomString(512),
-      );
-      drupal_mail_system('drupal_mail_test', $index)->mail($message);
-    }
-
-    // There should now be 6 e-mails captured.
-    $captured_emails = $this->drupalGetMails();
-    $this->assertEqual(count($captured_emails), 6, 'All e-mails were captured.', 'E-mail');
-
-    // Test different ways of getting filtered e-mails via drupalGetMails().
-    $captured_emails = $this->drupalGetMails(array('id' => 'drupal_mail_test'));
-    $this->assertEqual(count($captured_emails), 1, 'Only one e-mail is returned when filtering by id.', 'E-mail');
-    $captured_emails = $this->drupalGetMails(array('id' => 'drupal_mail_test', 'subject' => $subject));
-    $this->assertEqual(count($captured_emails), 1, 'Only one e-mail is returned when filtering by id and subject.', 'E-mail');
-    $captured_emails = $this->drupalGetMails(array('id' => 'drupal_mail_test', 'subject' => $subject, 'from' => 'this_was_not_used@example.com'));
-    $this->assertEqual(count($captured_emails), 0, 'No e-mails are returned when querying with an unused from address.', 'E-mail');
-
-    // Send the last e-mail again, so we can confirm that the drupalGetMails-filter
-    // correctly returns all e-mails with a given property/value.
-    drupal_mail_system('drupal_mail_test', $index)->mail($message);
-    $captured_emails = $this->drupalGetMails(array('id' => 'drupal_mail_test_4'));
-    $this->assertEqual(count($captured_emails), 2, 'All e-mails with the same id are returned when filtering by id.', 'E-mail');
-  }
-}
-
-/**
- * Test Folder creation
- */
-class SimpleTestFolderTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Testing SimpleTest setUp',
-      'description' => "This test will check SimpleTest's treatment of hook_install during setUp.  Image module is used for test.",
-      'group' => 'SimpleTest',
-    );
-  }
-
-  function setUp() {
-    return parent::setUp('image');
-  }
-
-  function testFolderSetup() {
-    $directory = file_default_scheme() . '://styles';
-    $this->assertTrue(file_prepare_directory($directory, FALSE), 'Directory created.');
-  }
-}
-
-/**
- * Test required modules for tests.
- */
-class SimpleTestMissingDependentModuleUnitTest extends DrupalUnitTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Testing dependent module test',
-      'description' => 'This test should not load since it requires a module that is not found.',
-      'group' => 'SimpleTest',
-      'dependencies' => array('simpletest_missing_module'),
-    );
-  }
-
-  /**
-   * Ensure that this test will not be loaded despite its dependency.
-   */
-  function testFail() {
-    $this->fail(t('Running test with missing required module.'));
-  }
-}
-
-/**
- * Tests a test case that does not run parent::setUp() in its setUp() method.
- *
- * If a test case does not call parent::setUp(), running
- * DrupalTestCase::tearDown() would destroy the main site's database tables.
- * Therefore, we ensure that tests which are not set up properly are skipped.
- *
- * @see DrupalTestCase
- */
-class SimpleTestBrokenSetUp extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Broken SimpleTest method',
-      'description' => 'Tests a test case that does not call parent::setUp().',
-      'group' => 'SimpleTest'
-    );
-  }
-
-  function setUp() {
-    // If the test is being run from the main site, set up normally.
-    if (!drupal_valid_test_ua()) {
-      parent::setUp('simpletest');
-      // Create and log in user.
-      $admin_user = $this->drupalCreateUser(array('administer unit tests'));
-      $this->drupalLogin($admin_user);
-    }
-    // If the test is being run from within simpletest, set up the broken test.
-    else {
-      $this->pass(t('The test setUp() method has been run.'));
-      // Don't call parent::setUp(). This should trigger an error message.
-    }
-  }
-
-  function tearDown() {
-    // If the test is being run from the main site, tear down normally.
-    if (!drupal_valid_test_ua()) {
-      parent::tearDown();
-    }
-    else {
-      // If the test is being run from within simpletest, output a message.
-      $this->pass(t('The tearDown() method has run.'));
-    }
-  }
-
-  /**
-   * Runs this test case from within the simpletest child site.
-   */
-  function testBreakSetUp() {
-    // If the test is being run from the main site, run it again from the web
-    // interface within the simpletest child site.
-    if (!drupal_valid_test_ua()) {
-      $edit['SimpleTestBrokenSetUp'] = TRUE;
-      $this->drupalPost('admin/config/development/testing', $edit, t('Run tests'));
-
-      // Verify that the broken test and its tearDown() method are skipped.
-      $this->assertRaw(t('The test setUp() method has been run.'));
-      $this->assertRaw(t('The test cannot be executed because it has not been set up properly.'));
-      $this->assertNoRaw(t('The test method has run.'));
-      $this->assertNoRaw(t('The tearDown() method has run.'));
-    }
-    // If the test is being run from within simpletest, output a message.
-    else {
-      $this->pass(t('The test method has run.'));
-    }
-  }
-}
-
-/**
- * Verifies that tests bundled with installation profile modules are found.
- */
-class SimpleTestInstallationProfileModuleTestsTestCase extends DrupalWebTestCase {
-  /**
-   * Use the Testing profile.
-   *
-   * The Testing profile contains drupal_system_listing_compatible_test.test,
-   * which attempts to:
-   * - run tests using the Minimal profile (which does not contain the
-   *   drupal_system_listing_compatible_test.module)
-   * - but still install the drupal_system_listing_compatible_test.module
-   *   contained in the Testing profile.
-   *
-   * @see DrupalSystemListingCompatibleTestCase
-   */
-  protected $profile = 'testing';
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Installation profile module tests',
-      'description' => 'Verifies that tests bundled with installation profile modules are found.',
-      'group' => 'SimpleTest',
-    );
-  }
-
-  function setUp() {
-    parent::setUp(array('simpletest'));
-
-    $this->admin_user = $this->drupalCreateUser(array('administer unit tests'));
-    $this->drupalLogin($this->admin_user);
-  }
-
-  /**
-   * Tests existence of test case located in an installation profile module.
-   */
-  function testInstallationProfileTests() {
-    $this->drupalGet('admin/config/development/testing');
-    $this->assertText('Installation profile module tests helper');
-    $edit = array(
-      'DrupalSystemListingCompatibleTestCase' => TRUE,
-    );
-    $this->drupalPost(NULL, $edit, t('Run tests'));
-    $this->assertText('DrupalSystemListingCompatibleTestCase test executed.');
-  }
-}
-
-/**
- * Verifies that tests in other installation profiles are not found.
- *
- * @see SimpleTestInstallationProfileModuleTestsTestCase
- */
-class SimpleTestOtherInstallationProfileModuleTestsTestCase extends DrupalWebTestCase {
-  /**
-   * Use the Minimal profile.
-   *
-   * The Testing profile contains drupal_system_listing_compatible_test.test,
-   * which should not be found.
-   *
-   * @see SimpleTestInstallationProfileModuleTestsTestCase
-   * @see DrupalSystemListingCompatibleTestCase
-   */
-  protected $profile = 'minimal';
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Other Installation profiles',
-      'description' => 'Verifies that tests in other installation profiles are not found.',
-      'group' => 'SimpleTest',
-    );
-  }
-
-  function setUp() {
-    parent::setUp(array('simpletest'));
-
-    $this->admin_user = $this->drupalCreateUser(array('administer unit tests'));
-    $this->drupalLogin($this->admin_user);
-  }
-
-  /**
-   * Tests that tests located in another installation profile do not appear.
-   */
-  function testOtherInstallationProfile() {
-    $this->drupalGet('admin/config/development/testing');
-    $this->assertNoText('Installation profile module tests helper');
-  }
-}
-
-/**
- * Verifies that tests in other installation profiles are not found.
- *
- * @see SimpleTestInstallationProfileModuleTestsTestCase
- */
-class SimpleTestDiscoveryTestCase extends DrupalWebTestCase {
-  /**
-   * Use the Testing profile.
-   *
-   * The Testing profile contains drupal_system_listing_compatible_test.test,
-   * which attempts to:
-   * - run tests using the Minimal profile (which does not contain the
-   *   drupal_system_listing_compatible_test.module)
-   * - but still install the drupal_system_listing_compatible_test.module
-   *   contained in the Testing profile.
-   *
-   * @see DrupalSystemListingCompatibleTestCase
-   */
-  protected $profile = 'testing';
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Discovery of test classes',
-      'description' => 'Verifies that tests classes are discovered and can be autoloaded (class_exists).',
-      'group' => 'SimpleTest',
-    );
-  }
-
-  function setUp() {
-    parent::setUp(array('simpletest'));
-
-    $this->admin_user = $this->drupalCreateUser(array('administer unit tests'));
-    $this->drupalLogin($this->admin_user);
-  }
-
-  /**
-   * Test discovery of PSR-0 test classes.
-   */
-  function testDiscoveryFunctions() {
-    if (version_compare(PHP_VERSION, '5.3') < 0) {
-      // Don't expect PSR-0 tests to be discovered on older PHP versions.
-      return;
-    }
-    // TODO: What if we have cached values? Do we need to force a cache refresh?
-    $classes_all = simpletest_test_get_all();
-    foreach (array(
-      'Drupal\\simpletest\\Tests\\PSR0WebTest',
-      'Drupal\\psr_0_test\\Tests\\ExampleTest',
-    ) as $class) {
-      $this->assert(!empty($classes_all['SimpleTest'][$class]), t('Class @class must be discovered by simpletest_test_get_all().', array('@class' => $class)));
-    }
-  }
-
-  /**
-   * Tests existence of test cases.
-   */
-  function testDiscovery() {
-    $this->drupalGet('admin/config/development/testing');
-    // Tests within enabled modules.
-    // (without these, this test wouldn't happen in the first place, so this is
-    // a bit pointless. We still run it for proof-of-concept.)
-    // This one is defined in system module.
-    $this->assertText('Drupal error handlers');
-    // This one is defined in simpletest module.
-    $this->assertText('Discovery of test classes');
-    // Tests within disabled modules.
-    if (version_compare(PHP_VERSION, '5.3') < 0) {
-      // Don't expect PSR-0 tests to be discovered on older PHP versions.
-      return;
-    }
-    // This one is provided by simpletest itself via PSR-0.
-    $this->assertText('PSR0 web test');
-    $this->assertText('PSR0 example test: PSR-0 in disabled modules.');
-    $this->assertText('PSR0 example test: PSR-0 in nested subfolders.');
-
-    // Test each test individually.
-    foreach (array(
-      'Drupal\\psr_0_test\\Tests\\ExampleTest',
-      'Drupal\\psr_0_test\\Tests\\Nested\\NestedExampleTest',
-    ) as $class) {
-      $this->drupalGet('admin/config/development/testing');
-      $edit = array($class => TRUE);
-      $this->drupalPost(NULL, $edit, t('Run tests'));
-      $this->assertText('The test run finished', t('Test @class must finish.', array('@class' => $class)));
-      $this->assertText('1 pass, 0 fails, and 0 exceptions', t('Test @class must pass.', array('@class' => $class)));
-    }
-  }
-}
diff --git a/modules/simpletest/tests/actions.test b/modules/simpletest/tests/actions.test
deleted file mode 100644
index 4d58b59..0000000
--- a/modules/simpletest/tests/actions.test
+++ /dev/null
@@ -1,126 +0,0 @@
-<?php
-
-class ActionsConfigurationTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Actions configuration',
-      'description' => 'Tests complex actions configuration by adding, editing, and deleting a complex action.',
-      'group' => 'Actions',
-    );
-  }
-
-  /**
-   * Test the configuration of advanced actions through the administration
-   * interface.
-   */
-  function testActionConfiguration() {
-    // Create a user with permission to view the actions administration pages.
-    $user = $this->drupalCreateUser(array('administer actions'));
-    $this->drupalLogin($user);
-
-    // Make a POST request to admin/config/system/actions/manage.
-    $edit = array();
-    $edit['action'] = drupal_hash_base64('system_goto_action');
-    $this->drupalPost('admin/config/system/actions/manage', $edit, t('Create'));
-
-    // Make a POST request to the individual action configuration page.
-    $edit = array();
-    $action_label = $this->randomName();
-    $edit['actions_label'] = $action_label;
-    $edit['url'] = 'admin';
-    $this->drupalPost('admin/config/system/actions/configure/' . drupal_hash_base64('system_goto_action'), $edit, t('Save'));
-
-    // Make sure that the new complex action was saved properly.
-    $this->assertText(t('The action has been successfully saved.'), t("Make sure we get a confirmation that we've successfully saved the complex action."));
-    $this->assertText($action_label, t("Make sure the action label appears on the configuration page after we've saved the complex action."));
-
-    // Make another POST request to the action edit page.
-    $this->clickLink(t('configure'));
-    preg_match('|admin/config/system/actions/configure/(\d+)|', $this->getUrl(), $matches);
-    $aid = $matches[1];
-    $edit = array();
-    $new_action_label = $this->randomName();
-    $edit['actions_label'] = $new_action_label;
-    $edit['url'] = 'admin';
-    $this->drupalPost(NULL, $edit, t('Save'));
-
-    // Make sure that the action updated properly.
-    $this->assertText(t('The action has been successfully saved.'), t("Make sure we get a confirmation that we've successfully updated the complex action."));
-    $this->assertNoText($action_label, t("Make sure the old action label does NOT appear on the configuration page after we've updated the complex action."));
-    $this->assertText($new_action_label, t("Make sure the action label appears on the configuration page after we've updated the complex action."));
-
-    // Make sure that deletions work properly.
-    $this->clickLink(t('delete'));
-    $edit = array();
-    $this->drupalPost("admin/config/system/actions/delete/$aid", $edit, t('Delete'));
-
-    // Make sure that the action was actually deleted.
-    $this->assertRaw(t('Action %action was deleted', array('%action' => $new_action_label)), t('Make sure that we get a delete confirmation message.'));
-    $this->drupalGet('admin/config/system/actions/manage');
-    $this->assertNoText($new_action_label, t("Make sure the action label does not appear on the overview page after we've deleted the action."));
-    $exists = db_query('SELECT aid FROM {actions} WHERE callback = :callback', array(':callback' => 'drupal_goto_action'))->fetchField();
-    $this->assertFalse($exists, t('Make sure the action is gone from the database after being deleted.'));
-  }
-}
-
-/**
- * Test actions executing in a potential loop, and make sure they abort properly.
- */
-class ActionLoopTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Actions executing in a potentially infinite loop',
-      'description' => 'Tests actions executing in a loop, and makes sure they abort properly.',
-      'group' => 'Actions',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('dblog', 'trigger', 'actions_loop_test');
-  }
-
-  /**
-   * Set up a loop with 3 - 12 recursions, and see if it aborts properly.
-   */
-  function testActionLoop() {
-    $user = $this->drupalCreateUser(array('administer actions'));
-    $this->drupalLogin($user);
-
-    $hash = drupal_hash_base64('actions_loop_test_log');
-    $edit = array('aid' => $hash);
-    $this->drupalPost('admin/structure/trigger/actions_loop_test', $edit, t('Assign'));
-
-    // Delete any existing watchdog messages to clear the plethora of
-    // "Action added" messages from when Drupal was installed.
-    db_delete('watchdog')->execute();
-    // To prevent this test from failing when xdebug is enabled, the maximum
-    // recursion level should be kept low enough to prevent the xdebug
-    // infinite recursion protection mechanism from aborting the request.
-    // See http://drupal.org/node/587634.
-    variable_set('actions_max_stack', 7);
-    $this->triggerActions();
-  }
-
-  /**
-   * Create an infinite loop by causing a watchdog message to be set,
-   * which causes the actions to be triggered again, up to actions_max_stack
-   * times.
-   */
-  protected function triggerActions() {
-    $this->drupalGet('<front>', array('query' => array('trigger_actions_on_watchdog' => TRUE)));
-    $expected = array();
-    $expected[] = 'Triggering action loop';
-    for ($i = 1; $i <= variable_get('actions_max_stack', 35); $i++) {
-      $expected[] = "Test log #$i";
-    }
-    $expected[] = 'Stack overflow: too many calls to actions_do(). Aborting to prevent infinite recursion.';
-
-    $result = db_query("SELECT message FROM {watchdog} WHERE type = 'actions_loop_test' OR type = 'actions' ORDER BY wid");
-    $loop_started = FALSE;
-    foreach ($result as $row) {
-      $expected_message = array_shift($expected);
-      $this->assertEqual($row->message, $expected_message, t('Expected message %expected, got %message.', array('%expected' => $expected_message, '%message' => $row->message)));
-    }
-    $this->assertTrue(empty($expected), t('All expected messages found.'));
-  }
-}
diff --git a/modules/simpletest/tests/actions_loop_test.info b/modules/simpletest/tests/actions_loop_test.info
deleted file mode 100644
index 4350d3d..0000000
--- a/modules/simpletest/tests/actions_loop_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = Actions loop test
-description = Support module for action loop testing.
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/actions_loop_test.install b/modules/simpletest/tests/actions_loop_test.install
deleted file mode 100644
index b22fd85..0000000
--- a/modules/simpletest/tests/actions_loop_test.install
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-
-/**
- * Implements hook_install().
- */
-function actions_loop_test_install() {
-   db_update('system')
-    ->fields(array('weight' => 1))
-    ->condition('name', 'actions_loop_test')
-    ->execute();
-}
diff --git a/modules/simpletest/tests/actions_loop_test.module b/modules/simpletest/tests/actions_loop_test.module
deleted file mode 100644
index 261cb80..0000000
--- a/modules/simpletest/tests/actions_loop_test.module
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-
-/**
- * Implements hook_trigger_info().
- */
-function actions_loop_test_trigger_info() {
-  return array(
-    'actions_loop_test' => array(
-      'watchdog' => array(
-        'label' => t('When a message is logged'),
-      ),
-    ),
-  );
-}
-
-/**
- * Implements hook_watchdog().
- */
-function actions_loop_test_watchdog(array $log_entry) {
-  // If the triggering actions are not explicitly enabled, abort.
-  if (empty($_GET['trigger_actions_on_watchdog'])) {
-    return;
-  }
-  // Get all the action ids assigned to the trigger on the watchdog hook's
-  // "run" event.
-  $aids = trigger_get_assigned_actions('watchdog');
-  // We can pass in any applicable information in $context. There isn't much in
-  // this case, but we'll pass in the hook name as the bare minimum.
-  $context = array(
-    'hook' => 'watchdog',
-  );
-  // Fire the actions on the associated object ($log_entry) and the context
-  // variable.
-  actions_do(array_keys($aids), $log_entry, $context);
-}
-
-/**
- * Implements hook_init().
- */
-function actions_loop_test_init() {
-  if (!empty($_GET['trigger_actions_on_watchdog'])) {
-    watchdog_skip_semaphore('actions_loop_test', 'Triggering action loop');
-  }
-}
-
-/**
- * Implements hook_action_info().
- */
-function actions_loop_test_action_info() {
-  return array(
-    'actions_loop_test_log' => array(
-      'label' => t('Write a message to the log.'),
-      'type' => 'system',
-      'configurable' => FALSE,
-      'triggers' => array('any'),
-    ),
-  );
-}
-
-/**
- * Write a message to the log.
- */
-function actions_loop_test_log() {
-  $count = &drupal_static(__FUNCTION__, 0);
-  $count++;
-  watchdog_skip_semaphore('actions_loop_test', "Test log #$count");
-}
-
-/**
- * Replacement of the watchdog() function that eliminates the use of semaphores
- * so that we can test the abortion of an action loop.
- */
-function watchdog_skip_semaphore($type, $message, $variables = array(), $severity = WATCHDOG_NOTICE, $link = NULL) {
-  global $user, $base_root;
-
-  // Prepare the fields to be logged
-  $log_entry = array(
-    'type'        => $type,
-    'message'     => $message,
-    'variables'   => $variables,
-    'severity'    => $severity,
-    'link'        => $link,
-    'user'        => $user,
-    'uid'         => isset($user->uid) ? $user->uid : 0,
-    'request_uri' => $base_root . request_uri(),
-    'referer'     => $_SERVER['HTTP_REFERER'],
-    'ip'          => ip_address(),
-    'timestamp'   => REQUEST_TIME,
-  );
-
-  // Call the logging hooks to log/process the message
-  foreach (module_implements('watchdog') as $module) {
-    module_invoke($module, 'watchdog', $log_entry);
-  }
-}
diff --git a/modules/simpletest/tests/ajax_forms_test.info b/modules/simpletest/tests/ajax_forms_test.info
deleted file mode 100644
index c1d7dd4..0000000
--- a/modules/simpletest/tests/ajax_forms_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "AJAX form test mock module"
-description = "Test for AJAX form calls."
-core = 7.x
-package = Testing
-version = VERSION
-hidden = TRUE
diff --git a/modules/simpletest/tests/ajax_forms_test.module b/modules/simpletest/tests/ajax_forms_test.module
deleted file mode 100644
index 2840422..0000000
--- a/modules/simpletest/tests/ajax_forms_test.module
+++ /dev/null
@@ -1,502 +0,0 @@
-<?php
-
-/**
- * @file
- * Simpletest mock module for Ajax forms testing.
- */
-
-/**
- * Implements hook_menu().
- */
-function ajax_forms_test_menu() {
-  $items = array();
-  $items['ajax_forms_test_get_form'] = array(
-    'title' => 'AJAX forms simple form test',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('ajax_forms_test_simple_form'),
-    'access callback' => TRUE,
-  );
-  $items['ajax_forms_test_ajax_commands_form'] = array(
-    'title' => 'AJAX forms AJAX commands test',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('ajax_forms_test_ajax_commands_form'),
-    'access callback' => TRUE,
-  );
-  $items['ajax_validation_test'] = array(
-    'title' => 'AJAX Validation Test',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('ajax_forms_test_validation_form'),
-    'access callback' => TRUE,
-  );
-  $items['ajax_forms_test_lazy_load_form'] = array(
-    'title' => 'AJAX forms lazy load test',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('ajax_forms_test_lazy_load_form'),
-    'access callback' => TRUE,
-  );
-  return $items;
-}
-
-
-/**
- * A basic form used to test form_state['values'] during callback.
- */
-function ajax_forms_test_simple_form($form, &$form_state) {
-  $form = array();
-  $form['select'] = array(
-    '#type' => 'select',
-    '#options' => array(
-      'red' => 'red',
-      'green' => 'green',
-      'blue' => 'blue'),
-    '#ajax' => array(
-      'callback' => 'ajax_forms_test_simple_form_select_callback',
-    ),
-    '#suffix' => '<div id="ajax_selected_color">No color yet selected</div>',
-  );
-
-  $form['checkbox'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Test checkbox'),
-    '#ajax' => array(
-       'callback' => 'ajax_forms_test_simple_form_checkbox_callback',
-    ),
-    '#suffix' => '<div id="ajax_checkbox_value">No action yet</div>',
-  );
-  $form['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('submit'),
-  );
-  return $form;
-}
-
-/**
- * Ajax callback triggered by select.
- */
-function ajax_forms_test_simple_form_select_callback($form, $form_state) {
-  $commands = array();
-  $commands[] = ajax_command_html('#ajax_selected_color', $form_state['values']['select']);
-  $commands[] = ajax_command_data('#ajax_selected_color', 'form_state_value_select', $form_state['values']['select']);
-  return array('#type' => 'ajax', '#commands' => $commands);
-}
-
-/**
- * Ajax callback triggered by checkbox.
- */
-function ajax_forms_test_simple_form_checkbox_callback($form, $form_state) {
-  $commands = array();
-  $commands[] = ajax_command_html('#ajax_checkbox_value', (int) $form_state['values']['checkbox']);
-  $commands[] = ajax_command_data('#ajax_checkbox_value', 'form_state_value_select', (int) $form_state['values']['checkbox']);
-  return array('#type' => 'ajax', '#commands' => $commands);
-}
-
-
-/**
- * Form to display the Ajax Commands.
- */
-function ajax_forms_test_ajax_commands_form($form, &$form_state) {
-  $form = array();
-
-  // Shows the 'after' command with a callback generating commands.
-  $form['after_command_example'] = array(
-    '#value' => t("AJAX 'After': Click to put something after the div"),
-    '#type' => 'submit',
-    '#ajax' => array(
-      'callback' => 'ajax_forms_test_advanced_commands_after_callback',
-    ),
-    '#suffix' => '<div id="after_div">Something can be inserted after this</div>',
-  );
-
-  // Shows the 'alert' command.
-  $form['alert_command_example'] = array(
-    '#value' => t("AJAX 'Alert': Click to alert"),
-    '#type' => 'submit',
-    '#ajax' => array(
-      'callback' => 'ajax_forms_test_advanced_commands_alert_callback',
-    ),
-  );
-
-  // Shows the 'append' command.
-  $form['append_command_example'] = array(
-    '#value' => t("AJAX 'Append': Click to append something"),
-    '#type' => 'submit',
-    '#ajax' => array(
-      'callback' => 'ajax_forms_test_advanced_commands_append_callback',
-    ),
-    '#suffix' => '<div id="append_div">Append inside this div</div>',
-  );
-
-
-  // Shows the 'before' command.
-  $form['before_command_example'] = array(
-    '#value' => t("AJAX 'before': Click to put something before the div"),
-    '#type' => 'submit',
-    '#ajax' => array(
-      'callback' => 'ajax_forms_test_advanced_commands_before_callback',
-    ),
-    '#suffix' => '<div id="before_div">Insert something before this.</div>',
-  );
-
-  // Shows the 'changed' command without asterisk.
-  $form['changed_command_example'] = array(
-    '#value' => t("AJAX changed: Click to mark div changed."),
-    '#type' => 'submit',
-    '#ajax' => array(
-      'callback' => 'ajax_forms_test_advanced_commands_changed_callback',
-    ),
-    '#suffix' => '<div id="changed_div"> <div id="changed_div_mark_this">This div can be marked as changed or not.</div></div>',
-  );
-  // Shows the 'changed' command adding the asterisk.
-  $form['changed_command_asterisk_example'] = array(
-    '#value' => t("AJAX changed: Click to mark div changed with asterisk."),
-    '#type' => 'submit',
-    '#ajax' => array(
-      'callback' => 'ajax_forms_test_advanced_commands_changed_asterisk_callback',
-    ),
-  );
-
-  // Shows the Ajax 'css' command.
-  $form['css_command_example'] = array(
-    '#value' => t("Set the the '#box' div to be blue."),
-    '#type' => 'submit',
-    '#ajax' => array(
-      'callback' => 'ajax_forms_test_advanced_commands_css_callback',
-    ),
-    '#suffix' => '<div id="css_div" style="height: 50px; width: 50px; border: 1px solid black"> box</div>',
-  );
-
-
-  // Shows the Ajax 'data' command. But there is no use of this information,
-  // as this would require a javascript client to use the data.
-  $form['data_command_example'] = array(
-    '#value' => t("AJAX data command: Issue command."),
-    '#type' => 'submit',
-    '#ajax' => array(
-      'callback' => 'ajax_forms_test_advanced_commands_data_callback',
-    ),
-    '#suffix' => '<div id="data_div">Data attached to this div.</div>',
-  );
-
-  // Shows the Ajax 'invoke' command.
-  $form['invoke_command_example'] = array(
-    '#value' => t("AJAX invoke command: Invoke addClass() method."),
-    '#type' => 'submit',
-    '#ajax' => array(
-      'callback' => 'ajax_forms_test_advanced_commands_invoke_callback',
-    ),
-    '#suffix' => '<div id="invoke_div">Original contents</div>',
-  );
-
-  // Shows the Ajax 'html' command.
-  $form['html_command_example'] = array(
-    '#value' => t("AJAX html: Replace the HTML in a selector."),
-    '#type' => 'submit',
-    '#ajax' => array(
-      'callback' => 'ajax_forms_test_advanced_commands_html_callback',
-    ),
-    '#suffix' => '<div id="html_div">Original contents</div>',
-  );
-
-  // Shows the Ajax 'insert' command.
-  $form['insert_command_example'] = array(
-    '#value' => t("AJAX insert: Let client insert based on #ajax['method']."),
-    '#type' => 'submit',
-    '#ajax' => array(
-      'callback' => 'ajax_forms_test_advanced_commands_insert_callback',
-      'method' => 'prepend',
-    ),
-    '#suffix' => '<div id="insert_div">Original contents</div>',
-  );
-
-  // Shows the Ajax 'prepend' command.
-  $form['prepend_command_example'] = array(
-    '#value' => t("AJAX 'prepend': Click to prepend something"),
-    '#type' => 'submit',
-    '#ajax' => array(
-      'callback' => 'ajax_forms_test_advanced_commands_prepend_callback',
-    ),
-    '#suffix' => '<div id="prepend_div">Something will be prepended to this div. </div>',
-  );
-
-  // Shows the Ajax 'remove' command.
-  $form['remove_command_example'] = array(
-    '#value' => t("AJAX 'remove': Click to remove text"),
-    '#type' => 'submit',
-    '#ajax' => array(
-      'callback' => 'ajax_forms_test_advanced_commands_remove_callback',
-    ),
-    '#suffix' => '<div id="remove_div"><div id="remove_text">text to be removed</div></div>',
-  );
-
-  // Shows the Ajax 'restripe' command.
-  $form['restripe_command_example'] = array(
-    '#type' => 'submit',
-    '#value' => t("AJAX 'restripe' command"),
-    '#ajax' => array(
-      'callback' => 'ajax_forms_test_advanced_commands_restripe_callback',
-    ),
-    '#suffix' => '<div id="restripe_div">
-                  <table id="restripe_table" style="border: 1px solid black" >
-                  <tr id="table-first"><td>first row</td></tr>
-                  <tr ><td>second row</td></tr>
-                  </table>
-                  </div>',
-  );
-
-  // Demonstrates the Ajax 'settings' command. The 'settings' command has
-  // nothing visual to "show", but it can be tested via SimpleTest and via
-  // Firebug.
-  $form['settings_command_example'] = array(
-    '#type' => 'submit',
-    '#value' => t("AJAX 'settings' command"),
-    '#ajax' => array(
-      'callback' => 'ajax_forms_test_advanced_commands_settings_callback',
-    ),
-  );
-
-  $form['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Submit'),
-  );
-
-  return $form;
-}
-
-/**
- * Ajax callback for 'after'.
- */
-function ajax_forms_test_advanced_commands_after_callback($form, $form_state) {
-  $selector = '#after_div';
-
-  $commands = array();
-  $commands[] = ajax_command_after($selector, "This will be placed after");
-  return array('#type' => 'ajax', '#commands' => $commands);
-}
-
-/**
- * Ajax callback for 'alert'.
- */
-function ajax_forms_test_advanced_commands_alert_callback($form, $form_state) {
-  $commands = array();
-  $commands[] = ajax_command_alert("Alert");
-  return array('#type' => 'ajax', '#commands' => $commands);
-}
-
-/**
- * Ajax callback for 'append'.
- */
-function ajax_forms_test_advanced_commands_append_callback($form, $form_state) {
-  $selector = '#append_div';
-  $commands = array();
-  $commands[] = ajax_command_append($selector, "Appended text");
-  return array('#type' => 'ajax', '#commands' => $commands);
-}
-
-/**
- * Ajax callback for 'before'.
- */
-function ajax_forms_test_advanced_commands_before_callback($form, $form_state) {
-  $selector = '#before_div';
-
-  $commands = array();
-  $commands[] = ajax_command_before($selector, "Before text");
-  return array('#type' => 'ajax', '#commands' => $commands);
-}
-
-/**
- * Ajax callback for 'changed'.
- */
-function ajax_forms_test_advanced_commands_changed_callback($form, $form_state) {
-  $commands[] = ajax_command_changed('#changed_div');
-  return array('#type' => 'ajax', '#commands' => $commands);
-}
-/**
- * Ajax callback for 'changed' with asterisk marking inner div.
- */
-function ajax_forms_test_advanced_commands_changed_asterisk_callback($form, $form_state) {
-  $commands = array();
-  $commands[] = ajax_command_changed('#changed_div', '#changed_div_mark_this');
-  return array('#type' => 'ajax', '#commands' => $commands);
-}
-
-/**
- * Ajax callback for 'css'.
- */
-function ajax_forms_test_advanced_commands_css_callback($form, $form_state) {
-  $selector = '#css_div';
-  $color = 'blue';
-
-  $commands = array();
-  $commands[] = ajax_command_css($selector, array('background-color' => $color));
-  return array('#type' => 'ajax', '#commands' => $commands);
-}
-
-/**
- * Ajax callback for 'data'.
- */
-function ajax_forms_test_advanced_commands_data_callback($form, $form_state) {
-  $selector = '#data_div';
-
-  $commands = array();
-  $commands[] = ajax_command_data($selector, 'testkey', 'testvalue');
-  return array('#type' => 'ajax', '#commands' => $commands);
-}
-
-/**
- * Ajax callback for 'invoke'.
- */
-function ajax_forms_test_advanced_commands_invoke_callback($form, $form_state) {
-  $commands = array();
-  $commands[] = ajax_command_invoke('#invoke_div', 'addClass', array('error'));
-  return array('#type' => 'ajax', '#commands' => $commands);
-}
-
-/**
- * Ajax callback for 'html'.
- */
-function ajax_forms_test_advanced_commands_html_callback($form, $form_state) {
-  $commands = array();
-  $commands[] = ajax_command_html('#html_div', 'replacement text');
-  return array('#type' => 'ajax', '#commands' => $commands);
-}
-
-/**
- * Ajax callback for 'insert'.
- */
-function ajax_forms_test_advanced_commands_insert_callback($form, $form_state) {
-  $commands = array();
-  $commands[] = ajax_command_insert('#insert_div', 'insert replacement text');
-  return array('#type' => 'ajax', '#commands' => $commands);
-}
-
-/**
- * Ajax callback for 'prepend'.
- */
-function ajax_forms_test_advanced_commands_prepend_callback($form, $form_state) {
-  $commands = array();
-  $commands[] = ajax_command_prepend('#prepend_div', "prepended text");
-  return array('#type' => 'ajax', '#commands' => $commands);
-}
-
-/**
- * Ajax callback for 'remove'.
- */
-function ajax_forms_test_advanced_commands_remove_callback($form, $form_state) {
-  $commands = array();
-  $commands[] = ajax_command_remove('#remove_text');
-  return array('#type' => 'ajax', '#commands' => $commands);
-}
-
-/**
- * Ajax callback for 'restripe'.
- */
-function ajax_forms_test_advanced_commands_restripe_callback($form, $form_state) {
-  $commands = array();
-  $commands[] = ajax_command_restripe('#restripe_table');
-  return array('#type' => 'ajax', '#commands' => $commands);
-}
-
-/**
- * Ajax callback for 'settings'.
- */
-function ajax_forms_test_advanced_commands_settings_callback($form, $form_state) {
-  $commands = array();
-  $setting['ajax_forms_test']['foo'] = 42;
-  $commands[] = ajax_command_settings($setting);
-  return array('#type' => 'ajax', '#commands' => $commands);
-}
-
-/**
- * This form and its related submit and callback functions demonstrate
- * not validating another form element when a single Ajax element is triggered.
- *
- * The "drivertext" element is an Ajax-enabled textfield, free-form.
- * The "required_field" element is a textfield marked required.
- *
- * The correct behavior is that the Ajax-enabled drivertext element should
- * be able to trigger without causing validation of the "required_field".
- */
-function ajax_forms_test_validation_form($form, &$form_state) {
-
-  $form['drivertext'] = array(
-    '#title' => t('AJAX-enabled textfield.'),
-    '#description' => t("When this one AJAX-triggers and the spare required field is empty, you should not get an error."),
-    '#type' => 'textfield',
-    '#default_value' => !empty($form_state['values']['drivertext']) ? $form_state['values']['drivertext'] : "",
-    '#ajax' => array(
-      'callback' => 'ajax_forms_test_validation_form_callback',
-      'wrapper' => 'message_area',
-      'method' => 'replace',
-    ),
-    '#suffix' => '<div id="message_area"></div>',
-  );
-
-  $form['spare_required_field'] = array(
-    '#title' => t("Spare Required Field"),
-    '#type' => 'textfield',
-    '#required' => TRUE,
-  );
-
-  $form['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Submit'),
-  );
-
-  return $form;
-}
-/**
- * Submit handler for the validation form.
- */
-function ajax_forms_test_validation_form_submit($form, $form_state) {
-  drupal_set_message(t("Validation form submitted"));
-}
-
-/**
- * Ajax callback for the 'drivertext' element of the validation form.
- */
-function ajax_forms_test_validation_form_callback($form, $form_state) {
-  drupal_set_message("ajax_forms_test_validation_form_callback invoked");
-  drupal_set_message(t("Callback: drivertext=%drivertext, spare_required_field=%spare_required_field", array('%drivertext' => $form_state['values']['drivertext'], '%spare_required_field' => $form_state['values']['spare_required_field'])));
-  return '<div id="message_area">ajax_forms_test_validation_form_callback at ' . date('c') . '</div>';
-}
-
-/**
- * Form builder: Builds a form that triggers a simple AJAX callback.
- */
-function ajax_forms_test_lazy_load_form($form, &$form_state) {
-  $form['add_files'] = array(
-    '#type' => 'checkbox',
-    '#default_value' => FALSE,
-  );
-  $form['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Submit'),
-    '#ajax' => array(
-      'callback' => 'ajax_forms_test_lazy_load_form_ajax',
-    ),
-  );
-  return $form;
-}
-
-/**
- * Form submit handler: Adds JavaScript and CSS that wasn't on the original form.
- */
-function ajax_forms_test_lazy_load_form_submit($form, &$form_state) {
-  if ($form_state['values']['add_files']) {
-    drupal_add_js(array('ajax_forms_test_lazy_load_form_submit' => 'executed'), 'setting');
-    drupal_add_css(drupal_get_path('module', 'system') . '/system.admin.css');
-    drupal_add_js(drupal_get_path('module', 'system') . '/system.js');
-  }
-  $form_state['rebuild'] = TRUE;
-}
-
-/**
- * AJAX callback for the ajax_forms_test_lazy_load_form() form.
- *
- * This function returns nothing, because all we're interested in testing is
- * ajax_render() adding commands for JavaScript and CSS added during the page
- * request, such as the ones added in ajax_forms_test_lazy_load_form_submit().
- */
-function ajax_forms_test_lazy_load_form_ajax($form, &$form_state) {
-  return NULL;
-}
diff --git a/modules/simpletest/tests/ajax_test.info b/modules/simpletest/tests/ajax_test.info
deleted file mode 100644
index 1f56482..0000000
--- a/modules/simpletest/tests/ajax_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = AJAX Test
-description = Support module for AJAX framework tests.
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/ajax_test.module b/modules/simpletest/tests/ajax_test.module
deleted file mode 100644
index 21be019..0000000
--- a/modules/simpletest/tests/ajax_test.module
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-
-/**
- * @file
- * Helper module for Ajax framework tests.
- */
-
-/**
- * Implements hook_menu().
- */
-function ajax_test_menu() {
-  $items['ajax-test/render'] = array(
-    'title' => 'ajax_render',
-    'page callback' => 'ajax_test_render',
-    'delivery callback' => 'ajax_deliver',
-    'access callback' => TRUE,
-    'type' => MENU_CALLBACK,
-  );
-  $items['ajax-test/render-error'] = array(
-    'title' => 'ajax_render_error',
-    'page callback' => 'ajax_test_error',
-    'delivery callback' => 'ajax_deliver',
-    'access callback' => TRUE,
-    'type' => MENU_CALLBACK,
-  );
-  $items['ajax-test/link'] = array(
-    'title' => 'AJAX Link',
-    'page callback' => 'ajax_test_link',
-    'access callback' => TRUE,
-  );
-  return $items;
-}
-
-/**
- * Implements hook_system_theme_info().
- */
-function ajax_test_system_theme_info() {
-  $themes['test_theme'] = drupal_get_path('module', 'ajax_test') . '/themes/test_theme/test_theme.info';
-  return $themes;
-}
-
-/**
- * Menu callback; Return an element suitable for use by ajax_deliver().
- *
- * Additionally ensures that ajax_render() incorporates JavaScript settings
- * generated during the page request by invoking drupal_add_js() with a dummy
- * setting.
- */
-function ajax_test_render() {
-  drupal_add_js(array('ajax' => 'test'), 'setting');
-  return array('#type' => 'ajax', '#commands' => array());
-}
-
-/**
- * Menu callback; Returns Ajax element with #error property set.
- */
-function ajax_test_error() {
-  $message = '';
-  if (!empty($_GET['message'])) {
-    $message = $_GET['message'];
-  }
-  return array('#type' => 'ajax', '#error' => $message);
-}
-
-/**
- * Menu callback; Renders a #type link with #ajax.
- */
-function ajax_test_link() {
-  $build['link'] = array(
-    '#type' => 'link',
-    '#title' => 'Show help',
-    '#href' => 'filter/tips',
-    '#ajax' => array(
-      'wrapper' => 'block-system-main',
-    ),
-  );
-  return $build;
-}
-
diff --git a/modules/simpletest/tests/batch.test b/modules/simpletest/tests/batch.test
deleted file mode 100644
index e41bc92..0000000
--- a/modules/simpletest/tests/batch.test
+++ /dev/null
@@ -1,403 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for the Batch API.
- */
-
-/**
- * Tests for the Batch API.
- */
-class BatchProcessingTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Batch processing',
-      'description' => 'Test batch processing in form and non-form workflow.',
-      'group' => 'Batch API',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('batch_test');
-  }
-
-  /**
-   * Test batches triggered outside of form submission.
-   */
-  function testBatchNoForm() {
-    // Displaying the page triggers batch 1.
-    $this->drupalGet('batch-test/no-form');
-    $this->assertBatchMessages($this->_resultMessages(1), t('Batch for step 2 performed successfully.'));
-    $this->assertEqual(batch_test_stack(), $this->_resultStack('batch_1'), t('Execution order was correct.'));
-    $this->assertText('Redirection successful.', t('Redirection after batch execution is correct.'));
-  }
-
-  /**
-   * Test batches defined in a form submit handler.
-   */
-  function testBatchForm() {
-    // Batch 0: no operation.
-    $edit = array('batch' => 'batch_0');
-    $this->drupalPost('batch-test/simple', $edit, 'Submit');
-    $this->assertBatchMessages($this->_resultMessages('batch_0'), t('Batch with no operation performed successfully.'));
-    $this->assertText('Redirection successful.', t('Redirection after batch execution is correct.'));
-
-    // Batch 1: several simple operations.
-    $edit = array('batch' => 'batch_1');
-    $this->drupalPost('batch-test/simple', $edit, 'Submit');
-    $this->assertBatchMessages($this->_resultMessages('batch_1'), t('Batch with simple operations performed successfully.'));
-    $this->assertEqual(batch_test_stack(), $this->_resultStack('batch_1'), t('Execution order was correct.'));
-    $this->assertText('Redirection successful.', t('Redirection after batch execution is correct.'));
-
-    // Batch 2: one multistep operation.
-    $edit = array('batch' => 'batch_2');
-    $this->drupalPost('batch-test/simple', $edit, 'Submit');
-    $this->assertBatchMessages($this->_resultMessages('batch_2'), t('Batch with multistep operation performed successfully.'));
-    $this->assertEqual(batch_test_stack(), $this->_resultStack('batch_2'), t('Execution order was correct.'));
-    $this->assertText('Redirection successful.', t('Redirection after batch execution is correct.'));
-
-    // Batch 3: simple + multistep combined.
-    $edit = array('batch' => 'batch_3');
-    $this->drupalPost('batch-test/simple', $edit, 'Submit');
-    $this->assertBatchMessages($this->_resultMessages('batch_3'), t('Batch with simple and multistep operations performed successfully.'));
-    $this->assertEqual(batch_test_stack(), $this->_resultStack('batch_3'), t('Execution order was correct.'));
-    $this->assertText('Redirection successful.', t('Redirection after batch execution is correct.'));
-
-    // Batch 4: nested batch.
-    $edit = array('batch' => 'batch_4');
-    $this->drupalPost('batch-test/simple', $edit, 'Submit');
-    $this->assertBatchMessages($this->_resultMessages('batch_4'), t('Nested batch performed successfully.'));
-    $this->assertEqual(batch_test_stack(), $this->_resultStack('batch_4'), t('Execution order was correct.'));
-    $this->assertText('Redirection successful.', t('Redirection after batch execution is correct.'));
-  }
-
-  /**
-   * Test batches defined in a multistep form.
-   */
-  function testBatchFormMultistep() {
-    $this->drupalGet('batch-test/multistep');
-    $this->assertText('step 1', t('Form is displayed in step 1.'));
-
-    // First step triggers batch 1.
-    $this->drupalPost(NULL, array(), 'Submit');
-    $this->assertBatchMessages($this->_resultMessages('batch_1'), t('Batch for step 1 performed successfully.'));
-    $this->assertEqual(batch_test_stack(), $this->_resultStack('batch_1'), t('Execution order was correct.'));
-    $this->assertText('step 2', t('Form is displayed in step 2.'));
-
-    // Second step triggers batch 2.
-    $this->drupalPost(NULL, array(), 'Submit');
-    $this->assertBatchMessages($this->_resultMessages('batch_2'), t('Batch for step 2 performed successfully.'));
-    $this->assertEqual(batch_test_stack(), $this->_resultStack('batch_2'), t('Execution order was correct.'));
-    $this->assertText('Redirection successful.', t('Redirection after batch execution is correct.'));
-  }
-
-  /**
-   * Test batches defined in different submit handlers on the same form.
-   */
-  function testBatchFormMultipleBatches() {
-    // Batches 1, 2 and 3 are triggered in sequence by different submit
-    // handlers. Each submit handler modify the submitted 'value'.
-    $value = rand(0, 255);
-    $edit = array('value' => $value);
-    $this->drupalPost('batch-test/chained', $edit, 'Submit');
-    // Check that result messages are present and in the correct order.
-    $this->assertBatchMessages($this->_resultMessages('chained'), t('Batches defined in separate submit handlers performed successfully.'));
-    // The stack contains execution order of batch callbacks and submit
-    // hanlders and logging of corresponding $form_state[{values'].
-    $this->assertEqual(batch_test_stack(), $this->_resultStack('chained', $value), t('Execution order was correct, and $form_state is correctly persisted.'));
-    $this->assertText('Redirection successful.', t('Redirection after batch execution is correct.'));
-  }
-
-  /**
-   * Test batches defined in a programmatically submitted form.
-   *
-   * Same as above, but the form is submitted through drupal_form_execute().
-   */
-  function testBatchFormProgrammatic() {
-    // Batches 1, 2 and 3 are triggered in sequence by different submit
-    // handlers. Each submit handler modify the submitted 'value'.
-    $value = rand(0, 255);
-    $this->drupalGet('batch-test/programmatic/' . $value);
-    // Check that result messages are present and in the correct order.
-    $this->assertBatchMessages($this->_resultMessages('chained'), t('Batches defined in separate submit handlers performed successfully.'));
-    // The stack contains execution order of batch callbacks and submit
-    // hanlders and logging of corresponding $form_state[{values'].
-    $this->assertEqual(batch_test_stack(), $this->_resultStack('chained', $value), t('Execution order was correct, and $form_state is correctly persisted.'));
-    $this->assertText('Got out of a programmatic batched form.', t('Page execution continues normally.'));
-  }
-
-  /**
-   * Test that drupal_form_submit() can run within a batch operation.
-   */
-  function testDrupalFormSubmitInBatch() {
-    // Displaying the page triggers a batch that programmatically submits a
-    // form.
-    $value = rand(0, 255);
-    $this->drupalGet('batch-test/nested-programmatic/' . $value);
-    $this->assertEqual(batch_test_stack(), array('mock form submitted with value = ' . $value), t('drupal_form_submit() ran successfully within a batch operation.'));
-  }
-
-  /**
-   * Test batches that return $context['finished'] > 1 do in fact complete.
-   * See http://drupal.org/node/600836
-   */
-  function testBatchLargePercentage() {
-    // Displaying the page triggers batch 5.
-    $this->drupalGet('batch-test/large-percentage');
-    $this->assertBatchMessages($this->_resultMessages(1), t('Batch for step 2 performed successfully.'));
-    $this->assertEqual(batch_test_stack(), $this->_resultStack('batch_5'), t('Execution order was correct.'));
-    $this->assertText('Redirection successful.', t('Redirection after batch execution is correct.'));
-  }
-
-
-  /**
-   * Will trigger a pass if the texts were found in order in the raw content.
-   *
-   * @param $texts
-   *   Array of raw strings to look for .
-   * @param $message
-   *   Message to display.
-   * @return
-   *   TRUE on pass, FALSE on fail.
-   */
-  function assertBatchMessages($texts, $message) {
-    $pattern = '|' . implode('.*', $texts) .'|s';
-    return $this->assertPattern($pattern, $message);
-  }
-
-  /**
-   * Helper function: return expected execution stacks for the test batches.
-   */
-  function _resultStack($id, $value = 0) {
-    $stack = array();
-    switch ($id) {
-      case 'batch_1':
-        for ($i = 1; $i <= 10; $i++) {
-          $stack[] = "op 1 id $i";
-        }
-        break;
-
-      case 'batch_2':
-        for ($i = 1; $i <= 10; $i++) {
-          $stack[] = "op 2 id $i";
-        }
-        break;
-
-      case 'batch_3':
-        for ($i = 1; $i <= 5; $i++) {
-          $stack[] = "op 1 id $i";
-        }
-        for ($i = 1; $i <= 5; $i++) {
-          $stack[] = "op 2 id $i";
-        }
-        for ($i = 6; $i <= 10; $i++) {
-          $stack[] = "op 1 id $i";
-        }
-        for ($i = 6; $i <= 10; $i++) {
-          $stack[] = "op 2 id $i";
-        }
-        break;
-
-      case 'batch_4':
-        for ($i = 1; $i <= 5; $i++) {
-          $stack[] = "op 1 id $i";
-        }
-        $stack[] = 'setting up batch 2';
-        for ($i = 6; $i <= 10; $i++) {
-          $stack[] = "op 1 id $i";
-        }
-        $stack = array_merge($stack, $this->_resultStack('batch_2'));
-        break;
-
-      case 'batch_5':
-        for ($i = 1; $i <= 10; $i++) {
-          $stack[] = "op 5 id $i";
-        }
-        break;
-
-      case 'chained':
-        $stack[] = 'submit handler 1';
-        $stack[] = 'value = ' . $value;
-        $stack = array_merge($stack, $this->_resultStack('batch_1'));
-        $stack[] = 'submit handler 2';
-        $stack[] = 'value = ' . ($value + 1);
-        $stack = array_merge($stack, $this->_resultStack('batch_2'));
-        $stack[] = 'submit handler 3';
-        $stack[] = 'value = ' . ($value + 2);
-        $stack[] = 'submit handler 4';
-        $stack[] = 'value = ' . ($value + 3);
-        $stack = array_merge($stack, $this->_resultStack('batch_3'));
-        break;
-    }
-    return $stack;
-  }
-
-  /**
-   * Helper function: return expected result messages for the test batches.
-   */
-  function _resultMessages($id) {
-    $messages = array();
-
-    switch ($id) {
-      case 'batch_0':
-        $messages[] = 'results for batch 0<br />none';
-        break;
-
-      case 'batch_1':
-        $messages[] = 'results for batch 1<br />op 1: processed 10 elements';
-        break;
-
-      case 'batch_2':
-        $messages[] = 'results for batch 2<br />op 2: processed 10 elements';
-        break;
-
-      case 'batch_3':
-        $messages[] = 'results for batch 3<br />op 1: processed 10 elements<br />op 2: processed 10 elements';
-        break;
-
-      case 'batch_4':
-        $messages[] = 'results for batch 4<br />op 1: processed 10 elements';
-        $messages = array_merge($messages, $this->_resultMessages('batch_2'));
-        break;
-
-      case 'batch_5':
-        $messages[] = 'results for batch 5<br />op 1: processed 10 elements. $context[\'finished\'] > 1 returned from batch process, with success.';
-        break;
-
-      case 'chained':
-        $messages = array_merge($messages, $this->_resultMessages('batch_1'));
-        $messages = array_merge($messages, $this->_resultMessages('batch_2'));
-        $messages = array_merge($messages, $this->_resultMessages('batch_3'));
-        break;
-    }
-    return $messages;
-  }
-}
-
-/**
- * Tests for the Batch API Progress page.
- */
-class BatchPageTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Batch progress page',
-      'description' => 'Test the content of the progress page.',
-      'group' => 'Batch API',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('batch_test');
-  }
-
-  /**
-   * Tests that the batch API progress page uses the correct theme.
-   */
-  function testBatchProgressPageTheme() {
-    // Make sure that the page which starts the batch (an administrative page)
-    // is using a different theme than would normally be used by the batch API.
-    variable_set('theme_default', 'bartik');
-    variable_set('admin_theme', 'seven');
-    // Log in as an administrator who can see the administrative theme.
-    $admin_user = $this->drupalCreateUser(array('view the administration theme'));
-    $this->drupalLogin($admin_user);
-    // Visit an administrative page that runs a test batch, and check that the
-    // theme that was used during batch execution (which the batch callback
-    // function saved as a variable) matches the theme used on the
-    // administrative page.
-    $this->drupalGet('admin/batch-test/test-theme');
-    // The stack should contain the name of the theme used on the progress
-    // page.
-    $this->assertEqual(batch_test_stack(), array('seven'), t('A progressive batch correctly uses the theme of the page that started the batch.'));
-  }
-}
-
-/**
- * Tests the function _batch_api_percentage() to make sure that the rounding
- * works properly in all cases.
- */
-class BatchPercentagesUnitTestCase extends DrupalUnitTestCase {
-  protected $testCases = array();
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Batch percentages',
-      'description' => 'Unit tests of progress percentage rounding.',
-      'group' => 'Batch API',
-    );
-  }
-
-  function setUp() {
-    // Set up an array of test cases, where the expected values are the keys,
-    // and the values are arrays with the keys 'total' and 'current',
-    // corresponding with the function parameters of _batch_api_percentage().
-    $this->testCases = array(
-      // 1/2 is 50%.
-      '50' => array('total' => 2, 'current' => 1),
-      // Though we should never encounter a case where the current set is set
-      // 0, if we did, we should get 0%.
-      '0' => array('total' => 3, 'current' => 0),
-      // 1/3 is closer to 33% than to 34%.
-      '33' => array('total' => 3, 'current' => 1),
-      // 2/3 is closer to 67% than to 66%.
-      '67' => array('total' => 3, 'current' => 2),
-      // 1/199 should round up to 1%.
-      '1' => array('total' => 199, 'current' => 1),
-      // 198/199 should round down to 99%.
-      '99' => array('total' => 199, 'current' => 198),
-      // 199/200 would have rounded up to 100%, which would give the false
-      // impression of being finished, so we add another digit and should get
-      // 99.5%.
-      '99.5' => array('total' => 200, 'current' => 199),
-      // The same logic holds for 1/200: we should get 0.5%.
-      '0.5' => array('total' => 200, 'current' => 1),
-      // Numbers that come out evenly, such as 50/200, should be forced to have
-      // extra digits for consistancy.
-      '25.0' => array('total' => 200, 'current' => 50),
-      // Regardless of number of digits we're using, 100% should always just be
-      // 100%.
-      '100' => array('total' => 200, 'current' => 200),
-      // 1998/1999 should similarly round down to 99.9%.
-      '99.9' => array('total' => 1999, 'current' => 1998),
-      // 1999/2000 should add another digit and go to 99.95%.
-      '99.95' => array('total' => 2000, 'current' => 1999),
-      // 19999/20000 should add yet another digit and go to 99.995%.
-      '99.995' => array('total' => 20000, 'current' => 19999),
-      // The next five test cases simulate a batch with a single operation
-      // ('total' equals 1) that takes several steps to complete. Within the
-      // operation, we imagine that there are 501 items to process, and 100 are
-      // completed during each step. The percentages we get back should be
-      // rounded the usual way for the first few passes (i.e., 20%, 40%, etc.),
-      // but for the last pass through, when 500 out of 501 items have been
-      // processed, we do not want to round up to 100%, since that would
-      // erroneously indicate that the processing is complete.
-      '20' => array('total' => 1, 'current' => 100/501),
-      '40' => array('total' => 1, 'current' => 200/501),
-      '60' => array('total' => 1, 'current' => 300/501),
-      '80' => array('total' => 1, 'current' => 400/501),
-      '99.8' => array('total' => 1, 'current' => 500/501),
-    );
-    require_once DRUPAL_ROOT . '/includes/batch.inc';
-    parent::setUp();
-  }
-
-  /**
-   * Test the _batch_api_percentage() function.
-   */
-  function testBatchPercentages() {
-    foreach ($this->testCases as $expected_result => $arguments) {
-      // PHP sometimes casts numeric strings that are array keys to integers,
-      // cast them back here.
-      $expected_result = (string) $expected_result;
-      $total = $arguments['total'];
-      $current = $arguments['current'];
-      $actual_result = _batch_api_percentage($total, $current);
-      if ($actual_result === $expected_result) {
-        $this->pass(t('Expected the batch api percentage at the state @numerator/@denominator to be @expected%, and got @actual%.', array('@numerator' => $current, '@denominator' => $total, '@expected' => $expected_result, '@actual' => $actual_result)));
-      }
-      else {
-        $this->fail(t('Expected the batch api percentage at the state @numerator/@denominator to be @expected%, but got @actual%.', array('@numerator' => $current, '@denominator' => $total, '@expected' => $expected_result, '@actual' => $actual_result)));
-      }
-    }
-  }
-}
diff --git a/modules/simpletest/tests/batch_test.callbacks.inc b/modules/simpletest/tests/batch_test.callbacks.inc
deleted file mode 100644
index 75e6655..0000000
--- a/modules/simpletest/tests/batch_test.callbacks.inc
+++ /dev/null
@@ -1,141 +0,0 @@
-<?php
-
-
-/**
- * @file
- * Batch callbacks for the Batch API tests.
- */
-
-/**
- * Simple batch operation.
- */
-function _batch_test_callback_1($id, $sleep, &$context) {
-  // No-op, but ensure the batch take a couple iterations.
-  // Batch needs time to run for the test, so sleep a bit.
-  usleep($sleep);
-  // Track execution, and store some result for post-processing in the
-  // 'finished' callback.
-  batch_test_stack("op 1 id $id");
-  $context['results'][1][] = $id;
-}
-
-/**
- * Multistep batch operation.
- */
-function _batch_test_callback_2($start, $total, $sleep, &$context) {
-  // Initialize context with progress information.
-  if (!isset($context['sandbox']['current'])) {
-    $context['sandbox']['current'] = $start;
-    $context['sandbox']['count'] = 0;
-  }
-
-  // Process by groups of 5 (arbitrary value).
-  $limit = 5;
-  for ($i = 0; $i < $limit && $context['sandbox']['count'] < $total; $i++) {
-    // No-op, but ensure the batch take a couple iterations.
-    // Batch needs time to run for the test, so sleep a bit.
-    usleep($sleep);
-    // Track execution, and store some result for post-processing in the
-    // 'finished' callback.
-    $id = $context['sandbox']['current'] + $i;
-    batch_test_stack("op 2 id $id");
-    $context['results'][2][] = $id;
-
-    // Update progress information.
-    $context['sandbox']['count']++;
-  }
-  $context['sandbox']['current'] += $i;
-
-  // Inform batch engine about progress.
-  if ($context['sandbox']['count'] != $total) {
-    $context['finished'] = $context['sandbox']['count'] / $total;
-  }
-}
-
-/**
- * Simple batch operation.
- */
-function _batch_test_callback_5($id, $sleep, &$context) {
-  // No-op, but ensure the batch take a couple iterations.
-  // Batch needs time to run for the test, so sleep a bit.
-  usleep($sleep);
-  // Track execution, and store some result for post-processing in the
-  // 'finished' callback.
-  batch_test_stack("op 5 id $id");
-  $context['results'][5][] = $id;
-  // This test is to test finished > 1
-  $context['finished'] = 3.14;
-}
-
-/**
- * Batch operation setting up its own batch.
- */
-function _batch_test_nested_batch_callback() {
-  batch_test_stack('setting up batch 2');
-  batch_set(_batch_test_batch_2());
-}
-
-/**
- * Common 'finished' callbacks for batches 1 to 4.
- */
-function _batch_test_finished_helper($batch_id, $success, $results, $operations) {
-  $messages = array("results for batch $batch_id");
-  if ($results) {
-    foreach ($results as $op => $op_results) {
-      $messages[] = 'op '. $op . ': processed ' . count($op_results) . ' elements';
-    }
-  }
-  else {
-    $messages[] = 'none';
-  }
-
-  if (!$success) {
-    // A fatal error occurred during the processing.
-    $error_operation = reset($operations);
-    $messages[] = t('An error occurred while processing @op with arguments:<br/>@args', array('@op' => $error_operation[0], '@args' => print_r($error_operation[1], TRUE)));
-  }
-
-  drupal_set_message(implode('<br />', $messages));
-}
-
-/**
- * 'finished' callback for batch 0.
- */
-function _batch_test_finished_0($success, $results, $operations) {
-  _batch_test_finished_helper(0, $success, $results, $operations);
-}
-
-/**
- * 'finished' callback for batch 1.
- */
-function _batch_test_finished_1($success, $results, $operations) {
-  _batch_test_finished_helper(1, $success, $results, $operations);
-}
-
-/**
- * 'finished' callback for batch 2.
- */
-function _batch_test_finished_2($success, $results, $operations) {
-  _batch_test_finished_helper(2, $success, $results, $operations);
-}
-
-/**
- * 'finished' callback for batch 3.
- */
-function _batch_test_finished_3($success, $results, $operations) {
-  _batch_test_finished_helper(3, $success, $results, $operations);
-}
-
-/**
- * 'finished' callback for batch 4.
- */
-function _batch_test_finished_4($success, $results, $operations) {
-  _batch_test_finished_helper(4, $success, $results, $operations);
-}
-
-/**
- * 'finished' callback for batch 5.
- */
-function _batch_test_finished_5($success, $results, $operations) {
-  _batch_test_finished_helper(5, $success, $results, $operations);
-}
diff --git a/modules/simpletest/tests/batch_test.info b/modules/simpletest/tests/batch_test.info
deleted file mode 100644
index f354097..0000000
--- a/modules/simpletest/tests/batch_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Batch API test"
-description = "Support module for Batch API tests."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/batch_test.module b/modules/simpletest/tests/batch_test.module
deleted file mode 100644
index 1200e76..0000000
--- a/modules/simpletest/tests/batch_test.module
+++ /dev/null
@@ -1,513 +0,0 @@
-<?php
-
-/**
- * @file
- * Helper module for the Batch API tests.
- */
-
-/**
- * Implement hook_menu().
- */
-function batch_test_menu() {
-  $items = array();
-
-  $items['batch-test'] = array(
-    'title' => 'Batch test',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('batch_test_simple_form'),
-    'access callback' => TRUE,
-  );
-  // Simple form: one submit handler, setting a batch.
-  $items['batch-test/simple'] = array(
-    'title' => 'Simple',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-    'weight' => 0,
-  );
-  // Multistep form: two steps, each setting a batch.
-  $items['batch-test/multistep'] = array(
-    'title' => 'Multistep',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('batch_test_multistep_form'),
-    'access callback' => TRUE,
-    'type' => MENU_LOCAL_TASK,
-    'weight' => 1,
-  );
-  // Chained form: four submit handlers, several of which set a batch.
-  $items['batch-test/chained'] = array(
-    'title' => 'Chained',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('batch_test_chained_form'),
-    'access callback' => TRUE,
-    'type' => MENU_LOCAL_TASK,
-    'weight' => 2,
-  );
-  // Programmatic form: the page submits the 'Chained' form through
-  // drupal_form_submit().
-  $items['batch-test/programmatic'] = array(
-    'title' => 'Programmatic',
-    'page callback' => 'batch_test_programmatic',
-    'access callback' => TRUE,
-    'type' => MENU_LOCAL_TASK,
-    'weight' => 3,
-  );
-  // No form: fire a batch simply by accessing a page.
-  $items['batch-test/no-form'] = array(
-    'title' => 'Simple page',
-    'page callback' => 'batch_test_no_form',
-    'access callback' => TRUE,
-    'type' => MENU_LOCAL_TASK,
-    'weight' => 4,
-  );
-  // No form: fire a batch; return > 100% complete
-  $items['batch-test/large-percentage'] = array(
-    'title' => 'Simple page with batch over 100% complete',
-    'page callback' => 'batch_test_large_percentage',
-    'access callback' => TRUE,
-    'type' => MENU_LOCAL_TASK,
-    'weight' => 5,
-  );
-  // Tests programmatic form submission within a batch operation.
-  $items['batch-test/nested-programmatic'] = array(
-    'title' => 'Nested programmatic',
-    'page callback' => 'batch_test_nested_drupal_form_submit',
-    'access callback' => TRUE,
-    'type' => MENU_LOCAL_TASK,
-    'weight' => 6,
-  );
-  // Landing page to test redirects.
-  $items['batch-test/redirect'] = array(
-    'title' => 'Redirect',
-    'page callback' => 'batch_test_redirect_page',
-    'access callback' => TRUE,
-    'type' => MENU_LOCAL_TASK,
-    'weight' => 7,
-  );
-  // This item lives under 'admin' so that the page uses the admin theme.
-  $items['admin/batch-test/test-theme'] = array(
-    'page callback' => 'batch_test_theme_batch',
-    'access callback' => TRUE,
-    'type' => MENU_CALLBACK,
-  );
-
-  return $items;
-}
-
-/**
- * Simple form.
- */
-function batch_test_simple_form() {
-  $form['batch'] = array(
-    '#type' => 'select',
-    '#title' => 'Choose batch',
-    '#options' => array(
-      'batch_0' => 'batch 0',
-      'batch_1' => 'batch 1',
-      'batch_2' => 'batch 2',
-      'batch_3' => 'batch 3',
-      'batch_4' => 'batch 4',
-    ),
-  );
-  $form['submit'] = array(
-    '#type' => 'submit',
-    '#value' => 'Submit',
-  );
-
-  return $form;
-}
-
-/**
- * Submit handler for the simple form.
- */
-function batch_test_simple_form_submit($form, &$form_state) {
-  batch_test_stack(NULL, TRUE);
-
-  $function = '_batch_test_' . $form_state['values']['batch'];
-  batch_set($function());
-
-  $form_state['redirect'] = 'batch-test/redirect';
-}
-
-
-/**
- * Multistep form.
- */
-function batch_test_multistep_form($form, &$form_state) {
-  if (empty($form_state['storage']['step'])) {
-    $form_state['storage']['step'] = 1;
-  }
-
-  $form['step_display'] = array(
-    '#markup' => 'step ' . $form_state['storage']['step'] . '<br/>',
-  );
-  $form['submit'] = array(
-    '#type' => 'submit',
-    '#value' => 'Submit',
-  );
-
-  return $form;
-}
-
-/**
- * Submit handler for the multistep form.
- */
-function batch_test_multistep_form_submit($form, &$form_state) {
-  batch_test_stack(NULL, TRUE);
-
-  switch ($form_state['storage']['step']) {
-    case 1:
-      batch_set(_batch_test_batch_1());
-      break;
-    case 2:
-      batch_set(_batch_test_batch_2());
-      break;
-  }
-
-  if ($form_state['storage']['step'] < 2) {
-    $form_state['storage']['step']++;
-    $form_state['rebuild'] = TRUE;
-  }
-
-  // This will only be effective on the last step.
-  $form_state['redirect'] = 'batch-test/redirect';
-}
-
-/**
- * Form with chained submit callbacks.
- */
-function batch_test_chained_form() {
-  // This value is used to test that $form_state persists through batched
-  // submit handlers.
-  $form['value'] = array(
-    '#type' => 'textfield',
-    '#title' => 'Value',
-    '#default_value' => 1,
-  );
-  $form['submit'] = array(
-    '#type' => 'submit',
-    '#value' => 'Submit',
-  );
-  $form['#submit'] = array(
-    'batch_test_chained_form_submit_1',
-    'batch_test_chained_form_submit_2',
-    'batch_test_chained_form_submit_3',
-    'batch_test_chained_form_submit_4',
-  );
-
-  return $form;
-}
-
-/**
- * Submit handler #1 for the chained form.
- */
-function batch_test_chained_form_submit_1($form, &$form_state) {
-  batch_test_stack(NULL, TRUE);
-
-  batch_test_stack('submit handler 1');
-  batch_test_stack('value = ' . $form_state['values']['value']);
-
-  $form_state['values']['value']++;
-  batch_set(_batch_test_batch_1());
-
-  // This redirect should not be taken into account.
-  $form_state['redirect'] = 'should/be/discarded';
-}
-
-/**
- * Submit handler #2 for the chained form.
- */
-function batch_test_chained_form_submit_2($form, &$form_state) {
-  batch_test_stack('submit handler 2');
-  batch_test_stack('value = ' . $form_state['values']['value']);
-
-  $form_state['values']['value']++;
-  batch_set(_batch_test_batch_2());
-
-  // This redirect should not be taken into account.
-  $form_state['redirect'] = 'should/be/discarded';
-}
-
-/**
- * Submit handler #3 for the chained form.
- */
-function batch_test_chained_form_submit_3($form, &$form_state) {
-  batch_test_stack('submit handler 3');
-  batch_test_stack('value = ' . $form_state['values']['value']);
-
-  $form_state['values']['value']++;
-
-  // This redirect should not be taken into account.
-  $form_state['redirect'] = 'should/be/discarded';
-}
-
-/**
- * Submit handler #4 for the chained form.
- */
-function batch_test_chained_form_submit_4($form, &$form_state) {
-  batch_test_stack('submit handler 4');
-  batch_test_stack('value = ' . $form_state['values']['value']);
-
-  $form_state['values']['value']++;
-  batch_set(_batch_test_batch_3());
-
-  // This is the redirect that should prevail.
-  $form_state['redirect'] = 'batch-test/redirect';
-}
-
-/**
- * Menu callback: programmatically submits the 'Chained' form.
- */
-function batch_test_programmatic($value = 1) {
-  $form_state = array(
-    'values' => array('value' => $value)
-  );
-  drupal_form_submit('batch_test_chained_form', $form_state);
-  return 'Got out of a programmatic batched form.';
-}
-
-/**
- * Menu callback: programmatically submits a form within a batch.
- */
-function batch_test_nested_drupal_form_submit($value = 1) {
-  // Set the batch and process it.
-  $batch['operations'] = array(
-    array('_batch_test_nested_drupal_form_submit_callback', array($value)),
-  );
-  batch_set($batch);
-  batch_process('batch-test/redirect');
-}
-
-/**
- * Batch operation: submits form_test_mock_form using drupal_form_submit().
- */
-function _batch_test_nested_drupal_form_submit_callback($value) {
-  $state['values']['test_value'] = $value;
-  drupal_form_submit('batch_test_mock_form', $state);
-}
-
-/**
- * A simple form with a textfield and submit button.
- */
-function batch_test_mock_form($form, $form_state) {
-  $form['test_value'] = array(
-    '#type' => 'textfield',
-  );
-  $form['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Submit'),
-  );
-
-  return $form;
-}
-
-/**
- * Submit handler for the batch_test_mock form.
- */
-function batch_test_mock_form_submit($form, &$form_state) {
-  batch_test_stack('mock form submitted with value = ' . $form_state['values']['test_value']);
-}
-
-/**
- * Menu callback: fire a batch process without a form submission.
- */
-function batch_test_no_form() {
-  batch_test_stack(NULL, TRUE);
-
-  batch_set(_batch_test_batch_1());
-  batch_process('batch-test/redirect');
-}
-
-/**
- * Menu callback: fire a batch process without a form submission.
- */
-function batch_test_large_percentage() {
-  batch_test_stack(NULL, TRUE);
-
-  batch_set(_batch_test_batch_5());
-  batch_process('batch-test/redirect');
-}
-
-/**
- * Menu callback: successful redirection.
- */
-function batch_test_redirect_page() {
-  return 'Redirection successful.';
-}
-
-/**
- * Batch 0: no operation.
- */
-function _batch_test_batch_0() {
-  $batch = array(
-    'operations' => array(),
-    'finished' => '_batch_test_finished_0',
-    'file' => drupal_get_path('module', 'batch_test'). '/batch_test.callbacks.inc',
-  );
-  return $batch;
-}
-
-/**
- * Batch 1: repeats a simple operation.
- *
- * Operations: op 1 from 1 to 10.
- */
-function _batch_test_batch_1() {
-  // Ensure the batch takes at least two iterations.
-  $total = 10;
-  $sleep = (1000000 / $total) * 2;
-
-  $operations = array();
-  for ($i = 1; $i <= $total; $i++) {
-    $operations[] = array('_batch_test_callback_1', array($i, $sleep));
-  }
-  $batch = array(
-    'operations' => $operations,
-    'finished' => '_batch_test_finished_1',
-    'file' => drupal_get_path('module', 'batch_test'). '/batch_test.callbacks.inc',
-  );
-  return $batch;
-}
-
-/**
- * Batch 2: single multistep operation.
- *
- * Operations: op 2 from 1 to 10.
- */
-function _batch_test_batch_2() {
-  // Ensure the batch takes at least two iterations.
-  $total = 10;
-  $sleep = (1000000 / $total) * 2;
-
-  $operations = array(
-    array('_batch_test_callback_2', array(1, $total, $sleep)),
-  );
-  $batch = array(
-    'operations' => $operations,
-    'finished' => '_batch_test_finished_2',
-    'file' => drupal_get_path('module', 'batch_test') . '/batch_test.callbacks.inc',
-  );
-  return $batch;
-}
-
-/**
- * Batch 3: both single and multistep operations.
- *
- * Operations:
- * - op 1 from 1 to 5,
- * - op 2 from 1 to 5,
- * - op 1 from 6 to 10,
- * - op 2 from 6 to 10.
- */
-function _batch_test_batch_3() {
-  // Ensure the batch takes at least two iterations.
-  $total = 10;
-  $sleep = (1000000 / $total) * 2;
-
-  $operations = array();
-  for ($i = 1; $i <= round($total / 2); $i++) {
-    $operations[] = array('_batch_test_callback_1', array($i, $sleep));
-  }
-  $operations[] = array('_batch_test_callback_2', array(1, $total / 2, $sleep));
-  for ($i = round($total / 2) + 1; $i <= $total; $i++) {
-    $operations[] = array('_batch_test_callback_1', array($i, $sleep));
-  }
-  $operations[] = array('_batch_test_callback_2', array(6, $total / 2, $sleep));
-  $batch = array(
-    'operations' => $operations,
-    'finished' => '_batch_test_finished_3',
-    'file' => drupal_get_path('module', 'batch_test') . '/batch_test.callbacks.inc',
-  );
-  return $batch;
-}
-
-/**
- * Batch 4: batch within a batch.
- *
- * Operations:
- * - op 1 from 1 to 5,
- * - set batch 2 (op 2 from 1 to 10, should run at the end)
- * - op 1 from 6 to 10,
- */
-function _batch_test_batch_4() {
-  // Ensure the batch takes at least two iterations.
-  $total = 10;
-  $sleep = (1000000 / $total) * 2;
-
-  $operations = array();
-  for ($i = 1; $i <= round($total / 2); $i++) {
-    $operations[] = array('_batch_test_callback_1', array($i, $sleep));
-  }
-  $operations[] = array('_batch_test_nested_batch_callback', array());
-  for ($i = round($total / 2) + 1; $i <= $total; $i++) {
-    $operations[] = array('_batch_test_callback_1', array($i, $sleep));
-  }
-  $batch = array(
-    'operations' => $operations,
-    'finished' => '_batch_test_finished_4',
-    'file' => drupal_get_path('module', 'batch_test') . '/batch_test.callbacks.inc',
-  );
-  return $batch;
-}
-
-/**
- * Batch 5: repeats a simple operation.
- *
- * Operations: op 1 from 1 to 10.
- */
-function _batch_test_batch_5() {
-  // Ensure the batch takes at least two iterations.
-  $total = 10;
-  $sleep = (1000000 / $total) * 2;
-
-  $operations = array();
-  for ($i = 1; $i <= $total; $i++) {
-    $operations[] = array('_batch_test_callback_5', array($i, $sleep));
-  }
-  $batch = array(
-    'operations' => $operations,
-    'finished' => '_batch_test_finished_5',
-    'file' => drupal_get_path('module', 'batch_test'). '/batch_test.callbacks.inc',
-  );
-  return $batch;
-}
-
-/**
- * Menu callback: run a batch for testing theme used on the progress page.
- */
-function batch_test_theme_batch() {
-  batch_test_stack(NULL, TRUE);
-  $batch = array(
-    'operations' => array(
-      array('_batch_test_theme_callback', array()),
-    ),
-  );
-  batch_set($batch);
-  batch_process('batch-test/redirect');
-}
-
-/**
- * Batch callback function for testing the theme used on the progress page.
- */
-function _batch_test_theme_callback() {
-  // Because drupalGet() steps through the full progressive batch before
-  // returning control to the test function, we cannot test that the correct
-  // theme is being used on the batch processing page by viewing that page
-  // directly. Instead, we save the theme being used in a variable here, so
-  // that it can be loaded and inspected in the thread running the test.
-  global $theme;
-  batch_test_stack($theme);
-}
-
-/**
- * Helper function: store or retrieve traced execution data.
- */
-function batch_test_stack($data = NULL, $reset = FALSE) {
-  if ($reset) {
-    variable_del('batch_test_stack');
-  }
-  if (!isset($data)) {
-    return variable_get('batch_test_stack', array());
-  }
-  $stack = variable_get('batch_test_stack', array());
-  $stack[] = $data;
-  variable_set('batch_test_stack', $stack);
-}
diff --git a/modules/simpletest/tests/cache.test b/modules/simpletest/tests/cache.test
deleted file mode 100644
index b42de36..0000000
--- a/modules/simpletest/tests/cache.test
+++ /dev/null
@@ -1,437 +0,0 @@
-<?php
-
-class CacheTestCase extends DrupalWebTestCase {
-  protected $default_bin = 'cache';
-  protected $default_cid = 'test_temporary';
-  protected $default_value = 'CacheTest';
-
-  /**
-   * Check whether or not a cache entry exists.
-   *
-   * @param $cid
-   *   The cache id.
-   * @param $var
-   *   The variable the cache should contain.
-   * @param $bin
-   *   The bin the cache item was stored in.
-   * @return
-   *   TRUE on pass, FALSE on fail.
-   */
-  protected function checkCacheExists($cid, $var, $bin = NULL) {
-    if ($bin == NULL) {
-      $bin = $this->default_bin;
-    }
-
-    $cache = cache_get($cid, $bin);
-
-    return isset($cache->data) && $cache->data == $var;
-  }
-
-  /**
-   * Assert or a cache entry exists.
-   *
-   * @param $message
-   *   Message to display.
-   * @param $var
-   *   The variable the cache should contain.
-   * @param $cid
-   *   The cache id.
-   * @param $bin
-   *   The bin the cache item was stored in.
-   */
-  protected function assertCacheExists($message, $var = NULL, $cid = NULL, $bin = NULL) {
-    if ($bin == NULL) {
-      $bin = $this->default_bin;
-    }
-    if ($cid == NULL) {
-      $cid = $this->default_cid;
-    }
-    if ($var == NULL) {
-      $var = $this->default_value;
-    }
-
-    $this->assertTrue($this->checkCacheExists($cid, $var, $bin), $message);
-  }
-
-  /**
-   * Assert or a cache entry has been removed.
-   *
-   * @param $message
-   *   Message to display.
-   * @param $cid
-   *   The cache id.
-   * @param $bin
-   *   The bin the cache item was stored in.
-   */
-  function assertCacheRemoved($message, $cid = NULL, $bin = NULL) {
-    if ($bin == NULL) {
-      $bin = $this->default_bin;
-    }
-    if ($cid == NULL) {
-      $cid = $this->default_cid;
-    }
-
-    $cache = cache_get($cid, $bin);
-    $this->assertFalse($cache, $message);
-  }
-
-  /**
-   * Perform the general wipe.
-   * @param $bin
-   *   The bin to perform the wipe on.
-   */
-  protected function generalWipe($bin = NULL) {
-    if ($bin == NULL) {
-      $bin = $this->default_bin;
-    }
-
-    cache_clear_all(NULL, $bin);
-  }
-
-  /**
-   * Setup the lifetime settings for caching.
-   *
-   * @param $time
-   *   The time in seconds the cache should minimal live.
-   */
-  protected function setupLifetime($time) {
-    variable_set('cache_lifetime', $time);
-    variable_set('cache_flush', 0);
-  }
-}
-
-class CacheSavingCase extends CacheTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Cache saving test',
-      'description' => 'Check our variables are saved and restored the right way.',
-      'group' => 'Cache'
-    );
-  }
-
-  /**
-   * Test the saving and restoring of a string.
-   */
-  function testString() {
-    $this->checkVariable($this->randomName(100));
-  }
-
-  /**
-   * Test the saving and restoring of an integer.
-   */
-  function testInteger() {
-    $this->checkVariable(100);
-  }
-
-  /**
-   * Test the saving and restoring of a double.
-   */
-  function testDouble() {
-    $this->checkVariable(1.29);
-  }
-
-  /**
-   * Test the saving and restoring of an array.
-   */
-  function testArray() {
-    $this->checkVariable(array('drupal1', 'drupal2' => 'drupal3', 'drupal4' => array('drupal5', 'drupal6')));
-  }
-
-  /**
-   * Test the saving and restoring of an object.
-   */
-  function testObject() {
-    $test_object = new stdClass();
-    $test_object->test1 = $this->randomName(100);
-    $test_object->test2 = 100;
-    $test_object->test3 = array('drupal1', 'drupal2' => 'drupal3', 'drupal4' => array('drupal5', 'drupal6'));
-
-    cache_set('test_object', $test_object, 'cache');
-    $cache = cache_get('test_object', 'cache');
-    $this->assertTrue(isset($cache->data) && $cache->data == $test_object, 'Object is saved and restored properly.');
-  }
-
-  /**
-   * Check or a variable is stored and restored properly.
-   */
-  function checkVariable($var) {
-    cache_set('test_var', $var, 'cache');
-    $cache = cache_get('test_var', 'cache');
-    $this->assertTrue(isset($cache->data) && $cache->data === $var, format_string('@type is saved and restored properly.', array('@type' => ucfirst(gettype($var)))));
-  }
-
-  /**
-   * Test no empty cids are written in cache table.
-   */
-  function testNoEmptyCids() {
-    $this->drupalGet('user/register');
-    $this->assertFalse(cache_get(''), 'No cache entry is written with an empty cid.');
-  }
-}
-
-/**
- * Test cache_get_multiple().
- */
-class CacheGetMultipleUnitTest extends CacheTestCase {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Fetching multiple cache items',
-      'description' => 'Confirm that multiple records are fetched correctly.',
-      'group' => 'Cache',
-    );
-  }
-
-  function setUp() {
-    $this->default_bin = 'cache_page';
-    parent::setUp();
-  }
-
-  /**
-   * Test cache_get_multiple().
-   */
-  function testCacheMultiple() {
-    $item1 = $this->randomName(10);
-    $item2 = $this->randomName(10);
-    cache_set('item1', $item1, $this->default_bin);
-    cache_set('item2', $item2, $this->default_bin);
-    $this->assertTrue($this->checkCacheExists('item1', $item1), 'Item 1 is cached.');
-    $this->assertTrue($this->checkCacheExists('item2', $item2), 'Item 2 is cached.');
-
-    // Fetch both records from the database with cache_get_multiple().
-    $item_ids = array('item1', 'item2');
-    $items = cache_get_multiple($item_ids, $this->default_bin);
-    $this->assertEqual($items['item1']->data, $item1, 'Item was returned from cache successfully.');
-    $this->assertEqual($items['item2']->data, $item2, 'Item was returned from cache successfully.');
-
-    // Remove one item from the cache.
-    cache_clear_all('item2', $this->default_bin);
-
-    // Confirm that only one item is returned by cache_get_multiple().
-    $item_ids = array('item1', 'item2');
-    $items = cache_get_multiple($item_ids, $this->default_bin);
-    $this->assertEqual($items['item1']->data, $item1, 'Item was returned from cache successfully.');
-    $this->assertFalse(isset($items['item2']), 'Item was not returned from the cache.');
-    $this->assertTrue(count($items) == 1, 'Only valid cache entries returned.');
-  }
-}
-
-/**
- * Test cache clearing methods.
- */
-class CacheClearCase extends CacheTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Cache clear test',
-      'description' => 'Check our clearing is done the proper way.',
-      'group' => 'Cache'
-    );
-  }
-
-  function setUp() {
-    $this->default_bin = 'cache_page';
-    $this->default_value = $this->randomName(10);
-
-    parent::setUp();
-  }
-
-  /**
-   * Test clearing using a cid.
-   */
-  function testClearCid() {
-    cache_set('test_cid_clear', $this->default_value, $this->default_bin);
-
-    $this->assertCacheExists(t('Cache was set for clearing cid.'), $this->default_value, 'test_cid_clear');
-    cache_clear_all('test_cid_clear', $this->default_bin);
-
-    $this->assertCacheRemoved(t('Cache was removed after clearing cid.'), 'test_cid_clear');
-
-    cache_set('test_cid_clear1', $this->default_value, $this->default_bin);
-    cache_set('test_cid_clear2', $this->default_value, $this->default_bin);
-    $this->assertTrue($this->checkCacheExists('test_cid_clear1', $this->default_value)
-                      && $this->checkCacheExists('test_cid_clear2', $this->default_value),
-                      'Two caches were created for checking cid "*" with wildcard false.');
-    cache_clear_all('*', $this->default_bin);
-    $this->assertTrue($this->checkCacheExists('test_cid_clear1', $this->default_value)
-                      && $this->checkCacheExists('test_cid_clear2', $this->default_value),
-                      'Two caches still exists after clearing cid "*" with wildcard false.');
-  }
-
-  /**
-   * Test clearing using wildcard.
-   */
-  function testClearWildcard() {
-    cache_set('test_cid_clear1', $this->default_value, $this->default_bin);
-    cache_set('test_cid_clear2', $this->default_value, $this->default_bin);
-    $this->assertTrue($this->checkCacheExists('test_cid_clear1', $this->default_value)
-                      && $this->checkCacheExists('test_cid_clear2', $this->default_value),
-                      'Two caches were created for checking cid "*" with wildcard true.');
-    cache_clear_all('*', $this->default_bin, TRUE);
-    $this->assertFalse($this->checkCacheExists('test_cid_clear1', $this->default_value)
-                      || $this->checkCacheExists('test_cid_clear2', $this->default_value),
-                      'Two caches removed after clearing cid "*" with wildcard true.');
-
-    cache_set('test_cid_clear1', $this->default_value, $this->default_bin);
-    cache_set('test_cid_clear2', $this->default_value, $this->default_bin);
-    $this->assertTrue($this->checkCacheExists('test_cid_clear1', $this->default_value)
-                      && $this->checkCacheExists('test_cid_clear2', $this->default_value),
-                      'Two caches were created for checking cid substring with wildcard true.');
-    cache_clear_all('test_', $this->default_bin, TRUE);
-    $this->assertFalse($this->checkCacheExists('test_cid_clear1', $this->default_value)
-                      || $this->checkCacheExists('test_cid_clear2', $this->default_value),
-                      'Two caches removed after clearing cid substring with wildcard true.');
-  }
-
-  /**
-   * Test clearing using an array.
-   */
-  function testClearArray() {
-    // Create three cache entries.
-    cache_set('test_cid_clear1', $this->default_value, $this->default_bin);
-    cache_set('test_cid_clear2', $this->default_value, $this->default_bin);
-    cache_set('test_cid_clear3', $this->default_value, $this->default_bin);
-    $this->assertTrue($this->checkCacheExists('test_cid_clear1', $this->default_value)
-                      && $this->checkCacheExists('test_cid_clear2', $this->default_value)
-                      && $this->checkCacheExists('test_cid_clear3', $this->default_value),
-                      'Three cache entries were created.');
-
-    // Clear two entries using an array.
-    cache_clear_all(array('test_cid_clear1', 'test_cid_clear2'), $this->default_bin);
-    $this->assertFalse($this->checkCacheExists('test_cid_clear1', $this->default_value)
-                       || $this->checkCacheExists('test_cid_clear2', $this->default_value),
-                       'Two cache entries removed after clearing with an array.');
-
-    $this->assertTrue($this->checkCacheExists('test_cid_clear3', $this->default_value),
-                      'Entry was not cleared from the cache');
-
-    // Set the cache clear threshold to 2 to confirm that the full bin is cleared
-    // when the threshold is exceeded.
-    variable_set('cache_clear_threshold', 2);
-    cache_set('test_cid_clear1', $this->default_value, $this->default_bin);
-    cache_set('test_cid_clear2', $this->default_value, $this->default_bin);
-    $this->assertTrue($this->checkCacheExists('test_cid_clear1', $this->default_value)
-                      && $this->checkCacheExists('test_cid_clear2', $this->default_value),
-                      'Two cache entries were created.');
-    cache_clear_all(array('test_cid_clear1', 'test_cid_clear2', 'test_cid_clear3'), $this->default_bin);
-    $this->assertFalse($this->checkCacheExists('test_cid_clear1', $this->default_value)
-                       || $this->checkCacheExists('test_cid_clear2', $this->default_value)
-                       || $this->checkCacheExists('test_cid_clear3', $this->default_value),
-                       'All cache entries removed when the array exceeded the cache clear threshold.');
-  }
-
-  /**
-   * Test drupal_flush_all_caches().
-   */
-  function testFlushAllCaches() {
-    // Create cache entries for each flushed cache bin.
-    $bins = array('cache', 'cache_filter', 'cache_page', 'cache_boostrap', 'cache_path');
-    $bins = array_merge(module_invoke_all('flush_caches'), $bins);
-    foreach ($bins as $id => $bin) {
-      $id = 'test_cid_clear' . $id;
-      cache_set($id, $this->default_value, $bin);
-    }
-
-    // Remove all caches then make sure that they are cleared.
-    drupal_flush_all_caches();
-
-    foreach ($bins as $id => $bin) {
-      $id = 'test_cid_clear' . $id;
-      $this->assertFalse($this->checkCacheExists($id, $this->default_value, $bin), format_string('All cache entries removed from @bin.', array('@bin' => $bin)));
-    }
-  }
-
-  /**
-   * Test DrupalDatabaseCache::isValidBin().
-   */
-  function testIsValidBin() {
-    // Retrieve existing cache bins.
-    $valid_bins = array('cache', 'cache_filter', 'cache_page', 'cache_boostrap', 'cache_path');
-    $valid_bins = array_merge(module_invoke_all('flush_caches'), $valid_bins);
-    foreach ($valid_bins as $id => $bin) {
-      $cache = _cache_get_object($bin);
-      if ($cache instanceof DrupalDatabaseCache) {
-        $this->assertTrue($cache->isValidBin(), format_string('Cache bin @bin is valid.', array('@bin' => $bin)));
-      }
-    }
-
-    // Check for non-cache tables and invalid bins.
-    $invalid_bins = array('block', 'filter', 'missing_table', $this->randomName());
-    foreach ($invalid_bins as $id => $bin) {
-      $cache = _cache_get_object($bin);
-      if ($cache instanceof DrupalDatabaseCache) {
-        $this->assertFalse($cache->isValidBin(), format_string('Cache bin @bin is not valid.', array('@bin' => $bin)));
-      }
-    }
-  }
-
-  /**
-   * Test minimum cache lifetime.
-   */
-  function testMinimumCacheLifetime() {
-    // Set a minimum/maximum cache lifetime.
-    $this->setupLifetime(300);
-    // Login as a newly-created user.
-    $account = $this->drupalCreateUser(array());
-    $this->drupalLogin($account);
-
-    // Set two cache objects in different bins.
-    $data = $this->randomName(100);
-    cache_set($data, $data, 'cache', CACHE_TEMPORARY);
-    $cached = cache_get($data);
-    $this->assertTrue(isset($cached->data) && $cached->data === $data, 'Cached item retrieved.');
-    cache_set($data, $data, 'cache_page', CACHE_TEMPORARY);
-
-    // Expire temporary items in the 'page' bin.
-    cache_clear_all(NULL, 'cache_page');
-
-    // Since the database cache uses REQUEST_TIME, set the $_SESSION variable
-    // manually to force it to the current time.
-    $_SESSION['cache_expiration']['cache_page'] = time();
-
-    // Items in the default cache bin should not be expired.
-    $cached = cache_get($data);
-    $this->assertTrue(isset($cached->data) && $cached->data == $data, 'Cached item retrieved');
-
-    // Despite the minimum cache lifetime, the item in the 'page' bin should
-    // be invalidated for the current user.
-    $cached = cache_get($data, 'cache_page');
-    $this->assertFalse($cached, 'Cached item was invalidated');
-  }
-}
-
-/**
- * Test cache_is_empty() function.
- */
-class CacheIsEmptyCase extends CacheTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Cache emptiness test',
-      'description' => 'Check if a cache bin is empty after performing clear operations.',
-      'group' => 'Cache'
-    );
-  }
-
-  function setUp() {
-    $this->default_bin = 'cache_page';
-    $this->default_value = $this->randomName(10);
-
-    parent::setUp();
-  }
-
-  /**
-   * Test clearing using a cid.
-   */
-  function testIsEmpty() {
-    // Clear the cache bin.
-    cache_clear_all('*', $this->default_bin);
-    $this->assertTrue(cache_is_empty($this->default_bin), 'The cache bin is empty');
-    // Add some data to the cache bin.
-    cache_set($this->default_cid, $this->default_value, $this->default_bin);
-    $this->assertCacheExists(t('Cache was set.'), $this->default_value, $this->default_cid);
-    $this->assertFalse(cache_is_empty($this->default_bin), 'The cache bin is not empty');
-    // Remove the cached data.
-    cache_clear_all($this->default_cid, $this->default_bin);
-    $this->assertCacheRemoved(t('Cache was removed.'), $this->default_cid);
-    $this->assertTrue(cache_is_empty($this->default_bin), 'The cache bin is empty');
-  }
-}
diff --git a/modules/simpletest/tests/common_test.css b/modules/simpletest/tests/common_test.css
deleted file mode 100644
index b86cead..0000000
--- a/modules/simpletest/tests/common_test.css
+++ /dev/null
@@ -1,2 +0,0 @@
-
-/* This file is for testing CSS file inclusion, no contents are necessary. */
diff --git a/modules/simpletest/tests/common_test.info b/modules/simpletest/tests/common_test.info
deleted file mode 100644
index aced983..0000000
--- a/modules/simpletest/tests/common_test.info
+++ /dev/null
@@ -1,8 +0,0 @@
-name = "Common Test"
-description = "Support module for Common tests."
-package = Testing
-version = VERSION
-core = 7.x
-stylesheets[all][] = common_test.css
-stylesheets[print][] = common_test.print.css
-hidden = TRUE
diff --git a/modules/simpletest/tests/common_test.module b/modules/simpletest/tests/common_test.module
deleted file mode 100644
index 674a494..0000000
--- a/modules/simpletest/tests/common_test.module
+++ /dev/null
@@ -1,276 +0,0 @@
-<?php
-
-/**
- * @file
- * Helper module for the Common tests.
- */
-
-/**
- * Implements hook_menu().
- */
-function common_test_menu() {
-  $items['common-test/drupal_goto'] = array(
-    'title' => 'Drupal Goto',
-    'page callback' => 'common_test_drupal_goto_land',
-    'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
-  );
-  $items['common-test/drupal_goto/fail'] = array(
-    'title' => 'Drupal Goto',
-    'page callback' => 'common_test_drupal_goto_land_fail',
-    'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
-  );
-  $items['common-test/drupal_goto/redirect'] = array(
-    'title' => 'Drupal Goto',
-    'page callback' => 'common_test_drupal_goto_redirect',
-    'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
-  );
-  $items['common-test/drupal_goto/redirect_advanced'] = array(
-    'title' => 'Drupal Goto',
-    'page callback' => 'common_test_drupal_goto_redirect_advanced',
-    'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
-  );
-  $items['common-test/drupal_goto/redirect_fail'] = array(
-    'title' => 'Drupal Goto Failure',
-    'page callback' => 'drupal_goto',
-    'page arguments' => array('common-test/drupal_goto/fail'),
-    'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
-  );
-  $items['common-test/destination'] = array(
-    'title' => 'Drupal Get Destination',
-    'page callback' => 'common_test_destination',
-    'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
-  );
-  $items['common-test/query-string'] = array(
-    'title' => 'Test querystring',
-    'page callback' => 'common_test_js_and_css_querystring',
-    'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
-  );
-  return $items;
-}
-
-/**
- * Redirect using drupal_goto().
- */
-function common_test_drupal_goto_redirect() {
-  drupal_goto('common-test/drupal_goto');
-}
-
-/**
- * Redirect using drupal_goto().
- */
-function common_test_drupal_goto_redirect_advanced() {
-  drupal_goto('common-test/drupal_goto', array('query' => array('foo' => '123')), 301);
-}
-
-/**
- * Landing page for drupal_goto().
- */
-function common_test_drupal_goto_land() {
-  print "drupal_goto";
-}
-
-/**
- * Fail landing page for drupal_goto().
- */
-function common_test_drupal_goto_land_fail() {
-  print "drupal_goto_fail";
-}
-
-/**
- * Implements hook_drupal_goto_alter().
- */
-function common_test_drupal_goto_alter(&$path, &$options, &$http_response_code) {
-  if ($path == 'common-test/drupal_goto/fail') {
-    $path = 'common-test/drupal_goto/redirect';
-  }
-}
-
-/**
- * Print destination query parameter.
- */
-function common_test_destination() {
-  $destination = drupal_get_destination();
-  print "The destination: " . check_plain($destination['destination']);
-}
-
-/**
- * Applies #printed to an element to help test #pre_render.
- */
-function common_test_drupal_render_printing_pre_render($elements) {
-  $elements['#printed'] = TRUE;
-  return $elements;
-}
-
-/**
- * Implements hook_TYPE_alter().
- */
-function common_test_drupal_alter_alter(&$data, &$arg2 = NULL, &$arg3 = NULL) {
-  // Alter first argument.
-  if (is_array($data)) {
-    $data['foo'] = 'Drupal';
-  }
-  elseif (is_object($data)) {
-    $data->foo = 'Drupal';
-  }
-  // Alter second argument, if present.
-  if (isset($arg2)) {
-    if (is_array($arg2)) {
-      $arg2['foo'] = 'Drupal';
-    }
-    elseif (is_object($arg2)) {
-      $arg2->foo = 'Drupal';
-    }
-  }
-  // Try to alter third argument, if present.
-  if (isset($arg3)) {
-    if (is_array($arg3)) {
-      $arg3['foo'] = 'Drupal';
-    }
-    elseif (is_object($arg3)) {
-      $arg3->foo = 'Drupal';
-    }
-  }
-}
-
-/**
- * Implements hook_TYPE_alter() on behalf of Bartik theme.
- *
- * Same as common_test_drupal_alter_alter(), but here, we verify that themes
- * can also alter and come last.
- */
-function bartik_drupal_alter_alter(&$data, &$arg2 = NULL, &$arg3 = NULL) {
-  // Alter first argument.
-  if (is_array($data)) {
-    $data['foo'] .= ' theme';
-  }
-  elseif (is_object($data)) {
-    $data->foo .= ' theme';
-  }
-  // Alter second argument, if present.
-  if (isset($arg2)) {
-    if (is_array($arg2)) {
-      $arg2['foo'] .= ' theme';
-    }
-    elseif (is_object($arg2)) {
-      $arg2->foo .= ' theme';
-    }
-  }
-  // Try to alter third argument, if present.
-  if (isset($arg3)) {
-    if (is_array($arg3)) {
-      $arg3['foo'] .= ' theme';
-    }
-    elseif (is_object($arg3)) {
-      $arg3->foo .= ' theme';
-    }
-  }
-}
-
-/**
- * Implements hook_TYPE_alter() on behalf of block module.
- *
- * This is for verifying that drupal_alter(array(TYPE1, TYPE2), ...) allows
- * hook_module_implements_alter() to affect the order in which module
- * implementations are executed.
- */
-function block_drupal_alter_foo_alter(&$data, &$arg2 = NULL, &$arg3 = NULL) {
-  $data['foo'] .= ' block';
-}
-
-/**
- * Implements hook_module_implements_alter().
- *
- * @see block_drupal_alter_foo_alter()
- */
-function common_test_module_implements_alter(&$implementations, $hook) {
-  // For drupal_alter(array('drupal_alter', 'drupal_alter_foo'), ...), make the
-  // block module implementations run after all the other modules. Note that
-  // when drupal_alter() is called with an array of types, the first type is
-  // considered primary and controls the module order.
-  if ($hook == 'drupal_alter_alter' && isset($implementations['block'])) {
-    $group = $implementations['block'];
-    unset($implementations['block']);
-    $implementations['block'] = $group;
-  }
-}
-
-/**
- * Implements hook_theme().
- */
-function common_test_theme() {
-  return array(
-    'common_test_foo' => array(
-      'variables' => array('foo' => 'foo', 'bar' => 'bar'),
-    ),
-  );
-}
-
-/**
- * Theme function for testing drupal_render() theming.
- */
-function theme_common_test_foo($variables) {
-  return $variables['foo'] . $variables['bar'];
-}
-
-/**
- * Implements hook_library_alter().
- */
-function common_test_library_alter(&$libraries, $module) {
-  if ($module == 'system' && isset($libraries['farbtastic'])) {
-    // Change the title of Farbtastic to "Farbtastic: Altered Library".
-    $libraries['farbtastic']['title'] = 'Farbtastic: Altered Library';
-    // Make Farbtastic depend on jQuery Form to test library dependencies.
-    $libraries['farbtastic']['dependencies'][] = array('system', 'form');
-  }
-}
-
-/**
- * Implements hook_library().
- *
- * Adds Farbtastic in a different version.
- */
-function common_test_library() {
-  $libraries['farbtastic'] = array(
-    'title' => 'Custom Farbtastic Library',
-    'website' => 'http://code.google.com/p/farbtastic/',
-    'version' => '5.3',
-    'js' => array(
-      'misc/farbtastic/farbtastic.js' => array(),
-    ),
-    'css' => array(
-      'misc/farbtastic/farbtastic.css' => array(),
-    ),
-  );
-  return $libraries;
-}
-
-/**
- * Adds a JavaScript file and a CSS file with a query string appended.
- */
-function common_test_js_and_css_querystring() {
-   drupal_add_js(drupal_get_path('module', 'node') . '/node.js');
-   drupal_add_css(drupal_get_path('module', 'node') . '/node.css');
-   // A relative URI may have a query string.
-   drupal_add_css('/' . drupal_get_path('module', 'node') . '/node-fake.css?arg1=value1&arg2=value2');
-   return '';
-}
-
-/**
- * Implements hook_cron().
- *
- * System module should handle if a module does not catch an exception and keep
- * cron going.
- *
- * @see common_test_cron_helper()
- *
- */
-function common_test_cron() {
-  throw new Exception(t('Uncaught exception'));
-}
diff --git a/modules/simpletest/tests/common_test.print.css b/modules/simpletest/tests/common_test.print.css
deleted file mode 100644
index b86cead..0000000
--- a/modules/simpletest/tests/common_test.print.css
+++ /dev/null
@@ -1,2 +0,0 @@
-
-/* This file is for testing CSS file inclusion, no contents are necessary. */
diff --git a/modules/simpletest/tests/common_test_cron_helper.info b/modules/simpletest/tests/common_test_cron_helper.info
deleted file mode 100644
index ce1a632..0000000
--- a/modules/simpletest/tests/common_test_cron_helper.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Common Test Cron Helper"
-description = "Helper module for CronRunTestCase::testCronExceptions()."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/common_test_cron_helper.module b/modules/simpletest/tests/common_test_cron_helper.module
deleted file mode 100644
index 94a2b2c..0000000
--- a/modules/simpletest/tests/common_test_cron_helper.module
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * @file
- * Helper module for the testCronExceptions in addition to common_test module.
- */
-
-/**
- * Implements hook_cron().
- *
- * common_test_cron() throws an exception, but the execution should reach this
- * function as well.
- *
- * @see common_test_cron()
- */
-function common_test_cron_helper_cron() {
-  variable_set('common_test_cron', 'success');
-}
diff --git a/modules/simpletest/tests/common_test_info.txt b/modules/simpletest/tests/common_test_info.txt
deleted file mode 100644
index ae217b9..0000000
--- a/modules/simpletest/tests/common_test_info.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-; Test parsing with a simple string.
-simple_string = A simple string
-
-; Test that constants can be used as values.
-simple_constant = WATCHDOG_INFO
-
-; After parsing the .info file, 'double_colon' should hold the literal value.
-; Parsing should not throw a fatal error or try to access a class constant.
-double_colon = dummyClassName::
diff --git a/modules/simpletest/tests/database_test.info b/modules/simpletest/tests/database_test.info
deleted file mode 100644
index 7141235..0000000
--- a/modules/simpletest/tests/database_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Database Test"
-description = "Support module for Database layer tests."
-core = 7.x
-package = Testing
-version = VERSION
-hidden = TRUE
diff --git a/modules/simpletest/tests/database_test.module b/modules/simpletest/tests/database_test.module
deleted file mode 100644
index 6fac319..0000000
--- a/modules/simpletest/tests/database_test.module
+++ /dev/null
@@ -1,241 +0,0 @@
-<?php
-
-/**
- * Implements hook_query_alter().
- */
-function database_test_query_alter(QueryAlterableInterface $query) {
-
-  if ($query->hasTag('database_test_alter_add_range')) {
-    $query->range(0, 2);
-  }
-
-  if ($query->hasTag('database_test_alter_add_join')) {
-    $people_alias = $query->join('test', 'people', "test_task.pid = %alias.id");
-    $name_field = $query->addField($people_alias, 'name', 'name');
-    $query->condition($people_alias . '.id', 2);
-  }
-
-  if ($query->hasTag('database_test_alter_change_conditional')) {
-    $conditions =& $query->conditions();
-    $conditions[0]['value'] = 2;
-  }
-
-  if ($query->hasTag('database_test_alter_change_fields')) {
-    $fields =& $query->getFields();
-    unset($fields['age']);
-  }
-
-  if ($query->hasTag('database_test_alter_change_expressions')) {
-    $expressions =& $query->getExpressions();
-    $expressions['double_age']['expression'] = 'age*3';
-  }
-}
-
-
-/**
- * Implements hook_query_TAG_alter().
- *
- * Called by DatabaseTestCase::testAlterRemoveRange.
- */
-function database_test_query_database_test_alter_remove_range_alter(QueryAlterableInterface $query) {
-  $query->range();
-}
-
-/**
- * Implements hook_menu().
- */
-function database_test_menu() {
-  $items['database_test/db_query_temporary'] = array(
-    'access callback' => TRUE,
-    'page callback' => 'database_test_db_query_temporary',
-  );
-  $items['database_test/pager_query_even'] = array(
-    'access callback' => TRUE,
-    'page callback' => 'database_test_even_pager_query',
-  );
-  $items['database_test/pager_query_odd'] = array(
-    'access callback' => TRUE,
-    'page callback' => 'database_test_odd_pager_query',
-  );
-  $items['database_test/tablesort'] = array(
-    'access callback' => TRUE,
-    'page callback' => 'database_test_tablesort',
-  );
-  $items['database_test/tablesort_first'] = array(
-    'access callback' => TRUE,
-    'page callback' => 'database_test_tablesort_first',
-  );
-  $items['database_test/tablesort_default_sort'] = array(
-    'access callback' => TRUE,
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('database_test_theme_tablesort'),
-  );
-  return $items;
-}
-
-/**
- * Run a db_query_temporary and output the table name and its number of rows.
- *
- * We need to test that the table created is temporary, so we run it here, in a
- * separate menu callback request; After this request is done, the temporary
- * table should automatically dropped.
- */
-function database_test_db_query_temporary() {
-  $table_name = db_query_temporary('SELECT status FROM {system}', array());
-  drupal_json_output(array(
-    'table_name' => $table_name,
-    'row_count' => db_select($table_name)->countQuery()->execute()->fetchField(),
-  ));
-  exit;
-}
-
-/**
- * Run a pager query and return the results.
- *
- * This function does care about the page GET parameter, as set by the
- * simpletest HTTP call.
- */
-function database_test_even_pager_query($limit) {
-
-  $query = db_select('test', 't');
-  $query
-    ->fields('t', array('name'))
-    ->orderBy('age');
-
-  // This should result in 2 pages of results.
-  $query = $query->extend('PagerDefault')->limit($limit);
-
-  $names = $query->execute()->fetchCol();
-
-  drupal_json_output(array(
-    'names' => $names,
-  ));
-  exit;
-}
-
-/**
- * Run a pager query and return the results.
- *
- * This function does care about the page GET parameter, as set by the
- * simpletest HTTP call.
- */
-function database_test_odd_pager_query($limit) {
-
-  $query = db_select('test_task', 't');
-  $query
-    ->fields('t', array('task'))
-    ->orderBy('pid');
-
-  // This should result in 4 pages of results.
-  $query = $query->extend('PagerDefault')->limit($limit);
-
-  $names = $query->execute()->fetchCol();
-
-  drupal_json_output(array(
-    'names' => $names,
-  ));
-  exit;
-}
-
-/**
- * Run a tablesort query and return the results.
- *
- * This function does care about the page GET parameter, as set by the
- * simpletest HTTP call.
- */
-function database_test_tablesort() {
-  $header = array(
-    'tid' => array('data' => t('Task ID'), 'field' => 'tid', 'sort' => 'desc'),
-    'pid' => array('data' => t('Person ID'), 'field' => 'pid'),
-    'task' => array('data' => t('Task'), 'field' => 'task'),
-    'priority' => array('data' => t('Priority'), 'field' => 'priority', ),
-  );
-
-  $query = db_select('test_task', 't');
-  $query
-    ->fields('t', array('tid', 'pid', 'task', 'priority'));
-
-  $query = $query->extend('TableSort')->orderByHeader($header);
-
-  // We need all the results at once to check the sort.
-  $tasks = $query->execute()->fetchAll();
-
-  drupal_json_output(array(
-    'tasks' => $tasks,
-  ));
-  exit;
-}
-
-/**
- * Run a tablesort query with a second order_by after and return the results.
- *
- * This function does care about the page GET parameter, as set by the
- * simpletest HTTP call.
- */
-function database_test_tablesort_first() {
-  $header = array(
-    'tid' => array('data' => t('Task ID'), 'field' => 'tid', 'sort' => 'desc'),
-    'pid' => array('data' => t('Person ID'), 'field' => 'pid'),
-    'task' => array('data' => t('Task'), 'field' => 'task'),
-    'priority' => array('data' => t('Priority'), 'field' => 'priority', ),
-  );
-
-  $query = db_select('test_task', 't');
-  $query
-    ->fields('t', array('tid', 'pid', 'task', 'priority'));
-
-  $query = $query->extend('TableSort')->orderByHeader($header)->orderBy('priority');
-
-  // We need all the results at once to check the sort.
-  $tasks = $query->execute()->fetchAll();
-
-  drupal_json_output(array(
-    'tasks' => $tasks,
-  ));
-  exit;
-}
-
-/**
- * Output a form without setting a header sort.
- */
-function database_test_theme_tablesort($form, &$form_state) {
-  $header = array(
-    'username' => array('data' => t('Username'), 'field' => 'u.name'),
-    'status' => array('data' => t('Status'), 'field' => 'u.status'),
-  );
-
-  $query = db_select('users', 'u');
-  $query->condition('u.uid', 0, '<>');
-  user_build_filter_query($query);
-
-  $count_query = clone $query;
-  $count_query->addExpression('COUNT(u.uid)');
-
-  $query = $query->extend('PagerDefault')->extend('TableSort');
-  $query
-    ->fields('u', array('uid', 'name', 'status', 'created', 'access'))
-    ->limit(50)
-    ->orderByHeader($header)
-    ->setCountQuery($count_query);
-  $result = $query->execute();
-
-  $options = array();
-
-  $status = array(t('blocked'), t('active'));
-  $accounts = array();
-  foreach ($result as $account) {
-    $options[$account->uid] = array(
-      'username' => check_plain($account->name),
-      'status' =>  $status[$account->status],
-    );
-  }
-
-  $form['accounts'] = array(
-    '#type' => 'tableselect',
-    '#header' => $header,
-    '#options' => $options,
-    '#empty' => t('No people available.'),
-  );
-
-  return $form;
-}
diff --git a/modules/simpletest/tests/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.info b/modules/simpletest/tests/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.info
deleted file mode 100644
index 085c335..0000000
--- a/modules/simpletest/tests/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Drupal system listing compatible test"
-description = "Support module for testing the drupal_system_listing function."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.module b/modules/simpletest/tests/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.module
deleted file mode 100644
index b3d9bbc..0000000
--- a/modules/simpletest/tests/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.module
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/modules/simpletest/tests/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.info b/modules/simpletest/tests/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.info
deleted file mode 100644
index 8e5875e..0000000
--- a/modules/simpletest/tests/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Drupal system listing incompatible test"
-description = "Support module for testing the drupal_system_listing function."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.module b/modules/simpletest/tests/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.module
deleted file mode 100644
index b3d9bbc..0000000
--- a/modules/simpletest/tests/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.module
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/modules/simpletest/tests/entity_cache_test.info b/modules/simpletest/tests/entity_cache_test.info
deleted file mode 100644
index 405cefa..0000000
--- a/modules/simpletest/tests/entity_cache_test.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = "Entity cache test"
-description = "Support module for testing entity cache."
-package = Testing
-version = VERSION
-core = 7.x
-dependencies[] = entity_cache_test_dependency
-hidden = TRUE
diff --git a/modules/simpletest/tests/entity_cache_test.module b/modules/simpletest/tests/entity_cache_test.module
deleted file mode 100644
index 5ae9ecc..0000000
--- a/modules/simpletest/tests/entity_cache_test.module
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/**
- * @file
- * Helper module for entity cache tests.
- */
-
-/**
- * Implements hook_watchdog().
- *
- * This hook is called during module_enable() and since this hook
- * implementation is invoked, we have to expect that this module and dependent
- * modules have been properly installed already. So we expect to be able to
- * retrieve the entity information that has been registered by the required
- * dependency module.
- *
- * @see EnableDisableTestCase::testEntityCache()
- * @see entity_cache_test_dependency_entity_info()
- */
-function entity_cache_test_watchdog($log_entry) {
-  if ($log_entry['type'] == 'system' && $log_entry['message'] == '%module module installed.') {
-    $info = entity_get_info('entity_cache_test');
-    // Store the information in a system variable to analyze it later in the
-    // test case.
-    variable_set('entity_cache_test', $info);
-  }
-}
diff --git a/modules/simpletest/tests/entity_cache_test_dependency.info b/modules/simpletest/tests/entity_cache_test_dependency.info
deleted file mode 100644
index f0dc7b6..0000000
--- a/modules/simpletest/tests/entity_cache_test_dependency.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Entity cache test dependency"
-description = "Support dependency module for testing entity cache."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/entity_cache_test_dependency.module b/modules/simpletest/tests/entity_cache_test_dependency.module
deleted file mode 100644
index 2d4b3be..0000000
--- a/modules/simpletest/tests/entity_cache_test_dependency.module
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-/**
- * @file
- * Helper module for entity cache tests.
- */
-
-/**
- * Implements hook_entity_info().
- */
-function entity_cache_test_dependency_entity_info() {
-  return array(
-    'entity_cache_test' => array(
-      'label' => variable_get('entity_cache_test_label', 'Entity Cache Test'),
-    ),
-  );
-}
diff --git a/modules/simpletest/tests/entity_crud_hook_test.info b/modules/simpletest/tests/entity_crud_hook_test.info
deleted file mode 100644
index b37114d..0000000
--- a/modules/simpletest/tests/entity_crud_hook_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Entity CRUD Hooks Test"
-description = "Support module for CRUD hook tests."
-core = 7.x
-package = Testing
-version = VERSION
-hidden = TRUE
diff --git a/modules/simpletest/tests/entity_crud_hook_test.module b/modules/simpletest/tests/entity_crud_hook_test.module
deleted file mode 100644
index d25dff1..0000000
--- a/modules/simpletest/tests/entity_crud_hook_test.module
+++ /dev/null
@@ -1,251 +0,0 @@
-<?php
-
-/**
- * @file
- * Test module for the Entity CRUD API.
- */
-
-/**
- * Implements hook_entity_presave().
- */
-function entity_crud_hook_test_entity_presave($entity, $type) {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called for type ' . $type);
-}
-
-/**
- * Implements hook_comment_presave().
- */
-function entity_crud_hook_test_comment_presave() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_file_presave().
- */
-function entity_crud_hook_test_file_presave() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_node_presave().
- */
-function entity_crud_hook_test_node_presave() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_taxonomy_term_presave().
- */
-function entity_crud_hook_test_taxonomy_term_presave() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_taxonomy_vocabulary_presave().
- */
-function entity_crud_hook_test_taxonomy_vocabulary_presave() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_user_presave().
- */
-function entity_crud_hook_test_user_presave() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_entity_insert().
- */
-function entity_crud_hook_test_entity_insert($entity, $type) {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called for type ' . $type);
-}
-
-/**
- * Implements hook_comment_insert().
- */
-function entity_crud_hook_test_comment_insert() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_file_insert().
- */
-function entity_crud_hook_test_file_insert() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_node_insert().
- */
-function entity_crud_hook_test_node_insert() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_taxonomy_term_insert().
- */
-function entity_crud_hook_test_taxonomy_term_insert() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_taxonomy_vocabulary_insert().
- */
-function entity_crud_hook_test_taxonomy_vocabulary_insert() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_user_insert().
- */
-function entity_crud_hook_test_user_insert() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_entity_load().
- */
-function entity_crud_hook_test_entity_load(array $entities, $type) {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called for type ' . $type);
-}
-
-/**
- * Implements hook_comment_load().
- */
-function entity_crud_hook_test_comment_load() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_file_load().
- */
-function entity_crud_hook_test_file_load() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_node_load().
- */
-function entity_crud_hook_test_node_load() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_taxonomy_term_load().
- */
-function entity_crud_hook_test_taxonomy_term_load() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_taxonomy_vocabulary_load().
- */
-function entity_crud_hook_test_taxonomy_vocabulary_load() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_user_load().
- */
-function entity_crud_hook_test_user_load() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_entity_update().
- */
-function entity_crud_hook_test_entity_update($entity, $type) {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called for type ' . $type);
-}
-
-/**
- * Implements hook_comment_update().
- */
-function entity_crud_hook_test_comment_update() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_file_update().
- */
-function entity_crud_hook_test_file_update() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_node_update().
- */
-function entity_crud_hook_test_node_update() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_taxonomy_term_update().
- */
-function entity_crud_hook_test_taxonomy_term_update() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_taxonomy_vocabulary_update().
- */
-function entity_crud_hook_test_taxonomy_vocabulary_update() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_user_update().
- */
-function entity_crud_hook_test_user_update() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_entity_delete().
- */
-function entity_crud_hook_test_entity_delete($entity, $type) {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called for type ' . $type);
-}
-
-/**
- * Implements hook_comment_delete().
- */
-function entity_crud_hook_test_comment_delete() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_file_delete().
- */
-function entity_crud_hook_test_file_delete() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_node_delete().
- */
-function entity_crud_hook_test_node_delete() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_taxonomy_term_delete().
- */
-function entity_crud_hook_test_taxonomy_term_delete() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_taxonomy_vocabulary_delete().
- */
-function entity_crud_hook_test_taxonomy_vocabulary_delete() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_user_delete().
- */
-function entity_crud_hook_test_user_delete() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
diff --git a/modules/simpletest/tests/entity_crud_hook_test.test b/modules/simpletest/tests/entity_crud_hook_test.test
deleted file mode 100644
index 178e34d..0000000
--- a/modules/simpletest/tests/entity_crud_hook_test.test
+++ /dev/null
@@ -1,338 +0,0 @@
-<?php
-
-/**
- * @file
- * CRUD hook tests for the Entity CRUD API.
- */
-
-/**
- * Tests invocation of hooks when performing an action.
- *
- * Tested hooks are:
- * - hook_entity_insert()
- * - hook_entity_load()
- * - hook_entity_update()
- * - hook_entity_delete()
- * As well as all type-specific hooks, like hook_node_insert(),
- * hook_comment_update(), etc.
- */
-class EntityCrudHookTestCase extends DrupalWebTestCase {
-
-  protected $ids = array();
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Entity CRUD hooks',
-      'description' => 'Tests the invocation of hooks when inserting, loading, updating or deleting an entity.',
-      'group' => 'Entity API',
-    );
-  }
-
-  public function setUp() {
-    parent::setUp('entity_crud_hook_test', 'taxonomy', 'comment');
-  }
-
-  /**
-   * Pass if the message $text was set by one of the CRUD hooks in
-   * entity_crud_hook_test.module, i.e., if the $text is an element of
-   * $_SESSION['entity_crud_hook_test'].
-   *
-   * @param $text
-   *   Plain text to look for.
-   * @param $message
-   *   Message to display.
-   * @param $group
-   *   The group this message belongs to, defaults to 'Other'.
-   * @return
-   *   TRUE on pass, FALSE on fail.
-   */
-  protected function assertHookMessage($text, $message = NULL, $group = 'Other') {
-    if (!isset($message)) {
-      $message = $text;
-    }
-    return $this->assertTrue(array_search($text, $_SESSION['entity_crud_hook_test']) !== FALSE, $message, $group);
-  }
-
-  /**
-   * Tests hook invocations for CRUD operations on comments.
-   */
-  public function testCommentHooks() {
-    $node = (object) array(
-      'uid' => 1,
-      'type' => 'article',
-      'title' => 'Test node',
-      'status' => 1,
-      'comment' => 2,
-      'promote' => 0,
-      'sticky' => 0,
-      'language' => LANGUAGE_NONE,
-      'created' => REQUEST_TIME,
-      'changed' => REQUEST_TIME,
-    );
-    node_save($node);
-    $nid = $node->nid;
-
-    $comment = (object) array(
-      'cid' => NULL,
-      'pid' => 0,
-      'nid' => $nid,
-      'uid' => 1,
-      'subject' => 'Test comment',
-      'created' => REQUEST_TIME,
-      'changed' => REQUEST_TIME,
-      'status' => 1,
-      'language' => LANGUAGE_NONE,
-    );
-    $_SESSION['entity_crud_hook_test'] = array();
-    comment_save($comment);
-
-    $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type comment');
-    $this->assertHookMessage('entity_crud_hook_test_comment_presave called');
-    $this->assertHookMessage('entity_crud_hook_test_entity_insert called for type comment');
-    $this->assertHookMessage('entity_crud_hook_test_comment_insert called');
-
-    $_SESSION['entity_crud_hook_test'] = array();
-    $comment = comment_load($comment->cid);
-
-    $this->assertHookMessage('entity_crud_hook_test_entity_load called for type comment');
-    $this->assertHookMessage('entity_crud_hook_test_comment_load called');
-
-    $_SESSION['entity_crud_hook_test'] = array();
-    $comment->subject = 'New subject';
-    comment_save($comment);
-
-    $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type comment');
-    $this->assertHookMessage('entity_crud_hook_test_comment_presave called');
-    $this->assertHookMessage('entity_crud_hook_test_entity_update called for type comment');
-    $this->assertHookMessage('entity_crud_hook_test_comment_update called');
-
-    $_SESSION['entity_crud_hook_test'] = array();
-    comment_delete($comment->cid);
-
-    $this->assertHookMessage('entity_crud_hook_test_entity_delete called for type comment');
-    $this->assertHookMessage('entity_crud_hook_test_comment_delete called');
-  }
-
-  /**
-   * Tests hook invocations for CRUD operations on files.
-   */
-  public function testFileHooks() {
-    $url = 'public://entity_crud_hook_test.file';
-    file_put_contents($url, 'Test test test');
-    $file = (object) array(
-      'fid' => NULL,
-      'uid' => 1,
-      'filename' => 'entity_crud_hook_test.file',
-      'uri' => $url,
-      'filemime' => 'text/plain',
-      'filesize' => filesize($url),
-      'status' => 1,
-      'timestamp' => REQUEST_TIME,
-    );
-    $_SESSION['entity_crud_hook_test'] = array();
-    file_save($file);
-
-    $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type file');
-    $this->assertHookMessage('entity_crud_hook_test_file_presave called');
-    $this->assertHookMessage('entity_crud_hook_test_entity_insert called for type file');
-    $this->assertHookMessage('entity_crud_hook_test_file_insert called');
-
-    $_SESSION['entity_crud_hook_test'] = array();
-    $file = file_load($file->fid);
-
-    $this->assertHookMessage('entity_crud_hook_test_entity_load called for type file');
-    $this->assertHookMessage('entity_crud_hook_test_file_load called');
-
-    $_SESSION['entity_crud_hook_test'] = array();
-    $file->filename = 'new.entity_crud_hook_test.file';
-    file_save($file);
-
-    $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type file');
-    $this->assertHookMessage('entity_crud_hook_test_file_presave called');
-    $this->assertHookMessage('entity_crud_hook_test_entity_update called for type file');
-    $this->assertHookMessage('entity_crud_hook_test_file_update called');
-
-    $_SESSION['entity_crud_hook_test'] = array();
-    file_delete($file);
-
-    $this->assertHookMessage('entity_crud_hook_test_entity_delete called for type file');
-    $this->assertHookMessage('entity_crud_hook_test_file_delete called');
-  }
-
-  /**
-   * Tests hook invocations for CRUD operations on nodes.
-   */
-  public function testNodeHooks() {
-    $node = (object) array(
-      'uid' => 1,
-      'type' => 'article',
-      'title' => 'Test node',
-      'status' => 1,
-      'comment' => 2,
-      'promote' => 0,
-      'sticky' => 0,
-      'language' => LANGUAGE_NONE,
-      'created' => REQUEST_TIME,
-      'changed' => REQUEST_TIME,
-    );
-    $_SESSION['entity_crud_hook_test'] = array();
-    node_save($node);
-
-    $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type node');
-    $this->assertHookMessage('entity_crud_hook_test_node_presave called');
-    $this->assertHookMessage('entity_crud_hook_test_entity_insert called for type node');
-    $this->assertHookMessage('entity_crud_hook_test_node_insert called');
-
-    $_SESSION['entity_crud_hook_test'] = array();
-    $node = node_load($node->nid);
-
-    $this->assertHookMessage('entity_crud_hook_test_entity_load called for type node');
-    $this->assertHookMessage('entity_crud_hook_test_node_load called');
-
-    $_SESSION['entity_crud_hook_test'] = array();
-    $node->title = 'New title';
-    node_save($node);
-
-    $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type node');
-    $this->assertHookMessage('entity_crud_hook_test_node_presave called');
-    $this->assertHookMessage('entity_crud_hook_test_entity_update called for type node');
-    $this->assertHookMessage('entity_crud_hook_test_node_update called');
-
-    $_SESSION['entity_crud_hook_test'] = array();
-    node_delete($node->nid);
-
-    $this->assertHookMessage('entity_crud_hook_test_entity_delete called for type node');
-    $this->assertHookMessage('entity_crud_hook_test_node_delete called');
-  }
-
-  /**
-   * Tests hook invocations for CRUD operations on taxonomy terms.
-   */
-  public function testTaxonomyTermHooks() {
-    $vocabulary = (object) array(
-      'name' => 'Test vocabulary',
-      'machine_name' => 'test',
-      'description' => NULL,
-      'module' => 'entity_crud_hook_test',
-    );
-    taxonomy_vocabulary_save($vocabulary);
-
-    $term = (object) array(
-      'vid' => $vocabulary->vid,
-      'name' => 'Test term',
-      'description' => NULL,
-      'format' => 1,
-    );
-    $_SESSION['entity_crud_hook_test'] = array();
-    taxonomy_term_save($term);
-
-    $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type taxonomy_term');
-    $this->assertHookMessage('entity_crud_hook_test_taxonomy_term_presave called');
-    $this->assertHookMessage('entity_crud_hook_test_entity_insert called for type taxonomy_term');
-    $this->assertHookMessage('entity_crud_hook_test_taxonomy_term_insert called');
-
-    $_SESSION['entity_crud_hook_test'] = array();
-    $term = taxonomy_term_load($term->tid);
-
-    $this->assertHookMessage('entity_crud_hook_test_entity_load called for type taxonomy_term');
-    $this->assertHookMessage('entity_crud_hook_test_taxonomy_term_load called');
-
-    $_SESSION['entity_crud_hook_test'] = array();
-    $term->name = 'New name';
-    taxonomy_term_save($term);
-
-    $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type taxonomy_term');
-    $this->assertHookMessage('entity_crud_hook_test_taxonomy_term_presave called');
-    $this->assertHookMessage('entity_crud_hook_test_entity_update called for type taxonomy_term');
-    $this->assertHookMessage('entity_crud_hook_test_taxonomy_term_update called');
-
-    $_SESSION['entity_crud_hook_test'] = array();
-    taxonomy_term_delete($term->tid);
-
-    $this->assertHookMessage('entity_crud_hook_test_entity_delete called for type taxonomy_term');
-    $this->assertHookMessage('entity_crud_hook_test_taxonomy_term_delete called');
-  }
-
-  /**
-   * Tests hook invocations for CRUD operations on taxonomy vocabularies.
-   */
-  public function testTaxonomyVocabularyHooks() {
-    $vocabulary = (object) array(
-      'name' => 'Test vocabulary',
-      'machine_name' => 'test',
-      'description' => NULL,
-      'module' => 'entity_crud_hook_test',
-    );
-    $_SESSION['entity_crud_hook_test'] = array();
-    taxonomy_vocabulary_save($vocabulary);
-
-    $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type taxonomy_vocabulary');
-    $this->assertHookMessage('entity_crud_hook_test_taxonomy_vocabulary_presave called');
-    $this->assertHookMessage('entity_crud_hook_test_entity_insert called for type taxonomy_vocabulary');
-    $this->assertHookMessage('entity_crud_hook_test_taxonomy_vocabulary_insert called');
-
-    $_SESSION['entity_crud_hook_test'] = array();
-    $vocabulary = taxonomy_vocabulary_load($vocabulary->vid);
-
-    $this->assertHookMessage('entity_crud_hook_test_entity_load called for type taxonomy_vocabulary');
-    $this->assertHookMessage('entity_crud_hook_test_taxonomy_vocabulary_load called');
-
-    $_SESSION['entity_crud_hook_test'] = array();
-    $vocabulary->name = 'New name';
-    taxonomy_vocabulary_save($vocabulary);
-
-    $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type taxonomy_vocabulary');
-    $this->assertHookMessage('entity_crud_hook_test_taxonomy_vocabulary_presave called');
-    $this->assertHookMessage('entity_crud_hook_test_entity_update called for type taxonomy_vocabulary');
-    $this->assertHookMessage('entity_crud_hook_test_taxonomy_vocabulary_update called');
-
-    $_SESSION['entity_crud_hook_test'] = array();
-    taxonomy_vocabulary_delete($vocabulary->vid);
-
-    $this->assertHookMessage('entity_crud_hook_test_entity_delete called for type taxonomy_vocabulary');
-    $this->assertHookMessage('entity_crud_hook_test_taxonomy_vocabulary_delete called');
-  }
-
-  /**
-   * Tests hook invocations for CRUD operations on users.
-   */
-  public function testUserHooks() {
-    $edit = array(
-      'name' => 'Test user',
-      'mail' => 'test@example.com',
-      'created' => REQUEST_TIME,
-      'status' => 1,
-      'language' => 'en',
-    );
-    $account = (object) $edit;
-    $_SESSION['entity_crud_hook_test'] = array();
-    $account = user_save($account, $edit);
-
-    $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type user');
-    $this->assertHookMessage('entity_crud_hook_test_user_presave called');
-    $this->assertHookMessage('entity_crud_hook_test_entity_insert called for type user');
-    $this->assertHookMessage('entity_crud_hook_test_user_insert called');
-
-    $_SESSION['entity_crud_hook_test'] = array();
-    $account = user_load($account->uid);
-
-    $this->assertHookMessage('entity_crud_hook_test_entity_load called for type user');
-    $this->assertHookMessage('entity_crud_hook_test_user_load called');
-
-    $_SESSION['entity_crud_hook_test'] = array();
-    $edit['name'] = 'New name';
-    $account = user_save($account, $edit);
-
-    $this->assertHookMessage('entity_crud_hook_test_entity_presave called for type user');
-    $this->assertHookMessage('entity_crud_hook_test_user_presave called');
-    $this->assertHookMessage('entity_crud_hook_test_entity_update called for type user');
-    $this->assertHookMessage('entity_crud_hook_test_user_update called');
-
-    $_SESSION['entity_crud_hook_test'] = array();
-    user_delete($account->uid);
-
-    $this->assertHookMessage('entity_crud_hook_test_entity_delete called for type user');
-    $this->assertHookMessage('entity_crud_hook_test_user_delete called');
-  }
-
-}
diff --git a/modules/simpletest/tests/entity_query.test b/modules/simpletest/tests/entity_query.test
deleted file mode 100644
index 9a6cb69..0000000
--- a/modules/simpletest/tests/entity_query.test
+++ /dev/null
@@ -1,1681 +0,0 @@
-<?php
-
-
-/**
- * @file
- * Unit test file for the entity API.
- */
-
-/**
- * Tests EntityFieldQuery.
- */
-class EntityFieldQueryTestCase extends DrupalWebTestCase {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Entity query',
-      'description' => 'Test the EntityFieldQuery class.',
-      'group' => 'Entity API',
-    );
-  }
-
-  function setUp() {
-    parent::setUp(array('node', 'field_test', 'entity_query_access_test', 'node_access_test'));
-
-    field_test_create_bundle('bundle1');
-    field_test_create_bundle('bundle2');
-    field_test_create_bundle('test_bundle');
-    field_test_create_bundle('test_entity_bundle');
-
-    $instances = array();
-    $this->fields = array();
-    $this->field_names[0] = $field_name = drupal_strtolower($this->randomName() . '_field_name');
-    $field = array('field_name' => $field_name, 'type' => 'test_field', 'cardinality' => 4);
-    $field = field_create_field($field);
-    $this->fields[0] = $field;
-    $instance = array(
-      'field_name' => $field_name,
-      'entity_type' => '',
-      'bundle' => '',
-      'label' => $this->randomName() . '_label',
-      'description' => $this->randomName() . '_description',
-      'weight' => mt_rand(0, 127),
-      'settings' => array(
-        'test_instance_setting' => $this->randomName(),
-      ),
-      'widget' => array(
-        'type' => 'test_field_widget',
-        'label' => 'Test Field',
-        'settings' => array(
-          'test_widget_setting' => $this->randomName(),
-        )
-      )
-    );
-
-    $instances[0] = $instance;
-
-    // Add an instance to that bundle.
-    $instances[0]['bundle'] = 'bundle1';
-    $instances[0]['entity_type'] = 'test_entity_bundle_key';
-    field_create_instance($instances[0]);
-    $instances[0]['bundle'] = 'bundle2';
-    field_create_instance($instances[0]);
-    $instances[0]['bundle'] = $instances[0]['entity_type'] = 'test_entity_bundle';
-    field_create_instance($instances[0]);
-
-    $this->field_names[1] = $field_name = drupal_strtolower($this->randomName() . '_field_name');
-    $field = array('field_name' => $field_name, 'type' => 'shape', 'cardinality' => 4);
-    $field = field_create_field($field);
-    $this->fields[1] = $field;
-    $instance = array(
-      'field_name' => $field_name,
-      'entity_type' => '',
-      'bundle' => '',
-      'label' => $this->randomName() . '_label',
-      'description' => $this->randomName() . '_description',
-      'weight' => mt_rand(0, 127),
-      'settings' => array(
-        'test_instance_setting' => $this->randomName(),
-      ),
-      'widget' => array(
-        'type' => 'test_field_widget',
-        'label' => 'Test Field',
-        'settings' => array(
-          'test_widget_setting' => $this->randomName(),
-        )
-      )
-    );
-
-    $instances[1] = $instance;
-
-    // Add a field instance to the bundles.
-    $instances[1]['bundle'] = 'bundle1';
-    $instances[1]['entity_type'] = 'test_entity_bundle_key';
-    field_create_instance($instances[1]);
-    $instances[1]['bundle'] = $instances[1]['entity_type'] = 'test_entity_bundle';
-    field_create_instance($instances[1]);
-
-    $this->instances = $instances;
-    // Write entity base table if there is one.
-    $entities = array();
-
-    // Create entities which have a 'bundle key' defined.
-    for ($i = 1; $i < 7; $i++) {
-      $entity = new stdClass();
-      $entity->ftid = $i;
-      $entity->fttype = ($i < 5) ? 'bundle1' : 'bundle2';
-
-      $entity->{$this->field_names[0]}[LANGUAGE_NONE][0]['value'] = $i;
-      drupal_write_record('test_entity_bundle_key', $entity);
-      field_attach_insert('test_entity_bundle_key', $entity);
-    }
-
-    $entity = new stdClass();
-    $entity->ftid = 5;
-    $entity->fttype = 'test_entity_bundle';
-    $entity->{$this->field_names[1]}[LANGUAGE_NONE][0]['shape'] = 'square';
-    $entity->{$this->field_names[1]}[LANGUAGE_NONE][0]['color'] = 'red';
-    $entity->{$this->field_names[1]}[LANGUAGE_NONE][1]['shape'] = 'circle';
-    $entity->{$this->field_names[1]}[LANGUAGE_NONE][1]['color'] = 'blue';
-    drupal_write_record('test_entity_bundle', $entity);
-    field_attach_insert('test_entity_bundle', $entity);
-
-    $instances[2] = $instance;
-    $instances[2]['bundle'] = 'test_bundle';
-    $instances[2]['field_name'] = $this->field_names[0];
-    $instances[2]['entity_type'] = 'test_entity';
-    field_create_instance($instances[2]);
-
-    // Create entities with support for revisions.
-    for ($i = 1; $i < 5; $i++) {
-      $entity = new stdClass();
-      $entity->ftid = $i;
-      $entity->ftvid = $i;
-      $entity->fttype = 'test_bundle';
-      $entity->{$this->field_names[0]}[LANGUAGE_NONE][0]['value'] = $i;
-
-      drupal_write_record('test_entity', $entity);
-      field_attach_insert('test_entity', $entity);
-      drupal_write_record('test_entity_revision', $entity);
-    }
-
-    // Add two revisions to an entity.
-    for ($i = 100; $i < 102; $i++) {
-      $entity = new stdClass();
-      $entity->ftid = 4;
-      $entity->ftvid = $i;
-      $entity->fttype = 'test_bundle';
-      $entity->{$this->field_names[0]}[LANGUAGE_NONE][0]['value'] = $i;
-
-      drupal_write_record('test_entity', $entity, 'ftid');
-      drupal_write_record('test_entity_revision', $entity);
-
-      db_update('test_entity')
-       ->fields(array('ftvid' => $entity->ftvid))
-       ->condition('ftid', $entity->ftid)
-       ->execute();
-
-      field_attach_update('test_entity', $entity);
-    }
-  }
-
-  /**
-   * Tests EntityFieldQuery.
-   */
-  function testEntityFieldQuery() {
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle')
-      ->entityCondition('entity_id', '5');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle', 5),
-    ), 'Test query on an entity type with a generated bundle.');
-
-    // Test entity_type condition.
-    $query = new EntityFieldQuery();
-    $query->entityCondition('entity_type', 'test_entity_bundle_key');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-    ), 'Test entity entity_type condition.');
-
-    // Test entity_id condition.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->entityCondition('entity_id', '3');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 3),
-    ), 'Test entity entity_id condition.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyCondition('ftid', '3');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 3),
-    ), 'Test entity entity_id condition and entity_id property condition.');
-
-    // Test bundle condition.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->entityCondition('bundle', 'bundle1');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-    ), 'Test entity bundle condition: bundle1.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->entityCondition('bundle', 'bundle2');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-    ), 'Test entity bundle condition: bundle2.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyCondition('fttype', 'bundle2');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-    ), 'Test entity bundle condition and bundle property condition.');
-
-    // Test revision_id condition.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity')
-      ->entityCondition('revision_id', '3');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity', 3),
-    ), 'Test entity revision_id condition.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity')
-      ->propertyCondition('ftvid', '3');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity', 3),
-    ), 'Test entity revision_id condition and revision_id property condition.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity')
-      ->fieldCondition($this->fields[0], 'value', 100, '>=')
-      ->age(FIELD_LOAD_REVISION);
-    $this->assertEntityFieldQuery($query, array(
-        array('test_entity', 100),
-        array('test_entity', 101),
-    ), 'Test revision age.');
-
-    // Test that fields attached to the non-revision supporting entity
-    // 'test_entity_bundle_key' are reachable in FIELD_LOAD_REVISION.
-    $query = new EntityFieldQuery();
-    $query
-      ->fieldCondition($this->fields[0], 'value', 100, '<')
-      ->age(FIELD_LOAD_REVISION);
-    $this->assertEntityFieldQuery($query, array(
-        array('test_entity_bundle_key', 1),
-        array('test_entity_bundle_key', 2),
-        array('test_entity_bundle_key', 3),
-        array('test_entity_bundle_key', 4),
-        array('test_entity_bundle_key', 5),
-        array('test_entity_bundle_key', 6),
-        array('test_entity', 1),
-        array('test_entity', 2),
-        array('test_entity', 3),
-        array('test_entity', 4),
-    ), 'Test that fields are reachable from FIELD_LOAD_REVISION even for non-revision entities.');
-
-    // Test entity sort by entity_id.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->entityOrderBy('entity_id', 'ASC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-    ), 'Test sort entity entity_id in ascending order.', TRUE);
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->entityOrderBy('entity_id', 'DESC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 6),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 1),
-    ), 'Test sort entity entity_id in descending order.', TRUE);
-
-    // Test entity sort by entity_id, with a field condition.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->fieldCondition($this->fields[0], 'value', 0, '>')
-      ->entityOrderBy('entity_id', 'ASC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-    ), 'Test sort entity entity_id in ascending order, with a field condition.', TRUE);
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->fieldCondition($this->fields[0], 'value', 0, '>')
-      ->propertyOrderBy('ftid', 'DESC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 6),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 1),
-    ), 'Test sort entity entity_id property in descending order, with a field condition.', TRUE);
-
-    // Test property sort by entity id.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyOrderBy('ftid', 'ASC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-    ), 'Test sort entity entity_id property in ascending order.', TRUE);
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyOrderBy('ftid', 'DESC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 6),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 1),
-    ), 'Test sort entity entity_id property in descending order.', TRUE);
-
-    // Test property sort by entity id, with a field condition.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->fieldCondition($this->fields[0], 'value', 0, '>')
-      ->propertyOrderBy('ftid', 'ASC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-    ), 'Test sort entity entity_id property in ascending order, with a field condition.', TRUE);
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->fieldCondition($this->fields[0], 'value', 0, '>')
-      ->propertyOrderBy('ftid', 'DESC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 6),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 1),
-    ), 'Test sort entity entity_id property in descending order, with a field condition.', TRUE);
-
-    // Test entity sort by bundle.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->entityOrderBy('bundle', 'ASC')
-      ->propertyOrderBy('ftid', 'DESC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 6),
-      array('test_entity_bundle_key', 5),
-    ), 'Test sort entity bundle in ascending order, property in descending order.', TRUE);
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->entityOrderBy('bundle', 'DESC')
-      ->propertyOrderBy('ftid', 'ASC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-    ), 'Test sort entity bundle in descending order, property in ascending order.', TRUE);
-
-    // Test entity sort by bundle, with a field condition.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->fieldCondition($this->fields[0], 'value', 0, '>')
-      ->entityOrderBy('bundle', 'ASC')
-      ->propertyOrderBy('ftid', 'DESC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 6),
-      array('test_entity_bundle_key', 5),
-    ), 'Test sort entity bundle in ascending order, property in descending order, with a field condition.', TRUE);
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->fieldCondition($this->fields[0], 'value', 0, '>')
-      ->entityOrderBy('bundle', 'DESC')
-      ->propertyOrderBy('ftid', 'ASC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-    ), 'Test sort entity bundle in descending order, property in ascending order, with a field condition.', TRUE);
-
-    // Test entity sort by bundle, field.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->entityOrderBy('bundle', 'ASC')
-      ->fieldOrderBy($this->fields[0], 'value', 'DESC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 6),
-      array('test_entity_bundle_key', 5),
-    ), 'Test sort entity bundle in ascending order, field in descending order.', TRUE);
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->entityOrderBy('bundle', 'DESC')
-      ->fieldOrderBy($this->fields[0], 'value', 'ASC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-    ), 'Test sort entity bundle in descending order, field in ascending order.', TRUE);
-
-    // Test entity sort by revision_id.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity')
-      ->entityOrderBy('revision_id', 'ASC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity', 1),
-      array('test_entity', 2),
-      array('test_entity', 3),
-      array('test_entity', 4),
-    ), 'Test sort entity revision_id in ascending order.', TRUE);
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity')
-      ->entityOrderBy('revision_id', 'DESC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity', 4),
-      array('test_entity', 3),
-      array('test_entity', 2),
-      array('test_entity', 1),
-    ), 'Test sort entity revision_id in descending order.', TRUE);
-
-    // Test entity sort by revision_id, with a field condition.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity')
-      ->fieldCondition($this->fields[0], 'value', 0, '>')
-      ->entityOrderBy('revision_id', 'ASC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity', 1),
-      array('test_entity', 2),
-      array('test_entity', 3),
-      array('test_entity', 4),
-    ), 'Test sort entity revision_id in ascending order, with a field condition.', TRUE);
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity')
-      ->fieldCondition($this->fields[0], 'value', 0, '>')
-      ->entityOrderBy('revision_id', 'DESC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity', 4),
-      array('test_entity', 3),
-      array('test_entity', 2),
-      array('test_entity', 1),
-    ), 'Test sort entity revision_id in descending order, with a field condition.', TRUE);
-
-    // Test property sort by revision_id.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity')
-      ->propertyOrderBy('ftvid', 'ASC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity', 1),
-      array('test_entity', 2),
-      array('test_entity', 3),
-      array('test_entity', 4),
-    ), 'Test sort entity revision_id property in ascending order.', TRUE);
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity')
-      ->propertyOrderBy('ftvid', 'DESC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity', 4),
-      array('test_entity', 3),
-      array('test_entity', 2),
-      array('test_entity', 1),
-    ), 'Test sort entity revision_id property in descending order.', TRUE);
-
-    // Test property sort by revision_id, with a field condition.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity')
-      ->fieldCondition($this->fields[0], 'value', 0, '>')
-      ->propertyOrderBy('ftvid', 'ASC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity', 1),
-      array('test_entity', 2),
-      array('test_entity', 3),
-      array('test_entity', 4),
-    ), 'Test sort entity revision_id property in ascending order, with a field condition.', TRUE);
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity')
-      ->fieldCondition($this->fields[0], 'value', 0, '>')
-      ->propertyOrderBy('ftvid', 'DESC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity', 4),
-      array('test_entity', 3),
-      array('test_entity', 2),
-      array('test_entity', 1),
-    ), 'Test sort entity revision_id property in descending order, with a field condition.', TRUE);
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->fieldOrderBy($this->fields[0], 'value', 'ASC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-    ), 'Test sort field in ascending order without field condition.', TRUE);
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->fieldOrderBy($this->fields[0], 'value', 'DESC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 6),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 1),
-    ), 'Test sort field in descending order without field condition.', TRUE);
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->fieldCondition($this->fields[0], 'value', 0, '>')
-      ->fieldOrderBy($this->fields[0], 'value', 'ASC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-    ), 'Test sort field in ascending order.', TRUE);
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->fieldCondition($this->fields[0], 'value', 0, '>')
-      ->fieldOrderBy($this->fields[0], 'value', 'DESC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 6),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 1),
-    ), 'Test sort field in descending order.', TRUE);
-
-    // Test "in" operation with entity entity_type condition and entity_id
-    // property condition.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyCondition('ftid', array(1, 3, 4), 'IN');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-    ), 'Test "in" operation with entity entity_type condition and entity_id property condition.');
-
-    // Test "in" operation with entity entity_type condition and entity_id
-    // property condition. Sort in descending order by entity_id.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyCondition('ftid', array(1, 3, 4), 'IN')
-      ->propertyOrderBy('ftid', 'DESC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 1),
-    ), 'Test "in" operation with entity entity_type condition and entity_id property condition. Sort entity_id in descending order.', TRUE);
-
-    // Test query count
-    $query = new EntityFieldQuery();
-    $query_count = $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->count()
-      ->execute();
-    $this->assertEqual($query_count, 6, 'Test query count on entity condition.');
-
-    $query = new EntityFieldQuery();
-    $query_count = $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyCondition('ftid', '1')
-      ->count()
-      ->execute();
-    $this->assertEqual($query_count, 1, 'Test query count on entity and property condition.');
-
-    $query = new EntityFieldQuery();
-    $query_count = $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyCondition('ftid', '4', '>')
-      ->count()
-      ->execute();
-    $this->assertEqual($query_count, 2, 'Test query count on entity and property condition with operator.');
-
-    $query = new EntityFieldQuery();
-    $query_count = $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->fieldCondition($this->fields[0], 'value', 3, '=')
-      ->count()
-      ->execute();
-    $this->assertEqual($query_count, 1, 'Test query count on field condition.');
-
-    // First, test without options.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyCondition('fttype', 'und', 'CONTAINS');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-    ), 'Test the "contains" operation on a property.');
-
-    $query = new EntityFieldQuery();
-    $query->fieldCondition($this->fields[1], 'shape', 'uar', 'CONTAINS');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle', 5),
-    ), 'Test the "contains" operation on a field.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyCondition('ftid', 1, '=');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-    ), 'Test the "equal to" operation on a property.');
-
-    $query = new EntityFieldQuery();
-    $query->fieldCondition($this->fields[0], 'value', 3, '=');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 3),
-      array('test_entity', 3),
-    ), 'Test the "equal to" operation on a field.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyCondition('ftid', 3, '<>');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-    ), 'Test the "not equal to" operation on a property.');
-
-    $query = new EntityFieldQuery();
-    $query->fieldCondition($this->fields[0], 'value', 3, '<>');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-      array('test_entity', 1),
-      array('test_entity', 2),
-      array('test_entity', 4),
-    ), 'Test the "not equal to" operation on a field.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyCondition('ftid', 3, '!=');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-    ), 'Test the "not equal to" operation on a property.');
-
-    $query = new EntityFieldQuery();
-    $query->fieldCondition($this->fields[0], 'value', 3, '!=');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-      array('test_entity', 1),
-      array('test_entity', 2),
-      array('test_entity', 4),
-    ), 'Test the "not equal to" operation on a field.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyCondition('ftid', 2, '<');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-    ), 'Test the "less than" operation on a property.');
-
-    $query = new EntityFieldQuery();
-    $query->fieldCondition($this->fields[0], 'value', 2, '<');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity', 1),
-    ), 'Test the "less than" operation on a field.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyCondition('ftid', 2, '<=');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-    ), 'Test the "less than or equal to" operation on a property.');
-
-    $query = new EntityFieldQuery();
-    $query->fieldCondition($this->fields[0], 'value', 2, '<=');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity', 1),
-      array('test_entity', 2),
-    ), 'Test the "less than or equal to" operation on a field.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyCondition('ftid', 4, '>');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-    ), 'Test the "greater than" operation on a property.');
-
-    $query = new EntityFieldQuery();
-    $query->fieldCondition($this->fields[0], 'value', 2, '>');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-      array('test_entity', 3),
-      array('test_entity', 4),
-    ), 'Test the "greater than" operation on a field.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyCondition('ftid', 4, '>=');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-    ), 'Test the "greater than or equal to" operation on a property.');
-
-    $query = new EntityFieldQuery();
-    $query->fieldCondition($this->fields[0], 'value', 3, '>=');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-      array('test_entity', 3),
-      array('test_entity', 4),
-    ), 'Test the "greater than or equal to" operation on a field.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyCondition('ftid', array(3, 4), 'NOT IN');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-    ), 'Test the "not in" operation on a property.');
-
-    $query = new EntityFieldQuery();
-    $query->fieldCondition($this->fields[0], 'value', array(3, 4, 100, 101), 'NOT IN');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-      array('test_entity', 1),
-      array('test_entity', 2),
-    ), 'Test the "not in" operation on a field.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyCondition('ftid', array(3, 4), 'IN');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-    ), 'Test the "in" operation on a property.');
-
-    $query = new EntityFieldQuery();
-    $query->fieldCondition($this->fields[0], 'value', array(2, 3), 'IN');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-      array('test_entity', 2),
-      array('test_entity', 3),
-    ), 'Test the "in" operation on a field.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyCondition('ftid', array(1, 3), 'BETWEEN');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-    ), 'Test the "between" operation on a property.');
-
-    $query = new EntityFieldQuery();
-    $query->fieldCondition($this->fields[0], 'value', array(1, 3), 'BETWEEN');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-      array('test_entity', 1),
-      array('test_entity', 2),
-      array('test_entity', 3),
-    ), 'Test the "between" operation on a field.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyCondition('fttype', 'bun', 'STARTS_WITH');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-    ), 'Test the "starts_with" operation on a property.');
-
-    $query = new EntityFieldQuery();
-    $query->fieldCondition($this->fields[1], 'shape', 'squ', 'STARTS_WITH');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle', 5),
-    ), 'Test the "starts_with" operation on a field.');
-
-    $query = new EntityFieldQuery();
-    $query->fieldCondition($this->fields[0], 'value', 3);
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 3),
-      array('test_entity', 3),
-    ), 'Test omission of an operator with a single item.');
-
-    $query = new EntityFieldQuery();
-    $query->fieldCondition($this->fields[0], 'value', array(2, 3));
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-      array('test_entity', 2),
-      array('test_entity', 3),
-    ), 'Test omission of an operator with multiple items.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyCondition('ftid', 1, '>')
-      ->fieldCondition($this->fields[0], 'value', 4, '<');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-    ), 'Test entity, property and field conditions.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->entityCondition('bundle', 'bundle', 'STARTS_WITH')
-      ->propertyCondition('ftid', 4)
-      ->fieldCondition($this->fields[0], 'value', 4);
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 4),
-    ), 'Test entity condition with "starts_with" operation, and property and field conditions.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyOrderBy('ftid', 'ASC')
-      ->range(0, 2);
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-    ), 'Test limit on a property.', TRUE);
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->fieldCondition($this->fields[0], 'value', 0, '>=')
-      ->fieldOrderBy($this->fields[0], 'value', 'ASC')
-      ->range(0, 2);
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-    ), 'Test limit on a field.', TRUE);
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyOrderBy('ftid', 'ASC')
-      ->range(4, 6);
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-    ), 'Test offset on a property.', TRUE);
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->fieldCondition($this->fields[0], 'value', 0, '>')
-      ->fieldOrderBy($this->fields[0], 'value', 'ASC')
-      ->range(2, 4);
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-    ), 'Test offset on a field.', TRUE);
-
-    for ($i = 6; $i < 10; $i++) {
-      $entity = new stdClass();
-      $entity->ftid = $i;
-      $entity->fttype = 'test_entity_bundle';
-      $entity->{$this->field_names[0]}[LANGUAGE_NONE][0]['value'] = $i - 5;
-      drupal_write_record('test_entity_bundle', $entity);
-      field_attach_insert('test_entity_bundle', $entity);
-    }
-
-    $query = new EntityFieldQuery();
-    $query->fieldCondition($this->fields[0], 'value', 2, '>');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-      array('test_entity', 3),
-      array('test_entity', 4),
-      array('test_entity_bundle', 8),
-      array('test_entity_bundle', 9),
-    ), 'Select a field across multiple entities.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->fieldCondition($this->fields[1], 'shape', 'square')
-      ->fieldCondition($this->fields[1], 'color', 'blue');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle', 5),
-    ), 'Test without a delta group.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->fieldCondition($this->fields[1], 'shape', 'square', '=', 'group')
-      ->fieldCondition($this->fields[1], 'color', 'blue', '=', 'group');
-    $this->assertEntityFieldQuery($query, array(), 'Test with a delta group.');
-
-    // Test query on a deleted field.
-    field_attach_delete_bundle('test_entity_bundle_key', 'bundle1');
-    field_attach_delete_bundle('test_entity', 'test_bundle');
-    $query = new EntityFieldQuery();
-    $query->fieldCondition($this->fields[0], 'value', '3');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle', 8),
-    ), 'Test query on a field after deleting field from some entities.');
-
-    field_attach_delete_bundle('test_entity_bundle', 'test_entity_bundle');
-    $query = new EntityFieldQuery();
-    $query->fieldCondition($this->fields[0], 'value', '3');
-    $this->assertEntityFieldQuery($query, array(), 'Test query on a field after deleting field from all entities.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->fieldCondition($this->fields[0], 'value', '3')
-      ->deleted(TRUE);
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle', 8),
-      array('test_entity', 3),
-    ), 'Test query on a deleted field with deleted option set to TRUE.');
-
-    $pass = FALSE;
-    $query = new EntityFieldQuery();
-    try {
-      $query->execute();
-    }
-    catch (EntityFieldQueryException $exception) {
-      $pass = ($exception->getMessage() == t('For this query an entity type must be specified.'));
-    }
-    $this->assertTrue($pass, "Can't query the universe.");
-  }
-
-  /**
-   * Tests querying translatable fields.
-   */
-  function testEntityFieldQueryTranslatable() {
-
-    // Make a test field translatable AND cardinality one.
-    $this->fields[0]['translatable'] = TRUE;
-    $this->fields[0]['cardinality'] = 1;
-    field_update_field($this->fields[0]);
-    field_test_entity_info_translatable('test_entity', TRUE);
-
-    // Create more items with different languages.
-    $entity = new stdClass();
-    $entity->ftid = 1;
-    $entity->ftvid = 1;
-    $entity->fttype = 'test_bundle';
-
-    // Set fields in two languages with one field value.
-    foreach (array(LANGUAGE_NONE, 'en') as $langcode) {
-      $entity->{$this->field_names[0]}[$langcode][0]['value'] = 1234;
-    }
-
-    field_attach_update('test_entity', $entity);
-
-    // Look up number of results when querying a single entity with multilingual
-    // field values.
-    $query = new EntityFieldQuery();
-    $query_count = $query
-      ->entityCondition('entity_type', 'test_entity')
-      ->entityCondition('bundle', 'test_bundle')
-      ->entityCondition('entity_id', '1')
-      ->fieldCondition($this->fields[0])
-      ->count()
-      ->execute();
-
-    $this->assertEqual($query_count, 1, "Count on translatable cardinality one field is correct.");
-  }
-
-  /**
-   * Tests field meta conditions.
-   */
-  function testEntityFieldQueryMetaConditions() {
-    // Make a test field translatable.
-    $this->fields[0]['translatable'] = TRUE;
-    field_update_field($this->fields[0]);
-    field_test_entity_info_translatable('test_entity', TRUE);
-
-    // Create more items with different languages.
-    $entity = new stdClass();
-    $entity->ftid = 1;
-    $entity->ftvid = 1;
-    $entity->fttype = 'test_bundle';
-    $j = 0;
-
-    foreach (array(LANGUAGE_NONE, 'en') as $langcode) {
-      for ($i = 0; $i < 4; $i++) {
-        $entity->{$this->field_names[0]}[$langcode][$i]['value'] = $i + $j;
-      }
-      $j += 4;
-    }
-
-    field_attach_update('test_entity', $entity);
-
-    // Test delta field meta condition.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity', '=')
-      ->fieldDeltaCondition($this->fields[0], 0, '>');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity', 1),
-    ), 'Test with a delta meta condition.');
-
-    // Test language field meta condition.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity', '=')
-      ->fieldLanguageCondition($this->fields[0], LANGUAGE_NONE, '<>');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity', 1),
-    ), 'Test with a language meta condition.');
-
-    // Test language field meta condition.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity', '=')
-      ->fieldLanguageCondition($this->fields[0], LANGUAGE_NONE, '!=');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity', 1),
-    ), 'Test with a language meta condition.');
-
-    // Test delta grouping.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity', '=')
-      ->fieldCondition($this->fields[0], 'value', 0, '=', 'group')
-      ->fieldDeltaCondition($this->fields[0], 1, '<', 'group');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity', 1),
-    ), 'Test with a grouped delta meta condition.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity', '=')
-      ->fieldCondition($this->fields[0], 'value', 0, '=', 'group')
-      ->fieldDeltaCondition($this->fields[0], 1, '>=', 'group');
-    $this->assertEntityFieldQuery($query, array(), 'Test with a grouped delta meta condition (empty result set).');
-
-    // Test language grouping.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity', '=')
-      ->fieldCondition($this->fields[0], 'value', 0, '=', NULL, 'group')
-      ->fieldLanguageCondition($this->fields[0], 'en', '<>', NULL, 'group');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity', 1),
-    ), 'Test with a grouped language meta condition.');
-
-    // Test language grouping.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity', '=')
-      ->fieldCondition($this->fields[0], 'value', 0, '=', NULL, 'group')
-      ->fieldLanguageCondition($this->fields[0], 'en', '!=', NULL, 'group');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity', 1),
-    ), 'Test with a grouped language meta condition.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity', '=')
-      ->fieldCondition($this->fields[0], 'value', 0, '=', NULL, 'group')
-      ->fieldLanguageCondition($this->fields[0], LANGUAGE_NONE, '<>', NULL, 'group');
-    $this->assertEntityFieldQuery($query, array(), 'Test with a grouped language meta condition (empty result set).');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity', '=')
-      ->fieldCondition($this->fields[0], 'value', 0, '=', NULL, 'group')
-      ->fieldLanguageCondition($this->fields[0], LANGUAGE_NONE, '!=', NULL, 'group');
-    $this->assertEntityFieldQuery($query, array(), 'Test with a grouped language meta condition (empty result set).');
-
-    // Test delta and language grouping.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity', '=')
-      ->fieldCondition($this->fields[0], 'value', 0, '=', 'delta', 'language')
-      ->fieldDeltaCondition($this->fields[0], 1, '<', 'delta', 'language')
-      ->fieldLanguageCondition($this->fields[0], 'en', '<>', 'delta', 'language');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity', 1),
-    ), 'Test with a grouped delta + language meta condition.');
-
-    // Test delta and language grouping.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity', '=')
-      ->fieldCondition($this->fields[0], 'value', 0, '=', 'delta', 'language')
-      ->fieldDeltaCondition($this->fields[0], 1, '<', 'delta', 'language')
-      ->fieldLanguageCondition($this->fields[0], 'en', '!=', 'delta', 'language');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity', 1),
-    ), 'Test with a grouped delta + language meta condition.');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity', '=')
-      ->fieldCondition($this->fields[0], 'value', 0, '=', 'delta', 'language')
-      ->fieldDeltaCondition($this->fields[0], 1, '>=', 'delta', 'language')
-      ->fieldLanguageCondition($this->fields[0], 'en', '<>', 'delta', 'language');
-    $this->assertEntityFieldQuery($query, array(), 'Test with a grouped delta + language meta condition (empty result set, delta condition unsatisifed).');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity', '=')
-      ->fieldCondition($this->fields[0], 'value', 0, '=', 'delta', 'language')
-      ->fieldDeltaCondition($this->fields[0], 1, '>=', 'delta', 'language')
-      ->fieldLanguageCondition($this->fields[0], 'en', '!=', 'delta', 'language');
-    $this->assertEntityFieldQuery($query, array(), 'Test with a grouped delta + language meta condition (empty result set, delta condition unsatisifed).');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity', '=')
-      ->fieldCondition($this->fields[0], 'value', 0, '=', 'delta', 'language')
-      ->fieldDeltaCondition($this->fields[0], 1, '<', 'delta', 'language')
-      ->fieldLanguageCondition($this->fields[0], LANGUAGE_NONE, '<>', 'delta', 'language');
-    $this->assertEntityFieldQuery($query, array(), 'Test with a grouped delta + language meta condition (empty result set, language condition unsatisifed).');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity', '=')
-      ->fieldCondition($this->fields[0], 'value', 0, '=', 'delta', 'language')
-      ->fieldDeltaCondition($this->fields[0], 1, '<', 'delta', 'language')
-      ->fieldLanguageCondition($this->fields[0], LANGUAGE_NONE, '!=', 'delta', 'language');
-    $this->assertEntityFieldQuery($query, array(), 'Test with a grouped delta + language meta condition (empty result set, language condition unsatisifed).');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity', '=')
-      ->fieldCondition($this->fields[0], 'value', 0, '=', 'delta', 'language')
-      ->fieldDeltaCondition($this->fields[0], 1, '>=', 'delta', 'language')
-      ->fieldLanguageCondition($this->fields[0], LANGUAGE_NONE, '<>', 'delta', 'language');
-    $this->assertEntityFieldQuery($query, array(), 'Test with a grouped delta + language meta condition (empty result set, both conditions unsatisifed).');
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity', '=')
-      ->fieldCondition($this->fields[0], 'value', 0, '=', 'delta', 'language')
-      ->fieldDeltaCondition($this->fields[0], 1, '>=', 'delta', 'language')
-      ->fieldLanguageCondition($this->fields[0], LANGUAGE_NONE, '!=', 'delta', 'language');
-    $this->assertEntityFieldQuery($query, array(), 'Test with a grouped delta + language meta condition (empty result set, both conditions unsatisifed).');
-
-    // Test grouping with another field to ensure that grouping cache is reset
-    // properly.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle', '=')
-      ->fieldCondition($this->fields[1], 'shape', 'circle', '=', 'delta', 'language')
-      ->fieldCondition($this->fields[1], 'color', 'blue', '=', 'delta', 'language')
-      ->fieldDeltaCondition($this->fields[1], 1, '=', 'delta', 'language')
-      ->fieldLanguageCondition($this->fields[1], LANGUAGE_NONE, '=', 'delta', 'language');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle', 5),
-    ), 'Test grouping cache.');
-  }
-
-  /**
-   * Tests the routing feature of EntityFieldQuery.
-   */
-  function testEntityFieldQueryRouting() {
-    // Entity-only query.
-    $query = new EntityFieldQuery();
-    $query->entityCondition('entity_type', 'test_entity_bundle_key');
-    $this->assertIdentical($query->queryCallback(), array($query, 'propertyQuery'), 'Entity-only queries are handled by the propertyQuery handler.');
-
-    // Field-only query.
-    $query = new EntityFieldQuery();
-    $query->fieldCondition($this->fields[0], 'value', '3');
-    $this->assertIdentical($query->queryCallback(), 'field_sql_storage_field_storage_query', 'Pure field queries are handled by the Field storage handler.');
-
-    // Mixed entity and field query.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->fieldCondition($this->fields[0], 'value', '3');
-    $this->assertIdentical($query->queryCallback(), 'field_sql_storage_field_storage_query', 'Mixed queries are handled by the Field storage handler.');
-
-    // Overriding with $query->executeCallback.
-    $query = new EntityFieldQuery();
-    $query->entityCondition('entity_type', 'test_entity_bundle_key');
-    $query->executeCallback = 'field_test_dummy_field_storage_query';
-    $this->assertEntityFieldQuery($query, array(
-      array('user', 1),
-    ), 'executeCallback can override the query handler.');
-
-    // Overriding with $query->executeCallback via hook_entity_query_alter().
-    $query = new EntityFieldQuery();
-    $query->entityCondition('entity_type', 'test_entity_bundle_key');
-    // Add a flag that will be caught by field_test_entity_query_alter().
-    $query->alterMyExecuteCallbackPlease = TRUE;
-    $this->assertEntityFieldQuery($query, array(
-      array('user', 1),
-    ), 'executeCallback can override the query handler when set in a hook_entity_query_alter().');
-
-    // Mixed-storage queries.
-    $query = new EntityFieldQuery();
-    $query
-      ->fieldCondition($this->fields[0], 'value', '3')
-      ->fieldCondition($this->fields[1], 'shape', 'squ', 'STARTS_WITH');
-    // Alter the storage of the field.
-    $query->fields[1]['storage']['module'] = 'dummy_storage';
-    try {
-      $query->queryCallback();
-    }
-    catch (EntityFieldQueryException $exception) {
-      $pass = ($exception->getMessage() == t("Can't handle more than one field storage engine"));
-    }
-    $this->assertTrue($pass, 'Cannot query across field storage engines.');
-  }
-
-  /**
-   * Tests the pager integration of EntityFieldQuery.
-   */
-  function testEntityFieldQueryPager() {
-    // Test pager in propertyQuery
-    $_GET['page'] = '0,1';
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyOrderBy('ftid', 'ASC')
-      ->pager(3, 0);
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-    ), 'Test pager integration in propertyQuery: page 1.', TRUE);
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyOrderBy('ftid', 'ASC')
-      ->pager(3, 1);
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-    ), 'Test pager integration in propertyQuery: page 2.', TRUE);
-
-    // Test pager in field storage
-    $_GET['page'] = '0,1';
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->fieldCondition($this->fields[0], 'value', 0, '>')
-      ->propertyOrderBy('ftid', 'ASC')
-      ->pager(2, 0);
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-    ), 'Test pager integration in field storage: page 1.', TRUE);
-
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->fieldCondition($this->fields[0], 'value', 0, '>')
-      ->propertyOrderBy('ftid', 'ASC')
-      ->pager(2, 1);
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-    ), 'Test pager integration in field storage: page 2.', TRUE);
-
-    unset($_GET['page']);
-  }
-
-  /**
-   * Tests disabling the pager in EntityFieldQuery.
-   */
-  function testEntityFieldQueryDisablePager() {
-    // Test enabling a pager and then disabling it.
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->propertyOrderBy('ftid', 'ASC')
-      ->pager(1)
-      ->pager(0);
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-    ), 'All test entities are listed when the pager is enabled and then disabled.', TRUE);
-  }
-
-  /**
-   * Tests the TableSort integration of EntityFieldQuery.
-   */
-  function testEntityFieldQueryTableSort() {
-    // Test TableSort in propertyQuery
-    $_GET['sort'] = 'asc';
-    $_GET['order'] = 'Id';
-    $header = array(
-      'id' => array('data' => 'Id', 'type' => 'property',  'specifier' => 'ftid'),
-      'type' => array('data' => 'Type', 'type' => 'entity', 'specifier' => 'bundle'),
-    );
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->tableSort($header);
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-    ), 'Test TableSort by property: ftid ASC in propertyQuery.', TRUE);
-
-    $_GET['sort'] = 'desc';
-    $_GET['order'] = 'Id';
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->tableSort($header);
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 6),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 1),
-    ), 'Test TableSort by property: ftid DESC in propertyQuery.', TRUE);
-
-    $_GET['sort'] = 'asc';
-    $_GET['order'] = 'Type';
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->tableSort($header);
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-    ), 'Test TableSort by entity: bundle ASC in propertyQuery.', TRUE);
-
-    $_GET['sort'] = 'desc';
-    $_GET['order'] = 'Type';
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->tableSort($header);
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-    ), 'Test TableSort by entity: bundle DESC in propertyQuery.', TRUE);
-
-    // Test TableSort in field storage
-    $_GET['sort'] = 'asc';
-    $_GET['order'] = 'Id';
-    $header = array(
-      'id' => array('data' => 'Id', 'type' => 'property',  'specifier' => 'ftid'),
-      'type' => array('data' => 'Type', 'type' => 'entity', 'specifier' => 'bundle'),
-      'field' => array('data' => 'Field', 'type' => 'field', 'specifier' => array('field' => $this->field_names[0], 'column' => 'value')),
-    );
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->fieldCondition($this->fields[0], 'value', 0, '>')
-      ->tableSort($header);
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-    ), 'Test TableSort by property: ftid ASC in field storage.', TRUE);
-
-    $_GET['sort'] = 'desc';
-    $_GET['order'] = 'Id';
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->fieldCondition($this->fields[0], 'value', 0, '>')
-      ->tableSort($header);
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 6),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 1),
-    ), 'Test TableSort by property: ftid DESC in field storage.', TRUE);
-
-    $_GET['sort'] = 'asc';
-    $_GET['order'] = 'Type';
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->fieldCondition($this->fields[0], 'value', 0, '>')
-      ->tableSort($header)
-      ->entityOrderBy('entity_id', 'DESC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 6),
-      array('test_entity_bundle_key', 5),
-    ), 'Test TableSort by entity: bundle ASC in field storage.', TRUE);
-
-    $_GET['sort'] = 'desc';
-    $_GET['order'] = 'Type';
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->fieldCondition($this->fields[0], 'value', 0, '>')
-      ->tableSort($header)
-      ->entityOrderBy('entity_id', 'ASC');
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-    ), 'Test TableSort by entity: bundle DESC in field storage.', TRUE);
-
-    $_GET['sort'] = 'asc';
-    $_GET['order'] = 'Field';
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->fieldCondition($this->fields[0], 'value', 0, '>')
-      ->tableSort($header);
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 1),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 6),
-    ), 'Test TableSort by field ASC.', TRUE);
-
-    $_GET['sort'] = 'desc';
-    $_GET['order'] = 'Field';
-    $query = new EntityFieldQuery();
-    $query
-      ->entityCondition('entity_type', 'test_entity_bundle_key')
-      ->fieldCondition($this->fields[0], 'value', 0, '>')
-      ->tableSort($header);
-    $this->assertEntityFieldQuery($query, array(
-      array('test_entity_bundle_key', 6),
-      array('test_entity_bundle_key', 5),
-      array('test_entity_bundle_key', 4),
-      array('test_entity_bundle_key', 3),
-      array('test_entity_bundle_key', 2),
-      array('test_entity_bundle_key', 1),
-    ), 'Test TableSort by field DESC.', TRUE);
-
-    unset($_GET['sort']);
-    unset($_GET['order']);
-  }
-
-  /**
-   * Tests EntityFieldQuery access on non-node entities.
-   */
-  function testEntityFieldQueryAccess() {
-    // Test as a user with ability to bypass node access.
-    $privileged_user = $this->drupalCreateUser(array('bypass node access', 'access content'));
-    $this->drupalLogin($privileged_user);
-    $this->drupalGet('entity-query-access/test/' . $this->fields[0]['field_name']);
-    $this->assertText('Found entity', 'Returned access response with entities.');
-    $this->drupalLogout();
-
-    // Test as a user that does not have ability to bypass node access or view
-    // all nodes.
-    $regular_user = $this->drupalCreateUser(array('access content'));
-    $this->drupalLogin($regular_user);
-    $this->drupalGet('entity-query-access/test/' . $this->fields[0]['field_name']);
-    $this->assertText('Found entity', 'Returned access response with entities.');
-    $this->drupalLogout();
-  }
-
-  /**
-   * Fetches the results of an EntityFieldQuery and compares.
-   *
-   * @param $query
-   *   An EntityFieldQuery to run.
-   * @param $intended_results
-   *   A list of results, every entry is again a list, first being the entity
-   *   type, the second being the entity_id.
-   * @param $message
-   *   The message to be displayed as the result of this test.
-   * @param $ordered
-   *   If FALSE then the result of EntityFieldQuery will match
-   *   $intended_results even if the order is not the same. If TRUE then order
-   *   should match too.
-   */
-  function assertEntityFieldQuery($query, $intended_results, $message, $ordered = FALSE) {
-    $results = array();
-    try {
-      foreach ($query->execute() as $entity_type => $entity_ids) {
-        foreach ($entity_ids as $entity_id => $stub_entity) {
-          $results[] = array($entity_type, $entity_id);
-        }
-      }
-      if (!isset($ordered) || !$ordered) {
-        sort($results);
-        sort($intended_results);
-      }
-      $this->assertEqual($results, $intended_results, $message);
-    }
-    catch (Exception $e) {
-      $this->fail('Exception thrown: '. $e->getMessage());
-    }
-  }
-
-  /**
-   * Tests EFQ table prefixing with multiple conditions and an altered join.
-   *
-   * @see field_test_query_efq_table_prefixing_test_alter()
-   */
-  function testTablePrefixing() {
-    $query = new EntityFieldQuery();
-    $query = $query
-      ->entityCondition('entity_type', 'test_entity')
-      ->entityCondition('bundle', 'test_bundle')
-      ->entityCondition('entity_id', '1')
-      ->addTag('efq_table_prefixing_test');
-
-    $expected = array(array('test_entity', 1));
-
-    $this->assertEntityFieldQuery($query, $expected, 'An EntityFieldQuery returns the expected results when altered with an additional join on the base table.');
-  }
-
-}
diff --git a/modules/simpletest/tests/entity_query_access_test.info b/modules/simpletest/tests/entity_query_access_test.info
deleted file mode 100644
index 8c43dd1..0000000
--- a/modules/simpletest/tests/entity_query_access_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Entity query access test"
-description = "Support module for checking entity query results."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/entity_query_access_test.module b/modules/simpletest/tests/entity_query_access_test.module
deleted file mode 100644
index 53641af..0000000
--- a/modules/simpletest/tests/entity_query_access_test.module
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-/**
- * @file
- * Helper module for testing EntityFieldQuery access on any type of entity.
- */
-
-/**
- * Implements hook_menu().
- */
-function entity_query_access_test_menu() {
-  $items['entity-query-access/test/%'] = array(
-    'title' => "Retrieve a sample of entity query access data",
-    'page callback' => 'entity_query_access_test_sample_query',
-    'page arguments' => array(2),
-    'access callback' => TRUE,
-    'type' => MENU_CALLBACK,
-  );
-
-  return $items;
-}
-
-/**
- * Returns the results from an example EntityFieldQuery.
- */
-function entity_query_access_test_sample_query($field_name) {
-  global $user;
-
-  // Simulate user does not have access to view all nodes.
-  $access = &drupal_static('node_access_view_all_nodes');
-  $access[$user->uid] = FALSE;
-
-  $query = new EntityFieldQuery();
-  $query
-    ->entityCondition('entity_type', 'test_entity_bundle_key')
-    ->fieldCondition($field_name, 'value', 0, '>')
-    ->entityOrderBy('entity_id', 'ASC');
-  $results = array(
-    'items' => array(),
-    'title' => t('EntityFieldQuery results'),
-  );
-  foreach ($query->execute() as $entity_type => $entity_ids) {
-    foreach ($entity_ids as $entity_id => $entity_stub) {
-      $results['items'][] = format_string('Found entity of type @entity_type with id @entity_id', array('@entity_type' => $entity_type, '@entity_id' => $entity_id));
-    }
-  }
-  if (count($results['items']) > 0) {
-    $output = theme('item_list', $results);
-  }
-  else {
-    $output = 'No results found with EntityFieldQuery.';
-  }
-  return $output;
-}
diff --git a/modules/simpletest/tests/error.test b/modules/simpletest/tests/error.test
deleted file mode 100644
index f946e82..0000000
--- a/modules/simpletest/tests/error.test
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-
-/**
- * Tests Drupal error and exception handlers.
- */
-class DrupalErrorHandlerTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Drupal error handlers',
-      'description' => 'Performs tests on the Drupal error and exception handler.',
-      'group' => 'System',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('error_test');
-  }
-
-  /**
-   * Test the error handler.
-   */
-  function testErrorHandler() {
-    $error_notice = array(
-      '%type' => 'Notice',
-      '!message' => 'Undefined variable: bananas',
-      '%function' => 'error_test_generate_warnings()',
-      '%file' => drupal_realpath('modules/simpletest/tests/error_test.module'),
-    );
-    $error_warning = array(
-      '%type' => 'Warning',
-      '!message' => 'Division by zero',
-      '%function' => 'error_test_generate_warnings()',
-      '%file' => drupal_realpath('modules/simpletest/tests/error_test.module'),
-    );
-    $error_user_notice = array(
-      '%type' => 'User warning',
-      '!message' => 'Drupal is awesome',
-      '%function' => 'error_test_generate_warnings()',
-      '%file' => drupal_realpath('modules/simpletest/tests/error_test.module'),
-    );
-
-    // Set error reporting to collect notices.
-    variable_set('error_level', ERROR_REPORTING_DISPLAY_ALL);
-    $this->drupalGet('error-test/generate-warnings');
-    $this->assertResponse(200, 'Received expected HTTP status code.');
-    $this->assertErrorMessage($error_notice);
-    $this->assertErrorMessage($error_warning);
-    $this->assertErrorMessage($error_user_notice);
-
-    // Set error reporting to not collect notices.
-    variable_set('error_level', ERROR_REPORTING_DISPLAY_SOME);
-    $this->drupalGet('error-test/generate-warnings');
-    $this->assertResponse(200, 'Received expected HTTP status code.');
-    $this->assertNoErrorMessage($error_notice);
-    $this->assertErrorMessage($error_warning);
-    $this->assertErrorMessage($error_user_notice);
-
-    // Set error reporting to not show any errors.
-    variable_set('error_level', ERROR_REPORTING_HIDE);
-    $this->drupalGet('error-test/generate-warnings');
-    $this->assertResponse(200, 'Received expected HTTP status code.');
-    $this->assertNoErrorMessage($error_notice);
-    $this->assertNoErrorMessage($error_warning);
-    $this->assertNoErrorMessage($error_user_notice);
-  }
-
-  /**
-   * Test the exception handler.
-   */
-  function testExceptionHandler() {
-    $error_exception = array(
-      '%type' => 'Exception',
-      '!message' => 'Drupal is awesome',
-      '%function' => 'error_test_trigger_exception()',
-      '%line' => 57,
-      '%file' => drupal_realpath('modules/simpletest/tests/error_test.module'),
-    );
-    $error_pdo_exception = array(
-      '%type' => 'PDOException',
-      '!message' => 'SELECT * FROM bananas_are_awesome',
-      '%function' => 'error_test_trigger_pdo_exception()',
-      '%line' => 65,
-      '%file' => drupal_realpath('modules/simpletest/tests/error_test.module'),
-    );
-
-    $this->drupalGet('error-test/trigger-exception');
-    $this->assertTrue(strpos($this->drupalGetHeader(':status'), '500 Service unavailable (with message)'), 'Received expected HTTP status line.');
-    $this->assertErrorMessage($error_exception);
-
-    $this->drupalGet('error-test/trigger-pdo-exception');
-    $this->assertTrue(strpos($this->drupalGetHeader(':status'), '500 Service unavailable (with message)'), 'Received expected HTTP status line.');
-    // We cannot use assertErrorMessage() since the extact error reported
-    // varies from database to database. Check that the SQL string is displayed.
-    $this->assertText($error_pdo_exception['%type'], format_string('Found %type in error page.', $error_pdo_exception));
-    $this->assertText($error_pdo_exception['!message'], format_string('Found !message in error page.', $error_pdo_exception));
-    $error_details = format_string('in %function (line ', $error_pdo_exception);
-    $this->assertRaw($error_details, format_string("Found '!message' in error page.", array('!message' => $error_details)));
-  }
-
-  /**
-   * Helper function: assert that the error message is found.
-   */
-  function assertErrorMessage(array $error) {
-    $message = t('%type: !message in %function (line ', $error);
-    $this->assertRaw($message, format_string('Found error message: !message.', array('!message' => $message)));
-  }
-
-  /**
-   * Helper function: assert that the error message is not found.
-   */
-  function assertNoErrorMessage(array $error) {
-    $message = t('%type: !message in %function (line ', $error);
-    $this->assertNoRaw($message, format_string('Did not find error message: !message.', array('!message' => $message)));
-  }
-}
-
diff --git a/modules/simpletest/tests/error_test.info b/modules/simpletest/tests/error_test.info
deleted file mode 100644
index 1764ae3..0000000
--- a/modules/simpletest/tests/error_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Error test"
-description = "Support module for error and exception testing."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/error_test.module b/modules/simpletest/tests/error_test.module
deleted file mode 100644
index d062cb0..0000000
--- a/modules/simpletest/tests/error_test.module
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-
-/**
- * Implements hook_menu().
- */
-function error_test_menu() {
-  $items['error-test/generate-warnings'] = array(
-    'title' => 'Generate warnings',
-    'page callback' => 'error_test_generate_warnings',
-    'access callback' => TRUE,
-    'type' => MENU_CALLBACK,
-  );
-  $items['error-test/generate-warnings-with-report'] = array(
-    'title' => 'Generate warnings with Simpletest reporting',
-    'page callback' => 'error_test_generate_warnings',
-    'page arguments' => array(TRUE),
-    'access callback' => TRUE,
-    'type' => MENU_CALLBACK,
-  );
-  $items['error-test/trigger-exception'] = array(
-    'title' => 'Trigger an exception',
-    'page callback' => 'error_test_trigger_exception',
-    'access callback' => TRUE,
-    'type' => MENU_CALLBACK,
-  );
-  $items['error-test/trigger-pdo-exception'] = array(
-    'title' => 'Trigger a PDO exception',
-    'page callback' => 'error_test_trigger_pdo_exception',
-    'access callback' => TRUE,
-    'type' => MENU_CALLBACK,
-  );
-
-  return $items;
-}
-
-/**
- * Menu callback; generate warnings to test the error handler.
- */
-function error_test_generate_warnings($collect_errors = FALSE) {
-  // Tell Drupal error reporter to send errors to Simpletest or not.
-  define('SIMPLETEST_COLLECT_ERRORS', $collect_errors);
-  // This will generate a notice.
-  $monkey_love = $bananas;
-  // This will generate a warning.
-  $awesomely_big = 1/0;
-  // This will generate a user error.
-  trigger_error("Drupal is awesome", E_USER_WARNING);
-  return "";
-}
-
-/**
- * Menu callback; trigger an exception to test the exception handler.
- */
-function error_test_trigger_exception() {
-  define('SIMPLETEST_COLLECT_ERRORS', FALSE);
-  throw new Exception("Drupal is awesome");
-}
-
-/**
- * Menu callback; trigger an exception to test the exception handler.
- */
-function error_test_trigger_pdo_exception() {
-  define('SIMPLETEST_COLLECT_ERRORS', FALSE);
-  db_query('SELECT * FROM bananas_are_awesome');
-}
diff --git a/modules/simpletest/tests/file_test.info b/modules/simpletest/tests/file_test.info
deleted file mode 100644
index 4edfcea..0000000
--- a/modules/simpletest/tests/file_test.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = "File test"
-description = "Support module for file handling tests."
-package = Testing
-version = VERSION
-core = 7.x
-files[] = file_test.module
-hidden = TRUE
diff --git a/modules/simpletest/tests/file_test.module b/modules/simpletest/tests/file_test.module
deleted file mode 100644
index 1b11316..0000000
--- a/modules/simpletest/tests/file_test.module
+++ /dev/null
@@ -1,461 +0,0 @@
-<?php
-
-/**
- * @file
- * Helper module for the file tests.
- *
- * The caller is must call file_test_reset() to initializing this module before
- * calling file_test_get_calls() or file_test_set_return().
- */
-
-
-define('FILE_URL_TEST_CDN_1', 'http://cdn1.example.com');
-define('FILE_URL_TEST_CDN_2', 'http://cdn2.example.com');
-
-
-/**
- * Implements hook_menu().
- */
-function file_test_menu() {
-  $items['file-test/upload'] = array(
-    'title' => 'Upload test',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('_file_test_form'),
-    'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
-  );
-  return $items;
-}
-
-/**
- * Implements hook_stream_wrappers().
- */
-function file_test_stream_wrappers() {
-  return array(
-    'dummy' => array(
-      'name' => t('Dummy files'),
-      'class' => 'DrupalDummyStreamWrapper',
-      'description' => t('Dummy wrapper for simpletest.'),
-    ),
-    'dummy-remote' => array(
-      'name' => t('Dummy files (remote)'),
-      'class' => 'DrupalDummyRemoteStreamWrapper',
-      'description' => t('Dummy wrapper for simpletest (remote).'),
-    ),
-  );
-}
-
-/**
- * Form to test file uploads.
- */
-function _file_test_form($form, &$form_state) {
-  $form['file_test_upload'] = array(
-    '#type' => 'file',
-    '#title' => t('Upload a file'),
-  );
-  $form['file_test_replace'] = array(
-    '#type' => 'select',
-    '#title' => t('Replace existing image'),
-    '#options' => array(
-      FILE_EXISTS_RENAME => t('Appends number until name is unique'),
-      FILE_EXISTS_REPLACE => t('Replace the existing file'),
-      FILE_EXISTS_ERROR => t('Fail with an error'),
-    ),
-    '#default_value' => FILE_EXISTS_RENAME,
-  );
-  $form['file_subdir'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Subdirectory for test file'),
-    '#default_value' => '',
-  );
-
-  $form['extensions'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Allowed extensions.'),
-    '#default_value' => '',
-  );
-
-  $form['allow_all_extensions'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Allow all extensions?'),
-    '#default_value' => FALSE,
-  );
-
-  $form['is_image_file'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Is this an image file?'),
-    '#default_value' => TRUE,
-  );
-
-  $form['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Submit'),
-  );
-  return $form;
-}
-
-/**
- * Process the upload.
- */
-function _file_test_form_submit(&$form, &$form_state) {
-  // Process the upload and perform validation. Note: we're using the
-  // form value for the $replace parameter.
-  if (!empty($form_state['values']['file_subdir'])) {
-    $destination = 'temporary://' . $form_state['values']['file_subdir'];
-    file_prepare_directory($destination, FILE_CREATE_DIRECTORY);
-  }
-  else {
-    $destination = FALSE;
-  }
-
-  // Setup validators.
-  $validators = array();
-  if ($form_state['values']['is_image_file']) {
-    $validators['file_validate_is_image'] = array();
-  }
-
-  if ($form_state['values']['allow_all_extensions']) {
-    $validators['file_validate_extensions'] = array();
-  }
-  elseif (!empty($form_state['values']['extensions'])) {
-    $validators['file_validate_extensions'] = array($form_state['values']['extensions']);
-  }
-
-  $file = file_save_upload('file_test_upload', $validators, $destination, $form_state['values']['file_test_replace']);
-  if ($file) {
-    $form_state['values']['file_test_upload'] = $file;
-    drupal_set_message(t('File @filepath was uploaded.', array('@filepath' => $file->uri)));
-    drupal_set_message(t('File name is @filename.', array('@filename' => $file->filename)));
-    drupal_set_message(t('File MIME type is @mimetype.', array('@mimetype' => $file->filemime)));
-    drupal_set_message(t('You WIN!'));
-  }
-  elseif ($file === FALSE) {
-    drupal_set_message(t('Epic upload FAIL!'), 'error');
-  }
-}
-
-
-/**
- * Reset/initialize the history of calls to the file_* hooks.
- *
- * @see file_test_get_calls()
- * @see file_test_reset()
- */
-function file_test_reset() {
-  // Keep track of calls to these hooks
-  $results = array(
-    'load' => array(),
-    'validate' => array(),
-    'download' => array(),
-    'insert' => array(),
-    'update' => array(),
-    'copy' => array(),
-    'move' => array(),
-    'delete' => array(),
-  );
-  variable_set('file_test_results', $results);
-
-  // These hooks will return these values, see file_test_set_return().
-  $return = array(
-    'validate' => array(),
-    'download' => NULL,
-  );
-  variable_set('file_test_return', $return);
-}
-
-/**
- * Get the arguments passed to invocation of a given hook since
- * file_test_reset() was last called.
- *
- * @param $op
- *   One of the hook_file_* operations: 'load', 'validate', 'download',
- *   'insert', 'update', 'copy', 'move', 'delete'.
- *
- * @return
- *   Array of the parameters passed to each call.
- *
- * @see _file_test_log_call()
- * @see file_test_reset()
- */
-function file_test_get_calls($op) {
-  $results = variable_get('file_test_results', array());
-  return $results[$op];
-}
-
-/**
- * Get an array with the calls for all hooks.
- *
- * @return
- *   An array keyed by hook name ('load', 'validate', 'download', 'insert',
- *   'update', 'copy', 'move', 'delete') with values being arrays of parameters
- *   passed to each call.
- */
-function file_test_get_all_calls() {
-  return variable_get('file_test_results', array());
-}
-
-/**
- * Store the values passed to a hook invocation.
- *
- * @param $op
- *   One of the hook_file_* operations: 'load', 'validate', 'download',
- *   'insert', 'update', 'copy', 'move', 'delete'.
- * @param $args
- *   Values passed to hook.
- *
- * @see file_test_get_calls()
- * @see file_test_reset()
- */
-function _file_test_log_call($op, $args) {
-  $results = variable_get('file_test_results', array());
-  $results[$op][] = $args;
-  variable_set('file_test_results', $results);
-}
-
-/**
- * Load the appropriate return value.
- *
- * @param $op
- *   One of the hook_file_[validate,download] operations.
- *
- * @return
- *   Value set by file_test_set_return().
- *
- * @see file_test_set_return()
- * @see file_test_reset()
- */
-function _file_test_get_return($op) {
-  $return = variable_get('file_test_return', array($op => NULL));
-  return $return[$op];
-}
-
-/**
- * Assign a return value for a given operation.
- *
- * @param $op
- *   One of the hook_file_[validate,download] operations.
- * @param $value
- *   Value for the hook to return.
- *
- * @see _file_test_get_return()
- * @see file_test_reset()
- */
-function file_test_set_return($op, $value) {
-  $return = variable_get('file_test_return', array());
-  $return[$op] = $value;
-  variable_set('file_test_return', $return);
-}
-
-/**
- * Implements hook_file_load().
- */
-function file_test_file_load($files) {
-  foreach ($files as $file) {
-    _file_test_log_call('load', array($file));
-    // Assign a value on the object so that we can test that the $file is passed
-    // by reference.
-    $file->file_test['loaded'] = TRUE;
-  }
-}
-
-/**
- * Implements hook_file_validate().
- */
-function file_test_file_validate($file) {
-  _file_test_log_call('validate', array($file));
-  return _file_test_get_return('validate');
-}
-
-/**
- * Implements hook_file_download().
- */
-function file_test_file_download($uri) {
-  _file_test_log_call('download', array($uri));
-  return _file_test_get_return('download');
-}
-
-/**
- * Implements hook_file_insert().
- */
-function file_test_file_insert($file) {
-  _file_test_log_call('insert', array($file));
-}
-
-/**
- * Implements hook_file_update().
- */
-function file_test_file_update($file) {
-  _file_test_log_call('update', array($file));
-}
-
-/**
- * Implements hook_file_copy().
- */
-function file_test_file_copy($file, $source) {
-  _file_test_log_call('copy', array($file, $source));
-}
-
-/**
- * Implements hook_file_move().
- */
-function file_test_file_move($file, $source) {
-  _file_test_log_call('move', array($file, $source));
-}
-
-/**
- * Implements hook_file_delete().
- */
-function file_test_file_delete($file) {
-  _file_test_log_call('delete', array($file));
-}
-
-/**
- * Implements hook_file_url_alter().
- */
-function file_test_file_url_alter(&$uri) {
-  // Only run this hook when this variable is set. Otherwise, we'd have to add
-  // another hidden test module just for this hook.
-  $alter_mode = variable_get('file_test_hook_file_url_alter', FALSE);
-  if (!$alter_mode) {
-    return;
-  }
-  // Test alteration of file URLs to use a CDN.
-  elseif ($alter_mode == 'cdn') {
-    $cdn_extensions = array('css', 'js', 'gif', 'jpg', 'jpeg', 'png');
-
-    // Most CDNs don't support private file transfers without a lot of hassle,
-    // so don't support this in the common case.
-    $schemes = array('public');
-
-    $scheme = file_uri_scheme($uri);
-
-    // Only serve shipped files and public created files from the CDN.
-    if (!$scheme || in_array($scheme, $schemes)) {
-      // Shipped files.
-      if (!$scheme) {
-        $path = $uri;
-      }
-      // Public created files.
-      else {
-        $wrapper = file_stream_wrapper_get_instance_by_scheme($scheme);
-        $path = $wrapper->getDirectoryPath() . '/' . file_uri_target($uri);
-      }
-
-      // Clean up Windows paths.
-      $path = str_replace('\\', '/', $path);
-
-      // Serve files with one of the CDN extensions from CDN 1, all others from
-      // CDN 2.
-      $pathinfo = pathinfo($path);
-      if (array_key_exists('extension', $pathinfo) && in_array($pathinfo['extension'], $cdn_extensions)) {
-        $uri = FILE_URL_TEST_CDN_1 . '/' . $path;
-      }
-      else {
-        $uri = FILE_URL_TEST_CDN_2 . '/' . $path;
-      }
-    }
-  }
-  // Test alteration of file URLs to use root-relative URLs.
-  elseif ($alter_mode == 'root-relative') {
-    // Only serve shipped files and public created files with root-relative
-    // URLs.
-    $scheme = file_uri_scheme($uri);
-    if (!$scheme || $scheme == 'public') {
-      // Shipped files.
-      if (!$scheme) {
-        $path = $uri;
-      }
-      // Public created files.
-      else {
-        $wrapper = file_stream_wrapper_get_instance_by_scheme($scheme);
-        $path = $wrapper->getDirectoryPath() . '/' . file_uri_target($uri);
-      }
-
-      // Clean up Windows paths.
-      $path = str_replace('\\', '/', $path);
-
-      // Generate a root-relative URL.
-      $uri = base_path() . '/' . $path;
-    }
-  }
-  // Test alteration of file URLs to use protocol-relative URLs.
-  elseif ($alter_mode == 'protocol-relative') {
-    // Only serve shipped files and public created files with protocol-relative
-    // URLs.
-    $scheme = file_uri_scheme($uri);
-    if (!$scheme || $scheme == 'public') {
-      // Shipped files.
-      if (!$scheme) {
-        $path = $uri;
-      }
-      // Public created files.
-      else {
-        $wrapper = file_stream_wrapper_get_instance_by_scheme($scheme);
-        $path = $wrapper->getDirectoryPath() . '/' . file_uri_target($uri);
-      }
-
-      // Clean up Windows paths.
-      $path = str_replace('\\', '/', $path);
-
-      // Generate a protocol-relative URL.
-      $uri = '/' . base_path() . '/' . $path;
-    }
-  }
-}
-
-/**
- * Implements hook_file_mimetype_mapping_alter().
- */
-function file_test_file_mimetype_mapping_alter(&$mapping) {
-  // Add new mappings.
-  $mapping['mimetypes']['file_test_mimetype_1'] = 'madeup/file_test_1';
-  $mapping['mimetypes']['file_test_mimetype_2'] = 'madeup/file_test_2';
-  $mapping['mimetypes']['file_test_mimetype_3'] = 'madeup/doc';
-  $mapping['extensions']['file_test_1'] = 'file_test_mimetype_1';
-  $mapping['extensions']['file_test_2'] = 'file_test_mimetype_2';
-  $mapping['extensions']['file_test_3'] = 'file_test_mimetype_2';
-  // Override existing mapping.
-  $mapping['extensions']['doc'] = 'file_test_mimetype_3';
-}
-
-/**
- * Helper class for testing the stream wrapper registry.
- *
- * Dummy stream wrapper implementation (dummy://).
- */
-class DrupalDummyStreamWrapper extends DrupalLocalStreamWrapper {
-  function getDirectoryPath() {
-    return variable_get('stream_public_path', 'sites/default/files');
-  }
-
-  /**
-   * Override getInternalUri().
-   *
-   * Return a dummy path for testing.
-   */
-  function getInternalUri() {
-    return '/dummy/example.txt';
-  }
-
-  /**
-   * Override getExternalUrl().
-   *
-   * Return the HTML URI of a public file.
-   */
-  function getExternalUrl() {
-    return '/dummy/example.txt';
-  }
-}
-
-/**
- * Helper class for testing the stream wrapper registry.
- *
- * Dummy remote stream wrapper implementation (dummy-remote://).
- *
- * Basically just the public scheme but not returning a local file for realpath.
- */
-class DrupalDummyRemoteStreamWrapper extends DrupalPublicStreamWrapper {
-  function realpath() {
-    return FALSE;
-  }
-}
diff --git a/modules/simpletest/tests/filetransfer.test b/modules/simpletest/tests/filetransfer.test
deleted file mode 100644
index 905d23c..0000000
--- a/modules/simpletest/tests/filetransfer.test
+++ /dev/null
@@ -1,168 +0,0 @@
-<?php
-
-
-class FileTranferTest extends DrupalWebTestCase {
-  protected $hostname = 'localhost';
-  protected $username = 'drupal';
-  protected $password = 'password';
-  protected $port = '42';
-
-  public static function getInfo() {
-    return array(
-      'name' => 'FileTransfer unit tests',
-      'description' => 'Test that the jail is respected and that protocols using recursive file move operations work.',
-      'group' => 'System'
-    );
-  }
-
-  function setUp() {
-    parent::setUp();
-    $this->testConnection = TestFileTransfer::factory(DRUPAL_ROOT, array('hostname' => $this->hostname, 'username' => $this->username, 'password' => $this->password, 'port' => $this->port));
-  }
-
-  function _getFakeModuleFiles() {
-    $files = array(
-      'fake.module',
-      'fake.info',
-      'theme' => array(
-        'fake.tpl.php'
-      ),
-      'inc' => array(
-        'fake.inc'
-      )
-    );
-    return $files;
-  }
-
-  function _buildFakeModule() {
-    $location = 'temporary://fake';
-    if (is_dir($location)) {
-      $ret = 0;
-      $output = array();
-      exec('rm -Rf ' . escapeshellarg($location), $output, $ret);
-      if ($ret != 0) {
-        throw new Exception('Error removing fake module directory.');
-      }
-    }
-
-    $files = $this->_getFakeModuleFiles();
-    $this->_writeDirectory($location, $files);
-    return $location;
-  }
-
-  function _writeDirectory($base, $files = array()) {
-    mkdir($base);
-    foreach ($files as $key => $file) {
-      if (is_array($file)) {
-        $this->_writeDirectory($base . DIRECTORY_SEPARATOR . $key, $file);
-      }
-      else {
-        //just write the filename into the file
-        file_put_contents($base . DIRECTORY_SEPARATOR . $file, $file);
-      }
-    }
-  }
-
-  function testJail() {
-    $source = $this->_buildFakeModule();
-
-    // This convoluted piece of code is here because our testing framework does
-    // not support expecting exceptions.
-    $gotit = FALSE;
-    try {
-      $this->testConnection->copyDirectory($source, '/tmp');
-    }
-    catch (FileTransferException $e) {
-      $gotit = TRUE;
-    }
-    $this->assertTrue($gotit, 'Was not able to copy a directory outside of the jailed area.');
-
-    $gotit = TRUE;
-    try {
-      $this->testConnection->copyDirectory($source, DRUPAL_ROOT . '/'. variable_get('file_public_path', conf_path() . '/files'));
-    }
-    catch (FileTransferException $e) {
-      $gotit = FALSE;
-    }
-    $this->assertTrue($gotit, 'Was able to copy a directory inside of the jailed area');
-  }
-}
-
-/**
- * Mock FileTransfer object for test case.
- */
-class TestFileTransfer extends FileTransfer {
-  protected $host = NULL;
-  protected $username = NULL;
-  protected $password = NULL;
-  protected $port = NULL;
-
-  /**
-   * This is for testing the CopyRecursive logic.
-   */
-  public $shouldIsDirectoryReturnTrue = FALSE;
-
-  function __construct($jail, $username, $password, $hostname = 'localhost', $port = 9999) {
-    parent::__construct($jail, $username, $password, $hostname, $port);
-  }
-
-  static function factory($jail, $settings) {
-    return new TestFileTransfer($jail, $settings['username'], $settings['password'], $settings['hostname'], $settings['port']);
-  }
-
-  function connect() {
-    $parts = explode(':', $this->hostname);
-    $port = (count($parts) == 2) ? $parts[1] : $this->port;
-    $this->connection = new MockTestConnection();
-    $this->connection->connectionString = 'test://' . urlencode($this->username) . ':' . urlencode($this->password) . "@$this->host:$this->port/";
-  }
-
-  function copyFileJailed($source, $destination) {
-    $this->connection->run("copyFile $source $destination");
-  }
-
-  protected function removeDirectoryJailed($directory) {
-    $this->connection->run("rmdir $directory");
-  }
-
-  function createDirectoryJailed($directory) {
-    $this->connection->run("mkdir $directory");
-  }
-
-  function removeFileJailed($destination) {
-    if (!ftp_delete($this->connection, $item)) {
-      throw new FileTransferException('Unable to remove to file @file.', NULL, array('@file' => $item));
-    }
-  }
-
-  function isDirectory($path) {
-    return $this->shouldIsDirectoryReturnTrue;
-  }
-
-  function isFile($path) {
-    return FALSE;
-  }
-
-  function chmodJailed($path, $mode, $recursive) {
-    return;
-  }
-}
-
-/**
- * Mock connection object for test case.
- */
-class MockTestConnection {
-
-  var $commandsRun = array();
-  var $connectionString;
-
-  function run($cmd) {
-    $this->commandsRun[] = $cmd;
-  }
-
-  function flushCommands() {
-    $out = $this->commandsRun;
-    $this->commandsRun = array();
-    return $out;
-  }
-}
diff --git a/modules/simpletest/tests/filter_test.info b/modules/simpletest/tests/filter_test.info
deleted file mode 100644
index 4b887ca..0000000
--- a/modules/simpletest/tests/filter_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = Filter test module
-description = Tests filter hooks and functions.
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/filter_test.module b/modules/simpletest/tests/filter_test.module
deleted file mode 100644
index 63b7f66..0000000
--- a/modules/simpletest/tests/filter_test.module
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-/**
- * @file
- * Test module for Filter module hooks and functions not used in core.
- */
-
-/**
- * Implements hook_filter_format_insert().
- */
-function filter_test_filter_format_insert($format) {
-  drupal_set_message('hook_filter_format_insert invoked.');
-}
-
-/**
- * Implements hook_filter_format_update().
- */
-function filter_test_filter_format_update($format) {
-  drupal_set_message('hook_filter_format_update invoked.');
-}
-
-/**
- * Implements hook_filter_format_disable().
- */
-function filter_test_filter_format_disable($format) {
-  drupal_set_message('hook_filter_format_disable invoked.');
-}
-
-/**
- * Implements hook_filter_info().
- */
-function filter_test_filter_info() {
-  $filters['filter_test_uncacheable'] = array(
-    'title' => 'Uncacheable filter',
-    'description' => 'Does nothing, but makes a text format uncacheable.',
-    'cache' => FALSE,
-  );
-  $filters['filter_test_replace'] = array(
-    'title' => 'Testing filter',
-    'description' => 'Replaces all content with filter and text format information.',
-    'process callback' => 'filter_test_replace',
-  );
-  return $filters;
-}
-
-/**
- * Implements callback_filter_process().
- *
- * Process handler for filter_test_replace filter.
- *
- * Replaces all text with filter and text format information.
- */
-function filter_test_replace($text, $filter, $format, $langcode, $cache, $cache_id) {
-  $text = array();
-  $text[] = 'Filter: ' . $filter->title . ' (' . $filter->name . ')';
-  $text[] = 'Format: ' . $format->name . ' (' . $format->format . ')';
-  $text[] = 'Language: ' . $langcode;
-  $text[] = 'Cache: ' . ($cache ? 'Enabled' : 'Disabled');
-  if ($cache_id) {
-    $text[] = 'Cache ID: ' . $cache_id;
-  }
-  return implode("<br />\n", $text);
-}
-
diff --git a/modules/simpletest/tests/form_test.file.inc b/modules/simpletest/tests/form_test.file.inc
deleted file mode 100644
index f9197ea..0000000
--- a/modules/simpletest/tests/form_test.file.inc
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-
-/**
- * @file
- * An include file to test loading it with the form API.
- */
-
-/**
- * Form constructor for testing FAPI file inclusion of the file specified in
- * hook_menu().
- */
-function form_test_load_include_menu($form, &$form_state) {
-  // Submit the form via Ajax. That way the FAPI has to care about including
-  // the file specified in hook_menu().
-  $ajax_wrapper_id = drupal_html_id('form-test-load-include-menu-ajax-wrapper');
-  $form['ajax_wrapper'] = array(
-    '#markup' => '<div id="' . $ajax_wrapper_id . '"></div>',
-  );
-  $form['button'] = array(
-    '#type' => 'submit',
-    '#value' => t('Save'),
-    '#submit' => array('form_test_load_include_submit'),
-    '#ajax' => array(
-      'wrapper' => $ajax_wrapper_id,
-      'method' => 'append',
-      'callback' => 'form_test_load_include_menu_ajax',
-    ),
-  );
-  return $form;
-}
-
-/**
- * Submit callback for the form API file inclusion test forms.
- */
-function form_test_load_include_submit($form, $form_state) {
-  drupal_set_message('Submit callback called.');
-}
-
-/**
- * Ajax callback for the file inclusion via menu test.
- */
-function form_test_load_include_menu_ajax($form) {
-  // We don't need to return anything, since #ajax['method'] is 'append', which
-  // does not remove the original #ajax['wrapper'] element, and status messages
-  // are automatically added by the Ajax framework as long as there's a wrapper
-  // element to add them to.
-  return '';
-}
diff --git a/modules/simpletest/tests/form_test.info b/modules/simpletest/tests/form_test.info
deleted file mode 100644
index ac1d864..0000000
--- a/modules/simpletest/tests/form_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "FormAPI Test"
-description = "Support module for Form API tests."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/graph.test b/modules/simpletest/tests/graph.test
deleted file mode 100644
index 691744e..0000000
--- a/modules/simpletest/tests/graph.test
+++ /dev/null
@@ -1,195 +0,0 @@
-<?php
-
-/**
- * @file
- * Provides unit tests for graph.inc.
- */
-
-/**
- * Unit tests for the graph handling features.
- */
-class GraphUnitTest extends DrupalUnitTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Graph',
-      'description' => 'Graph handling unit tests.',
-      'group' => 'System',
-    );
-  }
-
-  function setUp() {
-    require_once DRUPAL_ROOT . '/includes/graph.inc';
-    parent::setUp();
-  }
-
-  /**
-   * Test depth-first-search features.
-   */
-  function testDepthFirstSearch() {
-    // The sample graph used is:
-    // 1 --> 2 --> 3     5 ---> 6
-    //       |     ^     ^
-    //       |     |     |
-    //       |     |     |
-    //       +---> 4 <-- 7      8 ---> 9
-    $graph = $this->normalizeGraph(array(
-      1 => array(2),
-      2 => array(3, 4),
-      3 => array(),
-      4 => array(3),
-      5 => array(6),
-      7 => array(4, 5),
-      8 => array(9),
-      9 => array(),
-    ));
-    drupal_depth_first_search($graph);
-
-    $expected_paths = array(
-      1 => array(2, 3, 4),
-      2 => array(3, 4),
-      3 => array(),
-      4 => array(3),
-      5 => array(6),
-      7 => array(4, 3, 5, 6),
-      8 => array(9),
-      9 => array(),
-    );
-    $this->assertPaths($graph, $expected_paths);
-
-    $expected_reverse_paths = array(
-      1 => array(),
-      2 => array(1),
-      3 => array(2, 1, 4, 7),
-      4 => array(2, 1, 7),
-      5 => array(7),
-      7 => array(),
-      8 => array(),
-      9 => array(8),
-    );
-    $this->assertReversePaths($graph, $expected_reverse_paths);
-
-    // Assert that DFS didn't created "missing" vertexes automatically.
-    $this->assertFALSE(isset($graph[6]), 'Vertex 6 has not been created');
-
-    $expected_components = array(
-      array(1, 2, 3, 4, 5, 7),
-      array(8, 9),
-    );
-    $this->assertComponents($graph, $expected_components);
-
-    $expected_weights = array(
-      array(1, 2, 3),
-      array(2, 4, 3),
-      array(7, 4, 3),
-      array(7, 5),
-      array(8, 9),
-    );
-    $this->assertWeights($graph, $expected_weights);
-  }
-
-  /**
-   * Return a normalized version of a graph.
-   */
-  function normalizeGraph($graph) {
-    $normalized_graph = array();
-    foreach ($graph as $vertex => $edges) {
-      // Create vertex even if it hasn't any edges.
-      $normalized_graph[$vertex] = array();
-      foreach ($edges as $edge) {
-        $normalized_graph[$vertex]['edges'][$edge] = TRUE;
-      }
-    }
-    return $normalized_graph;
-  }
-
-  /**
-   * Verify expected paths in a graph.
-   *
-   * @param $graph
-   *   A graph array processed by drupal_depth_first_search().
-   * @param $expected_paths
-   *   An associative array containing vertices with their expected paths.
-   */
-  function assertPaths($graph, $expected_paths) {
-    foreach ($expected_paths as $vertex => $paths) {
-      // Build an array with keys = $paths and values = TRUE.
-      $expected = array_fill_keys($paths, TRUE);
-      $result = isset($graph[$vertex]['paths']) ? $graph[$vertex]['paths'] : array();
-      $this->assertEqual($expected, $result, format_string('Expected paths for vertex @vertex: @expected-paths, got @paths', array('@vertex' => $vertex, '@expected-paths' => $this->displayArray($expected, TRUE), '@paths' => $this->displayArray($result, TRUE))));
-    }
-  }
-
-  /**
-   * Verify expected reverse paths in a graph.
-   *
-   * @param $graph
-   *   A graph array processed by drupal_depth_first_search().
-   * @param $expected_reverse_paths
-   *   An associative array containing vertices with their expected reverse
-   *   paths.
-   */
-  function assertReversePaths($graph, $expected_reverse_paths) {
-    foreach ($expected_reverse_paths as $vertex => $paths) {
-      // Build an array with keys = $paths and values = TRUE.
-      $expected = array_fill_keys($paths, TRUE);
-      $result = isset($graph[$vertex]['reverse_paths']) ? $graph[$vertex]['reverse_paths'] : array();
-      $this->assertEqual($expected, $result, format_string('Expected reverse paths for vertex @vertex: @expected-paths, got @paths', array('@vertex' => $vertex, '@expected-paths' => $this->displayArray($expected, TRUE), '@paths' => $this->displayArray($result, TRUE))));
-    }
-  }
-
-  /**
-   * Verify expected components in a graph.
-   *
-   * @param $graph
-   *   A graph array processed by drupal_depth_first_search().
-   * @param $expected_components
-   *   An array containing of components defined as a list of their vertices.
-   */
-  function assertComponents($graph, $expected_components) {
-    $unassigned_vertices = array_fill_keys(array_keys($graph), TRUE);
-    foreach ($expected_components as $component) {
-      $result_components = array();
-      foreach ($component as $vertex) {
-        $result_components[] = $graph[$vertex]['component'];
-        unset($unassigned_vertices[$vertex]);
-      }
-      $this->assertEqual(1, count(array_unique($result_components)), format_string('Expected one unique component for vertices @vertices, got @components', array('@vertices' => $this->displayArray($component), '@components' => $this->displayArray($result_components))));
-    }
-    $this->assertEqual(array(), $unassigned_vertices, format_string('Vertices not assigned to a component: @vertices', array('@vertices' => $this->displayArray($unassigned_vertices, TRUE))));
-  }
-
-  /**
-   * Verify expected order in a graph.
-   *
-   * @param $graph
-   *   A graph array processed by drupal_depth_first_search().
-   * @param $expected_orders
-   *   An array containing lists of vertices in their expected order.
-   */
-  function assertWeights($graph, $expected_orders) {
-    foreach ($expected_orders as $order) {
-      $previous_vertex = array_shift($order);
-      foreach ($order as $vertex) {
-        $this->assertTrue($graph[$previous_vertex]['weight'] < $graph[$vertex]['weight'], format_string('Weights of @previous-vertex and @vertex are correct relative to each other', array('@previous-vertex' => $previous_vertex, '@vertex' => $vertex)));
-      }
-    }
-  }
-
-  /**
-   * Helper function to output vertices as comma-separated list.
-   *
-   * @param $paths
-   *   An array containing a list of vertices.
-   * @param $keys
-   *   (optional) Whether to output the keys of $paths instead of the values.
-   */
-  function displayArray($paths, $keys = FALSE) {
-    if (!empty($paths)) {
-      return implode(', ', $keys ? array_keys($paths) : $paths);
-    }
-    else {
-      return '(empty)';
-    }
-  }
-}
-
diff --git a/modules/simpletest/tests/http.php b/modules/simpletest/tests/http.php
deleted file mode 100644
index a22938d..0000000
--- a/modules/simpletest/tests/http.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-/**
- * @file
- * Fake an HTTP request, for use during testing.
- */
-
-// Set a global variable to indicate a mock HTTP request.
-$is_http_mock = !empty($_SERVER['HTTPS']);
-
-// Change to HTTP.
-$_SERVER['HTTPS'] = NULL;
-ini_set('session.cookie_secure', FALSE);
-foreach ($_SERVER as $key => $value) {
-  $_SERVER[$key] = str_replace('modules/simpletest/tests/http.php', 'index.php', $value);
-  $_SERVER[$key] = str_replace('https://', 'http://', $_SERVER[$key]);
-}
-
-// Change current directory to the Drupal root.
-chdir('../../..');
-define('DRUPAL_ROOT', getcwd());
-require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
-
-// Make sure this file can only be used by simpletest.
-drupal_bootstrap(DRUPAL_BOOTSTRAP_CONFIGURATION);
-if (!drupal_valid_test_ua()) {
-  header($_SERVER['SERVER_PROTOCOL'] . ' 403 Forbidden');
-  exit;
-}
-
-drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
-menu_execute_active_handler();
diff --git a/modules/simpletest/tests/https.php b/modules/simpletest/tests/https.php
deleted file mode 100644
index 0e1a4ed..0000000
--- a/modules/simpletest/tests/https.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-/**
- * @file
- * Fake an HTTPS request, for use during testing.
- */
-
-// Set a global variable to indicate a mock HTTPS request.
-$is_https_mock = empty($_SERVER['HTTPS']);
-
-// Change to HTTPS.
-$_SERVER['HTTPS'] = 'on';
-foreach ($_SERVER as $key => $value) {
-  $_SERVER[$key] = str_replace('modules/simpletest/tests/https.php', 'index.php', $value);
-  $_SERVER[$key] = str_replace('http://', 'https://', $_SERVER[$key]);
-}
-
-// Change current directory to the Drupal root.
-chdir('../../..');
-define('DRUPAL_ROOT', getcwd());
-require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
-
-// Make sure this file can only be used by simpletest.
-drupal_bootstrap(DRUPAL_BOOTSTRAP_CONFIGURATION);
-if (!drupal_valid_test_ua()) {
-  header($_SERVER['SERVER_PROTOCOL'] . ' 403 Forbidden');
-  exit;
-}
-
-drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
-menu_execute_active_handler();
diff --git a/modules/simpletest/tests/image.test b/modules/simpletest/tests/image.test
deleted file mode 100644
index dc95a6e..0000000
--- a/modules/simpletest/tests/image.test
+++ /dev/null
@@ -1,507 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for core image handling API.
- */
-
-/**
- * Base class for image manipulation testing.
- */
-class ImageToolkitTestCase extends DrupalWebTestCase {
-  protected $toolkit;
-  protected $file;
-  protected $image;
-
-  function setUp() {
-    $modules = func_get_args();
-    if (isset($modules[0]) && is_array($modules[0])) {
-      $modules = $modules[0];
-    }
-    $modules[] = 'image_test';
-
-    parent::setUp($modules);
-
-    // Use the image_test.module's test toolkit.
-    $this->toolkit = 'test';
-
-    // Pick a file for testing.
-    $file = current($this->drupalGetTestFiles('image'));
-    $this->file = $file->uri;
-
-    // Setup a dummy image to work with, this replicate image_load() so we
-    // can avoid calling it.
-    $this->image = new stdClass();
-    $this->image->source = $this->file;
-    $this->image->info = image_get_info($this->file);
-    $this->image->toolkit = $this->toolkit;
-
-    // Clear out any hook calls.
-    image_test_reset();
-  }
-
-  /**
-   * Assert that all of the specified image toolkit operations were called
-   * exactly once once, other values result in failure.
-   *
-   * @param $expected
-   *   Array with string containing with the operation name, e.g. 'load',
-   *   'save', 'crop', etc.
-   */
-  function assertToolkitOperationsCalled(array $expected) {
-    // Determine which operations were called.
-    $actual = array_keys(array_filter(image_test_get_all_calls()));
-
-    // Determine if there were any expected that were not called.
-    $uncalled = array_diff($expected, $actual);
-    if (count($uncalled)) {
-      $this->assertTrue(FALSE, format_string('Expected operations %expected to be called but %uncalled was not called.', array('%expected' => implode(', ', $expected), '%uncalled' => implode(', ', $uncalled))));
-    }
-    else {
-      $this->assertTrue(TRUE, format_string('All the expected operations were called: %expected', array('%expected' => implode(', ', $expected))));
-    }
-
-    // Determine if there were any unexpected calls.
-    $unexpected = array_diff($actual, $expected);
-    if (count($unexpected)) {
-      $this->assertTrue(FALSE, format_string('Unexpected operations were called: %unexpected.', array('%unexpected' => implode(', ', $unexpected))));
-    }
-    else {
-      $this->assertTrue(TRUE, 'No unexpected operations were called.');
-    }
-  }
-}
-
-/**
- * Test that the functions in image.inc correctly pass data to the toolkit.
- */
-class ImageToolkitUnitTest extends ImageToolkitTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Image toolkit tests',
-      'description' => 'Check image toolkit functions.',
-      'group' => 'Image',
-    );
-  }
-
-  /**
-   * Check that hook_image_toolkits() is called and only available toolkits are
-   * returned.
-   */
-  function testGetAvailableToolkits() {
-    $toolkits = image_get_available_toolkits();
-    $this->assertTrue(isset($toolkits['test']), 'The working toolkit was returned.');
-    $this->assertFalse(isset($toolkits['broken']), 'The toolkit marked unavailable was not returned');
-    $this->assertToolkitOperationsCalled(array());
-  }
-
-  /**
-   * Test the image_load() function.
-   */
-  function testLoad() {
-    $image = image_load($this->file, $this->toolkit);
-    $this->assertTrue(is_object($image), 'Returned an object.');
-    $this->assertEqual($this->toolkit, $image->toolkit, 'Image had toolkit set.');
-    $this->assertToolkitOperationsCalled(array('load', 'get_info'));
-  }
-
-  /**
-   * Test the image_save() function.
-   */
-  function testSave() {
-    $this->assertFalse(image_save($this->image), 'Function returned the expected value.');
-    $this->assertToolkitOperationsCalled(array('save'));
-  }
-
-  /**
-   * Test the image_resize() function.
-   */
-  function testResize() {
-    $this->assertTrue(image_resize($this->image, 1, 2), 'Function returned the expected value.');
-    $this->assertToolkitOperationsCalled(array('resize'));
-
-    // Check the parameters.
-    $calls = image_test_get_all_calls();
-    $this->assertEqual($calls['resize'][0][1], 1, 'Width was passed correctly');
-    $this->assertEqual($calls['resize'][0][2], 2, 'Height was passed correctly');
-  }
-
-  /**
-   * Test the image_scale() function.
-   */
-  function testScale() {
-// TODO: need to test upscaling
-    $this->assertTrue(image_scale($this->image, 10, 10), 'Function returned the expected value.');
-    $this->assertToolkitOperationsCalled(array('resize'));
-
-    // Check the parameters.
-    $calls = image_test_get_all_calls();
-    $this->assertEqual($calls['resize'][0][1], 10, 'Width was passed correctly');
-    $this->assertEqual($calls['resize'][0][2], 5, 'Height was based off aspect ratio and passed correctly');
-  }
-
-  /**
-   * Test the image_scale_and_crop() function.
-   */
-  function testScaleAndCrop() {
-    $this->assertTrue(image_scale_and_crop($this->image, 5, 10), 'Function returned the expected value.');
-    $this->assertToolkitOperationsCalled(array('resize', 'crop'));
-
-    // Check the parameters.
-    $calls = image_test_get_all_calls();
-
-    $this->assertEqual($calls['crop'][0][1], 7.5, 'X was computed and passed correctly');
-    $this->assertEqual($calls['crop'][0][2], 0, 'Y was computed and passed correctly');
-    $this->assertEqual($calls['crop'][0][3], 5, 'Width was computed and passed correctly');
-    $this->assertEqual($calls['crop'][0][4], 10, 'Height was computed and passed correctly');
-  }
-
-  /**
-   * Test the image_rotate() function.
-   */
-  function testRotate() {
-    $this->assertTrue(image_rotate($this->image, 90, 1), 'Function returned the expected value.');
-    $this->assertToolkitOperationsCalled(array('rotate'));
-
-    // Check the parameters.
-    $calls = image_test_get_all_calls();
-    $this->assertEqual($calls['rotate'][0][1], 90, 'Degrees were passed correctly');
-    $this->assertEqual($calls['rotate'][0][2], 1, 'Background color was passed correctly');
-  }
-
-  /**
-   * Test the image_crop() function.
-   */
-  function testCrop() {
-    $this->assertTrue(image_crop($this->image, 1, 2, 3, 4), 'Function returned the expected value.');
-    $this->assertToolkitOperationsCalled(array('crop'));
-
-    // Check the parameters.
-    $calls = image_test_get_all_calls();
-    $this->assertEqual($calls['crop'][0][1], 1, 'X was passed correctly');
-    $this->assertEqual($calls['crop'][0][2], 2, 'Y was passed correctly');
-    $this->assertEqual($calls['crop'][0][3], 3, 'Width was passed correctly');
-    $this->assertEqual($calls['crop'][0][4], 4, 'Height was passed correctly');
-  }
-
-  /**
-   * Test the image_desaturate() function.
-   */
-  function testDesaturate() {
-    $this->assertTrue(image_desaturate($this->image), 'Function returned the expected value.');
-    $this->assertToolkitOperationsCalled(array('desaturate'));
-
-    // Check the parameters.
-    $calls = image_test_get_all_calls();
-    $this->assertEqual(count($calls['desaturate'][0]), 1, 'Only the image was passed.');
-  }
-}
-
-/**
- * Test the core GD image manipulation functions.
- */
-class ImageToolkitGdTestCase extends DrupalWebTestCase {
-  // Colors that are used in testing.
-  protected $black       = array(0, 0, 0, 0);
-  protected $red         = array(255, 0, 0, 0);
-  protected $green       = array(0, 255, 0, 0);
-  protected $blue        = array(0, 0, 255, 0);
-  protected $yellow      = array(255, 255, 0, 0);
-  protected $fuchsia     = array(255, 0, 255, 0); // Used as background colors.
-  protected $transparent = array(0, 0, 0, 127);
-  protected $white       = array(255, 255, 255, 0);
-
-  protected $width = 40;
-  protected $height = 20;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Image GD manipulation tests',
-      'description' => 'Check that core image manipulations work properly: scale, resize, rotate, crop, scale and crop, and desaturate.',
-      'group' => 'Image',
-    );
-  }
-
-  /**
-   * Function to compare two colors by RGBa.
-   */
-  function colorsAreEqual($color_a, $color_b) {
-    // Fully transparent pixels are equal, regardless of RGB.
-    if ($color_a[3] == 127 && $color_b[3] == 127) {
-      return TRUE;
-    }
-
-    foreach ($color_a as $key => $value) {
-      if ($color_b[$key] != $value) {
-        return FALSE;
-      }
-    }
-
-    return TRUE;
-  }
-
-  /**
-   * Function for finding a pixel's RGBa values.
-   */
-  function getPixelColor($image, $x, $y) {
-    $color_index = imagecolorat($image->resource, $x, $y);
-
-    $transparent_index = imagecolortransparent($image->resource);
-    if ($color_index == $transparent_index) {
-      return array(0, 0, 0, 127);
-    }
-
-    return array_values(imagecolorsforindex($image->resource, $color_index));
-  }
-
-  /**
-   * Since PHP can't visually check that our images have been manipulated
-   * properly, build a list of expected color values for each of the corners and
-   * the expected height and widths for the final images.
-   */
-  function testManipulations() {
-    // If GD isn't available don't bother testing this.
-    if (!function_exists('image_gd_check_settings') || !image_gd_check_settings()) {
-      $this->pass(t('Image manipulations for the GD toolkit were skipped because the GD toolkit is not available.'));
-      return;
-    }
-
-    // Typically the corner colors will be unchanged. These colors are in the
-    // order of top-left, top-right, bottom-right, bottom-left.
-    $default_corners = array($this->red, $this->green, $this->blue, $this->transparent);
-
-    // A list of files that will be tested.
-    $files = array(
-      'image-test.png',
-      'image-test.gif',
-      'image-test.jpg',
-    );
-
-    // Setup a list of tests to perform on each type.
-    $operations = array(
-      'resize' => array(
-        'function' => 'resize',
-        'arguments' => array(20, 10),
-        'width' => 20,
-        'height' => 10,
-        'corners' => $default_corners,
-      ),
-      'scale_x' => array(
-        'function' => 'scale',
-        'arguments' => array(20, NULL),
-        'width' => 20,
-        'height' => 10,
-        'corners' => $default_corners,
-      ),
-      'scale_y' => array(
-        'function' => 'scale',
-        'arguments' => array(NULL, 10),
-        'width' => 20,
-        'height' => 10,
-        'corners' => $default_corners,
-      ),
-      'upscale_x' => array(
-        'function' => 'scale',
-        'arguments' => array(80, NULL, TRUE),
-        'width' => 80,
-        'height' => 40,
-        'corners' => $default_corners,
-      ),
-      'upscale_y' => array(
-        'function' => 'scale',
-        'arguments' => array(NULL, 40, TRUE),
-        'width' => 80,
-        'height' => 40,
-        'corners' => $default_corners,
-      ),
-      'crop' => array(
-        'function' => 'crop',
-        'arguments' => array(12, 4, 16, 12),
-        'width' => 16,
-        'height' => 12,
-        'corners' => array_fill(0, 4, $this->white),
-      ),
-      'scale_and_crop' => array(
-        'function' => 'scale_and_crop',
-        'arguments' => array(10, 8),
-        'width' => 10,
-        'height' => 8,
-        'corners' => array_fill(0, 4, $this->black),
-      ),
-    );
-
-    // Systems using non-bundled GD2 don't have imagerotate. Test if available.
-    if (function_exists('imagerotate')) {
-      $operations += array(
-        'rotate_5' => array(
-          'function' => 'rotate',
-          'arguments' => array(5, 0xFF00FF), // Fuchsia background.
-          'width' => 42,
-          'height' => 24,
-          'corners' => array_fill(0, 4, $this->fuchsia),
-        ),
-        'rotate_90' => array(
-          'function' => 'rotate',
-          'arguments' => array(90, 0xFF00FF), // Fuchsia background.
-          'width' => 20,
-          'height' => 40,
-          'corners' => array($this->fuchsia, $this->red, $this->green, $this->blue),
-        ),
-        'rotate_transparent_5' => array(
-          'function' => 'rotate',
-          'arguments' => array(5),
-          'width' => 42,
-          'height' => 24,
-          'corners' => array_fill(0, 4, $this->transparent),
-        ),
-        'rotate_transparent_90' => array(
-          'function' => 'rotate',
-          'arguments' => array(90),
-          'width' => 20,
-          'height' => 40,
-          'corners' => array($this->transparent, $this->red, $this->green, $this->blue),
-        ),
-      );
-    }
-
-    // Systems using non-bundled GD2 don't have imagefilter. Test if available.
-    if (function_exists('imagefilter')) {
-      $operations += array(
-        'desaturate' => array(
-          'function' => 'desaturate',
-          'arguments' => array(),
-          'height' => 20,
-          'width' => 40,
-          // Grayscale corners are a bit funky. Each of the corners are a shade of
-          // gray. The values of these were determined simply by looking at the
-          // final image to see what desaturated colors end up being.
-          'corners' => array(
-            array_fill(0, 3, 76) + array(3 => 0),
-            array_fill(0, 3, 149) + array(3 => 0),
-            array_fill(0, 3, 29) + array(3 => 0),
-            array_fill(0, 3, 0) + array(3 => 127)
-          ),
-        ),
-      );
-    }
-
-    foreach ($files as $file) {
-      foreach ($operations as $op => $values) {
-        // Load up a fresh image.
-        $image = image_load(drupal_get_path('module', 'simpletest') . '/files/' . $file, 'gd');
-        if (!$image) {
-          $this->fail(t('Could not load image %file.', array('%file' => $file)));
-          continue 2;
-        }
-
-        // Transparent GIFs and the imagefilter function don't work together.
-        // There is a todo in image.gd.inc to correct this.
-        if ($image->info['extension'] == 'gif') {
-          if ($op == 'desaturate') {
-            $values['corners'][3] = $this->white;
-          }
-        }
-
-        // Perform our operation.
-        $function = 'image_' . $values['function'];
-        $arguments = array();
-        $arguments[] = &$image;
-        $arguments = array_merge($arguments, $values['arguments']);
-        call_user_func_array($function, $arguments);
-
-        // To keep from flooding the test with assert values, make a general
-        // value for whether each group of values fail.
-        $correct_dimensions_real = TRUE;
-        $correct_dimensions_object = TRUE;
-        $correct_colors = TRUE;
-
-        // Check the real dimensions of the image first.
-        if (imagesy($image->resource) != $values['height'] || imagesx($image->resource) != $values['width']) {
-          $correct_dimensions_real = FALSE;
-        }
-
-        // Check that the image object has an accurate record of the dimensions.
-        if ($image->info['width'] != $values['width'] || $image->info['height'] != $values['height']) {
-          $correct_dimensions_object = FALSE;
-        }
-        // Now check each of the corners to ensure color correctness.
-        foreach ($values['corners'] as $key => $corner) {
-          // Get the location of the corner.
-          switch ($key) {
-            case 0:
-              $x = 0;
-              $y = 0;
-              break;
-            case 1:
-              $x = $values['width'] - 1;
-              $y = 0;
-              break;
-            case 2:
-              $x = $values['width'] - 1;
-              $y = $values['height'] - 1;
-              break;
-            case 3:
-              $x = 0;
-              $y = $values['height'] - 1;
-              break;
-          }
-          $color = $this->getPixelColor($image, $x, $y);
-          $correct_colors = $this->colorsAreEqual($color, $corner);
-        }
-
-        $directory = file_default_scheme() . '://imagetests';
-        file_prepare_directory($directory, FILE_CREATE_DIRECTORY);
-        image_save($image, $directory . '/' . $op . '.' . $image->info['extension']);
-
-        $this->assertTrue($correct_dimensions_real, format_string('Image %file after %action action has proper dimensions.', array('%file' => $file, '%action' => $op)));
-        $this->assertTrue($correct_dimensions_object, format_string('Image %file object after %action action is reporting the proper height and width values.', array('%file' => $file, '%action' => $op)));
-        // JPEG colors will always be messed up due to compression.
-        if ($image->info['extension'] != 'jpg') {
-          $this->assertTrue($correct_colors, format_string('Image %file object after %action action has the correct color placement.', array('%file' => $file, '%action' => $op)));
-        }
-      }
-    }
-
-  }
-}
-
-/**
- * Tests the file move function for managed files.
- */
-class ImageFileMoveTest extends ImageToolkitTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Image moving',
-      'description' => 'Tests the file move function for managed files.',
-      'group' => 'Image',
-    );
-  }
-
-  /**
-   * Tests moving a randomly generated image.
-   */
-  function testNormal() {
-    // Pick a file for testing.
-    $file = current($this->drupalGetTestFiles('image'));
-
-    // Create derivative image.
-    $style = image_style_load(key(image_styles()));
-    $derivative_uri = image_style_path($style['name'], $file->uri);
-    image_style_create_derivative($style, $file->uri, $derivative_uri);
-
-    // Check if derivative image exists.
-    $this->assertTrue(file_exists($derivative_uri), 'Make sure derivative image is generated successfully.');
-
-    // Clone the object so we don't have to worry about the function changing
-    // our reference copy.
-    $desired_filepath = 'public://' . $this->randomName();
-    $result = file_move(clone $file, $desired_filepath, FILE_EXISTS_ERROR);
-
-    // Check if image has been moved.
-    $this->assertTrue(file_exists($result->uri), 'Make sure image is moved successfully.');
-
-    // Check if derivative image has been flushed.
-    $this->assertFalse(file_exists($derivative_uri), 'Make sure derivative image has been flushed.');
-  }
-}
-
diff --git a/modules/simpletest/tests/image_test.info b/modules/simpletest/tests/image_test.info
deleted file mode 100644
index a9ef05a..0000000
--- a/modules/simpletest/tests/image_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Image test"
-description = "Support module for image toolkit tests."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/image_test.module b/modules/simpletest/tests/image_test.module
deleted file mode 100644
index de640f0..0000000
--- a/modules/simpletest/tests/image_test.module
+++ /dev/null
@@ -1,138 +0,0 @@
-<?php
-
-/**
- * @file
- * Helper module for the image tests.
- */
-
-/**
- * Implements hook_image_toolkits().
- */
-function image_test_image_toolkits() {
-  return array(
-    'test' => array(
-      'title' => t('A dummy toolkit that works'),
-      'available' => TRUE,
-    ),
-    'broken' => array(
-      'title' => t('A dummy toolkit that is "broken"'),
-      'available' => FALSE,
-    ),
-  );
-}
-
-/**
- * Reset/initialize the history of calls to the toolkit functions.
- *
- * @see image_test_get_all_calls()
- */
-function image_test_reset() {
-  // Keep track of calls to these operations
-  $results = array(
-    'load' => array(),
-    'save' => array(),
-    'settings' => array(),
-    'resize' => array(),
-    'rotate' => array(),
-    'crop' => array(),
-    'desaturate' => array(),
-  );
-  variable_set('image_test_results', $results);
-}
-
-/**
- * Get an array with the all the calls to the toolkits since image_test_reset()
- * was called.
- *
- * @return
- *   An array keyed by operation name ('load', 'save', 'settings', 'resize',
- *   'rotate', 'crop', 'desaturate') with values being arrays of parameters
- *   passed to each call.
- */
-function image_test_get_all_calls() {
-  return variable_get('image_test_results', array());
-}
-
-/**
- * Store the values passed to a toolkit call.
- *
- * @param $op
- *   One of the image toolkit operations: 'get_info', 'load', 'save',
- *   'settings', 'resize', 'rotate', 'crop', 'desaturate'.
- * @param $args
- *   Values passed to hook.
- *
- * @see image_test_get_all_calls()
- * @see image_test_reset()
- */
-function _image_test_log_call($op, $args) {
-  $results = variable_get('image_test_results', array());
-  $results[$op][] = $args;
-  variable_set('image_test_results', $results);
-}
-
-/**
- * Image tookit's settings operation.
- */
-function image_test_settings() {
-  _image_test_log_call('settings', array());
-  return array();
-}
-
-/**
- * Image toolkit's get_info operation.
- */
-function image_test_get_info(stdClass $image) {
-  _image_test_log_call('get_info', array($image));
-  return array();
-}
-
-/**
- * Image tookit's load operation.
- */
-function image_test_load(stdClass $image) {
-  _image_test_log_call('load', array($image));
-  return $image;
-}
-
-/**
- * Image tookit's save operation.
- */
-function image_test_save(stdClass $image, $destination) {
-  _image_test_log_call('save', array($image, $destination));
-  // Return false so that image_save() doesn't try to chmod the destination
-  // file that we didn't bother to create.
-  return FALSE;
-}
-
-/**
- * Image tookit's crop operation.
- */
-function image_test_crop(stdClass $image, $x, $y, $width, $height) {
-  _image_test_log_call('crop', array($image, $x, $y, $width, $height));
-  return TRUE;
-}
-
-/**
- * Image tookit's resize operation.
- */
-function image_test_resize(stdClass $image, $width, $height) {
-  _image_test_log_call('resize', array($image, $width, $height));
-  return TRUE;
-}
-
-/**
- * Image tookit's rotate operation.
- */
-function image_test_rotate(stdClass $image, $degrees, $background = NULL) {
-  _image_test_log_call('rotate', array($image, $degrees, $background));
-  return TRUE;
-}
-
-/**
- * Image tookit's desaturate operation.
- */
-function image_test_desaturate(stdClass $image) {
-  _image_test_log_call('desaturate', array($image));
-  return TRUE;
-}
diff --git a/modules/simpletest/tests/lock.test b/modules/simpletest/tests/lock.test
deleted file mode 100644
index 797befc..0000000
--- a/modules/simpletest/tests/lock.test
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-
-/**
- * Tests for the lock system.
- */
-class LockFunctionalTest extends DrupalWebTestCase {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Locking framework tests',
-      'description' => 'Confirm locking works between two separate requests.',
-      'group' => 'System',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('system_test');
-  }
-
-  /**
-   * Confirm that we can acquire and release locks in two parallel requests.
-   */
-  function testLockAcquire() {
-    $lock_acquired = 'TRUE: Lock successfully acquired in system_test_lock_acquire()';
-    $lock_not_acquired = 'FALSE: Lock not acquired in system_test_lock_acquire()';
-    $this->assertTrue(lock_acquire('system_test_lock_acquire'), 'Lock acquired by this request.', 'Lock');
-    $this->assertTrue(lock_acquire('system_test_lock_acquire'), 'Lock extended by this request.', 'Lock');
-    lock_release('system_test_lock_acquire');
-
-    // Cause another request to acquire the lock.
-    $this->drupalGet('system-test/lock-acquire');
-    $this->assertText($lock_acquired, 'Lock acquired by the other request.', 'Lock');
-    // The other request has finished, thus it should have released its lock.
-    $this->assertTrue(lock_acquire('system_test_lock_acquire'), 'Lock acquired by this request.', 'Lock');
-    // This request holds the lock, so the other request cannot acquire it.
-    $this->drupalGet('system-test/lock-acquire');
-    $this->assertText($lock_not_acquired, 'Lock not acquired by the other request.', 'Lock');
-    lock_release('system_test_lock_acquire');
-
-    // Try a very short timeout and lock breaking.
-    $this->assertTrue(lock_acquire('system_test_lock_acquire', 0.5), 'Lock acquired by this request.', 'Lock');
-    sleep(1);
-    // The other request should break our lock.
-    $this->drupalGet('system-test/lock-acquire');
-    $this->assertText($lock_acquired, 'Lock acquired by the other request, breaking our lock.', 'Lock');
-    // We cannot renew it, since the other thread took it.
-    $this->assertFalse(lock_acquire('system_test_lock_acquire'), 'Lock cannot be extended by this request.', 'Lock');
-
-    // Check the shut-down function.
-    $lock_acquired_exit = 'TRUE: Lock successfully acquired in system_test_lock_exit()';
-    $lock_not_acquired_exit = 'FALSE: Lock not acquired in system_test_lock_exit()';
-    $this->drupalGet('system-test/lock-exit');
-    $this->assertText($lock_acquired_exit, 'Lock acquired by the other request before exit.', 'Lock');
-    $this->assertTrue(lock_acquire('system_test_lock_exit'), 'Lock acquired by this request after the other request exits.', 'Lock');
-  }
-}
-
diff --git a/modules/simpletest/tests/menu_test.info b/modules/simpletest/tests/menu_test.info
deleted file mode 100644
index c1c39c1..0000000
--- a/modules/simpletest/tests/menu_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Hook menu tests"
-description = "Support module for menu hook testing."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/menu_test.module b/modules/simpletest/tests/menu_test.module
deleted file mode 100644
index 0b954ae..0000000
--- a/modules/simpletest/tests/menu_test.module
+++ /dev/null
@@ -1,563 +0,0 @@
-<?php
-
-/**
- * @file
- * Dummy module implementing hook menu.
- */
-
-/**
- * Implements hook_menu().
- */
-function menu_test_menu() {
-  // The name of the menu changes during the course of the test. Using a $_GET.
-  $items['menu_name_test'] = array(
-    'title' => 'Test menu_name router item',
-    'page callback' => 'node_save',
-    'menu_name' => menu_test_menu_name(),
-  );
-  // This item is of type MENU_CALLBACK with no parents to test title.
-  $items['menu_callback_title'] = array(
-    'title' => 'Menu Callback Title',
-    'page callback' => 'menu_test_callback',
-    'type' => MENU_CALLBACK,
-    'access arguments' => array('access content'),
-  );
-  // Use FALSE as 'title callback' to bypass t().
-  $items['menu_no_title_callback'] = array(
-    'title' => 'A title with @placeholder',
-    'title callback' => FALSE,
-    'title arguments' => array('@placeholder' => 'some other text'),
-    'page callback' => 'menu_test_callback',
-    'access arguments' => array('access content'),
-  );
-
-  // Hidden link for menu_link_maintain tests
-  $items['menu_test_maintain/%'] = array(
-    'title' => 'Menu maintain test',
-    'page callback' => 'node_page_default',
-    'access arguments' => array('access content'),
-   );
-  // Hierarchical tests.
-  $items['menu-test/hierarchy/parent'] = array(
-    'title' => 'Parent menu router',
-    'page callback' => 'node_page_default',
-  );
-  $items['menu-test/hierarchy/parent/child'] = array(
-    'title' => 'Child menu router',
-    'page callback' => 'node_page_default',
-  );
-  $items['menu-test/hierarchy/parent/child2/child'] = array(
-    'title' => 'Unattached subchild router',
-    'page callback' => 'node_page_default',
-  );
-  // Theme callback tests.
-  $items['menu-test/theme-callback/%'] = array(
-    'title' => 'Page that displays different themes',
-    'page callback' => 'menu_test_theme_page_callback',
-    'access arguments' => array('access content'),
-    'theme callback' => 'menu_test_theme_callback',
-    'theme arguments' => array(2),
-  );
-  $items['menu-test/theme-callback/%/inheritance'] = array(
-    'title' => 'Page that tests theme callback inheritance.',
-    'page callback' => 'menu_test_theme_page_callback',
-    'page arguments' => array(TRUE),
-    'access arguments' => array('access content'),
-  );
-  $items['menu-test/no-theme-callback'] = array(
-    'title' => 'Page that displays different themes without using a theme callback.',
-    'page callback' => 'menu_test_theme_page_callback',
-    'access arguments' => array('access content'),
-  );
-  // Path containing "exotic" characters.
-  $path = "menu-test/ -._~!$'\"()*@[]?&+%#,;=:" . // "Special" ASCII characters.
-    "%23%25%26%2B%2F%3F" . // Characters that look like a percent-escaped string.
-    "éøïвβ中國書۞"; // Characters from various non-ASCII alphabets.
-  $items[$path] = array(
-    'title' => '"Exotic" path',
-    'page callback' => 'menu_test_callback',
-    'access arguments' => array('access content'),
-  );
-
-  // Hidden tests; base parents.
-  // Same structure as in Menu and Block modules. Since those structures can
-  // change, we need to simulate our own in here.
-  $items['menu-test'] = array(
-    'title' => 'Menu test root',
-    'page callback' => 'node_page_default',
-    'access arguments' => array('access content'),
-  );
-  $items['menu-test/hidden'] = array(
-    'title' => 'Hidden test root',
-    'page callback' => 'node_page_default',
-    'access arguments' => array('access content'),
-  );
-
-  // Hidden tests; one dynamic argument.
-  $items['menu-test/hidden/menu'] = array(
-    'title' => 'Menus',
-    'page callback' => 'node_page_default',
-    'access arguments' => array('access content'),
-  );
-  $items['menu-test/hidden/menu/list'] = array(
-    'title' => 'List menus',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-    'weight' => -10,
-  );
-  $items['menu-test/hidden/menu/add'] = array(
-    'title' => 'Add menu',
-    'page callback' => 'node_page_default',
-    'access arguments' => array('access content'),
-    'type' => MENU_LOCAL_ACTION,
-  );
-  $items['menu-test/hidden/menu/settings'] = array(
-    'title' => 'Settings',
-    'page callback' => 'node_page_default',
-    'access arguments' => array('access content'),
-    'type' => MENU_LOCAL_TASK,
-    'weight' => 5,
-  );
-  $items['menu-test/hidden/menu/manage/%menu'] = array(
-    'title' => 'Customize menu',
-    'page callback' => 'node_page_default',
-    'access arguments' => array('access content'),
-  );
-  $items['menu-test/hidden/menu/manage/%menu/list'] = array(
-    'title' => 'List links',
-    'weight' => -10,
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-    'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
-  );
-  $items['menu-test/hidden/menu/manage/%menu/add'] = array(
-    'title' => 'Add link',
-    'page callback' => 'node_page_default',
-    'access arguments' => array('access content'),
-    'type' => MENU_LOCAL_ACTION,
-  );
-  $items['menu-test/hidden/menu/manage/%menu/edit'] = array(
-    'title' => 'Edit menu',
-    'page callback' => 'node_page_default',
-    'access arguments' => array('access content'),
-    'type' => MENU_LOCAL_TASK,
-    'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
-  );
-  $items['menu-test/hidden/menu/manage/%menu/delete'] = array(
-    'title' => 'Delete menu',
-    'page callback' => 'node_page_default',
-    'access arguments' => array('access content'),
-  );
-
-  // Hidden tests; two dynamic arguments.
-  $items['menu-test/hidden/block'] = array(
-    'title' => 'Blocks',
-    'page callback' => 'node_page_default',
-    'access arguments' => array('access content'),
-  );
-  $items['menu-test/hidden/block/list'] = array(
-    'title' => 'List',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-    'weight' => -10,
-  );
-  $items['menu-test/hidden/block/add'] = array(
-    'title' => 'Add block',
-    'page callback' => 'node_page_default',
-    'access arguments' => array('access content'),
-    'type' => MENU_LOCAL_ACTION,
-  );
-  $items['menu-test/hidden/block/manage/%/%'] = array(
-    'title' => 'Configure block',
-    'page callback' => 'node_page_default',
-    'access arguments' => array('access content'),
-  );
-  $items['menu-test/hidden/block/manage/%/%/configure'] = array(
-    'title' => 'Configure block',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-    'context' => MENU_CONTEXT_INLINE,
-  );
-  $items['menu-test/hidden/block/manage/%/%/delete'] = array(
-    'title' => 'Delete block',
-    'page callback' => 'node_page_default',
-    'access arguments' => array('access content'),
-    'type' => MENU_LOCAL_TASK,
-    'context' => MENU_CONTEXT_NONE,
-  );
-
-  // Breadcrumbs tests.
-  // @see MenuBreadcrumbTestCase
-  $base = array(
-    'page callback' => 'menu_test_callback',
-    'access callback' => TRUE,
-  );
-  // Local tasks: Second level below default local task.
-  $items['menu-test/breadcrumb/tasks'] = array(
-    'title' => 'Breadcrumbs test: Local tasks',
-  ) + $base;
-  $items['menu-test/breadcrumb/tasks/first'] = array(
-    'title' => 'First',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-  ) + $base;
-  $items['menu-test/breadcrumb/tasks/second'] = array(
-    'title' => 'Second',
-    'type' => MENU_LOCAL_TASK,
-  ) + $base;
-  $items['menu-test/breadcrumb/tasks/first/first'] = array(
-    'title' => 'First first',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-  ) + $base;
-  $items['menu-test/breadcrumb/tasks/first/second'] = array(
-    'title' => 'First second',
-    'type' => MENU_LOCAL_TASK,
-  ) + $base;
-  $items['menu-test/breadcrumb/tasks/second/first'] = array(
-    'title' => 'Second first',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-  ) + $base;
-  $items['menu-test/breadcrumb/tasks/second/second'] = array(
-    'title' => 'Second second',
-    'type' => MENU_LOCAL_TASK,
-  ) + $base;
-
-  // Menu trail tests.
-  // @see MenuTrailTestCase
-  $items['menu-test/menu-trail'] = array(
-    'title' => 'Menu trail - Case 1',
-    'page callback' => 'menu_test_menu_trail_callback',
-    'access arguments' => array('access content'),
-  );
-  $items['admin/config/development/menu-trail'] = array(
-    'title' => 'Menu trail - Case 2',
-    'description' => 'Tests menu_tree_set_path()',
-    'page callback' => 'menu_test_menu_trail_callback',
-    'access arguments' => array('access administration pages'),
-  );
-  $items['menu-test/custom-403-page'] = array(
-    'title' => 'Custom 403 page',
-    'page callback' => 'menu_test_custom_403_404_callback',
-    'access arguments' => array('access content'),
-  );
-  $items['menu-test/custom-404-page'] = array(
-    'title' => 'Custom 404 page',
-    'page callback' => 'menu_test_custom_403_404_callback',
-    'access arguments' => array('access content'),
-  );
-
-  // File inheritance tests. This menu item should inherit the page callback
-  // system_admin_menu_block_page() and therefore render its children as links
-  // on the page.
-  $items['admin/config/development/file-inheritance'] = array(
-    'title' => 'File inheritance',
-    'description' => 'Test file inheritance',
-    'access arguments' => array('access content'),
-  );
-  $items['admin/config/development/file-inheritance/inherit'] = array(
-    'title' => 'Inherit',
-    'description' => 'File inheritance test description',
-    'page callback' => 'menu_test_callback',
-    'access arguments' => array('access content'),
-  );
-
-  $items['menu_login_callback'] = array(
-    'title' => 'Used as a login path',
-    'page callback' => 'menu_login_callback',
-    'access callback' => TRUE,
-  );
-
-  $items['menu-title-test/case1'] = array(
-   'title' => 'Example title - Case 1',
-   'access callback' => TRUE,
-   'page callback' => 'menu_test_callback',
-  );
-  $items['menu-title-test/case2'] = array(
-   'title' => 'Example @sub1 - Case @op2',
-   // If '2' is not in quotes, the argument becomes arg(2).
-   'title arguments' => array('@sub1' => 'title', '@op2' => '2'),
-   'access callback' => TRUE,
-   'page callback' => 'menu_test_callback',
-  );
-  $items['menu-title-test/case3'] = array(
-   'title' => 'Example title',
-   'title callback' => 'menu_test_title_callback',
-   'access callback' => TRUE,
-   'page callback' => 'menu_test_callback',
-  );
-  $items['menu-title-test/case4'] = array(
-   // Title gets completely ignored. Good thing, too.
-   'title' => 'Bike sheds full of blue smurfs',
-   'title callback' => 'menu_test_title_callback',
-   // If '4' is not in quotes, the argument becomes arg(4).
-   'title arguments' => array('Example title', '4'),
-   'access callback' => TRUE,
-   'page callback' => 'menu_test_callback',
-  );
-
-  // Load arguments inheritance test.
-  $items['menu-test/arguments/%menu_test_argument/%'] = array(
-    'title' => 'Load arguments inheritance test',
-    'load arguments' => array(3),
-    'page callback' => 'menu_test_callback',
-    'access callback' => TRUE,
-  );
-  $items['menu-test/arguments/%menu_test_argument/%/default'] = array(
-    'title' => 'Default local task',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-  );
-  $items['menu-test/arguments/%menu_test_argument/%/task'] = array(
-    'title' => 'Local task',
-    'page callback' => 'menu_test_callback',
-    'access callback' => TRUE,
-    'type' => MENU_LOCAL_TASK,
-  );
-  // For this path, load arguments should be inherited for the first loader only.
-  $items['menu-test/arguments/%menu_test_argument/%menu_test_other_argument/common-loader'] = array(
-    'title' => 'Local task',
-    'page callback' => 'menu_test_callback',
-    'access callback' => TRUE,
-    'type' => MENU_LOCAL_TASK,
-  );
-  // For these paths, no load arguments should be inherited.
-  // Not on the same position.
-  $items['menu-test/arguments/%/%menu_test_argument/different-loaders-1'] = array(
-    'title' => 'An item not sharing the same loader',
-    'page callback' => 'menu_test_callback',
-    'access callback' => TRUE,
-  );
-  // Not the same loader.
-  $items['menu-test/arguments/%menu_test_other_argument/%/different-loaders-2'] = array(
-    'title' => 'An item not sharing the same loader',
-    'page callback' => 'menu_test_callback',
-    'access callback' => TRUE,
-  );
-  // Not the same loader.
-  $items['menu-test/arguments/%/%/different-loaders-3'] = array(
-    'title' => 'An item not sharing the same loader',
-    'page callback' => 'menu_test_callback',
-    'access callback' => TRUE,
-  );
-  // Explict load arguments should not be overriden (even if empty).
-  $items['menu-test/arguments/%menu_test_argument/%/explicit-arguments'] = array(
-    'title' => 'An item defining explicit load arguments',
-    'load arguments' => array(),
-    'page callback' => 'menu_test_callback',
-    'access callback' => TRUE,
-  );
-
-  return $items;
-}
-
-/**
- * Dummy argument loader for hook_menu() to point to.
- */
-function menu_test_argument_load($arg1) {
-  return FALSE;
-}
-
-/**
- * Dummy argument loader for hook_menu() to point to.
- */
-function menu_test_other_argument_load($arg1) {
-  return FALSE;
-}
-
-/**
- * Dummy callback for hook_menu() to point to.
- *
- * @return
- *  A random string.
- */
-function menu_test_callback() {
-  return 'This is menu_test_callback().';
-}
-
-/**
- * Callback that test menu_test_menu_tree_set_path().
- */
-function menu_test_menu_trail_callback() {
-  $menu_path = variable_get('menu_test_menu_tree_set_path', array());
-  if (!empty($menu_path)) {
-    menu_tree_set_path($menu_path['menu_name'], $menu_path['path']);
-  }
-  return 'This is menu_test_menu_trail_callback().';
-}
-
-/**
- * Implements hook_init().
- */
-function menu_test_init() {
-  // When requested by one of the MenuTrailTestCase tests, record the initial
-  // active trail during Drupal's bootstrap (before the user is redirected to a
-  // custom 403 or 404 page). See menu_test_custom_403_404_callback().
-  if (variable_get('menu_test_record_active_trail', FALSE)) {
-    variable_set('menu_test_active_trail_initial', menu_get_active_trail());
-  }
-}
-
-/**
- * Callback for our custom 403 and 404 pages.
- */
-function menu_test_custom_403_404_callback() {
-  // When requested by one of the MenuTrailTestCase tests, record the final
-  // active trail now that the user has been redirected to the custom 403 or
-  // 404 page. See menu_test_init().
-  if (variable_get('menu_test_record_active_trail', FALSE)) {
-    variable_set('menu_test_active_trail_final', menu_get_active_trail());
-  }
-
-  return 'This is menu_test_custom_403_404_callback().';
-}
-
-/**
- * Page callback to use when testing the theme callback functionality.
- *
- * @param $inherited
- *   An optional boolean to set to TRUE when the requested page is intended to
- *   inherit the theme of its parent.
- * @return
- *   A string describing the requested custom theme and actual theme being used
- *   for the current page request.
- */
-function menu_test_theme_page_callback($inherited = FALSE) {
-  global $theme_key;
-  // Initialize the theme system so that $theme_key will be populated.
-  drupal_theme_initialize();
-  // Now check both the requested custom theme and the actual theme being used.
-  $custom_theme = menu_get_custom_theme();
-  $requested_theme = empty($custom_theme) ? 'NONE' : $custom_theme;
-  $output = "Custom theme: $requested_theme. Actual theme: $theme_key.";
-  if ($inherited) {
-    $output .= ' Theme callback inheritance is being tested.';
-  }
-  return $output;
-}
-
-/**
- * Theme callback to use when testing the theme callback functionality.
- *
- * @param $argument
- *   The argument passed in from the URL.
- * @return
- *   The name of the custom theme to request for the current page.
- */
-function menu_test_theme_callback($argument) {
-  // Test using the variable administrative theme.
-  if ($argument == 'use-admin-theme') {
-    return variable_get('admin_theme');
-  }
-  // Test using a theme that exists, but may or may not be enabled.
-  elseif ($argument == 'use-stark-theme') {
-    return 'stark';
-  }
-  // Test using a theme that does not exist.
-  elseif ($argument == 'use-fake-theme') {
-    return 'fake_theme';
-  }
-  // For any other value of the URL argument, do not return anything. This
-  // allows us to test that returning nothing from a theme callback function
-  // causes the page to correctly fall back on using the main site theme.
-}
-
-/**
- * Implement hook_custom_theme().
- *
- * @return
- *   The name of the custom theme to use for the current page.
- */
-function menu_test_custom_theme() {
-  // If an appropriate variable has been set in the database, request the theme
-  // that is stored there. Otherwise, do not attempt to dynamically set the
-  // theme.
-  if ($theme = variable_get('menu_test_hook_custom_theme_name', FALSE)) {
-    return $theme;
-  }
-}
-
-/**
- * Helper function for the testMenuName() test. Used to change the menu_name
- * parameter of a menu.
- *
- * @param $new_name
- *   If set, will change the menu_name value.
- * @return
- *   The menu_name value to use.
- */
-function menu_test_menu_name($new_name = '') {
-  static $name = 'original';
-  if ($new_name) {
-    $name = $new_name;
-  }
-  return $name;
-}
-
-/**
- * Implements hook_menu_link_insert().
- *
- * @return
- *  A random string.
- */
-function menu_test_menu_link_insert($item) {
-  menu_test_static_variable('insert');
-}
-
-/**
- * Implements hook_menu_link_update().
- *
- * @return
- *  A random string.
- */
-function menu_test_menu_link_update($item) {
-  menu_test_static_variable('update');
-}
-
-/**
- * Implements hook_menu_link_delete().
- *
- * @return
- *  A random string.
- */
-function menu_test_menu_link_delete($item) {
-  menu_test_static_variable('delete');
-}
-
-/**
- * Static function for testing hook results.
- *
- * @param $value
- *   The value to set or NULL to return the current value.
- * @return
- *   A text string for comparison to test assertions.
- */
-function menu_test_static_variable($value = NULL) {
-  static $variable;
-  if (!empty($value)) {
-    $variable = $value;
-  }
-  return $variable;
-}
-
-/**
- * Implements hook_menu_site_status_alter().
- */
-function menu_test_menu_site_status_alter(&$menu_site_status, $path) {
-  // Allow access to ?q=menu_login_callback even if in maintenance mode.
-  if ($menu_site_status == MENU_SITE_OFFLINE && $path == 'menu_login_callback') {
-    $menu_site_status = MENU_SITE_ONLINE;
-  }
-}
-
-/**
- * Menu callback to be used as a login path.
- */
-function menu_login_callback() {
-  return 'This is menu_login_callback().';
-}
-
-/**
- * Concatenates a string, by using the t() function and a case number.
- *
- * @param $title
- *   Title string.
- * @param $case_number
- *   The current case number which is tests (defaults to 3).
- */
-function menu_test_title_callback($title, $case_no = 3) {
-  return t($title) . ' - Case ' . $case_no;
-}
diff --git a/modules/simpletest/tests/module.test b/modules/simpletest/tests/module.test
deleted file mode 100644
index 371339f..0000000
--- a/modules/simpletest/tests/module.test
+++ /dev/null
@@ -1,304 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for the module API.
- */
-
-/**
- * Unit tests for the module API.
- */
-class ModuleUnitTest extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Module API',
-      'description' => 'Test low-level module functions.',
-      'group' => 'Module',
-    );
-  }
-
-  /**
-   * The basic functionality of module_list().
-   */
-  function testModuleList() {
-    // Build a list of modules, sorted alphabetically.
-    $profile_info = install_profile_info('standard', 'en');
-    $module_list = $profile_info['dependencies'];
-
-    // Installation profile is a module that is expected to be loaded.
-    $module_list[] = 'standard';
-
-    sort($module_list);
-    // Compare this list to the one returned by module_list(). We expect them
-    // to match, since all default profile modules have a weight equal to 0
-    // (except for block.module, which has a lower weight but comes first in
-    // the alphabet anyway).
-    $this->assertModuleList($module_list, t('Standard profile'));
-
-    // Try to install a new module.
-    module_enable(array('contact'));
-    $module_list[] = 'contact';
-    sort($module_list);
-    $this->assertModuleList($module_list, t('After adding a module'));
-
-    // Try to mess with the module weights.
-    db_update('system')
-      ->fields(array('weight' => 20))
-      ->condition('name', 'contact')
-      ->condition('type', 'module')
-      ->execute();
-    // Reset the module list.
-    module_list(TRUE);
-    // Move contact to the end of the array.
-    unset($module_list[array_search('contact', $module_list)]);
-    $module_list[] = 'contact';
-    $this->assertModuleList($module_list, t('After changing weights'));
-
-    // Test the fixed list feature.
-    $fixed_list = array(
-      'system' => array('filename' => drupal_get_path('module', 'system')),
-      'menu' => array('filename' => drupal_get_path('module', 'menu')),
-    );
-    module_list(FALSE, FALSE, FALSE, $fixed_list);
-    $new_module_list = array_combine(array_keys($fixed_list), array_keys($fixed_list));
-    $this->assertModuleList($new_module_list, t('When using a fixed list'));
-
-    // Reset the module list.
-    module_list(TRUE);
-    $this->assertModuleList($module_list, t('After reset'));
-  }
-
-  /**
-   * Assert that module_list() return the expected values.
-   *
-   * @param $expected_values
-   *   The expected values, sorted by weight and module name.
-   */
-  protected function assertModuleList(Array $expected_values, $condition) {
-    $expected_values = array_combine($expected_values, $expected_values);
-    $this->assertEqual($expected_values, module_list(), format_string('@condition: module_list() returns correct results', array('@condition' => $condition)));
-    ksort($expected_values);
-    $this->assertIdentical($expected_values, module_list(FALSE, FALSE, TRUE), format_string('@condition: module_list() returns correctly sorted results', array('@condition' => $condition)));
-  }
-
-  /**
-   * Test module_implements() caching.
-   */
-  function testModuleImplements() {
-    // Clear the cache.
-    cache_clear_all('module_implements', 'cache_bootstrap');
-    $this->assertFalse(cache_get('module_implements', 'cache_bootstrap'), 'The module implements cache is empty.');
-    $this->drupalGet('');
-    $this->assertTrue(cache_get('module_implements', 'cache_bootstrap'), 'The module implements cache is populated after requesting a page.');
-
-    // Test again with an authenticated user.
-    $this->user = $this->drupalCreateUser();
-    $this->drupalLogin($this->user);
-    cache_clear_all('module_implements', 'cache_bootstrap');
-    $this->drupalGet('');
-    $this->assertTrue(cache_get('module_implements', 'cache_bootstrap'), 'The module implements cache is populated after requesting a page.');
-
-    // Make sure group include files are detected properly even when the file is
-    // already loaded when the cache is rebuilt.
-    // For that activate the module_test which provides the file to load.
-    module_enable(array('module_test'));
-
-    module_load_include('inc', 'module_test', 'module_test.file');
-    $modules = module_implements('test_hook');
-    $static = drupal_static('module_implements');
-    $this->assertTrue(in_array('module_test', $modules), 'Hook found.');
-    $this->assertEqual($static['test_hook']['module_test'], 'file', 'Include file detected.');
-  }
-
-  /**
-   * Test that module_invoke() can load a hook defined in hook_hook_info().
-   */
-  function testModuleInvoke() {
-    module_enable(array('module_test'), FALSE);
-    $this->resetAll();
-    $this->drupalGet('module-test/hook-dynamic-loading-invoke');
-    $this->assertText('success!', 'module_invoke() dynamically loads a hook defined in hook_hook_info().');
-  }
-
-  /**
-   * Test that module_invoke_all() can load a hook defined in hook_hook_info().
-   */
-  function testModuleInvokeAll() {
-    module_enable(array('module_test'), FALSE);
-    $this->resetAll();
-    $this->drupalGet('module-test/hook-dynamic-loading-invoke-all');
-    $this->assertText('success!', 'module_invoke_all() dynamically loads a hook defined in hook_hook_info().');
-  }
-
-  /**
-   * Test dependency resolution.
-   */
-  function testDependencyResolution() {
-    // Enable the test module, and make sure that other modules we are testing
-    // are not already enabled. (If they were, the tests below would not work
-    // correctly.)
-    module_enable(array('module_test'), FALSE);
-    $this->assertTrue(module_exists('module_test'), 'Test module is enabled.');
-    $this->assertFalse(module_exists('forum'), 'Forum module is disabled.');
-    $this->assertFalse(module_exists('poll'), 'Poll module is disabled.');
-    $this->assertFalse(module_exists('php'), 'PHP module is disabled.');
-
-    // First, create a fake missing dependency. Forum depends on poll, which
-    // depends on a made-up module, foo. Nothing should be installed.
-    variable_set('dependency_test', 'missing dependency');
-    drupal_static_reset('system_rebuild_module_data');
-    $result = module_enable(array('forum'));
-    $this->assertFalse($result, 'module_enable() returns FALSE if dependencies are missing.');
-    $this->assertFalse(module_exists('forum'), 'module_enable() aborts if dependencies are missing.');
-
-    // Now, fix the missing dependency. Forum module depends on poll, but poll
-    // depends on the PHP module. module_enable() should work.
-    variable_set('dependency_test', 'dependency');
-    drupal_static_reset('system_rebuild_module_data');
-    $result = module_enable(array('forum'));
-    $this->assertTrue($result, 'module_enable() returns the correct value.');
-    // Verify that the fake dependency chain was installed.
-    $this->assertTrue(module_exists('poll') && module_exists('php'), 'Dependency chain was installed by module_enable().');
-    // Verify that the original module was installed.
-    $this->assertTrue(module_exists('forum'), 'Module installation with unlisted dependencies succeeded.');
-    // Finally, verify that the modules were enabled in the correct order.
-    $this->assertEqual(variable_get('test_module_enable_order', array()), array('php', 'poll', 'forum'), 'Modules were enabled in the correct order by module_enable().');
-
-    // Now, disable the PHP module. Both forum and poll should be disabled as
-    // well, in the correct order.
-    module_disable(array('php'));
-    $this->assertTrue(!module_exists('forum') && !module_exists('poll'), 'Depedency chain was disabled by module_disable().');
-    $this->assertFalse(module_exists('php'), 'Disabling a module with unlisted dependents succeeded.');
-    $this->assertEqual(variable_get('test_module_disable_order', array()), array('forum', 'poll', 'php'), 'Modules were disabled in the correct order by module_disable().');
-
-    // Disable a module that is listed as a dependency by the installation
-    // profile. Make sure that the profile itself is not on the list of
-    // dependent modules to be disabled.
-    $profile = drupal_get_profile();
-    $info = install_profile_info($profile);
-    $this->assertTrue(in_array('comment', $info['dependencies']), 'Comment module is listed as a dependency of the installation profile.');
-    $this->assertTrue(module_exists('comment'), 'Comment module is enabled.');
-    module_disable(array('comment'));
-    $this->assertFalse(module_exists('comment'), 'Comment module was disabled.');
-    $disabled_modules = variable_get('test_module_disable_order', array());
-    $this->assertTrue(in_array('comment', $disabled_modules), 'Comment module is in the list of disabled modules.');
-    $this->assertFalse(in_array($profile, $disabled_modules), 'The installation profile is not in the list of disabled modules.');
-
-    // Try to uninstall the PHP module by itself. This should be rejected,
-    // since the modules which it depends on need to be uninstalled first, and
-    // that is too destructive to perform automatically.
-    $result = drupal_uninstall_modules(array('php'));
-    $this->assertFalse($result, 'Calling drupal_uninstall_modules() on a module whose dependents are not uninstalled fails.');
-    foreach (array('forum', 'poll', 'php') as $module) {
-      $this->assertNotEqual(drupal_get_installed_schema_version($module), SCHEMA_UNINSTALLED, format_string('The @module module was not uninstalled.', array('@module' => $module)));
-    }
-
-    // Now uninstall all three modules explicitly, but in the incorrect order,
-    // and make sure that drupal_uninstal_modules() uninstalled them in the
-    // correct sequence.
-    $result = drupal_uninstall_modules(array('poll', 'php', 'forum'));
-    $this->assertTrue($result, 'drupal_uninstall_modules() returns the correct value.');
-    foreach (array('forum', 'poll', 'php') as $module) {
-      $this->assertEqual(drupal_get_installed_schema_version($module), SCHEMA_UNINSTALLED, format_string('The @module module was uninstalled.', array('@module' => $module)));
-    }
-    $this->assertEqual(variable_get('test_module_uninstall_order', array()), array('forum', 'poll', 'php'), 'Modules were uninstalled in the correct order by drupal_uninstall_modules().');
-
-    // Uninstall the profile module from above, and make sure that the profile
-    // itself is not on the list of dependent modules to be uninstalled.
-    $result = drupal_uninstall_modules(array('comment'));
-    $this->assertTrue($result, 'drupal_uninstall_modules() returns the correct value.');
-    $this->assertEqual(drupal_get_installed_schema_version('comment'), SCHEMA_UNINSTALLED, 'Comment module was uninstalled.');
-    $uninstalled_modules = variable_get('test_module_uninstall_order', array());
-    $this->assertTrue(in_array('comment', $uninstalled_modules), 'Comment module is in the list of uninstalled modules.');
-    $this->assertFalse(in_array($profile, $uninstalled_modules), 'The installation profile is not in the list of uninstalled modules.');
-
-    // Enable forum module again, which should enable both the poll module and
-    // php module. But, this time do it with poll module declaring a dependency
-    // on a specific version of php module in its info file. Make sure that
-    // module_enable() still works.
-    variable_set('dependency_test', 'version dependency');
-    drupal_static_reset('system_rebuild_module_data');
-    $result = module_enable(array('forum'));
-    $this->assertTrue($result, 'module_enable() returns the correct value.');
-    // Verify that the fake dependency chain was installed.
-    $this->assertTrue(module_exists('poll') && module_exists('php'), 'Dependency chain was installed by module_enable().');
-    // Verify that the original module was installed.
-    $this->assertTrue(module_exists('forum'), 'Module installation with version dependencies succeeded.');
-    // Finally, verify that the modules were enabled in the correct order.
-    $enable_order = variable_get('test_module_enable_order', array());
-    $php_position = array_search('php', $enable_order);
-    $poll_position = array_search('poll', $enable_order);
-    $forum_position = array_search('forum', $enable_order);
-    $php_before_poll = $php_position !== FALSE && $poll_position !== FALSE && $php_position < $poll_position;
-    $poll_before_forum = $poll_position !== FALSE && $forum_position !== FALSE && $poll_position < $forum_position;
-    $this->assertTrue($php_before_poll && $poll_before_forum, 'Modules were enabled in the correct order by module_enable().');
-  }
-}
-
-/**
- * Unit tests for module installation.
- */
-class ModuleInstallTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Module installation',
-      'description' => 'Tests the installation of modules.',
-      'group' => 'Module',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('module_test');
-  }
-
-  /**
-   * Test that calls to drupal_write_record() work during module installation.
-   *
-   * This is a useful function to test because modules often use it to insert
-   * initial data in their database tables when they are being installed or
-   * enabled. Furthermore, drupal_write_record() relies on the module schema
-   * information being available, so this also checks that the data from one of
-   * the module's hook implementations, in particular hook_schema(), is
-   * properly available during this time. Therefore, this test helps ensure
-   * that modules are fully functional while Drupal is installing and enabling
-   * them.
-   */
-  function testDrupalWriteRecord() {
-    // Check for data that was inserted using drupal_write_record() while the
-    // 'module_test' module was being installed and enabled.
-    $data = db_query("SELECT data FROM {module_test}")->fetchCol();
-    $this->assertTrue(in_array('Data inserted in hook_install()', $data), 'Data inserted using drupal_write_record() in hook_install() is correctly saved.');
-    $this->assertTrue(in_array('Data inserted in hook_enable()', $data), 'Data inserted using drupal_write_record() in hook_enable() is correctly saved.');
-  }
-}
-
-/**
- * Unit tests for module uninstallation and related hooks.
- */
-class ModuleUninstallTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Module uninstallation',
-      'description' => 'Tests the uninstallation of modules.',
-      'group' => 'Module',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('module_test', 'user');
-  }
-
-  /**
-   * Tests the hook_modules_uninstalled() of the user module.
-   */
-  function testUserPermsUninstalled() {
-    // Uninstalls the module_test module, so hook_modules_uninstalled()
-    // is executed.
-    module_disable(array('module_test'));
-    drupal_uninstall_modules(array('module_test'));
-
-    // Are the perms defined by module_test removed from {role_permission}.
-    $count = db_query("SELECT COUNT(rid) FROM {role_permission} WHERE permission = :perm", array(':perm' => 'module_test perm'))->fetchField();
-    $this->assertEqual(0, $count, 'Permissions were all removed.');
-  }
-}
diff --git a/modules/simpletest/tests/module_test.file.inc b/modules/simpletest/tests/module_test.file.inc
deleted file mode 100644
index c0d3ec4..0000000
--- a/modules/simpletest/tests/module_test.file.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-
-/**
- * @file
- * A file to test module_implements() loading includes.
- */
-
-/**
- * Implements hook_test_hook().
- */
-function module_test_test_hook() {
-  return array('module_test' => 'success!');
-}
diff --git a/modules/simpletest/tests/module_test.info b/modules/simpletest/tests/module_test.info
deleted file mode 100644
index 0a0f3c0..0000000
--- a/modules/simpletest/tests/module_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Module test"
-description = "Support module for module system testing."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/module_test.install b/modules/simpletest/tests/module_test.install
deleted file mode 100644
index 4cc09df..0000000
--- a/modules/simpletest/tests/module_test.install
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the module_test module.
- */
-
-/**
- * Implements hook_schema().
- */
-function module_test_schema() {
-  $schema['module_test'] = array(
-    'description' => 'Dummy table to test the behavior of hook_schema() during module installation.',
-    'fields' => array(
-      'data' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'An example data column for the module.',
-      ),
-    ),
-  );
-  return $schema;
-}
-
-/**
- * Implements hook_install().
- */
-function module_test_install() {
-  $record = array('data' => 'Data inserted in hook_install()');
-  drupal_write_record('module_test', $record);
-}
-
-/**
- * Implements hook_enable().
- */
-function module_test_enable() {
-  $record = array('data' => 'Data inserted in hook_enable()');
-  drupal_write_record('module_test', $record);
-}
-
diff --git a/modules/simpletest/tests/module_test.module b/modules/simpletest/tests/module_test.module
deleted file mode 100644
index d781350..0000000
--- a/modules/simpletest/tests/module_test.module
+++ /dev/null
@@ -1,131 +0,0 @@
-<?php
-
-/**
- * Implements hook_permission().
- */
-function module_test_permission() {
-  return array(
-    'module_test perm' => t('example perm for module_test module'),
-  );
-}
-
-/**
- * Implements hook_system_info_alter().
- *
- * Manipulate module dependencies to test dependency chains.
- */
-function module_test_system_info_alter(&$info, $file, $type) {
-  if (variable_get('dependency_test', FALSE) == 'missing dependency') {
-    if ($file->name == 'forum') {
-      // Make forum module depend on poll.
-      $info['dependencies'][] = 'poll';
-    }
-    elseif ($file->name == 'poll') {
-      // Make poll depend on a made-up module.
-      $info['dependencies'][] = 'foo';
-    }
-  }
-  elseif (variable_get('dependency_test', FALSE) == 'dependency') {
-    if ($file->name == 'forum') {
-      // Make the forum module depend on poll.
-      $info['dependencies'][] = 'poll';
-    }
-    elseif ($file->name == 'poll') {
-      // Make poll depend on php module.
-      $info['dependencies'][] = 'php';
-    }
-  }
-  elseif (variable_get('dependency_test', FALSE) == 'version dependency') {
-    if ($file->name == 'forum') {
-      // Make the forum module depend on poll.
-      $info['dependencies'][] = 'poll';
-    }
-    elseif ($file->name == 'poll') {
-      // Make poll depend on a specific version of php module.
-      $info['dependencies'][] = 'php (1.x)';
-    }
-    elseif ($file->name == 'php') {
-      // Set php module to a version compatible with the above.
-      $info['version'] = '7.x-1.0';
-    }
-  }
-  if ($file->name == 'seven' && $type == 'theme') {
-    $info['regions']['test_region'] = t('Test region');
-  }
-}
-
-/**
- * Implements hook_hook_info().
- */
-function module_test_hook_info() {
-  $hooks['test_hook'] = array(
-    'group' => 'file',
-  );
-  return $hooks;
-}
-
-/**
- * Implements hook_menu().
- */
-function module_test_menu() {
-  $items['module-test/hook-dynamic-loading-invoke'] = array(
-    'title' => 'Test hook dynamic loading (invoke)',
-    'page callback' => 'module_test_hook_dynamic_loading_invoke',
-    'access arguments' => array('access content'),
-  );
-  $items['module-test/hook-dynamic-loading-invoke-all'] = array(
-    'title' => 'Test hook dynamic loading (invoke_all)',
-    'page callback' => 'module_test_hook_dynamic_loading_invoke_all',
-    'access arguments' => array('access content'),
-  );
-  return $items;
-}
-
-/**
- * Page callback for 'hook dynamic loading' test.
- *
- * If the hook is dynamically loaded correctly, the menu callback should
- * return 'success!'.
- */
-function module_test_hook_dynamic_loading_invoke() {
-  $result = module_invoke('module_test', 'test_hook');
-  return $result['module_test'];
-}
-
-/**
- * Page callback for 'hook dynamic loading' test.
- *
- * If the hook is dynamically loaded correctly, the menu callback should
- * return 'success!'.
- */
-function module_test_hook_dynamic_loading_invoke_all() {
-  $result = module_invoke_all('test_hook');
-  return $result['module_test'];
-}
-
-/**
- * Implements hook_modules_enabled().
- */
-function module_test_modules_enabled($modules) {
-  // Record the ordered list of modules that were passed in to this hook so we
-  // can check that the modules were enabled in the correct sequence.
-  variable_set('test_module_enable_order', $modules);
-}
-
-/**
- * Implements hook_modules_disabled().
- */
-function module_test_modules_disabled($modules) {
-  // Record the ordered list of modules that were passed in to this hook so we
-  // can check that the modules were disabled in the correct sequence.
-  variable_set('test_module_disable_order', $modules);
-}
-
-/**
- * Implements hook_modules_uninstalled().
- */
-function module_test_modules_uninstalled($modules) {
-  // Record the ordered list of modules that were passed in to this hook so we
-  // can check that the modules were uninstalled in the correct sequence.
-  variable_set('test_module_uninstall_order', $modules);
-}
diff --git a/modules/simpletest/tests/pager.test b/modules/simpletest/tests/pager.test
deleted file mode 100644
index 6e8ce8e..0000000
--- a/modules/simpletest/tests/pager.test
+++ /dev/null
@@ -1,159 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for pager functionality.
- */
-
-/**
- * Tests pager functionality.
- */
-class PagerFunctionalWebTestCase extends DrupalWebTestCase {
-  protected $profile = 'testing';
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Pager functionality',
-      'description' => 'Tests pager functionality.',
-      'group' => 'Pager',
-    );
-  }
-
-  function setUp() {
-    parent::setUp(array('dblog'));
-
-    // Insert 300 log messages.
-    for ($i = 0; $i < 300; $i++) {
-      watchdog('pager_test', $this->randomString(), NULL, WATCHDOG_DEBUG);
-    }
-
-    $this->admin_user = $this->drupalCreateUser(array(
-      'access site reports',
-    ));
-    $this->drupalLogin($this->admin_user);
-  }
-
-  /**
-   * Tests markup and CSS classes of pager links.
-   */
-  function testActiveClass() {
-    // Verify first page.
-    $this->drupalGet('admin/reports/dblog');
-    $current_page = 0;
-    $this->assertPagerItems($current_page);
-
-    // Verify any page but first/last.
-    $current_page++;
-    $this->drupalGet('admin/reports/dblog', array('query' => array('page' => $current_page)));
-    $this->assertPagerItems($current_page);
-
-    // Verify last page.
-    $elements = $this->xpath('//li[contains(@class, :class)]/a', array(':class' => 'pager-last'));
-    preg_match('@page=(\d+)@', $elements[0]['href'], $matches);
-    $current_page = (int) $matches[1];
-    $this->drupalGet($GLOBALS['base_root'] . $elements[0]['href'], array('external' => TRUE));
-    $this->assertPagerItems($current_page);
-  }
-
-  /**
-   * Asserts pager items and links.
-   *
-   * @param int $current_page
-   *   The current pager page the internal browser is on.
-   */
-  protected function assertPagerItems($current_page) {
-    $elements = $this->xpath('//ul[@class=:class]/li', array(':class' => 'pager'));
-    $this->assertTrue(!empty($elements), 'Pager found.');
-
-    // Make current page 1-based.
-    $current_page++;
-
-    // Extract first/previous and next/last items.
-    // first/previous only exist, if the current page is not the first.
-    if ($current_page > 1) {
-      $first = array_shift($elements);
-      $previous = array_shift($elements);
-    }
-    // next/last always exist, unless the current page is the last.
-    if ($current_page != count($elements)) {
-      $last = array_pop($elements);
-      $next = array_pop($elements);
-    }
-
-    // Verify items and links to pages.
-    foreach ($elements as $page => $element) {
-      // Make item/page index 1-based.
-      $page++;
-      if ($current_page == $page) {
-        $this->assertClass($element, 'pager-current', 'Item for current page has .pager-current class.');
-        $this->assertFalse(isset($element->a), 'Item for current page has no link.');
-      }
-      else {
-        $this->assertNoClass($element, 'pager-current', "Item for page $page has no .pager-current class.");
-        $this->assertClass($element, 'pager-item', "Item for page $page has .pager-item class.");
-        $this->assertTrue($element->a, "Link to page $page found.");
-        $this->assertNoClass($element->a, 'active', "Link to page $page is not active.");
-      }
-      unset($elements[--$page]);
-    }
-    // Verify that no other items remain untested.
-    $this->assertTrue(empty($elements), 'All expected items found.');
-
-    // Verify first/previous and next/last items and links.
-    if (isset($first)) {
-      $this->assertClass($first, 'pager-first', 'Item for first page has .pager-first class.');
-      $this->assertTrue($first->a, 'Link to first page found.');
-      $this->assertNoClass($first->a, 'active', 'Link to first page is not active.');
-    }
-    if (isset($previous)) {
-      $this->assertClass($previous, 'pager-previous', 'Item for first page has .pager-previous class.');
-      $this->assertTrue($previous->a, 'Link to previous page found.');
-      $this->assertNoClass($previous->a, 'active', 'Link to previous page is not active.');
-    }
-    if (isset($next)) {
-      $this->assertClass($next, 'pager-next', 'Item for next page has .pager-next class.');
-      $this->assertTrue($next->a, 'Link to next page found.');
-      $this->assertNoClass($next->a, 'active', 'Link to next page is not active.');
-    }
-    if (isset($last)) {
-      $this->assertClass($last, 'pager-last', 'Item for last page has .pager-last class.');
-      $this->assertTrue($last->a, 'Link to last page found.');
-      $this->assertNoClass($last->a, 'active', 'Link to last page is not active.');
-    }
-  }
-
-  /**
-   * Asserts that an element has a given class.
-   *
-   * @param SimpleXMLElement $element
-   *   The element to test.
-   * @param string $class
-   *   The class to assert.
-   * @param string $message
-   *   (optional) A verbose message to output.
-   */
-  protected function assertClass(SimpleXMLElement $element, $class, $message = NULL) {
-    if (!isset($message)) {
-      $message = "Class .$class found.";
-    }
-    $this->assertTrue(strpos($element['class'], $class) !== FALSE, $message);
-  }
-
-  /**
-   * Asserts that an element does not have a given class.
-   *
-   * @param SimpleXMLElement $element
-   *   The element to test.
-   * @param string $class
-   *   The class to assert.
-   * @param string $message
-   *   (optional) A verbose message to output.
-   */
-  protected function assertNoClass(SimpleXMLElement $element, $class, $message = NULL) {
-    if (!isset($message)) {
-      $message = "Class .$class not found.";
-    }
-    $this->assertTrue(strpos($element['class'], $class) === FALSE, $message);
-  }
-}
-
diff --git a/modules/simpletest/tests/password.test b/modules/simpletest/tests/password.test
deleted file mode 100644
index 5259d19..0000000
--- a/modules/simpletest/tests/password.test
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-/**
- * @file
- * Provides unit tests for password.inc.
- */
-
-/**
- * Unit tests for password hashing API.
- */
-class PasswordHashingTest extends DrupalWebTestCase {
-  protected $profile = 'testing';
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Password hashing',
-      'description' => 'Password hashing unit tests.',
-      'group' => 'System',
-    );
-  }
-
-  function setUp() {
-    require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
-    parent::setUp();
-  }
-
-  /**
-   * Test password hashing.
-   */
-  function testPasswordHashing() {
-    // Set a log2 iteration count that is deliberately out of bounds to test
-    // that it is corrected to be within bounds.
-    variable_set('password_count_log2', 1);
-    // Set up a fake $account with a password 'baz', hashed with md5.
-    $password = 'baz';
-    $account = (object) array('name' => 'foo', 'pass' => md5($password));
-    // The md5 password should be flagged as needing an update.
-    $this->assertTrue(user_needs_new_hash($account), 'User with md5 password needs a new hash.');
-    // Re-hash the password.
-    $old_hash = $account->pass;
-    $account->pass = user_hash_password($password);
-    $this->assertIdentical(_password_get_count_log2($account->pass), DRUPAL_MIN_HASH_COUNT, 'Re-hashed password has the minimum number of log2 iterations.');
-    $this->assertTrue($account->pass != $old_hash, 'Password hash changed.');
-    $this->assertTrue(user_check_password($password, $account), 'Password check succeeds.');
-    // Since the log2 setting hasn't changed and the user has a valid password,
-    // user_needs_new_hash() should return FALSE.
-    $this->assertFalse(user_needs_new_hash($account), 'User does not need a new hash.');
-    // Increment the log2 iteration to MIN + 1.
-    variable_set('password_count_log2', DRUPAL_MIN_HASH_COUNT + 1);
-    $this->assertTrue(user_needs_new_hash($account), 'User needs a new hash after incrementing the log2 count.');
-    // Re-hash the password.
-    $old_hash = $account->pass;
-    $account->pass = user_hash_password($password);
-    $this->assertIdentical(_password_get_count_log2($account->pass), DRUPAL_MIN_HASH_COUNT + 1, 'Re-hashed password has the correct number of log2 iterations.');
-    $this->assertTrue($account->pass != $old_hash, 'Password hash changed again.');
-    // Now the hash should be OK.
-    $this->assertFalse(user_needs_new_hash($account), 'Re-hashed password does not need a new hash.');
-    $this->assertTrue(user_check_password($password, $account), 'Password check succeeds with re-hashed password.');
-  }
-}
diff --git a/modules/simpletest/tests/path.test b/modules/simpletest/tests/path.test
deleted file mode 100644
index b8b3c93..0000000
--- a/modules/simpletest/tests/path.test
+++ /dev/null
@@ -1,381 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for path.inc.
- */
-
-/**
- * Unit tests for the drupal_match_path() function in path.inc.
- *
- * @see drupal_match_path().
- */
-class DrupalMatchPathTestCase extends DrupalWebTestCase {
-  protected $front;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Drupal match path',
-      'description' => 'Tests the drupal_match_path() function to make sure it works properly.',
-      'group' => 'Path API',
-    );
-  }
-
-  function setUp() {
-    // Set up the database and testing environment.
-    parent::setUp();
-
-    // Set up a random site front page to test the '<front>' placeholder.
-    $this->front = $this->randomName();
-    variable_set('site_frontpage', $this->front);
-    // Refresh our static variables from the database.
-    $this->refreshVariables();
-  }
-
-  /**
-   * Run through our test cases, making sure each one works as expected.
-   */
-  function testDrupalMatchPath() {
-    // Set up our test cases.
-    $tests = $this->drupalMatchPathTests();
-    foreach ($tests as $patterns => $cases) {
-      foreach ($cases as $path => $expected_result) {
-        $actual_result = drupal_match_path($path, $patterns);
-        $this->assertIdentical($actual_result, $expected_result, format_string('Tried matching the path <code>@path</code> to the pattern <pre>@patterns</pre> - expected @expected, got @actual.', array('@path' => $path, '@patterns' => $patterns, '@expected' => var_export($expected_result, TRUE), '@actual' => var_export($actual_result, TRUE))));
-      }
-    }
-  }
-
-  /**
-   * Helper function for testDrupalMatchPath(): set up an array of test cases.
-   *
-   * @return
-   *   An array of test cases to cycle through.
-   */
-  private function drupalMatchPathTests() {
-    return array(
-      // Single absolute paths.
-      'blog/1' => array(
-        'blog/1' => TRUE,
-        'blog/2' => FALSE,
-        'test' => FALSE,
-      ),
-      // Single paths with wildcards.
-      'blog/*' => array(
-        'blog/1' => TRUE,
-        'blog/2' => TRUE,
-        'blog/3/edit' => TRUE,
-        'blog/' => TRUE,
-        'blog' => FALSE,
-        'test' => FALSE,
-      ),
-      // Single paths with multiple wildcards.
-      'node/*/revisions/*' => array(
-        'node/1/revisions/3' => TRUE,
-        'node/345/revisions/test' => TRUE,
-        'node/23/edit' => FALSE,
-        'test' => FALSE,
-      ),
-      // Single paths with '<front>'.
-      '<front>' => array(
-        $this->front => TRUE,
-        "$this->front/" => FALSE,
-        "$this->front/edit" => FALSE,
-        'node' => FALSE,
-        '' => FALSE,
-      ),
-      // Paths with both '<front>' and wildcards (should not work).
-      '<front>/*' => array(
-        $this->front => FALSE,
-        "$this->front/" => FALSE,
-        "$this->front/edit" => FALSE,
-        'node/12' => FALSE,
-        '' => FALSE,
-      ),
-      // Multiple paths with the \n delimiter.
-      "node/*\nnode/*/edit" => array(
-        'node/1' => TRUE,
-        'node/view' => TRUE,
-        'node/32/edit' => TRUE,
-        'node/delete/edit' => TRUE,
-        'node/50/delete' => TRUE,
-        'test/example' => FALSE,
-      ),
-      // Multiple paths with the \r delimiter.
-      "user/*\rblog/*" => array(
-        'user/1' => TRUE,
-        'blog/1' => TRUE,
-        'user/1/blog/1' => TRUE,
-        'user/blog' => TRUE,
-        'test/example' => FALSE,
-        'user' => FALSE,
-        'blog' => FALSE,
-      ),
-      // Multiple paths with the \r\n delimiter.
-      "test\r\n<front>" => array(
-        'test' => TRUE,
-        $this->front => TRUE,
-        'example' => FALSE,
-      ),
-      // Test existing regular expressions (should be escaped).
-      '[^/]+?/[0-9]' => array(
-        'test/1' => FALSE,
-        '[^/]+?/[0-9]' => TRUE,
-      ),
-    );
-  }
-}
-
-/**
- * Tests hook_url_alter functions.
- */
-class UrlAlterFunctionalTest extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => t('URL altering'),
-      'description' => t('Tests hook_url_inbound_alter() and hook_url_outbound_alter().'),
-      'group' => t('Path API'),
-    );
-  }
-
-  function setUp() {
-    parent::setUp('path', 'forum', 'url_alter_test');
-  }
-
-  /**
-   * Test that URL altering works and that it occurs in the correct order.
-   */
-  function testUrlAlter() {
-    $account = $this->drupalCreateUser(array('administer url aliases'));
-    $this->drupalLogin($account);
-
-    $uid = $account->uid;
-    $name = $account->name;
-
-    // Test a single altered path.
-    $this->assertUrlInboundAlter("user/$name", "user/$uid");
-    $this->assertUrlOutboundAlter("user/$uid", "user/$name");
-
-    // Test that a path always uses its alias.
-    $path = array('source' => "user/$uid/test1", 'alias' => 'alias/test1');
-    path_save($path);
-    $this->assertUrlInboundAlter('alias/test1', "user/$uid/test1");
-    $this->assertUrlOutboundAlter("user/$uid/test1", 'alias/test1');
-
-    // Test that alias source paths are normalized in the interface.
-    $edit = array('source' => "user/$name/edit", 'alias' => 'alias/test2');
-    $this->drupalPost('admin/config/search/path/add', $edit, t('Save'));
-    $this->assertText(t('The alias has been saved.'));
-
-    // Test that a path always uses its alias.
-    $this->assertUrlInboundAlter('alias/test2', "user/$uid/edit");
-    $this->assertUrlOutboundAlter("user/$uid/edit", 'alias/test2');
-
-    // Test a non-existent user is not altered.
-    $uid++;
-    $this->assertUrlInboundAlter("user/$uid", "user/$uid");
-    $this->assertUrlOutboundAlter("user/$uid", "user/$uid");
-
-    // Test that 'forum' is altered to 'community' correctly, both at the root
-    // level and for a specific existing forum.
-    $this->assertUrlInboundAlter('community', 'forum');
-    $this->assertUrlOutboundAlter('forum', 'community');
-    $forum_vid = db_query("SELECT vid FROM {taxonomy_vocabulary} WHERE module = 'forum'")->fetchField();
-    $tid = db_insert('taxonomy_term_data')
-      ->fields(array(
-        'name' => $this->randomName(),
-        'vid' => $forum_vid,
-      ))
-      ->execute();
-    $this->assertUrlInboundAlter("community/$tid", "forum/$tid");
-    $this->assertUrlOutboundAlter("forum/$tid", "community/$tid");
-  }
-
-  /**
-   * Test current_path() and request_path().
-   */
-  function testCurrentUrlRequestedPath() {
-    $this->drupalGet('url-alter-test/bar');
-    $this->assertRaw('request_path=url-alter-test/bar', 'request_path() returns the requested path.');
-    $this->assertRaw('current_path=url-alter-test/foo', 'current_path() returns the internal path.');
-  }
-
-  /**
-   * Tests that $_GET['q'] is initialized when the request path is empty.
-   */
-  function testGetQInitialized() {
-    $this->drupalGet('');
-    $this->assertText("\$_GET['q'] is non-empty with an empty request path.", "\$_GET['q'] is initialized with an empty request path.");
-  }
-
-  /**
-   * Assert that an outbound path is altered to an expected value.
-   *
-   * @param $original
-   *   A string with the original path that is run through url().
-   * @param $final
-   *   A string with the expected result after url().
-   * @return
-   *   TRUE if $original was correctly altered to $final, FALSE otherwise.
-   */
-  protected function assertUrlOutboundAlter($original, $final) {
-    // Test outbound altering.
-    $result = url($original);
-    $base_path = base_path() . (variable_get('clean_url', '0') ? '' : '?q=');
-    $result = substr($result, strlen($base_path));
-    $this->assertIdentical($result, $final, format_string('Altered outbound URL %original, expected %final, and got %result.', array('%original' => $original, '%final' => $final, '%result' => $result)));
-  }
-
-  /**
-   * Assert that a inbound path is altered to an expected value.
-   *
-   * @param $original
-   *   A string with the aliased or un-normal path that is run through
-   *   drupal_get_normal_path().
-   * @param $final
-   *   A string with the expected result after url().
-   * @return
-   *   TRUE if $original was correctly altered to $final, FALSE otherwise.
-   */
-  protected function assertUrlInboundAlter($original, $final) {
-    // Test inbound altering.
-    $result = drupal_get_normal_path($original);
-    $this->assertIdentical($result, $final, format_string('Altered inbound URL %original, expected %final, and got %result.', array('%original' => $original, '%final' => $final, '%result' => $result)));
-  }
-}
-
-/**
- * Unit test for drupal_lookup_path().
- */
-class PathLookupTest extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => t('Path lookup'),
-      'description' => t('Tests that drupal_lookup_path() returns correct paths.'),
-      'group' => t('Path API'),
-    );
-  }
-
-  /**
-   * Test that drupal_lookup_path() returns the correct path.
-   */
-  function testDrupalLookupPath() {
-    $account = $this->drupalCreateUser();
-    $uid = $account->uid;
-    $name = $account->name;
-
-    // Test the situation where the source is the same for multiple aliases.
-    // Start with a language-neutral alias, which we will override.
-    $path = array(
-      'source' => "user/$uid",
-      'alias' => 'foo',
-    );
-    path_save($path);
-    $this->assertEqual(drupal_lookup_path('alias', $path['source']), $path['alias'], 'Basic alias lookup works.');
-    $this->assertEqual(drupal_lookup_path('source', $path['alias']), $path['source'], 'Basic source lookup works.');
-
-    // Create a language specific alias for the default language (English).
-    $path = array(
-      'source' => "user/$uid",
-      'alias' => "users/$name",
-      'language' => 'en',
-    );
-    path_save($path);
-    $this->assertEqual(drupal_lookup_path('alias', $path['source']), $path['alias'], 'English alias overrides language-neutral alias.');
-    $this->assertEqual(drupal_lookup_path('source', $path['alias']), $path['source'], 'English source overrides language-neutral source.');
-
-    // Create a language-neutral alias for the same path, again.
-    $path = array(
-      'source' => "user/$uid",
-      'alias' => 'bar',
-    );
-    path_save($path);
-    $this->assertEqual(drupal_lookup_path('alias', $path['source']), "users/$name", 'English alias still returned after entering a language-neutral alias.');
-
-    // Create a language-specific (xx-lolspeak) alias for the same path.
-    $path = array(
-      'source' => "user/$uid",
-      'alias' => 'LOL',
-      'language' => 'xx-lolspeak',
-    );
-    path_save($path);
-    $this->assertEqual(drupal_lookup_path('alias', $path['source']), "users/$name", 'English alias still returned after entering a LOLspeak alias.');
-    // The LOLspeak alias should be returned if we really want LOLspeak.
-    $this->assertEqual(drupal_lookup_path('alias', $path['source'], 'xx-lolspeak'), 'LOL', 'LOLspeak alias returned if we specify xx-lolspeak to drupal_lookup_path().');
-
-    // Create a new alias for this path in English, which should override the
-    // previous alias for "user/$uid".
-    $path = array(
-      'source' => "user/$uid",
-      'alias' => 'users/my-new-path',
-      'language' => 'en',
-    );
-    path_save($path);
-    $this->assertEqual(drupal_lookup_path('alias', $path['source']), $path['alias'], 'Recently created English alias returned.');
-    $this->assertEqual(drupal_lookup_path('source', $path['alias']), $path['source'], 'Recently created English source returned.');
-
-    // Remove the English aliases, which should cause a fallback to the most
-    // recently created language-neutral alias, 'bar'.
-    db_delete('url_alias')
-      ->condition('language', 'en')
-      ->execute();
-    drupal_clear_path_cache();
-    $this->assertEqual(drupal_lookup_path('alias', $path['source']), 'bar', 'Path lookup falls back to recently created language-neutral alias.');
-
-    // Test the situation where the alias and language are the same, but
-    // the source differs. The newer alias record should be returned.
-    $account2 = $this->drupalCreateUser();
-    $path = array(
-      'source' => 'user/' . $account2->uid,
-      'alias' => 'bar',
-    );
-    path_save($path);
-    $this->assertEqual(drupal_lookup_path('source', $path['alias']), $path['source'], 'Newer alias record is returned when comparing two LANGUAGE_NONE paths with the same alias.');
-  }
-}
-
-/**
- * Tests the path_save() function.
- */
-class PathSaveTest extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => t('Path save'),
-      'description' => t('Tests that path_save() exposes the previous alias value.'),
-      'group' => t('Path API'),
-    );
-  }
-
-  function setUp() {
-    // Enable a helper module that implements hook_path_update().
-    parent::setUp('path_test');
-    path_test_reset();
-  }
-
-  /**
-   * Tests that path_save() makes the original path available to modules.
-   */
-  function testDrupalSaveOriginalPath() {
-    $account = $this->drupalCreateUser();
-    $uid = $account->uid;
-    $name = $account->name;
-
-    // Create a language-neutral alias.
-    $path = array(
-      'source' => "user/$uid",
-      'alias' => 'foo',
-    );
-    $path_original = $path;
-    path_save($path);
-
-    // Alter the path.
-    $path['alias'] = 'bar';
-    path_save($path);
-
-    // Test to see if the original alias is available to modules during
-    // hook_path_update().
-    $results = variable_get('path_test_results', array());
-    $this->assertIdentical($results['hook_path_update']['original']['alias'], $path_original['alias'], 'Old path alias available to modules during hook_path_update.');
-    $this->assertIdentical($results['hook_path_update']['original']['source'], $path_original['source'], 'Old path alias available to modules during hook_path_update.');
-  }
-}
diff --git a/modules/simpletest/tests/path_test.info b/modules/simpletest/tests/path_test.info
deleted file mode 100644
index ea993ae..0000000
--- a/modules/simpletest/tests/path_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Hook path tests"
-description = "Support module for path hook testing."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/path_test.module b/modules/simpletest/tests/path_test.module
deleted file mode 100644
index d3dc80e..0000000
--- a/modules/simpletest/tests/path_test.module
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-/**
- * @file
- * Helper module for the path tests.
- */
-
-/**
- * Resets the path test results.
- */
-function path_test_reset() {
-  variable_set('path_test_results', array());
-}
-
-/**
- * Implements hook_path_update().
- */
-function path_test_path_update($path) {
-  $results = variable_get('path_test_results', array());
-  $results['hook_path_update'] = $path;
-  variable_set('path_test_results', $results);
-}
-
diff --git a/modules/simpletest/tests/psr_0_test/lib/Drupal/psr_0_test/Tests/ExampleTest.php b/modules/simpletest/tests/psr_0_test/lib/Drupal/psr_0_test/Tests/ExampleTest.php
deleted file mode 100644
index 3098c92..0000000
--- a/modules/simpletest/tests/psr_0_test/lib/Drupal/psr_0_test/Tests/ExampleTest.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-namespace Drupal\psr_0_test\Tests;
-
-class ExampleTest extends \DrupalWebTestCase {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'PSR0 example test: PSR-0 in disabled modules.',
-      'description' => 'We want to assert that this test case is being discovered.',
-      'group' => 'SimpleTest',
-    );
-  }
-
-  function testArithmetics() {
-    $this->assert(1 + 1 == 2, '1 + 1 == 2');
-  }
-}
diff --git a/modules/simpletest/tests/psr_0_test/lib/Drupal/psr_0_test/Tests/Nested/NestedExampleTest.php b/modules/simpletest/tests/psr_0_test/lib/Drupal/psr_0_test/Tests/Nested/NestedExampleTest.php
deleted file mode 100644
index 324ed43..0000000
--- a/modules/simpletest/tests/psr_0_test/lib/Drupal/psr_0_test/Tests/Nested/NestedExampleTest.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-namespace Drupal\psr_0_test\Tests\Nested;
-
-class NestedExampleTest extends \DrupalWebTestCase {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'PSR0 example test: PSR-0 in nested subfolders.',
-      'description' => 'We want to assert that this PSR-0 test case is being discovered.',
-      'group' => 'SimpleTest',
-    );
-  }
-
-  function testArithmetics() {
-    $this->assert(1 + 1 == 2, '1 + 1 == 2');
-  }
-}
diff --git a/modules/simpletest/tests/psr_0_test/psr_0_test.info b/modules/simpletest/tests/psr_0_test/psr_0_test.info
deleted file mode 100644
index 48ca8d8..0000000
--- a/modules/simpletest/tests/psr_0_test/psr_0_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = PSR-0 Test cases
-description = Test classes to be discovered by simpletest.
-core = 7.x
-
-hidden = TRUE
-package = Testing
diff --git a/modules/simpletest/tests/psr_0_test/psr_0_test.module b/modules/simpletest/tests/psr_0_test/psr_0_test.module
deleted file mode 100644
index b3d9bbc..0000000
--- a/modules/simpletest/tests/psr_0_test/psr_0_test.module
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/modules/simpletest/tests/registry.test b/modules/simpletest/tests/registry.test
deleted file mode 100644
index bcd8d4e..0000000
--- a/modules/simpletest/tests/registry.test
+++ /dev/null
@@ -1,142 +0,0 @@
-<?php
-
-class RegistryParseFileTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Registry parse file test',
-      'description' => 'Parse a simple file and check that its resources are saved to the database.',
-      'group' => 'System'
-    );
-  }
-
-  function setUp() {
-    $chrs = hash('sha256', microtime() . mt_rand());
-    $this->fileName = 'registry_test_' . substr($chrs, 0, 16);
-    $this->className = 'registry_test_class' . substr($chrs, 16, 16);
-    $this->interfaceName = 'registry_test_interface' . substr($chrs, 32, 16);
-    parent::setUp();
-  }
-
-  /**
-   * testRegistryParseFile
-   */
-  function testRegistryParseFile() {
-    _registry_parse_file($this->fileName, $this->getFileContents());
-    foreach (array('className', 'interfaceName') as $resource) {
-      $foundName = db_query('SELECT name FROM {registry} WHERE name = :name', array(':name' => $this->$resource))->fetchField();
-      $this->assertTrue($this->$resource == $foundName, t('Resource "@resource" found.', array('@resource' => $this->$resource)));
-    }
-  }
-
-  /**
-   * getFileContents
-   */
-  function getFileContents() {
-    $file_contents = <<<CONTENTS
-<?php
-
-class {$this->className} {}
-
-interface {$this->interfaceName} {}
-
-CONTENTS;
-    return $file_contents;
-  }
-
-}
-
-class RegistryParseFilesTestCase extends DrupalWebTestCase {
-  protected $fileTypes = array('new', 'existing_changed');
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Registry parse files test',
-      'description' => 'Read two a simple files from disc, and check that their resources are saved to the database.',
-      'group' => 'System'
-    );
-  }
-
-  function setUp() {
-    parent::setUp();
-    // Create files with some php to parse - one 'new', one 'existing' so
-    // we test all the important code paths in _registry_parse_files.
-    foreach ($this->fileTypes as $fileType) {
-      $chrs = hash('sha256', microtime() . mt_rand());
-      $this->$fileType = new stdClass();
-      $this->$fileType->fileName = 'public://registry_test_' . substr($chrs, 0, 16);
-      $this->$fileType->className = 'registry_test_class' . substr($chrs, 16, 16);
-      $this->$fileType->interfaceName = 'registry_test_interface' . substr($chrs, 32, 16);
-      $this->$fileType->contents = $this->getFileContents($fileType);
-      file_save_data($this->$fileType->contents, $this->$fileType->fileName);
-
-      if ($fileType == 'existing_changed') {
-        // Add a record with an incorrect hash.
-        $this->$fileType->fakeHash = hash('sha256', mt_rand());
-        db_insert('registry_file')
-          ->fields(array(
-            'hash' => $this->$fileType->fakeHash,
-            'filename' => $this->$fileType->fileName,
-          ))
-          ->execute();
-
-        // Insert some fake resource records.
-        foreach (array('class', 'interface') as $type) {
-          db_insert('registry')
-            ->fields(array(
-              'name' => $type . hash('sha256', microtime() . mt_rand()),
-              'type' => $type,
-              'filename' => $this->$fileType->fileName,
-            ))
-            ->execute();
-        }
-      }
-    }
-  }
-
-  /**
-   * testRegistryParseFiles
-   */
-  function testRegistryParseFiles() {
-    _registry_parse_files($this->getFiles());
-    foreach ($this->fileTypes as $fileType) {
-      // Test that we have all the right resources.
-      foreach (array('className', 'interfaceName') as $resource) {
-        $foundName = db_query('SELECT name FROM {registry} WHERE name = :name', array(':name' => $this->$fileType->$resource))->fetchField();
-        $this->assertTrue($this->$fileType->$resource == $foundName, t('Resource "@resource" found.', array('@resource' => $this->$fileType->$resource)));
-      }
-      // Test that we have the right hash.
-      $hash = db_query('SELECT hash FROM {registry_file} WHERE filename = :filename', array(':filename' => $this->$fileType->fileName))->fetchField();
-      $this->assertTrue(hash('sha256', $this->$fileType->contents) == $hash, t('sha-256 for "@filename" matched.' . $fileType . $hash, array('@filename' => $this->$fileType->fileName)));
-    }
-  }
-
-  /**
-   * getFiles
-   */
-  function getFiles() {
-    $files = array();
-    foreach ($this->fileTypes as $fileType) {
-      $files[$this->$fileType->fileName] = array('module' => '', 'weight' => 0);
-      if ($fileType == 'existing_changed') {
-        $files[$this->$fileType->fileName]['hash'] = $this->$fileType->fakeHash;
-      }
-    }
-    return $files;
-  }
-
-  /**
-   * getFileContents
-   */
-  function getFileContents($fileType) {
-    $file_contents = <<<CONTENTS
-<?php
-
-class {$this->$fileType->className} {}
-
-interface {$this->$fileType->interfaceName} {}
-
-CONTENTS;
-    return $file_contents;
-  }
-
-}
diff --git a/modules/simpletest/tests/requirements1_test.info b/modules/simpletest/tests/requirements1_test.info
deleted file mode 100644
index b659b21..0000000
--- a/modules/simpletest/tests/requirements1_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = Requirements 1 Test
-description = "Tests that a module is not installed when it fails hook_requirements('install')."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/requirements1_test.install b/modules/simpletest/tests/requirements1_test.install
deleted file mode 100644
index 91caca3..0000000
--- a/modules/simpletest/tests/requirements1_test.install
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-/**
- * Implements hook_requirements().
- */
-function requirements1_test_requirements($phase) {
-  $requirements = array();
-  // Ensure translations don't break during installation.
-  $t = get_t();
-
-  // Always fails requirements.
-  if ('install' == $phase) {
-    $requirements['requirements1_test'] = array(
-      'title' => $t('Requirements 1 Test'),
-      'severity' => REQUIREMENT_ERROR,
-      'description' => $t('Requirements 1 Test failed requirements.'),
-    );
-  }
-
-  return $requirements;
-}
diff --git a/modules/simpletest/tests/requirements1_test.module b/modules/simpletest/tests/requirements1_test.module
deleted file mode 100644
index e52266b..0000000
--- a/modules/simpletest/tests/requirements1_test.module
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests that a module is not installed when it fails
- * hook_requirements('install').
- */
diff --git a/modules/simpletest/tests/requirements2_test.info b/modules/simpletest/tests/requirements2_test.info
deleted file mode 100644
index a66e04b..0000000
--- a/modules/simpletest/tests/requirements2_test.info
+++ /dev/null
@@ -1,8 +0,0 @@
-name = Requirements 2 Test
-description = "Tests that a module is not installed when the one it depends on fails hook_requirements('install)."
-dependencies[] = requirements1_test
-dependencies[] = comment
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/requirements2_test.module b/modules/simpletest/tests/requirements2_test.module
deleted file mode 100644
index a4f4305..0000000
--- a/modules/simpletest/tests/requirements2_test.module
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests that a module is not installed when the one it depends on fails
- * hook_requirements('install').
- */
diff --git a/modules/simpletest/tests/schema.test b/modules/simpletest/tests/schema.test
deleted file mode 100644
index 4199428..0000000
--- a/modules/simpletest/tests/schema.test
+++ /dev/null
@@ -1,384 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for the Database Schema API.
- */
-
-/**
- * Unit tests for the Schema API.
- */
-class SchemaTestCase extends DrupalWebTestCase {
-  /**
-   * A global counter for table and field creation.
-   */
-  var $counter;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Schema API',
-      'description' => 'Tests table creation and modification via the schema API.',
-      'group' => 'Database',
-    );
-  }
-
-  /**
-   *
-   */
-  function testSchema() {
-    // Try creating a table.
-    $table_specification = array(
-      'description' => 'Schema table description.',
-      'fields' => array(
-        'id'  => array(
-          'type' => 'int',
-          'default' => NULL,
-        ),
-        'test_field'  => array(
-          'type' => 'int',
-          'not null' => TRUE,
-          'description' => 'Schema column description.',
-        ),
-      ),
-    );
-    db_create_table('test_table', $table_specification);
-
-    // Assert that the table exists.
-    $this->assertTrue(db_table_exists('test_table'), 'The table exists.');
-
-    // Assert that the table comment has been set.
-    $this->checkSchemaComment($table_specification['description'], 'test_table');
-
-    // Assert that the column comment has been set.
-    $this->checkSchemaComment($table_specification['fields']['test_field']['description'], 'test_table', 'test_field');
-
-    // An insert without a value for the column 'test_table' should fail.
-    $this->assertFalse($this->tryInsert(), 'Insert without a default failed.');
-
-    // Add a default value to the column.
-    db_field_set_default('test_table', 'test_field', 0);
-    // The insert should now succeed.
-    $this->assertTrue($this->tryInsert(), 'Insert with a default succeeded.');
-
-    // Remove the default.
-    db_field_set_no_default('test_table', 'test_field');
-    // The insert should fail again.
-    $this->assertFalse($this->tryInsert(), 'Insert without a default failed.');
-
-    // Test for fake index and test for the boolean result of indexExists().
-    $index_exists = Database::getConnection()->schema()->indexExists('test_table', 'test_field');
-    $this->assertIdentical($index_exists, FALSE, 'Fake index does not exists');
-    // Add index.
-    db_add_index('test_table', 'test_field', array('test_field'));
-    // Test for created index and test for the boolean result of indexExists().
-    $index_exists = Database::getConnection()->schema()->indexExists('test_table', 'test_field');
-    $this->assertIdentical($index_exists, TRUE, 'Index created.');
-
-    // Rename the table.
-    db_rename_table('test_table', 'test_table2');
-
-    // Index should be renamed.
-    $index_exists = Database::getConnection()->schema()->indexExists('test_table2', 'test_field');
-    $this->assertTrue($index_exists, 'Index was renamed.');
-
-    // We need the default so that we can insert after the rename.
-    db_field_set_default('test_table2', 'test_field', 0);
-    $this->assertFalse($this->tryInsert(), 'Insert into the old table failed.');
-    $this->assertTrue($this->tryInsert('test_table2'), 'Insert into the new table succeeded.');
-
-    // We should have successfully inserted exactly two rows.
-    $count = db_query('SELECT COUNT(*) FROM {test_table2}')->fetchField();
-    $this->assertEqual($count, 2, 'Two fields were successfully inserted.');
-
-    // Try to drop the table.
-    db_drop_table('test_table2');
-    $this->assertFalse(db_table_exists('test_table2'), 'The dropped table does not exist.');
-
-    // Recreate the table.
-    db_create_table('test_table', $table_specification);
-    db_field_set_default('test_table', 'test_field', 0);
-    db_add_field('test_table', 'test_serial', array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'description' => 'Added column description.'));
-
-    // Assert that the column comment has been set.
-    $this->checkSchemaComment('Added column description.', 'test_table', 'test_serial');
-
-    // Change the new field to a serial column.
-    db_change_field('test_table', 'test_serial', 'test_serial', array('type' => 'serial', 'not null' => TRUE, 'description' => 'Changed column description.'), array('primary key' => array('test_serial')));
-
-    // Assert that the column comment has been set.
-    $this->checkSchemaComment('Changed column description.', 'test_table', 'test_serial');
-
-    $this->assertTrue($this->tryInsert(), 'Insert with a serial succeeded.');
-    $max1 = db_query('SELECT MAX(test_serial) FROM {test_table}')->fetchField();
-    $this->assertTrue($this->tryInsert(), 'Insert with a serial succeeded.');
-    $max2 = db_query('SELECT MAX(test_serial) FROM {test_table}')->fetchField();
-    $this->assertTrue($max2 > $max1, 'The serial is monotone.');
-
-    $count = db_query('SELECT COUNT(*) FROM {test_table}')->fetchField();
-    $this->assertEqual($count, 2, 'There were two rows.');
-
-    // Use database specific data type and ensure that table is created.
-    $table_specification = array(
-      'description' => 'Schema table description.',
-      'fields' => array(
-        'timestamp'  => array(
-          'mysql_type' => 'timestamp',
-          'pgsql_type' => 'timestamp',
-          'sqlite_type' => 'datetime',
-          'not null' => FALSE,
-          'default' => NULL,
-        ),
-      ),
-    );
-    try {
-      db_create_table('test_timestamp', $table_specification);
-    }
-    catch (Exception $e) {}
-    $this->assertTrue(db_table_exists('test_timestamp'), 'Table with database specific datatype was created.');
-  }
-
-  function tryInsert($table = 'test_table') {
-    try {
-       db_insert($table)
-         ->fields(array('id' => mt_rand(10, 20)))
-         ->execute();
-      return TRUE;
-    }
-    catch (Exception $e) {
-      return FALSE;
-    }
-  }
-
-  /**
-   * Checks that a table or column comment matches a given description.
-   *
-   * @param $description
-   *   The asserted description.
-   * @param $table
-   *   The table to test.
-   * @param $column
-   *   Optional column to test.
-   */
-  function checkSchemaComment($description, $table, $column = NULL) {
-    if (method_exists(Database::getConnection()->schema(), 'getComment')) {
-      $comment = Database::getConnection()->schema()->getComment($table, $column);
-      $this->assertEqual($comment, $description, 'The comment matches the schema description.');
-    }
-  }
-
-  /**
-   * Tests creating unsigned columns and data integrity thereof.
-   */
-  function testUnsignedColumns() {
-    // First create the table with just a serial column.
-    $table_name = 'unsigned_table';
-    $table_spec = array(
-      'fields' => array('serial_column' => array('type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE)),
-      'primary key' => array('serial_column'),
-    );
-    $ret = array();
-    db_create_table($table_name, $table_spec);
-
-    // Now set up columns for the other types.
-    $types = array('int', 'float', 'numeric');
-    foreach ($types as $type) {
-      $column_spec = array('type' => $type, 'unsigned'=> TRUE);
-      if ($type == 'numeric') {
-        $column_spec += array('precision' => 10, 'scale' => 0);
-      }
-      $column_name = $type . '_column';
-      $table_spec['fields'][$column_name] = $column_spec;
-      db_add_field($table_name, $column_name, $column_spec);
-    }
-
-    // Finally, check each column and try to insert invalid values into them.
-    foreach ($table_spec['fields'] as $column_name => $column_spec) {
-      $this->assertTrue(db_field_exists($table_name, $column_name), format_string('Unsigned @type column was created.', array('@type' => $column_spec['type'])));
-      $this->assertFalse($this->tryUnsignedInsert($table_name, $column_name), format_string('Unsigned @type column rejected a negative value.', array('@type' => $column_spec['type'])));
-    }
-  }
-
-  /**
-   * Tries to insert a negative value into columns defined as unsigned.
-   *
-   * @param $table_name
-   *   The table to insert
-   * @param $column_name
-   *   The column to insert
-   * @return
-   *   TRUE if the insert succeeded, FALSE otherwise
-   */
-  function tryUnsignedInsert($table_name, $column_name) {
-    try {
-      db_insert($table_name)
-         ->fields(array($column_name => -1))
-         ->execute();
-      return TRUE;
-    }
-    catch (Exception $e) {
-      return FALSE;
-    }
-  }
-
-  /**
-   * Test adding columns to an existing table.
-   */
-  function testSchemaAddField() {
-    // Test varchar types.
-    foreach (array(1, 32, 128, 256, 512) as $length) {
-      $base_field_spec = array(
-        'type' => 'varchar',
-        'length' => $length,
-      );
-      $variations = array(
-        array('not null' => FALSE),
-        array('not null' => FALSE, 'default' => '7'),
-        array('not null' => TRUE, 'initial' => 'd'),
-        array('not null' => TRUE, 'initial' => 'd', 'default' => '7'),
-      );
-
-      foreach ($variations as $variation) {
-        $field_spec = $variation + $base_field_spec;
-        $this->assertFieldAdditionRemoval($field_spec);
-      }
-    }
-
-    // Test int and float types.
-    foreach (array('int', 'float') as $type) {
-      foreach (array('tiny', 'small', 'medium', 'normal', 'big') as $size) {
-        $base_field_spec = array(
-          'type' => $type,
-          'size' => $size,
-        );
-        $variations = array(
-          array('not null' => FALSE),
-          array('not null' => FALSE, 'default' => 7),
-          array('not null' => TRUE, 'initial' => 1),
-          array('not null' => TRUE, 'initial' => 1, 'default' => 7),
-        );
-
-        foreach ($variations as $variation) {
-          $field_spec = $variation + $base_field_spec;
-          $this->assertFieldAdditionRemoval($field_spec);
-        }
-      }
-    }
-
-    // Test numeric types.
-    foreach (array(1, 5, 10, 40, 65) as $precision) {
-      foreach (array(0, 2, 10, 30) as $scale) {
-        if ($precision <= $scale) {
-          // Precision must be smaller then scale.
-          continue;
-        }
-
-        $base_field_spec = array(
-          'type' => 'numeric',
-          'scale' => $scale,
-          'precision' => $precision,
-        );
-        $variations = array(
-          array('not null' => FALSE),
-          array('not null' => FALSE, 'default' => 7),
-          array('not null' => TRUE, 'initial' => 1),
-          array('not null' => TRUE, 'initial' => 1, 'default' => 7),
-        );
-
-        foreach ($variations as $variation) {
-          $field_spec = $variation + $base_field_spec;
-          $this->assertFieldAdditionRemoval($field_spec);
-        }
-      }
-    }
-  }
-
-  /**
-   * Assert that a given field can be added and removed from a table.
-   *
-   * The addition test covers both defining a field of a given specification
-   * when initially creating at table and extending an existing table.
-   *
-   * @param $field_spec
-   *   The schema specification of the field.
-   */
-  protected function assertFieldAdditionRemoval($field_spec) {
-    // Try creating the field on a new table.
-    $table_name = 'test_table_' . ($this->counter++);
-    $table_spec = array(
-      'fields' => array(
-        'serial_column' => array('type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE),
-        'test_field' => $field_spec,
-      ),
-      'primary key' => array('serial_column'),
-    );
-    db_create_table($table_name, $table_spec);
-    $this->pass(format_string('Table %table created.', array('%table' => $table_name)));
-
-    // Check the characteristics of the field.
-    $this->assertFieldCharacteristics($table_name, 'test_field', $field_spec);
-
-    // Clean-up.
-    db_drop_table($table_name);
-
-    // Try adding a field to an existing table.
-    $table_name = 'test_table_' . ($this->counter++);
-    $table_spec = array(
-      'fields' => array(
-        'serial_column' => array('type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE),
-      ),
-      'primary key' => array('serial_column'),
-    );
-    db_create_table($table_name, $table_spec);
-    $this->pass(format_string('Table %table created.', array('%table' => $table_name)));
-
-    // Insert some rows to the table to test the handling of initial values.
-    for ($i = 0; $i < 3; $i++) {
-      db_insert($table_name)
-        ->useDefaults(array('serial_column'))
-        ->execute();
-    }
-
-    db_add_field($table_name, 'test_field', $field_spec);
-    $this->pass(format_string('Column %column created.', array('%column' => 'test_field')));
-
-    // Check the characteristics of the field.
-    $this->assertFieldCharacteristics($table_name, 'test_field', $field_spec);
-
-    // Clean-up.
-    db_drop_field($table_name, 'test_field');
-    db_drop_table($table_name);
-  }
-
-  /**
-   * Assert that a newly added field has the correct characteristics.
-   */
-  protected function assertFieldCharacteristics($table_name, $field_name, $field_spec) {
-    // Check that the initial value has been registered.
-    if (isset($field_spec['initial'])) {
-      // There should be no row with a value different then $field_spec['initial'].
-      $count = db_select($table_name)
-        ->fields($table_name, array('serial_column'))
-        ->condition($field_name, $field_spec['initial'], '<>')
-        ->countQuery()
-        ->execute()
-        ->fetchField();
-      $this->assertEqual($count, 0, 'Initial values filled out.');
-    }
-
-    // Check that the default value has been registered.
-    if (isset($field_spec['default'])) {
-      // Try inserting a row, and check the resulting value of the new column.
-      $id = db_insert($table_name)
-        ->useDefaults(array('serial_column'))
-        ->execute();
-      $field_value = db_select($table_name)
-        ->fields($table_name, array($field_name))
-        ->condition('serial_column', $id)
-        ->execute()
-        ->fetchField();
-      $this->assertEqual($field_value, $field_spec['default'], 'Default value registered.');
-    }
-
-    db_drop_field($table_name, $field_name);
-  }
-}
diff --git a/modules/simpletest/tests/session_test.info b/modules/simpletest/tests/session_test.info
deleted file mode 100644
index 3272156..0000000
--- a/modules/simpletest/tests/session_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Session test"
-description = "Support module for session data testing."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/session_test.module b/modules/simpletest/tests/session_test.module
deleted file mode 100644
index 689ff09..0000000
--- a/modules/simpletest/tests/session_test.module
+++ /dev/null
@@ -1,192 +0,0 @@
-<?php
-
-/**
- * Implements hook_menu().
- */
-function session_test_menu() {
-  $items['session-test/get'] = array(
-    'title' => 'Session value',
-    'page callback' => '_session_test_get',
-    'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
-  );
-  $items['session-test/id'] = array(
-    'title' => 'Session ID',
-    'page callback' => '_session_test_id',
-    'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
-  );
-  $items['session-test/id-from-cookie'] = array(
-    'title' => 'Session ID from cookie',
-    'page callback' => '_session_test_id_from_cookie',
-    'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
-  );
-  $items['session-test/set/%'] = array(
-    'title' => 'Set session value',
-    'page callback' => '_session_test_set',
-    'page arguments' => array(2),
-    'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
-  );
-  $items['session-test/no-set/%'] = array(
-    'title' => 'Set session value but do not save session',
-    'page callback' => '_session_test_no_set',
-    'page arguments' => array(2),
-    'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
-  );
-  $items['session-test/set-message'] = array(
-    'title' => 'Set message',
-    'page callback' => '_session_test_set_message',
-    'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
-  );
-  $items['session-test/set-message-but-dont-save'] = array(
-    'title' => 'Set message but do not save session',
-    'page callback' => '_session_test_set_message_but_dont_save',
-    'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
-  );
-  $items['session-test/set-not-started'] = array(
-    'title' => 'Set message when session is not started',
-    'page callback' => '_session_test_set_not_started',
-    'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
-  );
-  $items['session-test/is-logged-in'] = array(
-    'title' => 'Check if user is logged in',
-    'page callback' => '_session_test_is_logged_in',
-    'access callback' => 'user_is_logged_in',
-    'type' => MENU_CALLBACK,
-  );
-
-  return $items;
-}
-
-/**
- * Implements hook_boot().
- */
-function session_test_boot() {
-  header('X-Session-Empty: ' . intval(empty($_SESSION)));
-}
-
-/**
- * Page callback, prints the stored session value to the screen.
- */
-function _session_test_get() {
-  if (!empty($_SESSION['session_test_value'])) {
-    return t('The current value of the stored session variable is: %val', array('%val' => $_SESSION['session_test_value']));
-  }
-  else {
-    return "";
-  }
-}
-
-/**
- * Page callback, stores a value in $_SESSION['session_test_value'].
- */
-function _session_test_set($value) {
-  $_SESSION['session_test_value'] = $value;
-  return t('The current value of the stored session variable has been set to %val', array('%val' => $value));
-}
-
-/**
- * Menu callback: turns off session saving and then tries to save a value
- * anyway.
- */
-function _session_test_no_set($value) {
-  drupal_save_session(FALSE);
-  _session_test_set($value);
-  return t('session saving was disabled, and then %val was set', array('%val' => $value));
-}
-
-/**
- * Menu callback: print the current session ID.
- */
-function _session_test_id() {
-  // Set a value in $_SESSION, so that drupal_session_commit() will start
-  // a session.
-  $_SESSION['test'] = 'test';
-
-  drupal_session_commit();
-
-  return 'session_id:' . session_id() . "\n";
-}
-
-/**
- * Menu callback: print the current session ID as read from the cookie.
- */
-function _session_test_id_from_cookie() {
-  return 'session_id:' . $_COOKIE[session_name()] . "\n";
-}
-
-/**
- * Menu callback, sets a message to me displayed on the following page.
- */
-function _session_test_set_message() {
-  drupal_set_message(t('This is a dummy message.'));
-  print t('A message was set.');
-  // Do not return anything, so the current request does not result in a themed
-  // page with messages. The message will be displayed in the following request
-  // instead.
-}
-
-/**
- * Menu callback, sets a message but call drupal_save_session(FALSE).
- */
-function _session_test_set_message_but_dont_save() {
-  drupal_save_session(FALSE);
-  _session_test_set_message();
-}
-
-/**
- * Menu callback, stores a value in $_SESSION['session_test_value'] without
- * having started the session in advance.
- */
-function _session_test_set_not_started() {
-  if (!drupal_session_will_start()) {
-    $_SESSION['session_test_value'] = t('Session was not started');
-  }
-}
-
-/**
- * Implements hook_user().
- */
-function session_test_user_login($edit = array(), $user = NULL) {
-  if ($user->name == 'session_test_user') {
-    // Exit so we can verify that the session was regenerated
-    // before hook_user() was called.
-    exit;
-  }
-}
-
-/**
- * Implements hook_form_FORM_ID_alter().
- */
-function session_test_form_user_login_alter(&$form) {
-  $form['#https'] = TRUE;
-}
-
-/**
- * Implements hook_drupal_goto_alter().
- *
- * Force the redirection to go to a non-secure page after being on a secure
- * page through https.php.
- */
-function session_test_drupal_goto_alter(&$path, &$options, &$http_response_code) {
-  global $base_insecure_url, $is_https_mock;
-  // Alter the redirect to use HTTP when using a mock HTTPS request through
-  // https.php because form submissions would otherwise redirect to a
-  // non-existent HTTPS site.
-  if (!empty($is_https_mock)) {
-    $path = $base_insecure_url . '/' . $path;
-  }
-}
-
-/**
- * Menu callback, only available if current user is logged in.
- */
-function _session_test_is_logged_in() {
-  return t('User is logged in.');
-}
diff --git a/modules/simpletest/tests/system.base.css b/modules/simpletest/tests/system.base.css
deleted file mode 100644
index c14ae9b..0000000
--- a/modules/simpletest/tests/system.base.css
+++ /dev/null
@@ -1,6 +0,0 @@
-
-/**
- * This file is for testing CSS file override in
- * CascadingStylesheetsTestCase::testRenderOverride().
- * No contents are necessary.
- */
diff --git a/modules/simpletest/tests/system_dependencies_test.info b/modules/simpletest/tests/system_dependencies_test.info
deleted file mode 100644
index 5b4bd10..0000000
--- a/modules/simpletest/tests/system_dependencies_test.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = "System dependency test"
-description = "Support module for testing system dependencies."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
-dependencies[] = _missing_dependency
diff --git a/modules/simpletest/tests/system_dependencies_test.module b/modules/simpletest/tests/system_dependencies_test.module
deleted file mode 100644
index b3d9bbc..0000000
--- a/modules/simpletest/tests/system_dependencies_test.module
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/modules/simpletest/tests/system_incompatible_core_version_dependencies_test.info b/modules/simpletest/tests/system_incompatible_core_version_dependencies_test.info
deleted file mode 100644
index 002c0d2..0000000
--- a/modules/simpletest/tests/system_incompatible_core_version_dependencies_test.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = "System incompatible core version dependencies test"
-description = "Support module for testing system dependencies."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
-dependencies[] = system_incompatible_core_version_test
diff --git a/modules/simpletest/tests/system_incompatible_core_version_dependencies_test.module b/modules/simpletest/tests/system_incompatible_core_version_dependencies_test.module
deleted file mode 100644
index b3d9bbc..0000000
--- a/modules/simpletest/tests/system_incompatible_core_version_dependencies_test.module
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/modules/simpletest/tests/system_incompatible_core_version_test.info b/modules/simpletest/tests/system_incompatible_core_version_test.info
deleted file mode 100644
index ced53e9..0000000
--- a/modules/simpletest/tests/system_incompatible_core_version_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "System incompatible core version test"
-description = "Support module for testing system dependencies."
-package = Testing
-version = VERSION
-core = 5.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/system_incompatible_core_version_test.module b/modules/simpletest/tests/system_incompatible_core_version_test.module
deleted file mode 100644
index b3d9bbc..0000000
--- a/modules/simpletest/tests/system_incompatible_core_version_test.module
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/modules/simpletest/tests/system_incompatible_module_version_dependencies_test.info b/modules/simpletest/tests/system_incompatible_module_version_dependencies_test.info
deleted file mode 100644
index 48db9ea..0000000
--- a/modules/simpletest/tests/system_incompatible_module_version_dependencies_test.info
+++ /dev/null
@@ -1,8 +0,0 @@
-name = "System incompatible module version dependencies test"
-description = "Support module for testing system dependencies."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
-; system_incompatible_module_version_test declares version 1.0
-dependencies[] = system_incompatible_module_version_test (>2.0)
diff --git a/modules/simpletest/tests/system_incompatible_module_version_dependencies_test.module b/modules/simpletest/tests/system_incompatible_module_version_dependencies_test.module
deleted file mode 100644
index b3d9bbc..0000000
--- a/modules/simpletest/tests/system_incompatible_module_version_dependencies_test.module
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/modules/simpletest/tests/system_incompatible_module_version_test.info b/modules/simpletest/tests/system_incompatible_module_version_test.info
deleted file mode 100644
index 9dfc686..0000000
--- a/modules/simpletest/tests/system_incompatible_module_version_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "System incompatible module version test"
-description = "Support module for testing system dependencies."
-package = Testing
-version = 1.0
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/system_incompatible_module_version_test.module b/modules/simpletest/tests/system_incompatible_module_version_test.module
deleted file mode 100644
index b3d9bbc..0000000
--- a/modules/simpletest/tests/system_incompatible_module_version_test.module
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/modules/simpletest/tests/system_test.info b/modules/simpletest/tests/system_test.info
deleted file mode 100644
index c4ad536..0000000
--- a/modules/simpletest/tests/system_test.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = System test
-description = Support module for system testing.
-package = Testing
-version = VERSION
-core = 7.x
-files[] = system_test.module
-hidden = TRUE
diff --git a/modules/simpletest/tests/tablesort.test b/modules/simpletest/tests/tablesort.test
deleted file mode 100644
index ffc9535..0000000
--- a/modules/simpletest/tests/tablesort.test
+++ /dev/null
@@ -1,166 +0,0 @@
-<?php
-
-/**
- * @file
- * Various tablesort tests.
- */
-
-/**
- * Test unicode handling features implemented in unicode.inc.
- */
-class TableSortTest extends DrupalUnitTestCase {
-
-  /**
-   * Storage for initial value of $_GET.
-   *
-   * @var array
-   */
-  protected $GET = array();
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Tablesort',
-      'description' => 'Tests table sorting.',
-      'group' => 'System',
-    );
-  }
-
-  function setUp() {
-    // Save the original $_GET to be restored later.
-    $this->GET = $_GET;
-
-    parent::setUp();
-  }
-
-  function tearDown() {
-    // Revert $_GET.
-    $_GET = $this->GET;
-
-    parent::tearDown();
-  }
-
-  /**
-   * Test tablesort_init().
-   */
-  function testTableSortInit() {
-
-    // Test simple table headers.
-
-    $headers = array('foo', 'bar', 'baz');
-    // Reset $_GET to prevent parameters from Simpletest and Batch API ending
-    // up in $ts['query'].
-    $_GET = array('q' => 'jahwohl');
-    $expected_ts = array(
-      'name' => 'foo',
-      'sql' => '',
-      'sort' => 'asc',
-      'query' => array(),
-    );
-    $ts = tablesort_init($headers);
-    $this->verbose(strtr('$ts: <pre>!ts</pre>', array('!ts' => check_plain(var_export($ts, TRUE)))));
-    $this->assertEqual($ts, $expected_ts, 'Simple table headers sorted correctly.');
-
-    // Test with simple table headers plus $_GET parameters that should _not_
-    // override the default.
-
-    $_GET = array(
-      'q' => 'jahwohl',
-      // This should not override the table order because only complex
-      // headers are overridable.
-      'order' => 'bar',
-    );
-    $ts = tablesort_init($headers);
-    $this->verbose(strtr('$ts: <pre>!ts</pre>', array('!ts' => check_plain(var_export($ts, TRUE)))));
-    $this->assertEqual($ts, $expected_ts, 'Simple table headers plus non-overriding $_GET parameters sorted correctly.');
-
-    // Test with simple table headers plus $_GET parameters that _should_
-    // override the default.
-
-    $_GET = array(
-      'q' => 'jahwohl',
-      'sort' => 'DESC',
-      // Add an unrelated parameter to ensure that tablesort will include
-      // it in the links that it creates.
-      'alpha' => 'beta',
-    );
-    $expected_ts['sort'] = 'desc';
-    $expected_ts['query'] = array('alpha' => 'beta');
-    $ts = tablesort_init($headers);
-    $this->verbose(strtr('$ts: <pre>!ts</pre>', array('!ts' => check_plain(var_export($ts, TRUE)))));
-    $this->assertEqual($ts, $expected_ts, 'Simple table headers plus $_GET parameters sorted correctly.');
-
-    // Test complex table headers.
-
-    $headers = array(
-      'foo',
-      array(
-        'data' => '1',
-        'field' => 'one',
-        'sort' => 'asc',
-        'colspan' => 1,
-      ),
-      array(
-        'data' => '2',
-        'field' => 'two',
-        'sort' => 'desc',
-      ),
-    );
-    // Reset $_GET from previous assertion.
-    $_GET = array(
-      'q' => 'jahwohl',
-      'order' => '2',
-    );
-    $ts = tablesort_init($headers);
-    $expected_ts = array(
-      'name' => '2',
-      'sql' => 'two',
-      'sort' => 'desc',
-      'query' => array(),
-    );
-    $this->verbose(strtr('$ts: <pre>!ts</pre>', array('!ts' => check_plain(var_export($ts, TRUE)))));
-    $this->assertEqual($ts, $expected_ts, 'Complex table headers sorted correctly.');
-
-    // Test complex table headers plus $_GET parameters that should _not_
-    // override the default.
-
-    $_GET = array(
-      'q' => 'jahwohl',
-      // This should not override the table order because this header does not
-      // exist.
-      'order' => 'bar',
-    );
-    $ts = tablesort_init($headers);
-    $expected_ts = array(
-      'name' => '1',
-      'sql' => 'one',
-      'sort' => 'asc',
-      'query' => array(),
-    );
-    $this->verbose(strtr('$ts: <pre>!ts</pre>', array('!ts' => check_plain(var_export($ts, TRUE)))));
-    $this->assertEqual($ts, $expected_ts, 'Complex table headers plus non-overriding $_GET parameters sorted correctly.');
-    unset($_GET['sort'], $_GET['order'], $_GET['alpha']);
-
-    // Test complex table headers plus $_GET parameters that _should_
-    // override the default.
-
-    $_GET = array(
-      'q' => 'jahwohl',
-      'order' => '1',
-      'sort' => 'ASC',
-      // Add an unrelated parameter to ensure that tablesort will include
-      // it in the links that it creates.
-      'alpha' => 'beta',
-    );
-    $expected_ts = array(
-      'name' => '1',
-      'sql' => 'one',
-      'sort' => 'asc',
-      'query' => array('alpha' => 'beta'),
-    );
-    $ts = tablesort_init($headers);
-    $this->verbose(strtr('$ts: <pre>!ts</pre>', array('!ts' => check_plain(var_export($ts, TRUE)))));
-    $this->assertEqual($ts, $expected_ts, 'Complex table headers plus $_GET parameters sorted correctly.');
-    unset($_GET['sort'], $_GET['order'], $_GET['alpha']);
-
-  }
-}
diff --git a/modules/simpletest/tests/taxonomy_test.info b/modules/simpletest/tests/taxonomy_test.info
deleted file mode 100644
index e5bb4f1..0000000
--- a/modules/simpletest/tests/taxonomy_test.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = "Taxonomy test module"
-description = "Tests functions and hooks not used in core".
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
-dependencies[] = taxonomy
diff --git a/modules/simpletest/tests/taxonomy_test.install b/modules/simpletest/tests/taxonomy_test.install
deleted file mode 100644
index d5c94da..0000000
--- a/modules/simpletest/tests/taxonomy_test.install
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the taxonomy_test module.
- */
-
-/**
- * Implements hook_schema().
- */
-function taxonomy_test_schema() {
-  $schema['taxonomy_term_antonym'] = array(
-    'description' => 'Stores term antonym.',
-    'fields' => array(
-      'tid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The {taxonomy_term_data}.tid of the term.',
-      ),
-      'name' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'The name of the antonym.',
-      ),
-    ),
-    'primary key' => array('tid'),
-  );
-
-  return $schema;
-}
diff --git a/modules/simpletest/tests/taxonomy_test.module b/modules/simpletest/tests/taxonomy_test.module
deleted file mode 100644
index f82950c..0000000
--- a/modules/simpletest/tests/taxonomy_test.module
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-
-/**
- * @file
- * Test module for Taxonomy hooks and functions not used in core.
- *
- * @see TaxonomyHooksTestCase::testTaxonomyTermHooks()
- */
-
-/**
- * Implements hook_taxonomy_term_load().
- */
-function taxonomy_test_taxonomy_term_load($terms) {
-  foreach ($terms as $term) {
-    $antonym = taxonomy_test_get_antonym($term->tid);
-    if ($antonym) {
-      $term->antonym = $antonym;
-    }
-  }
-}
-
-/**
- * Implements hook_taxonomy_term_insert().
- */
-function taxonomy_test_taxonomy_term_insert($term) {
-  if (!empty($term->antonym)) {
-    db_insert('taxonomy_term_antonym')
-      ->fields(array(
-        'tid' => $term->tid,
-        'name' => trim($term->antonym)
-      ))
-      ->execute();
-  }
-}
-
-/**
- * Implements hook_taxonomy_term_update().
- */
-function taxonomy_test_taxonomy_term_update($term) {
-  if (!empty($term->antonym)) {
-    db_merge('taxonomy_term_antonym')
-      ->key(array('tid' => $term->tid))
-      ->fields(array(
-        'name' => trim($term->antonym)
-      ))
-      ->execute();
-  }
-}
-
-/**
- * Implements hook_taxonomy_term_delete().
- */
-function taxonomy_test_taxonomy_term_delete($term) {
-  db_delete('taxonomy_term_antonym')
-    ->condition('tid', $term->tid)
-    ->execute();
-}
-
-/**
- * Implements hook_taxonomy_term_view().
- */
-function taxonomy_test_taxonomy_term_view($term, $view_mode, $langcode) {
-  if ($view_mode == 'full') {
-    $term->content['taxonomy_test_term_view_check'] = array(
-      '#prefix' => '<div>',
-      '#markup' => t('The antonym is %antonym', array('%antonym' => $term->antonym)),
-      '#suffix' => '</div>',
-      '#weight' => 10,
-    );
-  }
-}
-
-/**
- * Implements hook_entity_view().
- */
-function taxonomy_test_entity_view($entity, $type, $view_mode, $langcode) {
-  if ($type == 'taxonomy_term' && $view_mode == 'full') {
-    $entity->content['taxonomy_test_entity_view_check'] = array(
-      '#prefix' => '<div>',
-      '#markup' => t('The antonym is %antonym', array('%antonym' => $entity->antonym)),
-      '#suffix' => '</div>',
-      '#weight' => 20,
-    );
-  }
-}
-
-/**
- * Implements hook_form_alter().
- */
-function taxonomy_test_form_alter(&$form, $form_state, $form_id) {
-  if ($form_id == 'taxonomy_form_term') {
-    $antonym = taxonomy_test_get_antonym($form['#term']['tid']);
-    $form['advanced']['antonym'] = array(
-      '#type' => 'textfield',
-      '#title' => t('Antonym'),
-      '#default_value' => !empty($antonym) ? $antonym : '',
-      '#description' => t('Antonym of this term.')
-    );
-  }
-}
-
-/**
- * Return the antonym of the given term ID.
- */
-function taxonomy_test_get_antonym($tid) {
-  return db_select('taxonomy_term_antonym', 'ta')
-    ->fields('ta', array('name'))
-    ->condition('tid', $tid)
-    ->execute()
-    ->fetchField();
-}
diff --git a/modules/simpletest/tests/theme.test b/modules/simpletest/tests/theme.test
deleted file mode 100644
index 519a7a9..0000000
--- a/modules/simpletest/tests/theme.test
+++ /dev/null
@@ -1,502 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for the theme API.
- */
-
-/**
- * Unit tests for the Theme API.
- */
-class ThemeTestCase extends DrupalWebTestCase {
-  protected $profile = 'testing';
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Theme API',
-      'description' => 'Test low-level theme functions.',
-      'group' => 'Theme',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('theme_test');
-    theme_enable(array('test_theme'));
-  }
-
-  /**
-   * Test function theme_get_suggestions() for SA-CORE-2009-003.
-   */
-  function testThemeSuggestions() {
-    // Set the front page as something random otherwise the CLI
-    // test runner fails.
-    variable_set('site_frontpage', 'nobody-home');
-    $args = array('node', '1', 'edit');
-    $suggestions = theme_get_suggestions($args, 'page');
-    $this->assertEqual($suggestions, array('page__node', 'page__node__%', 'page__node__1', 'page__node__edit'), 'Found expected node edit page suggestions');
-    // Check attack vectors.
-    $args = array('node', '\\1');
-    $suggestions = theme_get_suggestions($args, 'page');
-    $this->assertEqual($suggestions, array('page__node', 'page__node__%', 'page__node__1'), 'Removed invalid \\ from suggestions');
-    $args = array('node', '1/');
-    $suggestions = theme_get_suggestions($args, 'page');
-    $this->assertEqual($suggestions, array('page__node', 'page__node__%', 'page__node__1'), 'Removed invalid / from suggestions');
-    $args = array('node', "1\0");
-    $suggestions = theme_get_suggestions($args, 'page');
-    $this->assertEqual($suggestions, array('page__node', 'page__node__%', 'page__node__1'), 'Removed invalid \\0 from suggestions');
-    // Define path with hyphens to be used to generate suggestions.
-    $args = array('node', '1', 'hyphen-path');
-    $result = array('page__node', 'page__node__%', 'page__node__1', 'page__node__hyphen_path');
-    $suggestions = theme_get_suggestions($args, 'page');
-    $this->assertEqual($suggestions, $result, 'Found expected page suggestions for paths containing hyphens.');
-  }
-
-  /**
-   * Ensures preprocess functions run even for suggestion implementations.
-   *
-   * The theme hook used by this test has its base preprocess function in a
-   * separate file, so this test also ensures that that file is correctly loaded
-   * when needed.
-   */
-  function testPreprocessForSuggestions() {
-    // Test with both an unprimed and primed theme registry.
-    drupal_theme_rebuild();
-    for ($i = 0; $i < 2; $i++) {
-      $this->drupalGet('theme-test/suggestion');
-      $this->assertText('Theme hook implementor=test_theme_theme_test__suggestion(). Foo=template_preprocess_theme_test', 'Theme hook suggestion ran with data available from a preprocess function for the base hook.');
-    }
-  }
-
-  /**
-   * Ensure page-front template suggestion is added when on front page.
-   */
-  function testFrontPageThemeSuggestion() {
-    $q = $_GET['q'];
-    // Set $_GET['q'] to node because theme_get_suggestions() will query it to
-    // see if we are on the front page.
-    $_GET['q'] = variable_get('site_frontpage', 'node');
-    $suggestions = theme_get_suggestions(explode('/', $_GET['q']), 'page');
-    // Set it back to not annoy the batch runner.
-    $_GET['q'] = $q;
-    $this->assertTrue(in_array('page__front', $suggestions), 'Front page template was suggested.');
-  }
-
-  /**
-   * Ensures theme hook_*_alter() implementations can run before anything is rendered.
-   */
-  function testAlter() {
-    $this->drupalGet('theme-test/alter');
-    $this->assertText('The altered data is test_theme_theme_test_alter_alter was invoked.', 'The theme was able to implement an alter hook during page building before anything was rendered.');
-  }
-
-  /**
-   * Ensures a theme's .info file is able to override a module CSS file from being added to the page.
-   *
-   * @see test_theme.info
-   */
-  function testCSSOverride() {
-    // Reuse the same page as in testPreprocessForSuggestions(). We're testing
-    // what is output to the HTML HEAD based on what is in a theme's .info file,
-    // so it doesn't matter what page we get, as long as it is themed with the
-    // test theme. First we test with CSS aggregation disabled.
-    variable_set('preprocess_css', 0);
-    $this->drupalGet('theme-test/suggestion');
-    $this->assertNoText('system.base.css', 'The theme\'s .info file is able to override a module CSS file from being added to the page.');
-
-    // Also test with aggregation enabled, simply ensuring no PHP errors are
-    // triggered during drupal_build_css_cache() when a source file doesn't
-    // exist. Then allow remaining tests to continue with aggregation disabled
-    // by default.
-    variable_set('preprocess_css', 1);
-    $this->drupalGet('theme-test/suggestion');
-    variable_set('preprocess_css', 0);
-  }
-
-  /**
-   * Ensures the theme registry is rebuilt when modules are disabled/enabled.
-   */
-  function testRegistryRebuild() {
-    $this->assertIdentical(theme('theme_test_foo', array('foo' => 'a')), 'a', 'The theme registry contains theme_test_foo.');
-
-    module_disable(array('theme_test'), FALSE);
-    $this->assertIdentical(theme('theme_test_foo', array('foo' => 'b')), '', 'The theme registry does not contain theme_test_foo, because the module is disabled.');
-
-    module_enable(array('theme_test'), FALSE);
-    $this->assertIdentical(theme('theme_test_foo', array('foo' => 'c')), 'c', 'The theme registry contains theme_test_foo again after re-enabling the module.');
-  }
-
-  /**
-   * Test the list_themes() function.
-   */
-  function testListThemes() {
-    $themes = list_themes();
-    // Check if drupal_theme_access() retrieves enabled themes properly from list_themes().
-    $this->assertTrue(drupal_theme_access('test_theme'), 'Enabled theme detected');
-    // Check if list_themes() returns disabled themes.
-    $this->assertTrue(array_key_exists('test_basetheme', $themes), 'Disabled theme detected');
-    // Check for base theme and subtheme lists.
-    $base_theme_list = array('test_basetheme' => 'Theme test base theme');
-    $sub_theme_list = array('test_subtheme' => 'Theme test subtheme');
-    $this->assertIdentical($themes['test_basetheme']->sub_themes, $sub_theme_list, 'Base theme\'s object includes list of subthemes.');
-    $this->assertIdentical($themes['test_subtheme']->base_themes, $base_theme_list, 'Subtheme\'s object includes list of base themes.');
-    // Check for theme engine in subtheme.
-    $this->assertIdentical($themes['test_subtheme']->engine, 'phptemplate', 'Subtheme\'s object includes the theme engine.');
-    // Check for theme engine prefix.
-    $this->assertIdentical($themes['test_basetheme']->prefix, 'phptemplate', 'Base theme\'s object includes the theme engine prefix.');
-    $this->assertIdentical($themes['test_subtheme']->prefix, 'phptemplate', 'Subtheme\'s object includes the theme engine prefix.');
-  }
-
-  /**
-   * Test the theme_get_setting() function.
-   */
-  function testThemeGetSetting() {
-    $GLOBALS['theme_key'] = 'test_theme';
-    $this->assertIdentical(theme_get_setting('theme_test_setting'), 'default value', 'theme_get_setting() uses the default theme automatically.');
-    $this->assertNotEqual(theme_get_setting('subtheme_override', 'test_basetheme'), theme_get_setting('subtheme_override', 'test_subtheme'), 'Base theme\'s default settings values can be overridden by subtheme.');
-    $this->assertIdentical(theme_get_setting('basetheme_only', 'test_subtheme'), 'base theme value', 'Base theme\'s default settings values are inherited by subtheme.');
-  }
-}
-
-/**
- * Unit tests for theme_table().
- */
-class ThemeTableTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Theme Table',
-      'description' => 'Tests built-in theme functions.',
-      'group' => 'Theme',
-    );
-  }
-
-  /**
-   * Tableheader.js provides 'sticky' table headers, and is included by default.
-   */
-  function testThemeTableStickyHeaders() {
-    $header = array('one', 'two', 'three');
-    $rows = array(array(1,2,3), array(4,5,6), array(7,8,9));
-    $this->content = theme('table', array('header' => $header, 'rows' => $rows));
-    $js = drupal_add_js();
-    $this->assertTrue(isset($js['misc/tableheader.js']), 'tableheader.js was included when $sticky = TRUE.');
-    $this->assertRaw('sticky-enabled', 'Table has a class of sticky-enabled when $sticky = TRUE.');
-    drupal_static_reset('drupal_add_js');
-  }
-
-  /**
-   * If $sticky is FALSE, no tableheader.js should be included.
-   */
-  function testThemeTableNoStickyHeaders() {
-    $header = array('one', 'two', 'three');
-    $rows = array(array(1,2,3), array(4,5,6), array(7,8,9));
-    $attributes = array();
-    $caption = NULL;
-    $colgroups = array();
-    $this->content = theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => $attributes, 'caption' => $caption, 'colgroups' => $colgroups, 'sticky' => FALSE));
-    $js = drupal_add_js();
-    $this->assertFalse(isset($js['misc/tableheader.js']), 'tableheader.js was not included because $sticky = FALSE.');
-    $this->assertNoRaw('sticky-enabled', 'Table does not have a class of sticky-enabled because $sticky = FALSE.');
-    drupal_static_reset('drupal_add_js');
-  }
-
-  /**
-   * Tests that the table header is printed correctly even if there are no rows,
-   * and that the empty text is displayed correctly.
-   */
-  function testThemeTableWithEmptyMessage() {
-    $header = array(
-      t('Header 1'),
-      array(
-        'data' => t('Header 2'),
-        'colspan' => 2,
-      ),
-    );
-    $this->content = theme('table', array('header' => $header, 'rows' => array(), 'empty' => t('No strings available.')));
-    $this->assertRaw('<tr class="odd"><td colspan="3" class="empty message">No strings available.</td>', 'Correct colspan was set on empty message.');
-    $this->assertRaw('<thead><tr><th>Header 1</th>', 'Table header was printed.');
-  }
-
-  /**
-   * Tests that the 'no_striping' option works correctly.
-   */
-  function testThemeTableWithNoStriping() {
-    $rows = array(
-      array(
-        'data' => array(1),
-        'no_striping' => TRUE,
-      ),
-    );
-    $this->content = theme('table', array('rows' => $rows));
-    $this->assertNoRaw('class="odd"', 'Odd/even classes were not added because $no_striping = TRUE.');
-    $this->assertNoRaw('no_striping', 'No invalid no_striping HTML attribute was printed.');
-  }
-}
-
-/**
- * Unit tests for theme_item_list().
- */
-class ThemeItemListUnitTest extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Theme item list',
-      'description' => 'Test the theme_item_list() function.',
-      'group' => 'Theme',
-    );
-  }
-
-  /**
-   * Test item list rendering.
-   */
-  function testItemList() {
-    $items = array('a', array('data' => 'b', 'children' => array('c' => 'c', 'd' => 'd', 'e' => 'e')), 'f');
-    $expected = '<div class="item-list"><ul><li class="first">a</li>
-<li>b<div class="item-list"><ul><li class="first">c</li>
-<li>d</li>
-<li class="last">e</li>
-</ul></div></li>
-<li class="last">f</li>
-</ul></div>';
-    $output = theme('item_list', array('items' => $items));
-    $this->assertIdentical($expected, $output, 'Item list is rendered correctly.');
-  }
-}
-
-/**
- * Unit tests for theme_links().
- */
-class ThemeLinksTest extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Links',
-      'description' => 'Test the theme_links() function and rendering groups of links.',
-      'group' => 'Theme',
-    );
-  }
-
-  /**
-   * Test the use of drupal_pre_render_links() on a nested array of links.
-   */
-  function testDrupalPreRenderLinks() {
-    // Define the base array to be rendered, containing a variety of different
-    // kinds of links.
-    $base_array = array(
-      '#theme' => 'links',
-      '#pre_render' => array('drupal_pre_render_links'),
-      '#links' => array(
-        'parent_link' => array(
-          'title' => 'Parent link original',
-          'href' => 'parent-link-original',
-        ),
-      ),
-      'first_child' => array(
-        '#theme' => 'links',
-        '#links' => array(
-          // This should be rendered if 'first_child' is rendered separately,
-          // but ignored if the parent is being rendered (since it duplicates
-          // one of the parent's links).
-          'parent_link' => array(
-            'title' => 'Parent link copy',
-            'href' => 'parent-link-copy',
-          ),
-          // This should always be rendered.
-          'first_child_link' => array(
-            'title' => 'First child link',
-            'href' => 'first-child-link',
-          ),
-        ),
-      ),
-      // This should always be rendered as part of the parent.
-      'second_child' => array(
-        '#theme' => 'links',
-        '#links' => array(
-          'second_child_link' => array(
-            'title' => 'Second child link',
-            'href' => 'second-child-link',
-          ),
-        ),
-      ),
-      // This should never be rendered, since the user does not have access to
-      // it.
-      'third_child' => array(
-        '#theme' => 'links',
-        '#links' => array(
-          'third_child_link' => array(
-            'title' => 'Third child link',
-            'href' => 'third-child-link',
-          ),
-        ),
-        '#access' => FALSE,
-      ),
-    );
-
-    // Start with a fresh copy of the base array, and try rendering the entire
-    // thing. We expect a single <ul> with appropriate links contained within
-    // it.
-    $render_array = $base_array;
-    $html = drupal_render($render_array);
-    $dom = new DOMDocument();
-    $dom->loadHTML($html);
-    $this->assertEqual($dom->getElementsByTagName('ul')->length, 1, 'One "ul" tag found in the rendered HTML.');
-    $list_elements = $dom->getElementsByTagName('li');
-    $this->assertEqual($list_elements->length, 3, 'Three "li" tags found in the rendered HTML.');
-    $this->assertEqual($list_elements->item(0)->nodeValue, 'Parent link original', 'First expected link found.');
-    $this->assertEqual($list_elements->item(1)->nodeValue, 'First child link', 'Second expected link found.');
-    $this->assertEqual($list_elements->item(2)->nodeValue, 'Second child link', 'Third expected link found.');
-    $this->assertIdentical(strpos($html, 'Parent link copy'), FALSE, '"Parent link copy" link not found.');
-    $this->assertIdentical(strpos($html, 'Third child link'), FALSE, '"Third child link" link not found.');
-
-    // Now render 'first_child', followed by the rest of the links, and make
-    // sure we get two separate <ul>'s with the appropriate links contained
-    // within each.
-    $render_array = $base_array;
-    $child_html = drupal_render($render_array['first_child']);
-    $parent_html = drupal_render($render_array);
-    // First check the child HTML.
-    $dom = new DOMDocument();
-    $dom->loadHTML($child_html);
-    $this->assertEqual($dom->getElementsByTagName('ul')->length, 1, 'One "ul" tag found in the rendered child HTML.');
-    $list_elements = $dom->getElementsByTagName('li');
-    $this->assertEqual($list_elements->length, 2, 'Two "li" tags found in the rendered child HTML.');
-    $this->assertEqual($list_elements->item(0)->nodeValue, 'Parent link copy', 'First expected link found.');
-    $this->assertEqual($list_elements->item(1)->nodeValue, 'First child link', 'Second expected link found.');
-    // Then check the parent HTML.
-    $dom = new DOMDocument();
-    $dom->loadHTML($parent_html);
-    $this->assertEqual($dom->getElementsByTagName('ul')->length, 1, 'One "ul" tag found in the rendered parent HTML.');
-    $list_elements = $dom->getElementsByTagName('li');
-    $this->assertEqual($list_elements->length, 2, 'Two "li" tags found in the rendered parent HTML.');
-    $this->assertEqual($list_elements->item(0)->nodeValue, 'Parent link original', 'First expected link found.');
-    $this->assertEqual($list_elements->item(1)->nodeValue, 'Second child link', 'Second expected link found.');
-    $this->assertIdentical(strpos($parent_html, 'First child link'), FALSE, '"First child link" link not found.');
-    $this->assertIdentical(strpos($parent_html, 'Third child link'), FALSE, '"Third child link" link not found.');
-  }
-}
-
-/**
- * Functional test for initialization of the theme system in hook_init().
- */
-class ThemeHookInitTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Theme initialization in hook_init()',
-      'description' => 'Tests that the theme system can be correctly initialized in hook_init().',
-      'group' => 'Theme',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('theme_test');
-  }
-
-  /**
-   * Test that the theme system can generate output when called by hook_init().
-   */
-  function testThemeInitializationHookInit() {
-    $this->drupalGet('theme-test/hook-init');
-    $this->assertRaw('Themed output generated in hook_init()', 'Themed output generated in hook_init() correctly appears on the page.');
-    $this->assertRaw('bartik/css/style.css', "The default theme's CSS appears on the page when the theme system is initialized in hook_init().");
-  }
-}
-
-/**
- * Tests autocompletion not loading registry.
- */
-class ThemeFastTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Theme fast initialization',
-      'description' => 'Test that autocompletion does not load the registry.',
-      'group' => 'Theme'
-    );
-  }
-
-  function setUp() {
-    parent::setUp('theme_test');
-    $this->account = $this->drupalCreateUser(array('access user profiles'));
-  }
-
-  /**
-   * Tests access to user autocompletion and verify the correct results.
-   */
-  function testUserAutocomplete() {
-    $this->drupalLogin($this->account);
-    $this->drupalGet('user/autocomplete/' . $this->account->name);
-    $this->assertText('registry not initialized', 'The registry was not initialized');
-  }
-}
-
-/**
- * Unit tests for theme_html_tag().
- */
-class ThemeHtmlTag extends DrupalUnitTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Theme HTML Tag',
-      'description' => 'Tests theme_html_tag() built-in theme functions.',
-      'group' => 'Theme',
-    );
-  }
-
-  /**
-   * Test function theme_html_tag()
-   */
-  function testThemeHtmlTag() {
-    // Test auto-closure meta tag generation
-    $tag['element'] = array('#tag' => 'meta', '#attributes' => array('name' => 'description', 'content' => 'Drupal test'));
-    $this->assertEqual('<meta name="description" content="Drupal test" />'."\n", theme_html_tag($tag), 'Test auto-closure meta tag generation.');
-
-    // Test title tag generation
-    $tag['element'] = array('#tag' => 'title', '#value' => 'title test');
-    $this->assertEqual('<title>title test</title>'."\n", theme_html_tag($tag), 'Test title tag generation.');
-  }
-}
-
-/**
- * Tests for the ThemeRegistry class.
- */
-class ThemeRegistryTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'ThemeRegistry',
-      'description' => 'Tests the behavior of the ThemeRegistry class',
-      'group' => 'Theme',
-    );
-  }
-  function setUp() {
-    parent::setUp('theme_test');
-  }
-
-  /**
-   * Tests the behavior of the theme registry class.
-   */
-  function testRaceCondition() {
-    $_SERVER['REQUEST_METHOD'] = 'GET';
-    $cid = 'test_theme_registry';
-
-    // Directly instantiate the theme registry, this will cause a base cache
-    // entry to be written in __construct().
-    $registry = new ThemeRegistry($cid, 'cache');
-
-    $this->assertTrue(cache_get($cid), 'Cache entry was created.');
-
-    // Trigger a cache miss for an offset.
-    $this->assertTrue($registry['theme_test_template_test'], 'Offset was returned correctly from the theme registry.');
-    // This will cause the ThemeRegistry class to write an updated version of
-    // the cache entry when it is destroyed, usually at the end of the request.
-    // Before that happens, manually delete the cache entry we created earlier
-    // so that the new entry is written from scratch.
-    cache_clear_all($cid, 'cache');
-
-    // Destroy the class so that it triggers a cache write for the offset.
-    unset($registry);
-
-    $this->assertTrue(cache_get($cid), 'Cache entry was created.');
-
-    // Create a new instance of the class. Confirm that both the offset
-    // requested previously, and one that has not yet been requested are both
-    // available.
-    $registry = new ThemeRegistry($cid, 'cache');
-
-    $this->assertTrue($registry['theme_test_template_test'], 'Offset was returned correctly from the theme registry');
-    $this->assertTrue($registry['theme_test_template_test_2'], 'Offset was returned correctly from the theme registry');
-  }
-}
diff --git a/modules/simpletest/tests/theme_test.inc b/modules/simpletest/tests/theme_test.inc
deleted file mode 100644
index 6cde683..0000000
--- a/modules/simpletest/tests/theme_test.inc
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-/**
- * Returns HTML for the 'theme_test' theme hook used by tests.
- */
-function theme_theme_test($variables) {
-  return 'Theme hook implementor=theme_theme_test(). Foo=' . $variables['foo'];
-}
-
-/**
- * Preprocesses variables for theme_theme_test().
- */
-function template_preprocess_theme_test(&$variables) {
-  $variables['foo'] = 'template_preprocess_theme_test';
-}
diff --git a/modules/simpletest/tests/theme_test.info b/modules/simpletest/tests/theme_test.info
deleted file mode 100644
index 72cd23b..0000000
--- a/modules/simpletest/tests/theme_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Theme test"
-description = "Support module for theme system testing."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/theme_test.module b/modules/simpletest/tests/theme_test.module
deleted file mode 100644
index 61a12bb..0000000
--- a/modules/simpletest/tests/theme_test.module
+++ /dev/null
@@ -1,134 +0,0 @@
-<?php
-
-/**
- * Implements hook_theme().
- */
-function theme_test_theme($existing, $type, $theme, $path) {
-  $items['theme_test'] = array(
-    'file' => 'theme_test.inc',
-    'variables' => array('foo' => ''),
-  );
-  $items['theme_test_template_test'] = array(
-    'template' => 'theme_test.template_test',
-  );
-  $items['theme_test_template_test_2'] = array(
-    'template' => 'theme_test.template_test',
-  );
-  $items['theme_test_foo'] = array(
-    'variables' => array('foo' => NULL),
-  );
-  return $items;
-}
-
-/**
- * Implements hook_system_theme_info().
- */
-function theme_test_system_theme_info() {
-  $themes['test_theme'] = drupal_get_path('module', 'theme_test') . '/themes/test_theme/test_theme.info';
-  $themes['test_basetheme'] = drupal_get_path('module', 'theme_test') . '/themes/test_basetheme/test_basetheme.info';
-  $themes['test_subtheme'] = drupal_get_path('module', 'theme_test') . '/themes/test_subtheme/test_subtheme.info';
-  return $themes;
-}
-
-/**
- * Implements hook_menu().
- */
-function theme_test_menu() {
-  $items['theme-test/suggestion'] = array(
-    'title' => 'Suggestion',
-    'page callback' => '_theme_test_suggestion',
-    'access arguments' => array('access content'),
-    'theme callback' => '_theme_custom_theme',
-    'type' => MENU_CALLBACK,
-  );
-  $items['theme-test/alter'] = array(
-    'title' => 'Suggestion',
-    'page callback' => '_theme_test_alter',
-    'access arguments' => array('access content'),
-    'theme callback' => '_theme_custom_theme',
-    'type' => MENU_CALLBACK,
-  );
-  $items['theme-test/hook-init'] = array(
-    'page callback' => 'theme_test_hook_init_page_callback',
-    'access callback' => TRUE,
-    'type' => MENU_CALLBACK,
-  );
-  return $items;
-}
-
-/**
- * Implements hook_init().
- */
-function theme_test_init() {
-  if (arg(0) == 'theme-test' && arg(1) == 'hook-init') {
-    // First, force the theme registry to be rebuilt on this page request. This
-    // allows us to test a full initialization of the theme system in the code
-    // below.
-    drupal_theme_rebuild();
-    // Next, initialize the theme system by storing themed text in a global
-    // variable. We will use this later in theme_test_hook_init_page_callback()
-    // to test that even when the theme system is initialized this early, it is
-    // still capable of returning output and theming the page as a whole.
-    $GLOBALS['theme_test_output'] = theme('more_link', array('url' => 'user', 'title' => 'Themed output generated in hook_init()'));
-  }
-}
-
-/**
- * Implements hook_exit().
- */
-function theme_test_exit() {
-  if (arg(0) == 'user') {
-    // Register a fake registry loading callback. If it gets called by
-    // theme_get_registry(), the registry has not been initialized yet.
-    _theme_registry_callback('_theme_test_load_registry', array());
-    print theme_get_registry() ? 'registry initialized' : 'registry not initialized';
-  }
-}
-
-/**
- * Fake registry loading callback.
- */
-function _theme_test_load_registry() {
-  return array();
-}
-
-/**
- * Menu callback for testing themed output generated in hook_init().
- */
-function theme_test_hook_init_page_callback() {
-  return $GLOBALS['theme_test_output'];
-}
-
-/**
- * Custom theme callback.
- */
-function _theme_custom_theme() {
-  return 'test_theme';
-}
-
-/**
- * Page callback, calls drupal_alter().
- *
- * This is for testing that the theme can have hook_*_alter() implementations
- * that run during page callback execution, even before theme() is called for
- * the first time.
- */
-function _theme_test_alter() {
-  $data = 'foo';
-  drupal_alter('theme_test_alter', $data);
-  return "The altered data is $data.";
-}
-
-/**
- * Page callback, calls a theme hook suggestion.
- */
-function _theme_test_suggestion() {
-  return theme(array('theme_test__suggestion', 'theme_test'), array());
-}
-
-/**
- * Theme function for testing theme('theme_test_foo').
- */
-function theme_theme_test_foo($variables) {
-  return $variables['foo'];
-}
diff --git a/modules/simpletest/tests/theme_test.template_test.tpl.php b/modules/simpletest/tests/theme_test.template_test.tpl.php
deleted file mode 100644
index cde8faa..0000000
--- a/modules/simpletest/tests/theme_test.template_test.tpl.php
+++ /dev/null
@@ -1,2 +0,0 @@
-<!-- Output for Theme API test -->
-Fail: Template not overridden.
diff --git a/modules/simpletest/tests/themes/test_basetheme/test_basetheme.info b/modules/simpletest/tests/themes/test_basetheme/test_basetheme.info
deleted file mode 100644
index c39e8a2..0000000
--- a/modules/simpletest/tests/themes/test_basetheme/test_basetheme.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Theme test base theme
-description = Test theme which acts as a base theme for other test subthemes.
-core = 7.x
-hidden = TRUE
-
-settings[basetheme_only] = base theme value
-settings[subtheme_override] = base theme value
diff --git a/modules/simpletest/tests/themes/test_subtheme/test_subtheme.info b/modules/simpletest/tests/themes/test_subtheme/test_subtheme.info
deleted file mode 100644
index 7da71e0..0000000
--- a/modules/simpletest/tests/themes/test_subtheme/test_subtheme.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Theme test subtheme
-description = Test theme which uses test_basetheme as the base theme.
-core = 7.x
-base theme = test_basetheme
-hidden = TRUE
-
-settings[subtheme_override] = subtheme value
diff --git a/modules/simpletest/tests/themes/test_theme/template.php b/modules/simpletest/tests/themes/test_theme/template.php
deleted file mode 100644
index 8275818..0000000
--- a/modules/simpletest/tests/themes/test_theme/template.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-/**
- * Tests a theme overriding a suggestion of a base theme hook.
- */
-function test_theme_theme_test__suggestion($variables) {
-  return 'Theme hook implementor=test_theme_theme_test__suggestion(). Foo=' . $variables['foo'];
-}
-
-/**
- * Tests a theme implementing an alter hook.
- *
- * The confusing function name here is due to this being an implementation of
- * the alter hook invoked when the 'theme_test' module calls
- * drupal_alter('theme_test_alter').
- */
-function test_theme_theme_test_alter_alter(&$data) {
-  $data = 'test_theme_theme_test_alter_alter was invoked';
-}
diff --git a/modules/simpletest/tests/themes/test_theme/test_theme.info b/modules/simpletest/tests/themes/test_theme/test_theme.info
deleted file mode 100644
index 4bbbe7a..0000000
--- a/modules/simpletest/tests/themes/test_theme/test_theme.info
+++ /dev/null
@@ -1,18 +0,0 @@
-name = Test theme
-description = Theme for testing the theme system
-core = 7.x
-hidden = TRUE
-
-; Normally, themes may list CSS files like this, and if they exist in the theme
-; folder, then they get added to the page. If they have the same file name as a
-; module CSS file, then the theme's version overrides the module's version, so
-; that the module's version is not added to the page. Additionally, a theme may
-; have an entry like this one, without having the corresponding CSS file in the
-; theme's folder, and in this case, it just stops the module's version from
-; being loaded, and does not replace it with an alternate version. We have this
-; here in order for a test to ensure that this correctly prevents the module
-; version from being loaded, and that errors aren't caused by the lack of this
-; file within the theme folder.
-stylesheets[all][] = system.base.css
-
-settings[theme_test_setting] = default value
diff --git a/modules/simpletest/tests/unicode.test b/modules/simpletest/tests/unicode.test
deleted file mode 100644
index 4aaf26d..0000000
--- a/modules/simpletest/tests/unicode.test
+++ /dev/null
@@ -1,305 +0,0 @@
-<?php
-
-/**
- * @file
- * Various unicode handling tests.
- */
-
-/**
- * Test unicode handling features implemented in unicode.inc.
- */
-class UnicodeUnitTest extends DrupalUnitTestCase {
-
-  /**
-   * Whether to run the extended version of the tests (including non latin1 characters).
-   *
-   * @var boolean
-   */
-  protected $extendedMode = FALSE;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Unicode handling',
-      'description' => 'Tests Drupal Unicode handling.',
-      'group' => 'System',
-    );
-  }
-
-  /**
-   * Test full unicode features implemented using the mbstring extension.
-   */
-  function testMbStringUnicode() {
-    global $multibyte;
-
-    // mbstring was not detected on this installation, there is no way to test
-    // multibyte features. Treat that as an exception.
-    if ($multibyte == UNICODE_SINGLEBYTE) {
-      $this->error(t('Unable to test Multibyte features: mbstring extension was not detected.'));
-    }
-
-    $multibyte = UNICODE_MULTIBYTE;
-
-    $this->extendedMode = TRUE;
-    $this->pass(t('Testing in mbstring mode'));
-
-    $this->helperTestStrToLower();
-    $this->helperTestStrToUpper();
-    $this->helperTestUcFirst();
-    $this->helperTestStrLen();
-    $this->helperTestSubStr();
-    $this->helperTestTruncate();
-  }
-
-  /**
-   * Test emulated unicode features.
-   */
-  function testEmulatedUnicode() {
-    global $multibyte;
-
-    $multibyte = UNICODE_SINGLEBYTE;
-
-    $this->extendedMode = FALSE;
-
-    $this->pass(t('Testing in emulated (best-effort) mode'));
-
-    $this->helperTestStrToLower();
-    $this->helperTestStrToUpper();
-    $this->helperTestUcFirst();
-    $this->helperTestStrLen();
-    $this->helperTestSubStr();
-    $this->helperTestTruncate();
-  }
-
-  function helperTestStrToLower() {
-    $testcase = array(
-      'tHe QUIcK bRoWn' => 'the quick brown',
-      'FrançAIS is ÜBER-åwesome' => 'français is über-åwesome',
-    );
-    if ($this->extendedMode) {
-      $testcase['ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΣὨ'] = 'αβγδεζηθικλμνξοσὠ';
-    }
-
-    foreach ($testcase as $input => $output) {
-      $this->assertEqual(drupal_strtolower($input), $output, format_string('%input is lowercased as %output', array('%input' => $input, '%output' => $output)));
-    }
-  }
-
-  function helperTestStrToUpper() {
-    $testcase = array(
-      'tHe QUIcK bRoWn' => 'THE QUICK BROWN',
-      'FrançAIS is ÜBER-åwesome' => 'FRANÇAIS IS ÜBER-ÅWESOME',
-    );
-    if ($this->extendedMode) {
-      $testcase['αβγδεζηθικλμνξοσὠ'] = 'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΣὨ';
-    }
-
-    foreach ($testcase as $input => $output) {
-      $this->assertEqual(drupal_strtoupper($input), $output, format_string('%input is uppercased as %output', array('%input' => $input, '%output' => $output)));
-    }
-  }
-
-  function helperTestUcFirst() {
-    $testcase = array(
-      'tHe QUIcK bRoWn' => 'THe QUIcK bRoWn',
-      'françAIS' => 'FrançAIS',
-      'über' => 'Über',
-      'åwesome' => 'Åwesome'
-    );
-    if ($this->extendedMode) {
-      $testcase['σion'] = 'Σion';
-    }
-
-    foreach ($testcase as $input => $output) {
-      $this->assertEqual(drupal_ucfirst($input), $output, format_string('%input is ucfirst-ed as %output', array('%input' => $input, '%output' => $output)));
-    }
-  }
-
-  function helperTestStrLen() {
-    $testcase = array(
-      'tHe QUIcK bRoWn' => 15,
-      'ÜBER-åwesome' => 12,
-    );
-
-    foreach ($testcase as $input => $output) {
-      $this->assertEqual(drupal_strlen($input), $output, format_string('%input length is %output', array('%input' => $input, '%output' => $output)));
-    }
-  }
-
-  function helperTestSubStr() {
-    $testcase = array(
-      //     012345678901234567890123
-      array('frànçAIS is über-åwesome', 0, 0,
-            ''),
-      array('frànçAIS is über-åwesome', 0, 1,
-            'f'),
-      array('frànçAIS is über-åwesome', 0, 8,
-            'frànçAIS'),
-      array('frànçAIS is über-åwesome', 0, 23,
-            'frànçAIS is über-åwesom'),
-      array('frànçAIS is über-åwesome', 0, 24,
-            'frànçAIS is über-åwesome'),
-      array('frànçAIS is über-åwesome', 0, 25,
-            'frànçAIS is über-åwesome'),
-      array('frànçAIS is über-åwesome', 0, 100,
-            'frànçAIS is über-åwesome'),
-      array('frànçAIS is über-åwesome', 4, 4,
-                'çAIS'),
-      array('frànçAIS is über-åwesome', 1, 0,
-            ''),
-      array('frànçAIS is über-åwesome', 100, 0,
-            ''),
-      array('frànçAIS is über-åwesome', -4, 2,
-                                'so'),
-      array('frànçAIS is über-åwesome', -4, 3,
-                                'som'),
-      array('frànçAIS is über-åwesome', -4, 4,
-                                'some'),
-      array('frànçAIS is über-åwesome', -4, 5,
-                                'some'),
-      array('frànçAIS is über-åwesome', -7, 10,
-                             'åwesome'),
-      array('frànçAIS is über-åwesome', 5, -10,
-                 'AIS is üb'),
-      array('frànçAIS is über-åwesome', 0, -10,
-            'frànçAIS is üb'),
-      array('frànçAIS is über-åwesome', 0, -1,
-        'frànçAIS is über-åwesom'),
-      array('frànçAIS is über-åwesome', -7, -2,
-                             'åweso'),
-      array('frànçAIS is über-åwesome', -7, -6,
-                             'å'),
-      array('frànçAIS is über-åwesome', -7, -7,
-                             ''),
-      array('frànçAIS is über-åwesome', -7, -8,
-                             ''),
-      array('...', 0, 2, '..'),
-      array('以呂波耳・ほへとち。リヌルヲ。', 1, 3,
-              '呂波耳'),
-
-    );
-
-    foreach ($testcase as $test) {
-      list($input, $start, $length, $output) = $test;
-      $result = drupal_substr($input, $start, $length);
-      $this->assertEqual($result, $output, format_string('%input substring at offset %offset for %length characters is %output (got %result)', array('%input' => $input, '%offset' => $start, '%length' => $length, '%output' => $output, '%result' => $result)));
-    }
-  }
-
-  /**
-   * Test decode_entities().
-   */
-  function testDecodeEntities() {
-    $testcase = array(
-      'Drupal' => 'Drupal',
-      '<script>' => '<script>',
-      '&lt;script&gt;' => '<script>',
-      '&#60;script&#62;' => '<script>',
-      '&amp;lt;script&amp;gt;' => '&lt;script&gt;',
-      '"' => '"',
-      '&#34;' => '"',
-      '&amp;#34;' => '&#34;',
-      '&quot;' => '"',
-      '&amp;quot;' => '&quot;',
-      "'" => "'",
-      '&#39;' => "'",
-      '&amp;#39;' => '&#39;',
-      '©' => '©',
-      '&copy;' => '©',
-      '&#169;' => '©',
-      '→' => '→',
-      '&#8594;' => '→',
-      '➼' => '➼',
-      '&#10172;' => '➼',
-      '&euro;' => '€',
-    );
-    foreach ($testcase as $input => $output) {
-      $this->assertEqual(decode_entities($input), $output, format_string('Make sure the decoded entity of @input is @output', array('@input' => $input, '@output' => $output)));
-    }
-  }
-
-  /**
-   * Tests truncate_utf8().
-   */
-  function helperTestTruncate() {
-    // Each case is an array with input string, length to truncate to, and
-    // expected return value.
-
-    // Test non-wordsafe, non-ellipsis cases.
-    $non_wordsafe_non_ellipsis_cases = array(
-      array('frànçAIS is über-åwesome', 24, 'frànçAIS is über-åwesome'),
-      array('frànçAIS is über-åwesome', 23, 'frànçAIS is über-åwesom'),
-      array('frànçAIS is über-åwesome', 17, 'frànçAIS is über-'),
-      array('以呂波耳・ほへとち。リヌルヲ。', 6, '以呂波耳・ほ'),
-    );
-    $this->runTruncateTests($non_wordsafe_non_ellipsis_cases, FALSE, FALSE);
-
-    // Test non-wordsafe, ellipsis cases.
-    $non_wordsafe_ellipsis_cases = array(
-      array('frànçAIS is über-åwesome', 24, 'frànçAIS is über-åwesome'),
-      array('frànçAIS is über-åwesome', 23, 'frànçAIS is über-åwe...'),
-      array('frànçAIS is über-åwesome', 17, 'frànçAIS is üb...'),
-    );
-    $this->runTruncateTests($non_wordsafe_ellipsis_cases, FALSE, TRUE);
-
-    // Test wordsafe, ellipsis cases.
-    $wordsafe_ellipsis_cases = array(
-      array('123', 1, '.'),
-      array('123', 2, '..'),
-      array('123', 3, '123'),
-      array('1234', 3, '...'),
-      array('1234567890', 10, '1234567890'),
-      array('12345678901', 10, '1234567...'),
-      array('12345678901', 11, '12345678901'),
-      array('123456789012', 11, '12345678...'),
-      array('12345 7890', 10, '12345 7890'),
-      array('12345 7890', 9, '12345...'),
-      array('123 567 90', 10, '123 567 90'),
-      array('123 567 901', 10, '123 567...'),
-      array('Stop. Hammertime.', 17, 'Stop. Hammertime.'),
-      array('Stop. Hammertime.', 16, 'Stop....'),
-      array('frànçAIS is über-åwesome', 24, 'frànçAIS is über-åwesome'),
-      array('frànçAIS is über-åwesome', 23, 'frànçAIS is über...'),
-      array('frànçAIS is über-åwesome', 17, 'frànçAIS is...'),
-      array('¿Dónde está el niño?', 20, '¿Dónde está el niño?'),
-      array('¿Dónde está el niño?', 19, '¿Dónde está el...'),
-      array('¿Dónde está el niño?', 15, '¿Dónde está...'),
-      array('¿Dónde está el niño?', 10, '¿Dónde...'),
-      array('Help! Help! Help!', 17, 'Help! Help! Help!'),
-      array('Help! Help! Help!', 16, 'Help! Help!...'),
-      array('Help! Help! Help!', 15, 'Help! Help!...'),
-      array('Help! Help! Help!', 14, 'Help! Help!...'),
-      array('Help! Help! Help!', 13, 'Help! Help...'),
-      array('Help! Help! Help!', 12, 'Help!...'),
-      array('Help! Help! Help!', 11, 'Help!...'),
-      array('Help! Help! Help!', 10, 'Help!...'),
-      array('Help! Help! Help!', 9, 'Help!...'),
-      array('Help! Help! Help!', 8, 'Help!...'),
-      array('Help! Help! Help!', 7, 'Help...'),
-      array('Help! Help! Help!', 6, 'Hel...'),
-      array('Help! Help! Help!', 5, 'He...'),
-    );
-    $this->runTruncateTests($wordsafe_ellipsis_cases, TRUE, TRUE);
-  }
-
-  /**
-   * Runs test cases for helperTestTruncate().
-   *
-   * Runs each test case through truncate_utf8() and compares the output
-   * to the expected output.
-   *
-   * @param $cases
-   *   Cases array. Each case is an array with the input string, length to
-   *   truncate to, and expected output.
-   * @param $wordsafe
-   *   TRUE to use word-safe truncation, FALSE to not use word-safe truncation.
-   * @param $ellipsis
-   *   TRUE to append ... if the input is truncated, FALSE to not append ....
-   */
-  function runTruncateTests($cases, $wordsafe, $ellipsis) {
-    foreach ($cases as $case) {
-      list($input, $max_length, $expected) = $case;
-      $output = truncate_utf8($input, $max_length, $wordsafe, $ellipsis);
-      $this->assertEqual($output, $expected, format_string('%input truncate to %length characters with %wordsafe, %ellipsis is %expected (got %output)', array('%input' => $input, '%length' => $max_length, '%output' => $output, '%expected' => $expected, '%wordsafe' => ($wordsafe ? 'word-safe' : 'not word-safe'), '%ellipsis' => ($ellipsis ? 'ellipsis' : 'not ellipsis'))));
-    }
-  }
-}
diff --git a/modules/simpletest/tests/update.test b/modules/simpletest/tests/update.test
deleted file mode 100644
index 1606085..0000000
--- a/modules/simpletest/tests/update.test
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for the update system.
- */
-
-/**
- * Tests for the update dependency ordering system.
- */
-class UpdateDependencyOrderingTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Update dependency ordering',
-      'description' => 'Test that update functions are run in the proper order.',
-      'group' => 'Update API',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('update_test_1', 'update_test_2', 'update_test_3');
-    require_once DRUPAL_ROOT . '/includes/update.inc';
-  }
-
-  /**
-   * Test that updates within a single module run in the correct order.
-   */
-  function testUpdateOrderingSingleModule() {
-    $starting_updates = array(
-      'update_test_1' => 7000,
-    );
-    $expected_updates = array(
-      'update_test_1_update_7000',
-      'update_test_1_update_7001',
-      'update_test_1_update_7002',
-    );
-    $actual_updates = array_keys(update_resolve_dependencies($starting_updates));
-    $this->assertEqual($expected_updates, $actual_updates, 'Updates within a single module run in the correct order.');
-  }
-
-  /**
-   * Test that dependencies between modules are resolved correctly.
-   */
-  function testUpdateOrderingModuleInterdependency() {
-    $starting_updates = array(
-      'update_test_2' => 7000,
-      'update_test_3' => 7000,
-    );
-    $update_order = array_keys(update_resolve_dependencies($starting_updates));
-    // Make sure that each dependency is satisfied.
-    $first_dependency_satisfied = array_search('update_test_2_update_7000', $update_order) < array_search('update_test_3_update_7000', $update_order);
-    $this->assertTrue($first_dependency_satisfied, 'The dependency of the second module on the first module is respected by the update function order.');
-    $second_dependency_satisfied = array_search('update_test_3_update_7000', $update_order) < array_search('update_test_2_update_7001', $update_order);
-    $this->assertTrue($second_dependency_satisfied, 'The dependency of the first module on the second module is respected by the update function order.');
-  }
-}
-
-/**
- * Tests for missing update dependencies.
- */
-class UpdateDependencyMissingTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Missing update dependencies',
-      'description' => 'Test that missing update dependencies are correctly flagged.',
-      'group' => 'Update API',
-    );
-  }
-
-  function setUp() {
-    // Only install update_test_2.module, even though its updates have a
-    // dependency on update_test_3.module.
-    parent::setUp('update_test_2');
-    require_once DRUPAL_ROOT . '/includes/update.inc';
-  }
-
-  function testMissingUpdate() {
-    $starting_updates = array(
-      'update_test_2' => 7000,
-    );
-    $update_graph = update_resolve_dependencies($starting_updates);
-    $this->assertTrue($update_graph['update_test_2_update_7000']['allowed'], "The module's first update function is allowed to run, since it does not have any missing dependencies.");
-    $this->assertFalse($update_graph['update_test_2_update_7001']['allowed'], "The module's second update function is not allowed to run, since it has a direct dependency on a missing update.");
-    $this->assertFalse($update_graph['update_test_2_update_7002']['allowed'], "The module's third update function is not allowed to run, since it has an indirect dependency on a missing update.");
-  }
-}
-
-/**
- * Tests for the invocation of hook_update_dependencies().
- */
-class UpdateDependencyHookInvocationTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Update dependency hook invocation',
-      'description' => 'Test that the hook invocation for determining update dependencies works correctly.',
-      'group' => 'Update API',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('update_test_1', 'update_test_2');
-    require_once DRUPAL_ROOT . '/includes/update.inc';
-  }
-
-  /**
-   * Test the structure of the array returned by hook_update_dependencies().
-   */
-  function testHookUpdateDependencies() {
-    $update_dependencies = update_retrieve_dependencies();
-    $this->assertTrue($update_dependencies['system'][7000]['update_test_1'] == 7000, 'An update function that has a dependency on two separate modules has the first dependency recorded correctly.');
-    $this->assertTrue($update_dependencies['system'][7000]['update_test_2'] == 7001, 'An update function that has a dependency on two separate modules has the second dependency recorded correctly.');
-    $this->assertTrue($update_dependencies['system'][7001]['update_test_1'] == 7002, 'An update function that depends on more than one update from the same module only has the dependency on the higher-numbered update function recorded.');
-  }
-}
-
diff --git a/modules/simpletest/tests/update_script_test.info b/modules/simpletest/tests/update_script_test.info
deleted file mode 100644
index be1e3d8..0000000
--- a/modules/simpletest/tests/update_script_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Update script test"
-description = "Support module for update script testing."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/update_script_test.install b/modules/simpletest/tests/update_script_test.install
deleted file mode 100644
index 6955ef1..0000000
--- a/modules/simpletest/tests/update_script_test.install
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the update_script_test module.
- */
-
-/**
- * Implements hook_requirements().
- */
-function update_script_test_requirements($phase) {
-  $requirements = array();
-
-  if ($phase == 'update') {
-    // Set a requirements warning or error when the test requests it.
-    $requirement_type = variable_get('update_script_test_requirement_type');
-    switch ($requirement_type) {
-      case REQUIREMENT_WARNING:
-        $requirements['update_script_test'] = array(
-          'title' => 'Update script test',
-          'value' => 'Warning',
-          'description' => 'This is a requirements warning provided by the update_script_test module.',
-          'severity' => REQUIREMENT_WARNING,
-        );
-        break;
-      case REQUIREMENT_ERROR:
-        $requirements['update_script_test'] = array(
-          'title' => 'Update script test',
-          'value' => 'Error',
-          'description' => 'This is a requirements error provided by the update_script_test module.',
-          'severity' => REQUIREMENT_ERROR,
-        );
-        break;
-    }
-  }
-
-  return $requirements;
-}
-
-/**
- * Dummy update function to run during the tests.
- */
-function update_script_test_update_7000() {
-  return t('The update_script_test_update_7000() update was executed successfully.');
-}
diff --git a/modules/simpletest/tests/update_script_test.module b/modules/simpletest/tests/update_script_test.module
deleted file mode 100644
index beb5a71..0000000
--- a/modules/simpletest/tests/update_script_test.module
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-/**
- * @file
- * This file provides testing functionality for update.php.
- */
-
-/**
- * Implements hook_flush_caches().
- *
- * This sets a message to confirm that all caches are cleared whenever
- * update.php completes.
- *
- * @see UpdateScriptFunctionalTest::testRequirements()
- */
-function update_script_test_flush_caches() {
-  drupal_set_message(t('hook_flush_caches() invoked for update_script_test.module.'));
-}
diff --git a/modules/simpletest/tests/update_test_1.info b/modules/simpletest/tests/update_test_1.info
deleted file mode 100644
index d9764ee..0000000
--- a/modules/simpletest/tests/update_test_1.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Update test"
-description = "Support module for update testing."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/update_test_1.install b/modules/simpletest/tests/update_test_1.install
deleted file mode 100644
index f4a86c7..0000000
--- a/modules/simpletest/tests/update_test_1.install
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the update_test_1 module.
- */
-
-/**
- * Implements hook_update_dependencies().
- *
- * @see update_test_2_update_dependencies()
- */
-function update_test_1_update_dependencies() {
-  // These dependencies are used in combination with those declared in
-  // update_test_2_update_dependencies() for the sole purpose of testing that
-  // the results of hook_update_dependencies() are collected correctly and have
-  // the correct array structure. Therefore, we use updates from System module
-  // (which have already run), so that they will not get in the way of other
-  // tests.
-  $dependencies['system'][7000] = array(
-    // Compare to update_test_2_update_dependencies(), where the same System
-    // module update function is forced to depend on an update function from a
-    // different module. This allows us to test that both dependencies are
-    // correctly recorded.
-    'update_test_1' => 7000,
-  );
-  $dependencies['system'][7001] = array(
-    // Compare to update_test_2_update_dependencies(), where the same System
-    // module update function is forced to depend on a different update
-    // function within the same module. This allows us to test that only the
-    // dependency on the higher-numbered update function is recorded.
-    'update_test_1' => 7002,
-  );
-  return $dependencies;
-}
-
-/**
- * Dummy update_test_1 update 7000.
- */
-function update_test_1_update_7000() {
-}
-
-/**
- * Dummy update_test_1 update 7001.
- */
-function update_test_1_update_7001() {
-}
-
-/**
- * Dummy update_test_1 update 7002.
- */
-function update_test_1_update_7002() {
-}
diff --git a/modules/simpletest/tests/update_test_1.module b/modules/simpletest/tests/update_test_1.module
deleted file mode 100644
index b3d9bbc..0000000
--- a/modules/simpletest/tests/update_test_1.module
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/modules/simpletest/tests/update_test_2.info b/modules/simpletest/tests/update_test_2.info
deleted file mode 100644
index d9764ee..0000000
--- a/modules/simpletest/tests/update_test_2.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Update test"
-description = "Support module for update testing."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/update_test_2.install b/modules/simpletest/tests/update_test_2.install
deleted file mode 100644
index 9c076ff..0000000
--- a/modules/simpletest/tests/update_test_2.install
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the update_test_2 module.
- */
-
-/**
- * Implements hook_update_dependencies().
- *
- * @see update_test_1_update_dependencies()
- * @see update_test_3_update_dependencies()
- */
-function update_test_2_update_dependencies() {
-  // Combined with update_test_3_update_dependencies(), we are declaring here
-  // that these two modules run updates in the following order:
-  // 1. update_test_2_update_7000()
-  // 2. update_test_3_update_7000()
-  // 3. update_test_2_update_7001()
-  // 4. update_test_2_update_7002()
-  $dependencies['update_test_2'][7001] = array(
-    'update_test_3' => 7000,
-  );
-
-  // These are coordinated with the corresponding dependencies declared in
-  // update_test_1_update_dependencies().
-  $dependencies['system'][7000] = array(
-    'update_test_2' => 7001,
-  );
-  $dependencies['system'][7001] = array(
-    'update_test_1' => 7001,
-  );
-
-  return $dependencies;
-}
-
-/**
- * Dummy update_test_2 update 7000.
- */
-function update_test_2_update_7000() {
-}
-
-/**
- * Dummy update_test_2 update 7001.
- */
-function update_test_2_update_7001() {
-}
-
-/**
- * Dummy update_test_2 update 7002.
- */
-function update_test_2_update_7002() {
-}
diff --git a/modules/simpletest/tests/update_test_2.module b/modules/simpletest/tests/update_test_2.module
deleted file mode 100644
index b3d9bbc..0000000
--- a/modules/simpletest/tests/update_test_2.module
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/modules/simpletest/tests/update_test_3.info b/modules/simpletest/tests/update_test_3.info
deleted file mode 100644
index d9764ee..0000000
--- a/modules/simpletest/tests/update_test_3.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Update test"
-description = "Support module for update testing."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/update_test_3.install b/modules/simpletest/tests/update_test_3.install
deleted file mode 100644
index c3f6b75..0000000
--- a/modules/simpletest/tests/update_test_3.install
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the update_test_3 module.
- */
-
-/**
- * Implements hook_update_dependencies().
- *
- * @see update_test_2_update_dependencies()
- */
-function update_test_3_update_dependencies() {
-  $dependencies['update_test_3'][7000] = array(
-    'update_test_2' => 7000,
-  );
-  return $dependencies;
-}
-
-/**
- * Dummy update_test_3 update 7000.
- */
-function update_test_3_update_7000() {
-}
diff --git a/modules/simpletest/tests/update_test_3.module b/modules/simpletest/tests/update_test_3.module
deleted file mode 100644
index b3d9bbc..0000000
--- a/modules/simpletest/tests/update_test_3.module
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/modules/simpletest/tests/upgrade/drupal-6.bare.database.php b/modules/simpletest/tests/upgrade/drupal-6.bare.database.php
deleted file mode 100644
index 40c7562..0000000
--- a/modules/simpletest/tests/upgrade/drupal-6.bare.database.php
+++ /dev/null
@@ -1,8131 +0,0 @@
-<?php
-
-/**
- * @file
- * Bare installation of Drupal 6.17, for test purposes.
- *
- * This file was generated by the dump-database-d6.sh tool, from a bare
- * installation of Drupal 6, with only the following core optional modules
- * enabled:
- *  - dblog
- *  - update
- *
- * Dblog fulfills the requirement that a module take care of watchdog calls,
- * and update module is enabled at the end of installation.
- */
-
-db_create_table('access', array(
-  'fields' => array(
-    'aid' => array(
-      'type' => 'serial',
-      'not null' => TRUE,
-    ),
-    'mask' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'type' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'status' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-  ),
-  'primary key' => array(
-    'aid',
-  ),
-  'module' => 'user',
-  'name' => 'access',
-));
-
-db_create_table('actions', array(
-  'fields' => array(
-    'aid' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '0',
-    ),
-    'type' => array(
-      'type' => 'varchar',
-      'length' => 32,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'callback' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'parameters' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-      'size' => 'big',
-    ),
-    'description' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '0',
-    ),
-  ),
-  'primary key' => array(
-    'aid',
-  ),
-  'module' => 'system',
-  'name' => 'actions',
-));
-db_insert('actions')->fields(array(
-  'aid',
-  'type',
-  'callback',
-  'parameters',
-  'description',
-))
-->values(array(
-  'aid' => 'node_make_sticky_action',
-  'type' => 'node',
-  'callback' => 'node_make_sticky_action',
-  'parameters' => '',
-  'description' => 'Make post sticky',
-))
-->values(array(
-  'aid' => 'node_make_unsticky_action',
-  'type' => 'node',
-  'callback' => 'node_make_unsticky_action',
-  'parameters' => '',
-  'description' => 'Make post unsticky',
-))
-->values(array(
-  'aid' => 'node_promote_action',
-  'type' => 'node',
-  'callback' => 'node_promote_action',
-  'parameters' => '',
-  'description' => 'Promote post to front page',
-))
-->values(array(
-  'aid' => 'node_publish_action',
-  'type' => 'node',
-  'callback' => 'node_publish_action',
-  'parameters' => '',
-  'description' => 'Publish post',
-))
-->values(array(
-  'aid' => 'node_save_action',
-  'type' => 'node',
-  'callback' => 'node_save_action',
-  'parameters' => '',
-  'description' => 'Save post',
-))
-->values(array(
-  'aid' => 'node_unpromote_action',
-  'type' => 'node',
-  'callback' => 'node_unpromote_action',
-  'parameters' => '',
-  'description' => 'Remove post from front page',
-))
-->values(array(
-  'aid' => 'node_unpublish_action',
-  'type' => 'node',
-  'callback' => 'node_unpublish_action',
-  'parameters' => '',
-  'description' => 'Unpublish post',
-))
-->values(array(
-  'aid' => 'user_block_ip_action',
-  'type' => 'user',
-  'callback' => 'user_block_ip_action',
-  'parameters' => '',
-  'description' => 'Ban IP address of current user',
-))
-->values(array(
-  'aid' => 'user_block_user_action',
-  'type' => 'user',
-  'callback' => 'user_block_user_action',
-  'parameters' => '',
-  'description' => 'Block current user',
-))
-->execute();
-
-db_create_table('actions_aid', array(
-  'fields' => array(
-    'aid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-  ),
-  'primary key' => array(
-    'aid',
-  ),
-  'module' => 'system',
-  'name' => 'actions_aid',
-));
-
-db_create_table('authmap', array(
-  'fields' => array(
-    'aid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'uid' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'authname' => array(
-      'type' => 'varchar',
-      'length' => 128,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'module' => array(
-      'type' => 'varchar',
-      'length' => 128,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-  ),
-  'unique keys' => array(
-    'authname' => array(
-      'authname',
-    ),
-  ),
-  'primary key' => array(
-    'aid',
-  ),
-  'module' => 'user',
-  'name' => 'authmap',
-));
-
-db_create_table('batch', array(
-  'fields' => array(
-    'bid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'token' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => TRUE,
-    ),
-    'timestamp' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-    ),
-    'batch' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-  ),
-  'primary key' => array(
-    'bid',
-  ),
-  'indexes' => array(
-    'token' => array(
-      'token',
-    ),
-  ),
-  'module' => 'system',
-  'name' => 'batch',
-));
-
-db_create_table('blocks', array(
-  'fields' => array(
-    'bid' => array(
-      'type' => 'serial',
-      'not null' => TRUE,
-    ),
-    'module' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'delta' => array(
-      'type' => 'varchar',
-      'length' => 32,
-      'not null' => TRUE,
-      'default' => '0',
-    ),
-    'theme' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'status' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'weight' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'region' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'custom' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'throttle' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'visibility' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'pages' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-    ),
-    'title' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'cache' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 1,
-      'size' => 'tiny',
-    ),
-  ),
-  'primary key' => array(
-    'bid',
-  ),
-  'unique keys' => array(
-    'tmd' => array(
-      'theme',
-      'module',
-      'delta',
-    ),
-  ),
-  'indexes' => array(
-    'list' => array(
-      'theme',
-      'status',
-      'region',
-      'weight',
-      'module',
-    ),
-  ),
-  'module' => 'block',
-  'name' => 'blocks',
-));
-db_insert('blocks')->fields(array(
-  'bid',
-  'module',
-  'delta',
-  'theme',
-  'status',
-  'weight',
-  'region',
-  'custom',
-  'throttle',
-  'visibility',
-  'pages',
-  'title',
-  'cache',
-))
-->values(array(
-  'bid' => '1',
-  'module' => 'user',
-  'delta' => '0',
-  'theme' => 'garland',
-  'status' => '1',
-  'weight' => '0',
-  'region' => 'left',
-  'custom' => '0',
-  'throttle' => '0',
-  'visibility' => '0',
-  'pages' => '',
-  'title' => '',
-  'cache' => '-1',
-))
-->values(array(
-  'bid' => '2',
-  'module' => 'user',
-  'delta' => '1',
-  'theme' => 'garland',
-  'status' => '1',
-  'weight' => '0',
-  'region' => 'left',
-  'custom' => '0',
-  'throttle' => '0',
-  'visibility' => '0',
-  'pages' => '',
-  'title' => '',
-  'cache' => '-1',
-))
-->values(array(
-  'bid' => '3',
-  'module' => 'system',
-  'delta' => '0',
-  'theme' => 'garland',
-  'status' => '1',
-  'weight' => '10',
-  'region' => 'footer',
-  'custom' => '0',
-  'throttle' => '0',
-  'visibility' => '0',
-  'pages' => '',
-  'title' => '',
-  'cache' => '-1',
-))
-->execute();
-
-db_create_table('blocks_roles', array(
-  'fields' => array(
-    'module' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => TRUE,
-    ),
-    'delta' => array(
-      'type' => 'varchar',
-      'length' => 32,
-      'not null' => TRUE,
-    ),
-    'rid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-  ),
-  'primary key' => array(
-    'module',
-    'delta',
-    'rid',
-  ),
-  'indexes' => array(
-    'rid' => array(
-      'rid',
-    ),
-  ),
-  'module' => 'block',
-  'name' => 'blocks_roles',
-));
-
-db_create_table('boxes', array(
-  'fields' => array(
-    'bid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'body' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'info' => array(
-      'type' => 'varchar',
-      'length' => 128,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'format' => array(
-      'type' => 'int',
-      'size' => 'small',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'unique keys' => array(
-    'info' => array(
-      'info',
-    ),
-  ),
-  'primary key' => array(
-    'bid',
-  ),
-  'module' => 'block',
-  'name' => 'boxes',
-));
-
-db_create_table('cache', array(
-  'fields' => array(
-    'cid' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'data' => array(
-      'type' => 'blob',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'expire' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'created' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'headers' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-    'serialized' => array(
-      'type' => 'int',
-      'size' => 'small',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'indexes' => array(
-    'expire' => array(
-      'expire',
-    ),
-  ),
-  'primary key' => array(
-    'cid',
-  ),
-  'module' => 'system',
-  'name' => 'cache',
-));
-
-db_create_table('cache_block', array(
-  'fields' => array(
-    'cid' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'data' => array(
-      'type' => 'blob',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'expire' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'created' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'headers' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-    'serialized' => array(
-      'type' => 'int',
-      'size' => 'small',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'indexes' => array(
-    'expire' => array(
-      'expire',
-    ),
-  ),
-  'primary key' => array(
-    'cid',
-  ),
-  'module' => 'block',
-  'name' => 'cache_block',
-));
-
-db_create_table('cache_filter', array(
-  'fields' => array(
-    'cid' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'data' => array(
-      'type' => 'blob',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'expire' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'created' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'headers' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-    'serialized' => array(
-      'type' => 'int',
-      'size' => 'small',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'indexes' => array(
-    'expire' => array(
-      'expire',
-    ),
-  ),
-  'primary key' => array(
-    'cid',
-  ),
-  'module' => 'filter',
-  'name' => 'cache_filter',
-));
-
-db_create_table('cache_form', array(
-  'fields' => array(
-    'cid' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'data' => array(
-      'type' => 'blob',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'expire' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'created' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'headers' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-    'serialized' => array(
-      'type' => 'int',
-      'size' => 'small',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'indexes' => array(
-    'expire' => array(
-      'expire',
-    ),
-  ),
-  'primary key' => array(
-    'cid',
-  ),
-  'module' => 'system',
-  'name' => 'cache_form',
-));
-
-db_create_table('cache_menu', array(
-  'fields' => array(
-    'cid' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'data' => array(
-      'type' => 'blob',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'expire' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'created' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'headers' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-    'serialized' => array(
-      'type' => 'int',
-      'size' => 'small',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'indexes' => array(
-    'expire' => array(
-      'expire',
-    ),
-  ),
-  'primary key' => array(
-    'cid',
-  ),
-  'module' => 'system',
-  'name' => 'cache_menu',
-));
-
-db_create_table('cache_page', array(
-  'fields' => array(
-    'cid' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'data' => array(
-      'type' => 'blob',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'expire' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'created' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'headers' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-    'serialized' => array(
-      'type' => 'int',
-      'size' => 'small',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'indexes' => array(
-    'expire' => array(
-      'expire',
-    ),
-  ),
-  'primary key' => array(
-    'cid',
-  ),
-  'module' => 'system',
-  'name' => 'cache_page',
-));
-
-db_create_table('cache_update', array(
-  'fields' => array(
-    'cid' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'data' => array(
-      'type' => 'blob',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'expire' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'created' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'headers' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-    'serialized' => array(
-      'type' => 'int',
-      'size' => 'small',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'indexes' => array(
-    'expire' => array(
-      'expire',
-    ),
-  ),
-  'primary key' => array(
-    'cid',
-  ),
-  'module' => 'update',
-  'name' => 'cache_update',
-));
-
-db_create_table('files', array(
-  'fields' => array(
-    'fid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'uid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'filename' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'filepath' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'filemime' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'filesize' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'status' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'timestamp' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'indexes' => array(
-    'uid' => array(
-      'uid',
-    ),
-    'status' => array(
-      'status',
-    ),
-    'timestamp' => array(
-      'timestamp',
-    ),
-  ),
-  'primary key' => array(
-    'fid',
-  ),
-  'module' => 'system',
-  'name' => 'files',
-));
-
-db_create_table('filter_formats', array(
-  'fields' => array(
-    'format' => array(
-      'type' => 'serial',
-      'not null' => TRUE,
-    ),
-    'name' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'roles' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'cache' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-  ),
-  'primary key' => array(
-    'format',
-  ),
-  'unique keys' => array(
-    'name' => array(
-      'name',
-    ),
-  ),
-  'module' => 'filter',
-  'name' => 'filter_formats',
-));
-db_insert('filter_formats')->fields(array(
-  'format',
-  'name',
-  'roles',
-  'cache',
-))
-->values(array(
-  'format' => '1',
-  'name' => 'Filtered HTML',
-  'roles' => ',1,2,',
-  'cache' => '1',
-))
-->values(array(
-  'format' => '2',
-  'name' => 'Full HTML',
-  'roles' => '',
-  'cache' => '1',
-))
-->execute();
-
-db_create_table('filters', array(
-  'fields' => array(
-    'fid' => array(
-      'type' => 'serial',
-      'not null' => TRUE,
-    ),
-    'format' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'module' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'delta' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'weight' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-  ),
-  'primary key' => array(
-    'fid',
-  ),
-  'unique keys' => array(
-    'fmd' => array(
-      'format',
-      'module',
-      'delta',
-    ),
-  ),
-  'indexes' => array(
-    'list' => array(
-      'format',
-      'weight',
-      'module',
-      'delta',
-    ),
-  ),
-  'module' => 'filter',
-  'name' => 'filters',
-));
-db_insert('filters')->fields(array(
-  'fid',
-  'format',
-  'module',
-  'delta',
-  'weight',
-))
-->values(array(
-  'fid' => '1',
-  'format' => '1',
-  'module' => 'filter',
-  'delta' => '2',
-  'weight' => '0',
-))
-->values(array(
-  'fid' => '2',
-  'format' => '1',
-  'module' => 'filter',
-  'delta' => '0',
-  'weight' => '1',
-))
-->values(array(
-  'fid' => '3',
-  'format' => '1',
-  'module' => 'filter',
-  'delta' => '1',
-  'weight' => '2',
-))
-->values(array(
-  'fid' => '4',
-  'format' => '1',
-  'module' => 'filter',
-  'delta' => '3',
-  'weight' => '10',
-))
-->values(array(
-  'fid' => '5',
-  'format' => '2',
-  'module' => 'filter',
-  'delta' => '2',
-  'weight' => '0',
-))
-->values(array(
-  'fid' => '6',
-  'format' => '2',
-  'module' => 'filter',
-  'delta' => '1',
-  'weight' => '1',
-))
-->values(array(
-  'fid' => '7',
-  'format' => '2',
-  'module' => 'filter',
-  'delta' => '3',
-  'weight' => '10',
-))
-->execute();
-
-db_create_table('flood', array(
-  'fields' => array(
-    'fid' => array(
-      'type' => 'serial',
-      'not null' => TRUE,
-    ),
-    'event' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'hostname' => array(
-      'type' => 'varchar',
-      'length' => 128,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'timestamp' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'primary key' => array(
-    'fid',
-  ),
-  'indexes' => array(
-    'allow' => array(
-      'event',
-      'hostname',
-      'timestamp',
-    ),
-  ),
-  'module' => 'system',
-  'name' => 'flood',
-));
-
-db_create_table('history', array(
-  'fields' => array(
-    'uid' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'nid' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'timestamp' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'primary key' => array(
-    'uid',
-    'nid',
-  ),
-  'indexes' => array(
-    'nid' => array(
-      'nid',
-    ),
-  ),
-  'module' => 'system',
-  'name' => 'history',
-));
-
-db_create_table('menu_links', array(
-  'fields' => array(
-    'menu_name' => array(
-      'type' => 'varchar',
-      'length' => 32,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'mlid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'plid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'link_path' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'router_path' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'link_title' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'options' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-    'module' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => 'system',
-    ),
-    'hidden' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'small',
-    ),
-    'external' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'small',
-    ),
-    'has_children' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'small',
-    ),
-    'expanded' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'small',
-    ),
-    'weight' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'depth' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'small',
-    ),
-    'customized' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'small',
-    ),
-    'p1' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'p2' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'p3' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'p4' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'p5' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'p6' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'p7' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'p8' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'p9' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'updated' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'small',
-    ),
-  ),
-  'indexes' => array(
-    'path_menu' => array(
-      array(
-        'link_path',
-        128,
-      ),
-      'menu_name',
-    ),
-    'menu_plid_expand_child' => array(
-      'menu_name',
-      'plid',
-      'expanded',
-      'has_children',
-    ),
-    'menu_parents' => array(
-      'menu_name',
-      'p1',
-      'p2',
-      'p3',
-      'p4',
-      'p5',
-      'p6',
-      'p7',
-      'p8',
-      'p9',
-    ),
-    'router_path' => array(
-      array(
-        'router_path',
-        128,
-      ),
-    ),
-  ),
-  'primary key' => array(
-    'mlid',
-  ),
-  'module' => 'system',
-  'name' => 'menu_links',
-));
-db_insert('menu_links')->fields(array(
-  'menu_name',
-  'mlid',
-  'plid',
-  'link_path',
-  'router_path',
-  'link_title',
-  'options',
-  'module',
-  'hidden',
-  'external',
-  'has_children',
-  'expanded',
-  'weight',
-  'depth',
-  'customized',
-  'p1',
-  'p2',
-  'p3',
-  'p4',
-  'p5',
-  'p6',
-  'p7',
-  'p8',
-  'p9',
-  'updated',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '1',
-  'plid' => '0',
-  'link_path' => 'batch',
-  'router_path' => 'batch',
-  'link_title' => '',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '1',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '2',
-  'plid' => '0',
-  'link_path' => 'admin',
-  'router_path' => 'admin',
-  'link_title' => 'Administer',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '1',
-  'expanded' => '0',
-  'weight' => '9',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '3',
-  'plid' => '0',
-  'link_path' => 'node',
-  'router_path' => 'node',
-  'link_title' => 'Content',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '3',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '4',
-  'plid' => '0',
-  'link_path' => 'logout',
-  'router_path' => 'logout',
-  'link_title' => 'Log out',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '10',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '4',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '5',
-  'plid' => '0',
-  'link_path' => 'rss.xml',
-  'router_path' => 'rss.xml',
-  'link_title' => 'RSS feed',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '5',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '6',
-  'plid' => '0',
-  'link_path' => 'user',
-  'router_path' => 'user',
-  'link_title' => 'User account',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '6',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '7',
-  'plid' => '0',
-  'link_path' => 'node/%',
-  'router_path' => 'node/%',
-  'link_title' => '',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '7',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '8',
-  'plid' => '2',
-  'link_path' => 'admin/compact',
-  'router_path' => 'admin/compact',
-  'link_title' => 'Compact mode',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '2',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '8',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '9',
-  'plid' => '0',
-  'link_path' => 'filter/tips',
-  'router_path' => 'filter/tips',
-  'link_title' => 'Compose tips',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '9',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '10',
-  'plid' => '2',
-  'link_path' => 'admin/content',
-  'router_path' => 'admin/content',
-  'link_title' => 'Content management',
-  'options' => "a:1:{s:10:\"attributes\";a:1:{s:5:\"title\";s:27:\"Manage your site's content.\";}}",
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '1',
-  'expanded' => '0',
-  'weight' => '-10',
-  'depth' => '2',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '10',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '11',
-  'plid' => '0',
-  'link_path' => 'node/add',
-  'router_path' => 'node/add',
-  'link_title' => 'Create content',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '1',
-  'expanded' => '0',
-  'weight' => '1',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '11',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '12',
-  'plid' => '0',
-  'link_path' => 'system/files',
-  'router_path' => 'system/files',
-  'link_title' => 'File download',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '12',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '13',
-  'plid' => '2',
-  'link_path' => 'admin/reports',
-  'router_path' => 'admin/reports',
-  'link_title' => 'Reports',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:59:"View reports from system logs and other status information.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '1',
-  'expanded' => '0',
-  'weight' => '5',
-  'depth' => '2',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '13',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '14',
-  'plid' => '2',
-  'link_path' => 'admin/build',
-  'router_path' => 'admin/build',
-  'link_title' => 'Site building',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:38:"Control how your site looks and feels.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '1',
-  'expanded' => '0',
-  'weight' => '-10',
-  'depth' => '2',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '14',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '15',
-  'plid' => '2',
-  'link_path' => 'admin/settings',
-  'router_path' => 'admin/settings',
-  'link_title' => 'Site configuration',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:40:"Adjust basic site configuration options.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '1',
-  'expanded' => '0',
-  'weight' => '-5',
-  'depth' => '2',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '16',
-  'plid' => '0',
-  'link_path' => 'user/autocomplete',
-  'router_path' => 'user/autocomplete',
-  'link_title' => 'User autocomplete',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '16',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '17',
-  'plid' => '2',
-  'link_path' => 'admin/user',
-  'router_path' => 'admin/user',
-  'link_title' => 'User management',
-  'options' => "a:1:{s:10:\"attributes\";a:1:{s:5:\"title\";s:61:\"Manage your site's users, groups and access to site features.\";}}",
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '1',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '2',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '18',
-  'plid' => '0',
-  'link_path' => 'user/%',
-  'router_path' => 'user/%',
-  'link_title' => 'My account',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '18',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '19',
-  'plid' => '17',
-  'link_path' => 'admin/user/rules',
-  'router_path' => 'admin/user/rules',
-  'link_title' => 'Access rules',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:80:"List and create rules to disallow usernames, e-mail addresses, and IP addresses.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '19',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '20',
-  'plid' => '15',
-  'link_path' => 'admin/settings/actions',
-  'router_path' => 'admin/settings/actions',
-  'link_title' => 'Actions',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:41:"Manage the actions defined for your site.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '20',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '21',
-  'plid' => '15',
-  'link_path' => 'admin/settings/admin',
-  'router_path' => 'admin/settings/admin',
-  'link_title' => 'Administration theme',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:55:"Settings for how your administrative pages should look.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '21',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '22',
-  'plid' => '14',
-  'link_path' => 'admin/build/block',
-  'router_path' => 'admin/build/block',
-  'link_title' => 'Blocks',
-  'options' => "a:1:{s:10:\"attributes\";a:1:{s:5:\"title\";s:79:\"Configure what block content appears in your site's sidebars and other regions.\";}}",
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '14',
-  'p3' => '22',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '23',
-  'plid' => '15',
-  'link_path' => 'admin/settings/clean-urls',
-  'router_path' => 'admin/settings/clean-urls',
-  'link_title' => 'Clean URLs',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:43:"Enable or disable clean URLs for your site.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '23',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '24',
-  'plid' => '10',
-  'link_path' => 'admin/content/node',
-  'router_path' => 'admin/content/node',
-  'link_title' => 'Content',
-  'options' => "a:1:{s:10:\"attributes\";a:1:{s:5:\"title\";s:43:\"View, edit, and delete your site's content.\";}}",
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '10',
-  'p3' => '24',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '25',
-  'plid' => '10',
-  'link_path' => 'admin/content/types',
-  'router_path' => 'admin/content/types',
-  'link_title' => 'Content types',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:82:"Manage posts by content type, including default status, front page promotion, etc.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '10',
-  'p3' => '25',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '26',
-  'plid' => '15',
-  'link_path' => 'admin/settings/date-time',
-  'router_path' => 'admin/settings/date-time',
-  'link_title' => 'Date and time',
-  'options' => "a:1:{s:10:\"attributes\";a:1:{s:5:\"title\";s:89:\"Settings for how Drupal displays date and time, as well as the system's default timezone.\";}}",
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '26',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '27',
-  'plid' => '0',
-  'link_path' => 'node/%/delete',
-  'router_path' => 'node/%/delete',
-  'link_title' => 'Delete',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '1',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '27',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '28',
-  'plid' => '18',
-  'link_path' => 'user/%/delete',
-  'router_path' => 'user/%/delete',
-  'link_title' => 'Delete',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '2',
-  'customized' => '0',
-  'p1' => '18',
-  'p2' => '28',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '29',
-  'plid' => '15',
-  'link_path' => 'admin/settings/error-reporting',
-  'router_path' => 'admin/settings/error-reporting',
-  'link_title' => 'Error reporting',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:93:"Control how Drupal deals with errors including 403/404 errors as well as PHP error reporting.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '29',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '30',
-  'plid' => '15',
-  'link_path' => 'admin/settings/file-system',
-  'router_path' => 'admin/settings/file-system',
-  'link_title' => 'File system',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:68:"Tell Drupal where to store uploaded files and how they are accessed.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '30',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '31',
-  'plid' => '15',
-  'link_path' => 'admin/settings/image-toolkit',
-  'router_path' => 'admin/settings/image-toolkit',
-  'link_title' => 'Image toolkit',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:74:"Choose which image toolkit to use if you have installed optional toolkits.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '31',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '32',
-  'plid' => '15',
-  'link_path' => 'admin/settings/filters',
-  'router_path' => 'admin/settings/filters',
-  'link_title' => 'Input formats',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:127:"Configure how content input by users is filtered, including allowed HTML tags. Also allows enabling of module-provided filters.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '32',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '33',
-  'plid' => '15',
-  'link_path' => 'admin/settings/logging',
-  'router_path' => 'admin/settings/logging',
-  'link_title' => 'Logging and alerts',
-  'options' => "a:1:{s:10:\"attributes\";a:1:{s:5:\"title\";s:156:\"Settings for logging and alerts modules. Various modules can route Drupal's system events to different destination, such as syslog, database, email, ...etc.\";}}",
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '1',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '33',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '34',
-  'plid' => '14',
-  'link_path' => 'admin/build/modules',
-  'router_path' => 'admin/build/modules',
-  'link_title' => 'Modules',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:47:"Enable or disable add-on modules for your site.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '14',
-  'p3' => '34',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '35',
-  'plid' => '15',
-  'link_path' => 'admin/settings/performance',
-  'router_path' => 'admin/settings/performance',
-  'link_title' => 'Performance',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:101:"Enable or disable page caching for anonymous users and set CSS and JS bandwidth optimization options.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '35',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '36',
-  'plid' => '17',
-  'link_path' => 'admin/user/permissions',
-  'router_path' => 'admin/user/permissions',
-  'link_title' => 'Permissions',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:64:"Determine access to features by selecting permissions for roles.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '36',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '37',
-  'plid' => '10',
-  'link_path' => 'admin/content/node-settings',
-  'router_path' => 'admin/content/node-settings',
-  'link_title' => 'Post settings',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:126:"Control posting behavior, such as teaser length, requiring previews before posting, and the number of posts on the front page.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '10',
-  'p3' => '37',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '38',
-  'plid' => '10',
-  'link_path' => 'admin/content/rss-publishing',
-  'router_path' => 'admin/content/rss-publishing',
-  'link_title' => 'RSS publishing',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:92:"Configure the number of items per feed and whether feeds should be titles/teasers/full-text.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '10',
-  'p3' => '38',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '39',
-  'plid' => '13',
-  'link_path' => 'admin/reports/dblog',
-  'router_path' => 'admin/reports/dblog',
-  'link_title' => 'Recent log entries',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:43:"View events that have recently been logged.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '-1',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '13',
-  'p3' => '39',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '40',
-  'plid' => '17',
-  'link_path' => 'admin/user/roles',
-  'router_path' => 'admin/user/roles',
-  'link_title' => 'Roles',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:30:"List, edit, or add user roles.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '40',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '41',
-  'plid' => '15',
-  'link_path' => 'admin/settings/site-information',
-  'router_path' => 'admin/settings/site-information',
-  'link_title' => 'Site information',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:107:"Change basic site information, such as the site name, slogan, e-mail address, mission, front page and more.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '41',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '42',
-  'plid' => '15',
-  'link_path' => 'admin/settings/site-maintenance',
-  'router_path' => 'admin/settings/site-maintenance',
-  'link_title' => 'Site maintenance',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:63:"Take the site off-line for maintenance or bring it back online.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '42',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '43',
-  'plid' => '13',
-  'link_path' => 'admin/reports/status',
-  'router_path' => 'admin/reports/status',
-  'link_title' => 'Status report',
-  'options' => "a:1:{s:10:\"attributes\";a:1:{s:5:\"title\";s:74:\"Get a status report about your site's operation and any detected problems.\";}}",
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '10',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '13',
-  'p3' => '43',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '44',
-  'plid' => '14',
-  'link_path' => 'admin/build/themes',
-  'router_path' => 'admin/build/themes',
-  'link_title' => 'Themes',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:57:"Change which theme your site uses or allows users to set.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '14',
-  'p3' => '44',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '45',
-  'plid' => '13',
-  'link_path' => 'admin/reports/access-denied',
-  'router_path' => 'admin/reports/access-denied',
-  'link_title' => "Top 'access denied' errors",
-  'options' => "a:1:{s:10:\"attributes\";a:1:{s:5:\"title\";s:35:\"View 'access denied' errors (403s).\";}}",
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '13',
-  'p3' => '45',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '46',
-  'plid' => '13',
-  'link_path' => 'admin/reports/page-not-found',
-  'router_path' => 'admin/reports/page-not-found',
-  'link_title' => "Top 'page not found' errors",
-  'options' => "a:1:{s:10:\"attributes\";a:1:{s:5:\"title\";s:36:\"View 'page not found' errors (404s).\";}}",
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '13',
-  'p3' => '46',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '47',
-  'plid' => '17',
-  'link_path' => 'admin/user/settings',
-  'router_path' => 'admin/user/settings',
-  'link_title' => 'User settings',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:101:"Configure default behavior of users, including registration requirements, e-mails, and user pictures.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '47',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '48',
-  'plid' => '17',
-  'link_path' => 'admin/user/user',
-  'router_path' => 'admin/user/user',
-  'link_title' => 'Users',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:26:"List, add, and edit users.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '48',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '49',
-  'plid' => '32',
-  'link_path' => 'admin/settings/filters/%',
-  'router_path' => 'admin/settings/filters/%',
-  'link_title' => '',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '32',
-  'p4' => '49',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '50',
-  'plid' => '23',
-  'link_path' => 'admin/settings/clean-urls/check',
-  'router_path' => 'admin/settings/clean-urls/check',
-  'link_title' => 'Clean URL check',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '23',
-  'p4' => '50',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '51',
-  'plid' => '20',
-  'link_path' => 'admin/settings/actions/configure',
-  'router_path' => 'admin/settings/actions/configure',
-  'link_title' => 'Configure an advanced action',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '20',
-  'p4' => '51',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '52',
-  'plid' => '22',
-  'link_path' => 'admin/build/block/configure',
-  'router_path' => 'admin/build/block/configure',
-  'link_title' => 'Configure block',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '14',
-  'p3' => '22',
-  'p4' => '52',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '53',
-  'plid' => '33',
-  'link_path' => 'admin/settings/logging/dblog',
-  'router_path' => 'admin/settings/logging/dblog',
-  'link_title' => 'Database logging',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:169:"Settings for logging to the Drupal database logs. This is the most common method for small to medium sites on shared hosting. The logs are viewable from the admin pages.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '33',
-  'p4' => '53',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '54',
-  'plid' => '26',
-  'link_path' => 'admin/settings/date-time/lookup',
-  'router_path' => 'admin/settings/date-time/lookup',
-  'link_title' => 'Date and time lookup',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '26',
-  'p4' => '54',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '55',
-  'plid' => '22',
-  'link_path' => 'admin/build/block/delete',
-  'router_path' => 'admin/build/block/delete',
-  'link_title' => 'Delete block',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '14',
-  'p3' => '22',
-  'p4' => '55',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '56',
-  'plid' => '32',
-  'link_path' => 'admin/settings/filters/delete',
-  'router_path' => 'admin/settings/filters/delete',
-  'link_title' => 'Delete input format',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '32',
-  'p4' => '56',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '57',
-  'plid' => '19',
-  'link_path' => 'admin/user/rules/delete',
-  'router_path' => 'admin/user/rules/delete',
-  'link_title' => 'Delete rule',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '19',
-  'p4' => '57',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '58',
-  'plid' => '13',
-  'link_path' => 'admin/reports/event/%',
-  'router_path' => 'admin/reports/event/%',
-  'link_title' => 'Details',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '13',
-  'p3' => '58',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '59',
-  'plid' => '40',
-  'link_path' => 'admin/user/roles/edit',
-  'router_path' => 'admin/user/roles/edit',
-  'link_title' => 'Edit role',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '40',
-  'p4' => '59',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '60',
-  'plid' => '19',
-  'link_path' => 'admin/user/rules/edit',
-  'router_path' => 'admin/user/rules/edit',
-  'link_title' => 'Edit rule',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '19',
-  'p4' => '60',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '61',
-  'plid' => '43',
-  'link_path' => 'admin/reports/status/php',
-  'router_path' => 'admin/reports/status/php',
-  'link_title' => 'PHP',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '13',
-  'p3' => '43',
-  'p4' => '61',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '62',
-  'plid' => '37',
-  'link_path' => 'admin/content/node-settings/rebuild',
-  'router_path' => 'admin/content/node-settings/rebuild',
-  'link_title' => 'Rebuild permissions',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '10',
-  'p3' => '37',
-  'p4' => '62',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '63',
-  'plid' => '20',
-  'link_path' => 'admin/settings/actions/orphan',
-  'router_path' => 'admin/settings/actions/orphan',
-  'link_title' => 'Remove orphans',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '20',
-  'p4' => '63',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '64',
-  'plid' => '43',
-  'link_path' => 'admin/reports/status/run-cron',
-  'router_path' => 'admin/reports/status/run-cron',
-  'link_title' => 'Run cron',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '13',
-  'p3' => '43',
-  'p4' => '64',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '65',
-  'plid' => '43',
-  'link_path' => 'admin/reports/status/sql',
-  'router_path' => 'admin/reports/status/sql',
-  'link_title' => 'SQL',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '13',
-  'p3' => '43',
-  'p4' => '65',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '66',
-  'plid' => '20',
-  'link_path' => 'admin/settings/actions/delete/%',
-  'router_path' => 'admin/settings/actions/delete/%',
-  'link_title' => 'Delete action',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:17:"Delete an action.";}}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '20',
-  'p4' => '66',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '67',
-  'plid' => '22',
-  'link_path' => 'admin/build/block/list/js',
-  'router_path' => 'admin/build/block/list/js',
-  'link_title' => 'JavaScript List Form',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '14',
-  'p3' => '22',
-  'p4' => '67',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '68',
-  'plid' => '34',
-  'link_path' => 'admin/build/modules/list/confirm',
-  'router_path' => 'admin/build/modules/list/confirm',
-  'link_title' => 'List',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '14',
-  'p3' => '34',
-  'p4' => '68',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '69',
-  'plid' => '0',
-  'link_path' => 'user/reset/%/%/%',
-  'router_path' => 'user/reset/%/%/%',
-  'link_title' => 'Reset password',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '69',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '70',
-  'plid' => '34',
-  'link_path' => 'admin/build/modules/uninstall/confirm',
-  'router_path' => 'admin/build/modules/uninstall/confirm',
-  'link_title' => 'Uninstall',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '14',
-  'p3' => '34',
-  'p4' => '70',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '71',
-  'plid' => '0',
-  'link_path' => 'node/%/revisions/%/delete',
-  'router_path' => 'node/%/revisions/%/delete',
-  'link_title' => 'Delete earlier revision',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '71',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '72',
-  'plid' => '0',
-  'link_path' => 'node/%/revisions/%/revert',
-  'router_path' => 'node/%/revisions/%/revert',
-  'link_title' => 'Revert to earlier revision',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '72',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '73',
-  'plid' => '0',
-  'link_path' => 'node/%/revisions/%/view',
-  'router_path' => 'node/%/revisions/%/view',
-  'link_title' => 'Revisions',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '73',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '74',
-  'plid' => '13',
-  'link_path' => 'admin/reports/updates',
-  'router_path' => 'admin/reports/updates',
-  'link_title' => 'Available updates',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:82:"Get a status report about available updates for your installed modules and themes.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '10',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '13',
-  'p3' => '74',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '75',
-  'plid' => '11',
-  'link_path' => 'node/add/page',
-  'router_path' => 'node/add/page',
-  'link_title' => 'Page',
-  'options' => "a:1:{s:10:\"attributes\";a:1:{s:5:\"title\";s:296:\"A <em>page</em>, similar in form to a <em>story</em>, is a simple method for creating and displaying information that rarely changes, such as an \"About us\" section of a website. By default, a <em>page</em> entry does not allow visitor comments and is not featured on the site's initial home page.\";}}",
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '2',
-  'customized' => '0',
-  'p1' => '11',
-  'p2' => '75',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '76',
-  'plid' => '11',
-  'link_path' => 'node/add/story',
-  'router_path' => 'node/add/story',
-  'link_title' => 'Story',
-  'options' => "a:1:{s:10:\"attributes\";a:1:{s:5:\"title\";s:392:\"A <em>story</em>, similar in form to a <em>page</em>, is ideal for creating and displaying content that informs or engages website visitors. Press releases, site announcements, and informal blog-like entries may all be created with a <em>story</em> entry. By default, a <em>story</em> entry is automatically featured on the site's initial home page, and provides the ability to post comments.\";}}",
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '2',
-  'customized' => '0',
-  'p1' => '11',
-  'p2' => '76',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '77',
-  'plid' => '74',
-  'link_path' => 'admin/reports/updates/check',
-  'router_path' => 'admin/reports/updates/check',
-  'link_title' => 'Manual update check',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '13',
-  'p3' => '74',
-  'p4' => '77',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '78',
-  'plid' => '10',
-  'link_path' => 'admin/content/node-type/page',
-  'router_path' => 'admin/content/node-type/page',
-  'link_title' => 'Page',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '10',
-  'p3' => '78',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '79',
-  'plid' => '10',
-  'link_path' => 'admin/content/node-type/story',
-  'router_path' => 'admin/content/node-type/story',
-  'link_title' => 'Story',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '10',
-  'p3' => '79',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '80',
-  'plid' => '0',
-  'link_path' => 'admin/content/node-type/page/delete',
-  'router_path' => 'admin/content/node-type/page/delete',
-  'link_title' => 'Delete',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '80',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '81',
-  'plid' => '0',
-  'link_path' => 'admin/content/node-type/story/delete',
-  'router_path' => 'admin/content/node-type/story/delete',
-  'link_title' => 'Delete',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '81',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->execute();
-
-db_create_table('menu_router', array(
-  'fields' => array(
-    'path' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'load_functions' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-    ),
-    'to_arg_functions' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-    ),
-    'access_callback' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'access_arguments' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-    'page_callback' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'page_arguments' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-    'fit' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'number_parts' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'small',
-    ),
-    'tab_parent' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'tab_root' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'title' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'title_callback' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'title_arguments' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'type' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'block_callback' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'description' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-    ),
-    'position' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'weight' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'file' => array(
-      'type' => 'text',
-      'size' => 'medium',
-    ),
-  ),
-  'indexes' => array(
-    'fit' => array(
-      'fit',
-    ),
-    'tab_parent' => array(
-      'tab_parent',
-    ),
-    'tab_root_weight_title' => array(
-      array(
-        'tab_root',
-        64,
-      ),
-      'weight',
-      'title',
-    ),
-  ),
-  'primary key' => array(
-    'path',
-  ),
-  'module' => 'system',
-  'name' => 'menu_router',
-));
-db_insert('menu_router')->fields(array(
-  'path',
-  'load_functions',
-  'to_arg_functions',
-  'access_callback',
-  'access_arguments',
-  'page_callback',
-  'page_arguments',
-  'fit',
-  'number_parts',
-  'tab_parent',
-  'tab_root',
-  'title',
-  'title_callback',
-  'title_arguments',
-  'type',
-  'block_callback',
-  'description',
-  'position',
-  'weight',
-  'file',
-))
-->values(array(
-  'path' => 'admin',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'system_main_admin_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '1',
-  'number_parts' => '1',
-  'tab_parent' => '',
-  'tab_root' => 'admin',
-  'title' => 'Administer',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '9',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'system_admin_menu_block_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build',
-  'title' => 'Site building',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Control how your site looks and feels.',
-  'position' => 'right',
-  'weight' => '-10',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/block',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:17:"administer blocks";}',
-  'page_callback' => 'block_admin_display',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/block',
-  'title' => 'Blocks',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => "Configure what block content appears in your site's sidebars and other regions.",
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/block/block.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/block/add',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:17:"administer blocks";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:20:"block_add_block_form";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/build/block',
-  'tab_root' => 'admin/build/block',
-  'title' => 'Add block',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/block/block.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/block/configure',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:17:"administer blocks";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:21:"block_admin_configure";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/block/configure',
-  'title' => 'Configure block',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/block/block.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/block/delete',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:17:"administer blocks";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:16:"block_box_delete";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/block/delete',
-  'title' => 'Delete block',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/block/block.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/block/list',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:17:"administer blocks";}',
-  'page_callback' => 'block_admin_display',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/build/block',
-  'tab_root' => 'admin/build/block',
-  'title' => 'List',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '-10',
-  'file' => 'modules/block/block.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/block/list/bluemarine',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_block_themes_access',
-  'access_arguments' => 'a:1:{i:0;O:8:"stdClass":12:{s:8:"filename";s:33:"themes/bluemarine/bluemarine.info";s:4:"name";s:10:"bluemarine";s:4:"type";s:5:"theme";s:5:"owner";s:45:"themes/engines/phptemplate/phptemplate.engine";s:6:"status";s:1:"0";s:8:"throttle";s:1:"0";s:9:"bootstrap";s:1:"0";s:14:"schema_version";s:2:"-1";s:6:"weight";s:1:"0";s:4:"info";a:13:{s:4:"name";s:10:"Bluemarine";s:11:"description";s:66:"Table-based multi-column theme with a marine and ash color scheme.";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:6:"engine";s:11:"phptemplate";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:7:"regions";a:5:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";s:7:"content";s:7:"Content";s:6:"header";s:6:"Header";s:6:"footer";s:6:"Footer";}s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:27:"themes/bluemarine/style.css";}}s:7:"scripts";a:1:{s:9:"script.js";s:27:"themes/bluemarine/script.js";}s:10:"screenshot";s:32:"themes/bluemarine/screenshot.png";s:3:"php";s:5:"4.3.5";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:27:"themes/bluemarine/style.css";}}s:6:"engine";s:11:"phptemplate";}}',
-  'page_callback' => 'block_admin_display',
-  'page_arguments' => 'a:1:{i:0;s:10:"bluemarine";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/block/list',
-  'tab_root' => 'admin/build/block',
-  'title' => 'Bluemarine',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/block/block.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/block/list/chameleon',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_block_themes_access',
-  'access_arguments' => 'a:1:{i:0;O:8:"stdClass":11:{s:8:"filename";s:31:"themes/chameleon/chameleon.info";s:4:"name";s:9:"chameleon";s:4:"type";s:5:"theme";s:5:"owner";s:32:"themes/chameleon/chameleon.theme";s:6:"status";s:1:"0";s:8:"throttle";s:1:"0";s:9:"bootstrap";s:1:"0";s:14:"schema_version";s:2:"-1";s:6:"weight";s:1:"0";s:4:"info";a:12:{s:4:"name";s:9:"Chameleon";s:11:"description";s:42:"Minimalist tabled theme with light colors.";s:7:"regions";a:2:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";}s:8:"features";a:4:{i:0;s:4:"logo";i:1;s:7:"favicon";i:2;s:4:"name";i:3;s:6:"slogan";}s:11:"stylesheets";a:1:{s:3:"all";a:2:{s:9:"style.css";s:26:"themes/chameleon/style.css";s:10:"common.css";s:27:"themes/chameleon/common.css";}}s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:7:"scripts";a:1:{s:9:"script.js";s:26:"themes/chameleon/script.js";}s:10:"screenshot";s:31:"themes/chameleon/screenshot.png";s:3:"php";s:5:"4.3.5";}s:11:"stylesheets";a:1:{s:3:"all";a:2:{s:9:"style.css";s:26:"themes/chameleon/style.css";s:10:"common.css";s:27:"themes/chameleon/common.css";}}}}',
-  'page_callback' => 'block_admin_display',
-  'page_arguments' => 'a:1:{i:0;s:9:"chameleon";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/block/list',
-  'tab_root' => 'admin/build/block',
-  'title' => 'Chameleon',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/block/block.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/block/list/garland',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_block_themes_access',
-  'access_arguments' => 'a:1:{i:0;O:8:"stdClass":12:{s:8:"filename";s:27:"themes/garland/garland.info";s:4:"name";s:7:"garland";s:4:"type";s:5:"theme";s:5:"owner";s:45:"themes/engines/phptemplate/phptemplate.engine";s:6:"status";s:1:"1";s:8:"throttle";s:1:"0";s:9:"bootstrap";s:1:"0";s:14:"schema_version";s:2:"-1";s:6:"weight";s:1:"0";s:4:"info";a:13:{s:4:"name";s:7:"Garland";s:11:"description";s:66:"Tableless, recolorable, multi-column, fluid width theme (default).";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:6:"engine";s:11:"phptemplate";s:11:"stylesheets";a:2:{s:3:"all";a:1:{s:9:"style.css";s:24:"themes/garland/style.css";}s:5:"print";a:1:{s:9:"print.css";s:24:"themes/garland/print.css";}}s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:7:"regions";a:5:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";s:7:"content";s:7:"Content";s:6:"header";s:6:"Header";s:6:"footer";s:6:"Footer";}s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:7:"scripts";a:1:{s:9:"script.js";s:24:"themes/garland/script.js";}s:10:"screenshot";s:29:"themes/garland/screenshot.png";s:3:"php";s:5:"4.3.5";}s:11:"stylesheets";a:2:{s:3:"all";a:1:{s:9:"style.css";s:24:"themes/garland/style.css";}s:5:"print";a:1:{s:9:"print.css";s:24:"themes/garland/print.css";}}s:6:"engine";s:11:"phptemplate";}}',
-  'page_callback' => 'block_admin_display',
-  'page_arguments' => 'a:1:{i:0;s:7:"garland";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/block/list',
-  'tab_root' => 'admin/build/block',
-  'title' => 'Garland',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '-10',
-  'file' => 'modules/block/block.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/block/list/js',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:17:"administer blocks";}',
-  'page_callback' => 'block_admin_display_js',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/block/list/js',
-  'title' => 'JavaScript List Form',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/block/block.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/block/list/marvin',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_block_themes_access',
-  'access_arguments' => 'a:1:{i:0;O:8:"stdClass":12:{s:8:"filename";s:35:"themes/chameleon/marvin/marvin.info";s:4:"name";s:6:"marvin";s:4:"type";s:5:"theme";s:5:"owner";s:0:"";s:6:"status";s:1:"0";s:8:"throttle";s:1:"0";s:9:"bootstrap";s:1:"0";s:14:"schema_version";s:2:"-1";s:6:"weight";s:1:"0";s:4:"info";a:13:{s:4:"name";s:6:"Marvin";s:11:"description";s:31:"Boxy tabled theme in all grays.";s:7:"regions";a:2:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";}s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:10:"base theme";s:9:"chameleon";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:33:"themes/chameleon/marvin/style.css";}}s:7:"scripts";a:1:{s:9:"script.js";s:33:"themes/chameleon/marvin/script.js";}s:10:"screenshot";s:38:"themes/chameleon/marvin/screenshot.png";s:3:"php";s:5:"4.3.5";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:33:"themes/chameleon/marvin/style.css";}}s:10:"base_theme";s:9:"chameleon";}}',
-  'page_callback' => 'block_admin_display',
-  'page_arguments' => 'a:1:{i:0;s:6:"marvin";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/block/list',
-  'tab_root' => 'admin/build/block',
-  'title' => 'Marvin',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/block/block.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/block/list/minnelli',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_block_themes_access',
-  'access_arguments' => 'a:1:{i:0;O:8:"stdClass":13:{s:8:"filename";s:37:"themes/garland/minnelli/minnelli.info";s:4:"name";s:8:"minnelli";s:4:"type";s:5:"theme";s:5:"owner";s:45:"themes/engines/phptemplate/phptemplate.engine";s:6:"status";s:1:"0";s:8:"throttle";s:1:"0";s:9:"bootstrap";s:1:"0";s:14:"schema_version";s:2:"-1";s:6:"weight";s:1:"0";s:4:"info";a:14:{s:4:"name";s:8:"Minnelli";s:11:"description";s:56:"Tableless, recolorable, multi-column, fixed width theme.";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:10:"base theme";s:7:"garland";s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:12:"minnelli.css";s:36:"themes/garland/minnelli/minnelli.css";}}s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:7:"regions";a:5:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";s:7:"content";s:7:"Content";s:6:"header";s:6:"Header";s:6:"footer";s:6:"Footer";}s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:7:"scripts";a:1:{s:9:"script.js";s:33:"themes/garland/minnelli/script.js";}s:10:"screenshot";s:38:"themes/garland/minnelli/screenshot.png";s:3:"php";s:5:"4.3.5";s:6:"engine";s:11:"phptemplate";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:12:"minnelli.css";s:36:"themes/garland/minnelli/minnelli.css";}}s:6:"engine";s:11:"phptemplate";s:10:"base_theme";s:7:"garland";}}',
-  'page_callback' => 'block_admin_display',
-  'page_arguments' => 'a:1:{i:0;s:8:"minnelli";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/block/list',
-  'tab_root' => 'admin/build/block',
-  'title' => 'Minnelli',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/block/block.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/block/list/pushbutton',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_block_themes_access',
-  'access_arguments' => 'a:1:{i:0;O:8:"stdClass":12:{s:8:"filename";s:33:"themes/pushbutton/pushbutton.info";s:4:"name";s:10:"pushbutton";s:4:"type";s:5:"theme";s:5:"owner";s:45:"themes/engines/phptemplate/phptemplate.engine";s:6:"status";s:1:"0";s:8:"throttle";s:1:"0";s:9:"bootstrap";s:1:"0";s:14:"schema_version";s:2:"-1";s:6:"weight";s:1:"0";s:4:"info";a:13:{s:4:"name";s:10:"Pushbutton";s:11:"description";s:52:"Tabled, multi-column theme in blue and orange tones.";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:6:"engine";s:11:"phptemplate";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:7:"regions";a:5:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";s:7:"content";s:7:"Content";s:6:"header";s:6:"Header";s:6:"footer";s:6:"Footer";}s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:27:"themes/pushbutton/style.css";}}s:7:"scripts";a:1:{s:9:"script.js";s:27:"themes/pushbutton/script.js";}s:10:"screenshot";s:32:"themes/pushbutton/screenshot.png";s:3:"php";s:5:"4.3.5";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:27:"themes/pushbutton/style.css";}}s:6:"engine";s:11:"phptemplate";}}',
-  'page_callback' => 'block_admin_display',
-  'page_arguments' => 'a:1:{i:0;s:10:"pushbutton";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/block/list',
-  'tab_root' => 'admin/build/block',
-  'title' => 'Pushbutton',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/block/block.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/modules',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:14:"system_modules";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/modules',
-  'title' => 'Modules',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Enable or disable add-on modules for your site.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/modules/list',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:14:"system_modules";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/build/modules',
-  'tab_root' => 'admin/build/modules',
-  'title' => 'List',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/modules/list/confirm',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:14:"system_modules";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/modules/list/confirm',
-  'title' => 'List',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/modules/uninstall',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:24:"system_modules_uninstall";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/build/modules',
-  'tab_root' => 'admin/build/modules',
-  'title' => 'Uninstall',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/modules/uninstall/confirm',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:24:"system_modules_uninstall";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/modules/uninstall/confirm',
-  'title' => 'Uninstall',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/themes',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:18:"system_themes_form";i:1;N;}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/themes',
-  'title' => 'Themes',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Change which theme your site uses or allows users to set.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/themes/select',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:18:"system_themes_form";i:1;N;}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/build/themes',
-  'tab_root' => 'admin/build/themes',
-  'title' => 'List',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => 'Select the default theme.',
-  'position' => '',
-  'weight' => '-1',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/themes/settings',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:21:"system_theme_settings";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/build/themes',
-  'tab_root' => 'admin/build/themes',
-  'title' => 'Configure',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/themes/settings/bluemarine',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_system_themes_access',
-  'access_arguments' => 'a:1:{i:0;O:8:"stdClass":12:{s:8:"filename";s:33:"themes/bluemarine/bluemarine.info";s:4:"name";s:10:"bluemarine";s:4:"type";s:5:"theme";s:5:"owner";s:45:"themes/engines/phptemplate/phptemplate.engine";s:6:"status";s:1:"0";s:8:"throttle";s:1:"0";s:9:"bootstrap";s:1:"0";s:14:"schema_version";s:2:"-1";s:6:"weight";s:1:"0";s:4:"info";a:13:{s:4:"name";s:10:"Bluemarine";s:11:"description";s:66:"Table-based multi-column theme with a marine and ash color scheme.";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:6:"engine";s:11:"phptemplate";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:7:"regions";a:5:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";s:7:"content";s:7:"Content";s:6:"header";s:6:"Header";s:6:"footer";s:6:"Footer";}s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:27:"themes/bluemarine/style.css";}}s:7:"scripts";a:1:{s:9:"script.js";s:27:"themes/bluemarine/script.js";}s:10:"screenshot";s:32:"themes/bluemarine/screenshot.png";s:3:"php";s:5:"4.3.5";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:27:"themes/bluemarine/style.css";}}s:6:"engine";s:11:"phptemplate";}}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:21:"system_theme_settings";i:1;s:10:"bluemarine";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/themes/settings',
-  'tab_root' => 'admin/build/themes',
-  'title' => 'Bluemarine',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/themes/settings/chameleon',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_system_themes_access',
-  'access_arguments' => 'a:1:{i:0;O:8:"stdClass":11:{s:8:"filename";s:31:"themes/chameleon/chameleon.info";s:4:"name";s:9:"chameleon";s:4:"type";s:5:"theme";s:5:"owner";s:32:"themes/chameleon/chameleon.theme";s:6:"status";s:1:"0";s:8:"throttle";s:1:"0";s:9:"bootstrap";s:1:"0";s:14:"schema_version";s:2:"-1";s:6:"weight";s:1:"0";s:4:"info";a:12:{s:4:"name";s:9:"Chameleon";s:11:"description";s:42:"Minimalist tabled theme with light colors.";s:7:"regions";a:2:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";}s:8:"features";a:4:{i:0;s:4:"logo";i:1;s:7:"favicon";i:2;s:4:"name";i:3;s:6:"slogan";}s:11:"stylesheets";a:1:{s:3:"all";a:2:{s:9:"style.css";s:26:"themes/chameleon/style.css";s:10:"common.css";s:27:"themes/chameleon/common.css";}}s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:7:"scripts";a:1:{s:9:"script.js";s:26:"themes/chameleon/script.js";}s:10:"screenshot";s:31:"themes/chameleon/screenshot.png";s:3:"php";s:5:"4.3.5";}s:11:"stylesheets";a:1:{s:3:"all";a:2:{s:9:"style.css";s:26:"themes/chameleon/style.css";s:10:"common.css";s:27:"themes/chameleon/common.css";}}}}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:21:"system_theme_settings";i:1;s:9:"chameleon";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/themes/settings',
-  'tab_root' => 'admin/build/themes',
-  'title' => 'Chameleon',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/themes/settings/garland',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_system_themes_access',
-  'access_arguments' => 'a:1:{i:0;O:8:"stdClass":12:{s:8:"filename";s:27:"themes/garland/garland.info";s:4:"name";s:7:"garland";s:4:"type";s:5:"theme";s:5:"owner";s:45:"themes/engines/phptemplate/phptemplate.engine";s:6:"status";s:1:"1";s:8:"throttle";s:1:"0";s:9:"bootstrap";s:1:"0";s:14:"schema_version";s:2:"-1";s:6:"weight";s:1:"0";s:4:"info";a:13:{s:4:"name";s:7:"Garland";s:11:"description";s:66:"Tableless, recolorable, multi-column, fluid width theme (default).";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:6:"engine";s:11:"phptemplate";s:11:"stylesheets";a:2:{s:3:"all";a:1:{s:9:"style.css";s:24:"themes/garland/style.css";}s:5:"print";a:1:{s:9:"print.css";s:24:"themes/garland/print.css";}}s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:7:"regions";a:5:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";s:7:"content";s:7:"Content";s:6:"header";s:6:"Header";s:6:"footer";s:6:"Footer";}s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:7:"scripts";a:1:{s:9:"script.js";s:24:"themes/garland/script.js";}s:10:"screenshot";s:29:"themes/garland/screenshot.png";s:3:"php";s:5:"4.3.5";}s:11:"stylesheets";a:2:{s:3:"all";a:1:{s:9:"style.css";s:24:"themes/garland/style.css";}s:5:"print";a:1:{s:9:"print.css";s:24:"themes/garland/print.css";}}s:6:"engine";s:11:"phptemplate";}}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:21:"system_theme_settings";i:1;s:7:"garland";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/themes/settings',
-  'tab_root' => 'admin/build/themes',
-  'title' => 'Garland',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/themes/settings/global',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:21:"system_theme_settings";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/themes/settings',
-  'tab_root' => 'admin/build/themes',
-  'title' => 'Global settings',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '-1',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/themes/settings/marvin',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_system_themes_access',
-  'access_arguments' => 'a:1:{i:0;O:8:"stdClass":12:{s:8:"filename";s:35:"themes/chameleon/marvin/marvin.info";s:4:"name";s:6:"marvin";s:4:"type";s:5:"theme";s:5:"owner";s:0:"";s:6:"status";s:1:"0";s:8:"throttle";s:1:"0";s:9:"bootstrap";s:1:"0";s:14:"schema_version";s:2:"-1";s:6:"weight";s:1:"0";s:4:"info";a:13:{s:4:"name";s:6:"Marvin";s:11:"description";s:31:"Boxy tabled theme in all grays.";s:7:"regions";a:2:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";}s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:10:"base theme";s:9:"chameleon";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:33:"themes/chameleon/marvin/style.css";}}s:7:"scripts";a:1:{s:9:"script.js";s:33:"themes/chameleon/marvin/script.js";}s:10:"screenshot";s:38:"themes/chameleon/marvin/screenshot.png";s:3:"php";s:5:"4.3.5";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:33:"themes/chameleon/marvin/style.css";}}s:10:"base_theme";s:9:"chameleon";}}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:21:"system_theme_settings";i:1;s:6:"marvin";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/themes/settings',
-  'tab_root' => 'admin/build/themes',
-  'title' => 'Marvin',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/themes/settings/minnelli',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_system_themes_access',
-  'access_arguments' => 'a:1:{i:0;O:8:"stdClass":13:{s:8:"filename";s:37:"themes/garland/minnelli/minnelli.info";s:4:"name";s:8:"minnelli";s:4:"type";s:5:"theme";s:5:"owner";s:45:"themes/engines/phptemplate/phptemplate.engine";s:6:"status";s:1:"0";s:8:"throttle";s:1:"0";s:9:"bootstrap";s:1:"0";s:14:"schema_version";s:2:"-1";s:6:"weight";s:1:"0";s:4:"info";a:14:{s:4:"name";s:8:"Minnelli";s:11:"description";s:56:"Tableless, recolorable, multi-column, fixed width theme.";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:10:"base theme";s:7:"garland";s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:12:"minnelli.css";s:36:"themes/garland/minnelli/minnelli.css";}}s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:7:"regions";a:5:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";s:7:"content";s:7:"Content";s:6:"header";s:6:"Header";s:6:"footer";s:6:"Footer";}s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:7:"scripts";a:1:{s:9:"script.js";s:33:"themes/garland/minnelli/script.js";}s:10:"screenshot";s:38:"themes/garland/minnelli/screenshot.png";s:3:"php";s:5:"4.3.5";s:6:"engine";s:11:"phptemplate";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:12:"minnelli.css";s:36:"themes/garland/minnelli/minnelli.css";}}s:6:"engine";s:11:"phptemplate";s:10:"base_theme";s:7:"garland";}}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:21:"system_theme_settings";i:1;s:8:"minnelli";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/themes/settings',
-  'tab_root' => 'admin/build/themes',
-  'title' => 'Minnelli',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/themes/settings/pushbutton',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_system_themes_access',
-  'access_arguments' => 'a:1:{i:0;O:8:"stdClass":12:{s:8:"filename";s:33:"themes/pushbutton/pushbutton.info";s:4:"name";s:10:"pushbutton";s:4:"type";s:5:"theme";s:5:"owner";s:45:"themes/engines/phptemplate/phptemplate.engine";s:6:"status";s:1:"0";s:8:"throttle";s:1:"0";s:9:"bootstrap";s:1:"0";s:14:"schema_version";s:2:"-1";s:6:"weight";s:1:"0";s:4:"info";a:13:{s:4:"name";s:10:"Pushbutton";s:11:"description";s:52:"Tabled, multi-column theme in blue and orange tones.";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:6:"engine";s:11:"phptemplate";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:7:"regions";a:5:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";s:7:"content";s:7:"Content";s:6:"header";s:6:"Header";s:6:"footer";s:6:"Footer";}s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:27:"themes/pushbutton/style.css";}}s:7:"scripts";a:1:{s:9:"script.js";s:27:"themes/pushbutton/script.js";}s:10:"screenshot";s:32:"themes/pushbutton/screenshot.png";s:3:"php";s:5:"4.3.5";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:27:"themes/pushbutton/style.css";}}s:6:"engine";s:11:"phptemplate";}}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:21:"system_theme_settings";i:1;s:10:"pushbutton";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/themes/settings',
-  'tab_root' => 'admin/build/themes',
-  'title' => 'Pushbutton',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/by-module',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'system_admin_by_module',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => 'admin',
-  'tab_root' => 'admin',
-  'title' => 'By module',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '2',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/by-task',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'system_main_admin_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => 'admin',
-  'tab_root' => 'admin',
-  'title' => 'By task',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/compact',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'system_admin_compact_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'admin/compact',
-  'title' => 'Compact mode',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'system_admin_menu_block_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content',
-  'title' => 'Content management',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => "Manage your site's content.",
-  'position' => 'left',
-  'weight' => '-10',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content/node',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:16:"administer nodes";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:18:"node_admin_content";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/node',
-  'title' => 'Content',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => "View, edit, and delete your site's content.",
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/node.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content/node-settings',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:16:"administer nodes";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:14:"node_configure";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/node-settings',
-  'title' => 'Post settings',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Control posting behavior, such as teaser length, requiring previews before posting, and the number of posts on the front page.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/node.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content/node-settings/rebuild',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:30:"node_configure_rebuild_confirm";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/node-settings/rebuild',
-  'title' => 'Rebuild permissions',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/node.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content/node-type/page',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:24:"administer content types";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => "a:2:{i:0;s:14:\"node_type_form\";i:1;O:8:\"stdClass\":14:{s:4:\"type\";s:4:\"page\";s:4:\"name\";s:4:\"Page\";s:6:\"module\";s:4:\"node\";s:11:\"description\";s:296:\"A <em>page</em>, similar in form to a <em>story</em>, is a simple method for creating and displaying information that rarely changes, such as an \"About us\" section of a website. By default, a <em>page</em> entry does not allow visitor comments and is not featured on the site's initial home page.\";s:4:\"help\";s:0:\"\";s:9:\"has_title\";s:1:\"1\";s:11:\"title_label\";s:5:\"Title\";s:8:\"has_body\";s:1:\"1\";s:10:\"body_label\";s:4:\"Body\";s:14:\"min_word_count\";s:1:\"0\";s:6:\"custom\";s:1:\"1\";s:8:\"modified\";s:1:\"1\";s:6:\"locked\";s:1:\"0\";s:9:\"orig_type\";s:4:\"page\";}}",
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/node-type/page',
-  'title' => 'Page',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/content_types.inc',
-))
-->values(array(
-  'path' => 'admin/content/node-type/page/delete',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:24:"administer content types";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => "a:2:{i:0;s:24:\"node_type_delete_confirm\";i:1;O:8:\"stdClass\":14:{s:4:\"type\";s:4:\"page\";s:4:\"name\";s:4:\"Page\";s:6:\"module\";s:4:\"node\";s:11:\"description\";s:296:\"A <em>page</em>, similar in form to a <em>story</em>, is a simple method for creating and displaying information that rarely changes, such as an \"About us\" section of a website. By default, a <em>page</em> entry does not allow visitor comments and is not featured on the site's initial home page.\";s:4:\"help\";s:0:\"\";s:9:\"has_title\";s:1:\"1\";s:11:\"title_label\";s:5:\"Title\";s:8:\"has_body\";s:1:\"1\";s:10:\"body_label\";s:4:\"Body\";s:14:\"min_word_count\";s:1:\"0\";s:6:\"custom\";s:1:\"1\";s:8:\"modified\";s:1:\"1\";s:6:\"locked\";s:1:\"0\";s:9:\"orig_type\";s:4:\"page\";}}",
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/node-type/page/delete',
-  'title' => 'Delete',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/content_types.inc',
-))
-->values(array(
-  'path' => 'admin/content/node-type/page/edit',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:24:"administer content types";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => "a:2:{i:0;s:14:\"node_type_form\";i:1;O:8:\"stdClass\":14:{s:4:\"type\";s:4:\"page\";s:4:\"name\";s:4:\"Page\";s:6:\"module\";s:4:\"node\";s:11:\"description\";s:296:\"A <em>page</em>, similar in form to a <em>story</em>, is a simple method for creating and displaying information that rarely changes, such as an \"About us\" section of a website. By default, a <em>page</em> entry does not allow visitor comments and is not featured on the site's initial home page.\";s:4:\"help\";s:0:\"\";s:9:\"has_title\";s:1:\"1\";s:11:\"title_label\";s:5:\"Title\";s:8:\"has_body\";s:1:\"1\";s:10:\"body_label\";s:4:\"Body\";s:14:\"min_word_count\";s:1:\"0\";s:6:\"custom\";s:1:\"1\";s:8:\"modified\";s:1:\"1\";s:6:\"locked\";s:1:\"0\";s:9:\"orig_type\";s:4:\"page\";}}",
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/content/node-type/page',
-  'tab_root' => 'admin/content/node-type/page',
-  'title' => 'Edit',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/content_types.inc',
-))
-->values(array(
-  'path' => 'admin/content/node-type/story',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:24:"administer content types";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => "a:2:{i:0;s:14:\"node_type_form\";i:1;O:8:\"stdClass\":14:{s:4:\"type\";s:5:\"story\";s:4:\"name\";s:5:\"Story\";s:6:\"module\";s:4:\"node\";s:11:\"description\";s:392:\"A <em>story</em>, similar in form to a <em>page</em>, is ideal for creating and displaying content that informs or engages website visitors. Press releases, site announcements, and informal blog-like entries may all be created with a <em>story</em> entry. By default, a <em>story</em> entry is automatically featured on the site's initial home page, and provides the ability to post comments.\";s:4:\"help\";s:0:\"\";s:9:\"has_title\";s:1:\"1\";s:11:\"title_label\";s:5:\"Title\";s:8:\"has_body\";s:1:\"1\";s:10:\"body_label\";s:4:\"Body\";s:14:\"min_word_count\";s:1:\"0\";s:6:\"custom\";s:1:\"1\";s:8:\"modified\";s:1:\"1\";s:6:\"locked\";s:1:\"0\";s:9:\"orig_type\";s:5:\"story\";}}",
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/node-type/story',
-  'title' => 'Story',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/content_types.inc',
-))
-->values(array(
-  'path' => 'admin/content/node-type/story/delete',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:24:"administer content types";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => "a:2:{i:0;s:24:\"node_type_delete_confirm\";i:1;O:8:\"stdClass\":14:{s:4:\"type\";s:5:\"story\";s:4:\"name\";s:5:\"Story\";s:6:\"module\";s:4:\"node\";s:11:\"description\";s:392:\"A <em>story</em>, similar in form to a <em>page</em>, is ideal for creating and displaying content that informs or engages website visitors. Press releases, site announcements, and informal blog-like entries may all be created with a <em>story</em> entry. By default, a <em>story</em> entry is automatically featured on the site's initial home page, and provides the ability to post comments.\";s:4:\"help\";s:0:\"\";s:9:\"has_title\";s:1:\"1\";s:11:\"title_label\";s:5:\"Title\";s:8:\"has_body\";s:1:\"1\";s:10:\"body_label\";s:4:\"Body\";s:14:\"min_word_count\";s:1:\"0\";s:6:\"custom\";s:1:\"1\";s:8:\"modified\";s:1:\"1\";s:6:\"locked\";s:1:\"0\";s:9:\"orig_type\";s:5:\"story\";}}",
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/node-type/story/delete',
-  'title' => 'Delete',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/content_types.inc',
-))
-->values(array(
-  'path' => 'admin/content/node-type/story/edit',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:24:"administer content types";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => "a:2:{i:0;s:14:\"node_type_form\";i:1;O:8:\"stdClass\":14:{s:4:\"type\";s:5:\"story\";s:4:\"name\";s:5:\"Story\";s:6:\"module\";s:4:\"node\";s:11:\"description\";s:392:\"A <em>story</em>, similar in form to a <em>page</em>, is ideal for creating and displaying content that informs or engages website visitors. Press releases, site announcements, and informal blog-like entries may all be created with a <em>story</em> entry. By default, a <em>story</em> entry is automatically featured on the site's initial home page, and provides the ability to post comments.\";s:4:\"help\";s:0:\"\";s:9:\"has_title\";s:1:\"1\";s:11:\"title_label\";s:5:\"Title\";s:8:\"has_body\";s:1:\"1\";s:10:\"body_label\";s:4:\"Body\";s:14:\"min_word_count\";s:1:\"0\";s:6:\"custom\";s:1:\"1\";s:8:\"modified\";s:1:\"1\";s:6:\"locked\";s:1:\"0\";s:9:\"orig_type\";s:5:\"story\";}}",
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/content/node-type/story',
-  'tab_root' => 'admin/content/node-type/story',
-  'title' => 'Edit',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/content_types.inc',
-))
-->values(array(
-  'path' => 'admin/content/node/overview',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:16:"administer nodes";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:18:"node_admin_content";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/content/node',
-  'tab_root' => 'admin/content/node',
-  'title' => 'List',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '-10',
-  'file' => 'modules/node/node.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content/rss-publishing',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:25:"system_rss_feeds_settings";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/rss-publishing',
-  'title' => 'RSS publishing',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Configure the number of items per feed and whether feeds should be titles/teasers/full-text.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content/types',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:24:"administer content types";}',
-  'page_callback' => 'node_overview_types',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/types',
-  'title' => 'Content types',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Manage posts by content type, including default status, front page promotion, etc.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/content_types.inc',
-))
-->values(array(
-  'path' => 'admin/content/types/add',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:24:"administer content types";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:14:"node_type_form";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/content/types',
-  'tab_root' => 'admin/content/types',
-  'title' => 'Add content type',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/content_types.inc',
-))
-->values(array(
-  'path' => 'admin/content/types/list',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:24:"administer content types";}',
-  'page_callback' => 'node_overview_types',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/content/types',
-  'tab_root' => 'admin/content/types',
-  'title' => 'List',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '-10',
-  'file' => 'modules/node/content_types.inc',
-))
-->values(array(
-  'path' => 'admin/reports',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:19:"access site reports";}',
-  'page_callback' => 'system_admin_menu_block_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'admin/reports',
-  'title' => 'Reports',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'View reports from system logs and other status information.',
-  'position' => 'left',
-  'weight' => '5',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/reports/access-denied',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:19:"access site reports";}',
-  'page_callback' => 'dblog_top',
-  'page_arguments' => 'a:1:{i:0;s:13:"access denied";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/reports/access-denied',
-  'title' => "Top 'access denied' errors",
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => "View 'access denied' errors (403s).",
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/dblog/dblog.admin.inc',
-))
-->values(array(
-  'path' => 'admin/reports/dblog',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:19:"access site reports";}',
-  'page_callback' => 'dblog_overview',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/reports/dblog',
-  'title' => 'Recent log entries',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'View events that have recently been logged.',
-  'position' => '',
-  'weight' => '-1',
-  'file' => 'modules/dblog/dblog.admin.inc',
-))
-->values(array(
-  'path' => 'admin/reports/event/%',
-  'load_functions' => 'a:1:{i:3;N;}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:19:"access site reports";}',
-  'page_callback' => 'dblog_event',
-  'page_arguments' => 'a:1:{i:0;i:3;}',
-  'fit' => '14',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/reports/event/%',
-  'title' => 'Details',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/dblog/dblog.admin.inc',
-))
-->values(array(
-  'path' => 'admin/reports/page-not-found',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:19:"access site reports";}',
-  'page_callback' => 'dblog_top',
-  'page_arguments' => 'a:1:{i:0;s:14:"page not found";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/reports/page-not-found',
-  'title' => "Top 'page not found' errors",
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => "View 'page not found' errors (404s).",
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/dblog/dblog.admin.inc',
-))
-->values(array(
-  'path' => 'admin/reports/status',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'system_status',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/reports/status',
-  'title' => 'Status report',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => "Get a status report about your site's operation and any detected problems.",
-  'position' => '',
-  'weight' => '10',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/reports/status/php',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'system_php',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/reports/status/php',
-  'title' => 'PHP',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/reports/status/run-cron',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'system_run_cron',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/reports/status/run-cron',
-  'title' => 'Run cron',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/reports/status/sql',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'system_sql',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/reports/status/sql',
-  'title' => 'SQL',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/reports/updates',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'update_status',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/reports/updates',
-  'title' => 'Available updates',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Get a status report about available updates for your installed modules and themes.',
-  'position' => '',
-  'weight' => '10',
-  'file' => 'modules/update/update.report.inc',
-))
-->values(array(
-  'path' => 'admin/reports/updates/check',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'update_manual_status',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/reports/updates/check',
-  'title' => 'Manual update check',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/update/update.fetch.inc',
-))
-->values(array(
-  'path' => 'admin/reports/updates/list',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'update_status',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/reports/updates',
-  'tab_root' => 'admin/reports/updates',
-  'title' => 'List',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/update/update.report.inc',
-))
-->values(array(
-  'path' => 'admin/reports/updates/settings',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:15:"update_settings";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/reports/updates',
-  'tab_root' => 'admin/reports/updates',
-  'title' => 'Settings',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/update/update.settings.inc',
-))
-->values(array(
-  'path' => 'admin/settings',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'system_settings_overview',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings',
-  'title' => 'Site configuration',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Adjust basic site configuration options.',
-  'position' => 'right',
-  'weight' => '-5',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/actions',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer actions";}',
-  'page_callback' => 'system_actions_manage',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/actions',
-  'title' => 'Actions',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Manage the actions defined for your site.',
-  'position' => '',
-  'weight' => '0',
-  'file' => '',
-))
-->values(array(
-  'path' => 'admin/settings/actions/configure',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer actions";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:24:"system_actions_configure";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/actions/configure',
-  'title' => 'Configure an advanced action',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => '',
-))
-->values(array(
-  'path' => 'admin/settings/actions/delete/%',
-  'load_functions' => 'a:1:{i:4;s:12:"actions_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer actions";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:26:"system_actions_delete_form";i:1;i:4;}',
-  'fit' => '30',
-  'number_parts' => '5',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/actions/delete/%',
-  'title' => 'Delete action',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => 'Delete an action.',
-  'position' => '',
-  'weight' => '0',
-  'file' => '',
-))
-->values(array(
-  'path' => 'admin/settings/actions/manage',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer actions";}',
-  'page_callback' => 'system_actions_manage',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/settings/actions',
-  'tab_root' => 'admin/settings/actions',
-  'title' => 'Manage actions',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => 'Manage the actions defined for your site.',
-  'position' => '',
-  'weight' => '-2',
-  'file' => '',
-))
-->values(array(
-  'path' => 'admin/settings/actions/orphan',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer actions";}',
-  'page_callback' => 'system_actions_remove_orphans',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/actions/orphan',
-  'title' => 'Remove orphans',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => '',
-))
-->values(array(
-  'path' => 'admin/settings/admin',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:27:"system_admin_theme_settings";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/admin',
-  'title' => 'Administration theme',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => 'system_admin_theme_settings',
-  'description' => 'Settings for how your administrative pages should look.',
-  'position' => 'left',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/clean-urls',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:25:"system_clean_url_settings";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/clean-urls',
-  'title' => 'Clean URLs',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Enable or disable clean URLs for your site.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/clean-urls/check',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '1',
-  'access_arguments' => 'a:0:{}',
-  'page_callback' => 'drupal_json',
-  'page_arguments' => 'a:1:{i:0;a:1:{s:6:"status";b:1;}}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/clean-urls/check',
-  'title' => 'Clean URL check',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => '',
-))
-->values(array(
-  'path' => 'admin/settings/date-time',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:25:"system_date_time_settings";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/date-time',
-  'title' => 'Date and time',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => "Settings for how Drupal displays date and time, as well as the system's default timezone.",
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/date-time/lookup',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'system_date_time_lookup',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/date-time/lookup',
-  'title' => 'Date and time lookup',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/error-reporting',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:31:"system_error_reporting_settings";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/error-reporting',
-  'title' => 'Error reporting',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Control how Drupal deals with errors including 403/404 errors as well as PHP error reporting.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/file-system',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:27:"system_file_system_settings";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/file-system',
-  'title' => 'File system',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Tell Drupal where to store uploaded files and how they are accessed.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/filters',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer filters";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:21:"filter_admin_overview";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/filters',
-  'title' => 'Input formats',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Configure how content input by users is filtered, including allowed HTML tags. Also allows enabling of module-provided filters.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/filter/filter.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/filters/%',
-  'load_functions' => 'a:1:{i:3;s:18:"filter_format_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer filters";}',
-  'page_callback' => 'filter_admin_format_page',
-  'page_arguments' => 'a:1:{i:0;i:3;}',
-  'fit' => '14',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/filters/%',
-  'title' => '',
-  'title_callback' => 'filter_admin_format_title',
-  'title_arguments' => 'a:1:{i:0;i:3;}',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/filter/filter.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/filters/%/configure',
-  'load_functions' => 'a:1:{i:3;s:18:"filter_format_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer filters";}',
-  'page_callback' => 'filter_admin_configure_page',
-  'page_arguments' => 'a:1:{i:0;i:3;}',
-  'fit' => '29',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/settings/filters/%',
-  'tab_root' => 'admin/settings/filters/%',
-  'title' => 'Configure',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '1',
-  'file' => 'modules/filter/filter.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/filters/%/edit',
-  'load_functions' => 'a:1:{i:3;s:18:"filter_format_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer filters";}',
-  'page_callback' => 'filter_admin_format_page',
-  'page_arguments' => 'a:1:{i:0;i:3;}',
-  'fit' => '29',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/settings/filters/%',
-  'tab_root' => 'admin/settings/filters/%',
-  'title' => 'Edit',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/filter/filter.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/filters/%/order',
-  'load_functions' => 'a:1:{i:3;s:18:"filter_format_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer filters";}',
-  'page_callback' => 'filter_admin_order_page',
-  'page_arguments' => 'a:1:{i:0;i:3;}',
-  'fit' => '29',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/settings/filters/%',
-  'tab_root' => 'admin/settings/filters/%',
-  'title' => 'Rearrange',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '2',
-  'file' => 'modules/filter/filter.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/filters/add',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer filters";}',
-  'page_callback' => 'filter_admin_format_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/settings/filters',
-  'tab_root' => 'admin/settings/filters',
-  'title' => 'Add input format',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '1',
-  'file' => 'modules/filter/filter.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/filters/delete',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer filters";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:19:"filter_admin_delete";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/filters/delete',
-  'title' => 'Delete input format',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/filter/filter.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/filters/list',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer filters";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:21:"filter_admin_overview";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/settings/filters',
-  'tab_root' => 'admin/settings/filters',
-  'title' => 'List',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/filter/filter.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/image-toolkit',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:29:"system_image_toolkit_settings";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/image-toolkit',
-  'title' => 'Image toolkit',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Choose which image toolkit to use if you have installed optional toolkits.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/logging',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'system_logging_overview',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/logging',
-  'title' => 'Logging and alerts',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => "Settings for logging and alerts modules. Various modules can route Drupal's system events to different destination, such as syslog, database, email, ...etc.",
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/logging/dblog',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:20:"dblog_admin_settings";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/logging/dblog',
-  'title' => 'Database logging',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Settings for logging to the Drupal database logs. This is the most common method for small to medium sites on shared hosting. The logs are viewable from the admin pages.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/dblog/dblog.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/performance',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:27:"system_performance_settings";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/performance',
-  'title' => 'Performance',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Enable or disable page caching for anonymous users and set CSS and JS bandwidth optimization options.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/site-information',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:32:"system_site_information_settings";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/site-information',
-  'title' => 'Site information',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Change basic site information, such as the site name, slogan, e-mail address, mission, front page and more.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/site-maintenance',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:32:"system_site_maintenance_settings";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/site-maintenance',
-  'title' => 'Site maintenance',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Take the site off-line for maintenance or bring it back online.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'system_admin_menu_block_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'admin/user',
-  'title' => 'User management',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => "Manage your site's users, groups and access to site features.",
-  'position' => 'left',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/permissions',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:22:"administer permissions";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:15:"user_admin_perm";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/user/permissions',
-  'title' => 'Permissions',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Determine access to features by selecting permissions for roles.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/roles',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:22:"administer permissions";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:19:"user_admin_new_role";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/user/roles',
-  'title' => 'Roles',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'List, edit, or add user roles.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/roles/edit',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:22:"administer permissions";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:15:"user_admin_role";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/user/roles/edit',
-  'title' => 'Edit role',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/rules',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:22:"administer permissions";}',
-  'page_callback' => 'user_admin_access',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/user/rules',
-  'title' => 'Access rules',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'List and create rules to disallow usernames, e-mail addresses, and IP addresses.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/rules/add',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:22:"administer permissions";}',
-  'page_callback' => 'user_admin_access_add',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/user/rules',
-  'tab_root' => 'admin/user/rules',
-  'title' => 'Add rule',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/rules/check',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:22:"administer permissions";}',
-  'page_callback' => 'user_admin_access_check',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/user/rules',
-  'tab_root' => 'admin/user/rules',
-  'title' => 'Check rules',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/rules/delete',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:22:"administer permissions";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:32:"user_admin_access_delete_confirm";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/user/rules/delete',
-  'title' => 'Delete rule',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/rules/edit',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:22:"administer permissions";}',
-  'page_callback' => 'user_admin_access_edit',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/user/rules/edit',
-  'title' => 'Edit rule',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/rules/list',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:22:"administer permissions";}',
-  'page_callback' => 'user_admin_access',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/user/rules',
-  'tab_root' => 'admin/user/rules',
-  'title' => 'List',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '-10',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/settings',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:16:"administer users";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:19:"user_admin_settings";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/user/settings',
-  'title' => 'User settings',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Configure default behavior of users, including registration requirements, e-mails, and user pictures.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/user',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:16:"administer users";}',
-  'page_callback' => 'user_admin',
-  'page_arguments' => 'a:1:{i:0;s:4:"list";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/user/user',
-  'title' => 'Users',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'List, add, and edit users.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/user/create',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:16:"administer users";}',
-  'page_callback' => 'user_admin',
-  'page_arguments' => 'a:1:{i:0;s:6:"create";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/user/user',
-  'tab_root' => 'admin/user/user',
-  'title' => 'Add user',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/user/list',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:16:"administer users";}',
-  'page_callback' => 'user_admin',
-  'page_arguments' => 'a:1:{i:0;s:4:"list";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/user/user',
-  'tab_root' => 'admin/user/user',
-  'title' => 'List',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '-10',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'batch',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '1',
-  'access_arguments' => 'a:0:{}',
-  'page_callback' => 'system_batch_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '1',
-  'number_parts' => '1',
-  'tab_parent' => '',
-  'tab_root' => 'batch',
-  'title' => '',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'filter/tips',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '1',
-  'access_arguments' => 'a:0:{}',
-  'page_callback' => 'filter_tips_long',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'filter/tips',
-  'title' => 'Compose tips',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '20',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/filter/filter.pages.inc',
-))
-->values(array(
-  'path' => 'logout',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_is_logged_in',
-  'access_arguments' => 'a:0:{}',
-  'page_callback' => 'user_logout',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '1',
-  'number_parts' => '1',
-  'tab_parent' => '',
-  'tab_root' => 'logout',
-  'title' => 'Log out',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '10',
-  'file' => 'modules/user/user.pages.inc',
-))
-->values(array(
-  'path' => 'node',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:14:"access content";}',
-  'page_callback' => 'node_page_default',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '1',
-  'number_parts' => '1',
-  'tab_parent' => '',
-  'tab_root' => 'node',
-  'title' => 'Content',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => '',
-))
-->values(array(
-  'path' => 'node/%',
-  'load_functions' => 'a:1:{i:1;s:9:"node_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'node_access',
-  'access_arguments' => 'a:2:{i:0;s:4:"view";i:1;i:1;}',
-  'page_callback' => 'node_page_view',
-  'page_arguments' => 'a:1:{i:0;i:1;}',
-  'fit' => '2',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'node/%',
-  'title' => '',
-  'title_callback' => 'node_page_title',
-  'title_arguments' => 'a:1:{i:0;i:1;}',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => '',
-))
-->values(array(
-  'path' => 'node/%/delete',
-  'load_functions' => 'a:1:{i:1;s:9:"node_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'node_access',
-  'access_arguments' => 'a:2:{i:0;s:6:"delete";i:1;i:1;}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:19:"node_delete_confirm";i:1;i:1;}',
-  'fit' => '5',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'node/%/delete',
-  'title' => 'Delete',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '1',
-  'file' => 'modules/node/node.pages.inc',
-))
-->values(array(
-  'path' => 'node/%/edit',
-  'load_functions' => 'a:1:{i:1;s:9:"node_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'node_access',
-  'access_arguments' => 'a:2:{i:0;s:6:"update";i:1;i:1;}',
-  'page_callback' => 'node_page_edit',
-  'page_arguments' => 'a:1:{i:0;i:1;}',
-  'fit' => '5',
-  'number_parts' => '3',
-  'tab_parent' => 'node/%',
-  'tab_root' => 'node/%',
-  'title' => 'Edit',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '1',
-  'file' => 'modules/node/node.pages.inc',
-))
-->values(array(
-  'path' => 'node/%/revisions',
-  'load_functions' => 'a:1:{i:1;s:9:"node_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => '_node_revision_access',
-  'access_arguments' => 'a:1:{i:0;i:1;}',
-  'page_callback' => 'node_revision_overview',
-  'page_arguments' => 'a:1:{i:0;i:1;}',
-  'fit' => '5',
-  'number_parts' => '3',
-  'tab_parent' => 'node/%',
-  'tab_root' => 'node/%',
-  'title' => 'Revisions',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '2',
-  'file' => 'modules/node/node.pages.inc',
-))
-->values(array(
-  'path' => 'node/%/revisions/%/delete',
-  'load_functions' => 'a:2:{i:1;a:1:{s:9:"node_load";a:1:{i:0;i:3;}}i:3;N;}',
-  'to_arg_functions' => '',
-  'access_callback' => '_node_revision_access',
-  'access_arguments' => 'a:2:{i:0;i:1;i:1;s:6:"delete";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:28:"node_revision_delete_confirm";i:1;i:1;}',
-  'fit' => '21',
-  'number_parts' => '5',
-  'tab_parent' => '',
-  'tab_root' => 'node/%/revisions/%/delete',
-  'title' => 'Delete earlier revision',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/node.pages.inc',
-))
-->values(array(
-  'path' => 'node/%/revisions/%/revert',
-  'load_functions' => 'a:2:{i:1;a:1:{s:9:"node_load";a:1:{i:0;i:3;}}i:3;N;}',
-  'to_arg_functions' => '',
-  'access_callback' => '_node_revision_access',
-  'access_arguments' => 'a:2:{i:0;i:1;i:1;s:6:"update";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:28:"node_revision_revert_confirm";i:1;i:1;}',
-  'fit' => '21',
-  'number_parts' => '5',
-  'tab_parent' => '',
-  'tab_root' => 'node/%/revisions/%/revert',
-  'title' => 'Revert to earlier revision',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/node.pages.inc',
-))
-->values(array(
-  'path' => 'node/%/revisions/%/view',
-  'load_functions' => 'a:2:{i:1;a:1:{s:9:"node_load";a:1:{i:0;i:3;}}i:3;N;}',
-  'to_arg_functions' => '',
-  'access_callback' => '_node_revision_access',
-  'access_arguments' => 'a:1:{i:0;i:1;}',
-  'page_callback' => 'node_show',
-  'page_arguments' => 'a:3:{i:0;i:1;i:1;N;i:2;b:1;}',
-  'fit' => '21',
-  'number_parts' => '5',
-  'tab_parent' => '',
-  'tab_root' => 'node/%/revisions/%/view',
-  'title' => 'Revisions',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => '',
-))
-->values(array(
-  'path' => 'node/%/view',
-  'load_functions' => 'a:1:{i:1;s:9:"node_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'node_access',
-  'access_arguments' => 'a:2:{i:0;s:4:"view";i:1;i:1;}',
-  'page_callback' => 'node_page_view',
-  'page_arguments' => 'a:1:{i:0;i:1;}',
-  'fit' => '5',
-  'number_parts' => '3',
-  'tab_parent' => 'node/%',
-  'tab_root' => 'node/%',
-  'title' => 'View',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '-10',
-  'file' => '',
-))
-->values(array(
-  'path' => 'node/add',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_node_add_access',
-  'access_arguments' => 'a:0:{}',
-  'page_callback' => 'node_add_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'node/add',
-  'title' => 'Create content',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '1',
-  'file' => 'modules/node/node.pages.inc',
-))
-->values(array(
-  'path' => 'node/add/page',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'node_access',
-  'access_arguments' => 'a:2:{i:0;s:6:"create";i:1;s:4:"page";}',
-  'page_callback' => 'node_add',
-  'page_arguments' => 'a:1:{i:0;i:2;}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'node/add/page',
-  'title' => 'Page',
-  'title_callback' => 'check_plain',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => "A <em>page</em>, similar in form to a <em>story</em>, is a simple method for creating and displaying information that rarely changes, such as an \"About us\" section of a website. By default, a <em>page</em> entry does not allow visitor comments and is not featured on the site's initial home page.",
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/node.pages.inc',
-))
-->values(array(
-  'path' => 'node/add/story',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'node_access',
-  'access_arguments' => 'a:2:{i:0;s:6:"create";i:1;s:5:"story";}',
-  'page_callback' => 'node_add',
-  'page_arguments' => 'a:1:{i:0;i:2;}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'node/add/story',
-  'title' => 'Story',
-  'title_callback' => 'check_plain',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => "A <em>story</em>, similar in form to a <em>page</em>, is ideal for creating and displaying content that informs or engages website visitors. Press releases, site announcements, and informal blog-like entries may all be created with a <em>story</em> entry. By default, a <em>story</em> entry is automatically featured on the site's initial home page, and provides the ability to post comments.",
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/node.pages.inc',
-))
-->values(array(
-  'path' => 'rss.xml',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:14:"access content";}',
-  'page_callback' => 'node_feed',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '1',
-  'number_parts' => '1',
-  'tab_parent' => '',
-  'tab_root' => 'rss.xml',
-  'title' => 'RSS feed',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => '',
-))
-->values(array(
-  'path' => 'system/files',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '1',
-  'access_arguments' => 'a:0:{}',
-  'page_callback' => 'file_download',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'system/files',
-  'title' => 'File download',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => '',
-))
-->values(array(
-  'path' => 'user',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '1',
-  'access_arguments' => 'a:0:{}',
-  'page_callback' => 'user_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '1',
-  'number_parts' => '1',
-  'tab_parent' => '',
-  'tab_root' => 'user',
-  'title' => 'User account',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.pages.inc',
-))
-->values(array(
-  'path' => 'user/%',
-  'load_functions' => 'a:1:{i:1;s:22:"user_uid_optional_load";}',
-  'to_arg_functions' => 'a:1:{i:1;s:24:"user_uid_optional_to_arg";}',
-  'access_callback' => 'user_view_access',
-  'access_arguments' => 'a:1:{i:0;i:1;}',
-  'page_callback' => 'user_view',
-  'page_arguments' => 'a:1:{i:0;i:1;}',
-  'fit' => '2',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'user/%',
-  'title' => 'My account',
-  'title_callback' => 'user_page_title',
-  'title_arguments' => 'a:1:{i:0;i:1;}',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.pages.inc',
-))
-->values(array(
-  'path' => 'user/%/delete',
-  'load_functions' => 'a:1:{i:1;s:9:"user_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:16:"administer users";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:19:"user_confirm_delete";i:1;i:1;}',
-  'fit' => '5',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'user/%/delete',
-  'title' => 'Delete',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.pages.inc',
-))
-->values(array(
-  'path' => 'user/%/edit',
-  'load_functions' => 'a:1:{i:1;a:1:{s:18:"user_category_load";a:2:{i:0;s:4:"%map";i:1;s:6:"%index";}}}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_edit_access',
-  'access_arguments' => 'a:1:{i:0;i:1;}',
-  'page_callback' => 'user_edit',
-  'page_arguments' => 'a:1:{i:0;i:1;}',
-  'fit' => '5',
-  'number_parts' => '3',
-  'tab_parent' => 'user/%',
-  'tab_root' => 'user/%',
-  'title' => 'Edit',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.pages.inc',
-))
-->values(array(
-  'path' => 'user/%/edit/account',
-  'load_functions' => 'a:1:{i:1;a:1:{s:18:"user_category_load";a:2:{i:0;s:4:"%map";i:1;s:6:"%index";}}}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_edit_access',
-  'access_arguments' => 'a:1:{i:0;i:1;}',
-  'page_callback' => 'user_edit',
-  'page_arguments' => 'a:1:{i:0;i:1;}',
-  'fit' => '11',
-  'number_parts' => '4',
-  'tab_parent' => 'user/%/edit',
-  'tab_root' => 'user/%',
-  'title' => 'Account',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.pages.inc',
-))
-->values(array(
-  'path' => 'user/%/view',
-  'load_functions' => 'a:1:{i:1;s:9:"user_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_view_access',
-  'access_arguments' => 'a:1:{i:0;i:1;}',
-  'page_callback' => 'user_view',
-  'page_arguments' => 'a:1:{i:0;i:1;}',
-  'fit' => '5',
-  'number_parts' => '3',
-  'tab_parent' => 'user/%',
-  'tab_root' => 'user/%',
-  'title' => 'View',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '-10',
-  'file' => 'modules/user/user.pages.inc',
-))
-->values(array(
-  'path' => 'user/autocomplete',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:20:"access user profiles";}',
-  'page_callback' => 'user_autocomplete',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'user/autocomplete',
-  'title' => 'User autocomplete',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.pages.inc',
-))
-->values(array(
-  'path' => 'user/login',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_is_anonymous',
-  'access_arguments' => 'a:0:{}',
-  'page_callback' => 'user_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => 'user',
-  'tab_root' => 'user',
-  'title' => 'Log in',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.pages.inc',
-))
-->values(array(
-  'path' => 'user/password',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_is_anonymous',
-  'access_arguments' => 'a:0:{}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:9:"user_pass";}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => 'user',
-  'tab_root' => 'user',
-  'title' => 'Request new password',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.pages.inc',
-))
-->values(array(
-  'path' => 'user/register',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_register_access',
-  'access_arguments' => 'a:0:{}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:13:"user_register";}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => 'user',
-  'tab_root' => 'user',
-  'title' => 'Create new account',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.pages.inc',
-))
-->values(array(
-  'path' => 'user/reset/%/%/%',
-  'load_functions' => 'a:3:{i:2;N;i:3;N;i:4;N;}',
-  'to_arg_functions' => '',
-  'access_callback' => '1',
-  'access_arguments' => 'a:0:{}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:4:{i:0;s:15:"user_pass_reset";i:1;i:2;i:2;i:3;i:3;i:4;}',
-  'fit' => '24',
-  'number_parts' => '5',
-  'tab_parent' => '',
-  'tab_root' => 'user/reset/%/%/%',
-  'title' => 'Reset password',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.pages.inc',
-))
-->execute();
-
-db_create_table('node', array(
-  'fields' => array(
-    'nid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'vid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'type' => array(
-      'type' => 'varchar',
-      'length' => 32,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'language' => array(
-      'type' => 'varchar',
-      'length' => 12,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'title' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'uid' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'status' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 1,
-    ),
-    'created' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'changed' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'comment' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'promote' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'moderate' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'sticky' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'tnid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'translate' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'indexes' => array(
-    'node_changed' => array(
-      'changed',
-    ),
-    'node_created' => array(
-      'created',
-    ),
-    'node_moderate' => array(
-      'moderate',
-    ),
-    'node_promote_status' => array(
-      'promote',
-      'status',
-    ),
-    'node_status_type' => array(
-      'status',
-      'type',
-      'nid',
-    ),
-    'node_title_type' => array(
-      'title',
-      array(
-        'type',
-        4,
-      ),
-    ),
-    'node_type' => array(
-      array(
-        'type',
-        4,
-      ),
-    ),
-    'uid' => array(
-      'uid',
-    ),
-    'tnid' => array(
-      'tnid',
-    ),
-    'translate' => array(
-      'translate',
-    ),
-  ),
-  'unique keys' => array(
-    'vid' => array(
-      'vid',
-    ),
-  ),
-  'primary key' => array(
-    'nid',
-  ),
-  'module' => 'node',
-  'name' => 'node',
-));
-
-db_create_table('node_access', array(
-  'fields' => array(
-    'nid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'gid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'realm' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'grant_view' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'grant_update' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'grant_delete' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-  ),
-  'primary key' => array(
-    'nid',
-    'gid',
-    'realm',
-  ),
-  'module' => 'node',
-  'name' => 'node_access',
-));
-db_insert('node_access')->fields(array(
-  'nid',
-  'gid',
-  'realm',
-  'grant_view',
-  'grant_update',
-  'grant_delete',
-))
-->values(array(
-  'nid' => '0',
-  'gid' => '0',
-  'realm' => 'all',
-  'grant_view' => '1',
-  'grant_update' => '0',
-  'grant_delete' => '0',
-))
-->execute();
-
-db_create_table('node_counter', array(
-  'fields' => array(
-    'nid' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'totalcount' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'big',
-    ),
-    'daycount' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'medium',
-    ),
-    'timestamp' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'primary key' => array(
-    'nid',
-  ),
-  'module' => 'node',
-  'name' => 'node_counter',
-));
-
-db_create_table('node_revisions', array(
-  'fields' => array(
-    'nid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'vid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'uid' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'title' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'body' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-      'size' => 'big',
-    ),
-    'teaser' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-      'size' => 'big',
-    ),
-    'log' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-      'size' => 'big',
-    ),
-    'timestamp' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'format' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'indexes' => array(
-    'nid' => array(
-      'nid',
-    ),
-    'uid' => array(
-      'uid',
-    ),
-  ),
-  'primary key' => array(
-    'vid',
-  ),
-  'module' => 'node',
-  'name' => 'node_revisions',
-));
-
-db_create_table('node_type', array(
-  'fields' => array(
-    'type' => array(
-      'type' => 'varchar',
-      'length' => 32,
-      'not null' => TRUE,
-    ),
-    'name' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'module' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-    ),
-    'description' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-      'size' => 'medium',
-    ),
-    'help' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-      'size' => 'medium',
-    ),
-    'has_title' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'size' => 'tiny',
-    ),
-    'title_label' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'has_body' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'size' => 'tiny',
-    ),
-    'body_label' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'min_word_count' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'size' => 'small',
-    ),
-    'custom' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'modified' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'locked' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'orig_type' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-  ),
-  'primary key' => array(
-    'type',
-  ),
-  'module' => 'node',
-  'name' => 'node_type',
-));
-db_insert('node_type')->fields(array(
-  'type',
-  'name',
-  'module',
-  'description',
-  'help',
-  'has_title',
-  'title_label',
-  'has_body',
-  'body_label',
-  'min_word_count',
-  'custom',
-  'modified',
-  'locked',
-  'orig_type',
-))
-->values(array(
-  'type' => 'page',
-  'name' => 'Page',
-  'module' => 'node',
-  'description' => "A <em>page</em>, similar in form to a <em>story</em>, is a simple method for creating and displaying information that rarely changes, such as an \"About us\" section of a website. By default, a <em>page</em> entry does not allow visitor comments and is not featured on the site's initial home page.",
-  'help' => '',
-  'has_title' => '1',
-  'title_label' => 'Title',
-  'has_body' => '1',
-  'body_label' => 'Body',
-  'min_word_count' => '0',
-  'custom' => '1',
-  'modified' => '1',
-  'locked' => '0',
-  'orig_type' => 'page',
-))
-->values(array(
-  'type' => 'story',
-  'name' => 'Story',
-  'module' => 'node',
-  'description' => "A <em>story</em>, similar in form to a <em>page</em>, is ideal for creating and displaying content that informs or engages website visitors. Press releases, site announcements, and informal blog-like entries may all be created with a <em>story</em> entry. By default, a <em>story</em> entry is automatically featured on the site's initial home page, and provides the ability to post comments.",
-  'help' => '',
-  'has_title' => '1',
-  'title_label' => 'Title',
-  'has_body' => '1',
-  'body_label' => 'Body',
-  'min_word_count' => '0',
-  'custom' => '1',
-  'modified' => '1',
-  'locked' => '0',
-  'orig_type' => 'story',
-))
-->execute();
-
-db_create_table('permission', array(
-  'fields' => array(
-    'pid' => array(
-      'type' => 'serial',
-      'not null' => TRUE,
-    ),
-    'rid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'perm' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'tid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'primary key' => array(
-    'pid',
-  ),
-  'indexes' => array(
-    'rid' => array(
-      'rid',
-    ),
-  ),
-  'module' => 'user',
-  'name' => 'permission',
-));
-db_insert('permission')->fields(array(
-  'pid',
-  'rid',
-  'perm',
-  'tid',
-))
-->values(array(
-  'pid' => '1',
-  'rid' => '1',
-  'perm' => 'access content',
-  'tid' => '0',
-))
-->values(array(
-  'pid' => '2',
-  'rid' => '2',
-  'perm' => 'access comments, access content, post comments, post comments without approval',
-  'tid' => '0',
-))
-->execute();
-
-db_create_table('role', array(
-  'fields' => array(
-    'rid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'name' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-  ),
-  'unique keys' => array(
-    'name' => array(
-      'name',
-    ),
-  ),
-  'primary key' => array(
-    'rid',
-  ),
-  'module' => 'user',
-  'name' => 'role',
-));
-db_insert('role')->fields(array(
-  'rid',
-  'name',
-))
-->values(array(
-  'rid' => '1',
-  'name' => 'anonymous user',
-))
-->values(array(
-  'rid' => '2',
-  'name' => 'authenticated user',
-))
-->execute();
-
-db_create_table('semaphore', array(
-  'fields' => array(
-    'name' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'value' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'expire' => array(
-      'type' => 'float',
-      'size' => 'big',
-      'not null' => TRUE,
-    ),
-  ),
-  'indexes' => array(
-    'expire' => array(
-      'expire',
-    ),
-  ),
-  'primary key' => array(
-    'name',
-  ),
-  'module' => 'system',
-  'name' => 'semaphore',
-));
-
-db_create_table('sessions', array(
-  'fields' => array(
-    'uid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'sid' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'hostname' => array(
-      'type' => 'varchar',
-      'length' => 128,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'timestamp' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'cache' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'session' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-  ),
-  'primary key' => array(
-    'sid',
-  ),
-  'indexes' => array(
-    'timestamp' => array(
-      'timestamp',
-    ),
-    'uid' => array(
-      'uid',
-    ),
-  ),
-  'module' => 'system',
-  'name' => 'sessions',
-));
-
-db_create_table('system', array(
-  'fields' => array(
-    'filename' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'name' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'type' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'owner' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'status' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'throttle' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'bootstrap' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'schema_version' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => -1,
-      'size' => 'small',
-    ),
-    'weight' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'info' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-  ),
-  'primary key' => array(
-    'filename',
-  ),
-  'indexes' => array(
-    'modules' => array(
-      array(
-        'type',
-        12,
-      ),
-      'status',
-      'weight',
-      'filename',
-    ),
-    'bootstrap' => array(
-      array(
-        'type',
-        12,
-      ),
-      'status',
-      'bootstrap',
-      'weight',
-      'filename',
-    ),
-    'type_name' => array(
-      array(
-        'type',
-        12,
-      ),
-      'name',
-    ),
-  ),
-  'module' => 'system',
-  'name' => 'system',
-));
-db_insert('system')->fields(array(
-  'filename',
-  'name',
-  'type',
-  'owner',
-  'status',
-  'throttle',
-  'bootstrap',
-  'schema_version',
-  'weight',
-  'info',
-))
-->values(array(
-  'filename' => 'modules/aggregator/aggregator.module',
-  'name' => 'aggregator',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:10:"Aggregator";s:11:"description";s:57:"Aggregates syndicated content (RSS, RDF, and Atom feeds).";s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/block/block.module',
-  'name' => 'block',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '1',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '0',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:5:"Block";s:11:"description";s:62:"Controls the boxes that are displayed around the main content.";s:7:"package";s:15:"Core - required";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/blog/blog.module',
-  'name' => 'blog',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:4:"Blog";s:11:"description";s:69:"Enables keeping easily and regularly updated user web pages or blogs.";s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/blogapi/blogapi.module',
-  'name' => 'blogapi',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:8:"Blog API";s:11:"description";s:79:"Allows users to post content using applications that support XML-RPC blog APIs.";s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/book/book.module',
-  'name' => 'book',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:4:"Book";s:11:"description";s:63:"Allows users to structure site pages in a hierarchy or outline.";s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/color/color.module',
-  'name' => 'color',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:5:"Color";s:11:"description";s:61:"Allows the user to change the color scheme of certain themes.";s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/comment/comment.module',
-  'name' => 'comment',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:7:"Comment";s:11:"description";s:57:"Allows users to comment on and discuss published content.";s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/contact/contact.module',
-  'name' => 'contact',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:7:"Contact";s:11:"description";s:61:"Enables the use of both personal and site-wide contact forms.";s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/dblog/dblog.module',
-  'name' => 'dblog',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '1',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '6000',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:16:"Database logging";s:11:"description";s:47:"Logs and records system events to the database.";s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/filter/filter.module',
-  'name' => 'filter',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '1',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '0',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:6:"Filter";s:11:"description";s:60:"Handles the filtering of content in preparation for display.";s:7:"package";s:15:"Core - required";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/forum/forum.module',
-  'name' => 'forum',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:5:"Forum";s:11:"description";s:50:"Enables threaded discussions about general topics.";s:12:"dependencies";a:2:{i:0;s:8:"taxonomy";i:1;s:7:"comment";}s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/help/help.module',
-  'name' => 'help',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:4:"Help";s:11:"description";s:35:"Manages the display of online help.";s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/locale/locale.module',
-  'name' => 'locale',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:6:"Locale";s:11:"description";s:119:"Adds language handling functionality and enables the translation of the user interface to languages other than English.";s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/menu/menu.module',
-  'name' => 'menu',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:4:"Menu";s:11:"description";s:60:"Allows administrators to customize the site navigation menu.";s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/node/node.module',
-  'name' => 'node',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '1',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '0',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:4:"Node";s:11:"description";s:66:"Allows content to be submitted to the site and displayed on pages.";s:7:"package";s:15:"Core - required";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/openid/openid.module',
-  'name' => 'openid',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:6:"OpenID";s:11:"description";s:48:"Allows users to log into your site using OpenID.";s:7:"version";s:4:"6.17";s:7:"package";s:15:"Core - optional";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/path/path.module',
-  'name' => 'path',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:4:"Path";s:11:"description";s:28:"Allows users to rename URLs.";s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/php/php.module',
-  'name' => 'php',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:10:"PHP filter";s:11:"description";s:50:"Allows embedded PHP code/snippets to be evaluated.";s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/ping/ping.module',
-  'name' => 'ping',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:4:"Ping";s:11:"description";s:51:"Alerts other sites when your site has been updated.";s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/poll/poll.module',
-  'name' => 'poll',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:4:"Poll";s:11:"description";s:95:"Allows your site to capture votes on different topics in the form of multiple choice questions.";s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/profile/profile.module',
-  'name' => 'profile',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:7:"Profile";s:11:"description";s:36:"Supports configurable user profiles.";s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/search/search.module',
-  'name' => 'search',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:6:"Search";s:11:"description";s:36:"Enables site-wide keyword searching.";s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/statistics/statistics.module',
-  'name' => 'statistics',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:10:"Statistics";s:11:"description";s:37:"Logs access statistics for your site.";s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/syslog/syslog.module',
-  'name' => 'syslog',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:6:"Syslog";s:11:"description";s:41:"Logs and records system events to syslog.";s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/system/system.module',
-  'name' => 'system',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '1',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '6055',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:6:"System";s:11:"description";s:54:"Handles general site configuration for administrators.";s:7:"package";s:15:"Core - required";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/taxonomy/taxonomy.module',
-  'name' => 'taxonomy',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:8:"Taxonomy";s:11:"description";s:38:"Enables the categorization of content.";s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/throttle/throttle.module',
-  'name' => 'throttle',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:8:"Throttle";s:11:"description";s:66:"Handles the auto-throttling mechanism, to control site congestion.";s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/tracker/tracker.module',
-  'name' => 'tracker',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:7:"Tracker";s:11:"description";s:43:"Enables tracking of recent posts for users.";s:12:"dependencies";a:1:{i:0;s:7:"comment";}s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/translation/translation.module',
-  'name' => 'translation',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:19:"Content translation";s:11:"description";s:57:"Allows content to be translated into different languages.";s:12:"dependencies";a:1:{i:0;s:6:"locale";}s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/trigger/trigger.module',
-  'name' => 'trigger',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:7:"Trigger";s:11:"description";s:90:"Enables actions to be fired on certain system events, such as when new content is created.";s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/update/update.module',
-  'name' => 'update',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '1',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '6000',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:13:"Update status";s:11:"description";s:88:"Checks the status of available updates for Drupal and your installed modules and themes.";s:7:"version";s:4:"6.17";s:7:"package";s:15:"Core - optional";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/upload/upload.module',
-  'name' => 'upload',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:6:"Upload";s:11:"description";s:51:"Allows users to upload and attach files to content.";s:7:"package";s:15:"Core - optional";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/user/user.module',
-  'name' => 'user',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '1',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '0',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:4:"User";s:11:"description";s:47:"Manages the user registration and login system.";s:7:"package";s:15:"Core - required";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'themes/bluemarine/bluemarine.info',
-  'name' => 'bluemarine',
-  'type' => 'theme',
-  'owner' => 'themes/engines/phptemplate/phptemplate.engine',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:13:{s:4:"name";s:10:"Bluemarine";s:11:"description";s:66:"Table-based multi-column theme with a marine and ash color scheme.";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:6:"engine";s:11:"phptemplate";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:7:"regions";a:5:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";s:7:"content";s:7:"Content";s:6:"header";s:6:"Header";s:6:"footer";s:6:"Footer";}s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:27:"themes/bluemarine/style.css";}}s:7:"scripts";a:1:{s:9:"script.js";s:27:"themes/bluemarine/script.js";}s:10:"screenshot";s:32:"themes/bluemarine/screenshot.png";s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'themes/chameleon/chameleon.info',
-  'name' => 'chameleon',
-  'type' => 'theme',
-  'owner' => 'themes/chameleon/chameleon.theme',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:12:{s:4:"name";s:9:"Chameleon";s:11:"description";s:42:"Minimalist tabled theme with light colors.";s:7:"regions";a:2:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";}s:8:"features";a:4:{i:0;s:4:"logo";i:1;s:7:"favicon";i:2;s:4:"name";i:3;s:6:"slogan";}s:11:"stylesheets";a:1:{s:3:"all";a:2:{s:9:"style.css";s:26:"themes/chameleon/style.css";s:10:"common.css";s:27:"themes/chameleon/common.css";}}s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:7:"scripts";a:1:{s:9:"script.js";s:26:"themes/chameleon/script.js";}s:10:"screenshot";s:31:"themes/chameleon/screenshot.png";s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'themes/chameleon/marvin/marvin.info',
-  'name' => 'marvin',
-  'type' => 'theme',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:13:{s:4:"name";s:6:"Marvin";s:11:"description";s:31:"Boxy tabled theme in all grays.";s:7:"regions";a:2:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";}s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:10:"base theme";s:9:"chameleon";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:33:"themes/chameleon/marvin/style.css";}}s:7:"scripts";a:1:{s:9:"script.js";s:33:"themes/chameleon/marvin/script.js";}s:10:"screenshot";s:38:"themes/chameleon/marvin/screenshot.png";s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'themes/garland/garland.info',
-  'name' => 'garland',
-  'type' => 'theme',
-  'owner' => 'themes/engines/phptemplate/phptemplate.engine',
-  'status' => '1',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:13:{s:4:"name";s:7:"Garland";s:11:"description";s:66:"Tableless, recolorable, multi-column, fluid width theme (default).";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:6:"engine";s:11:"phptemplate";s:11:"stylesheets";a:2:{s:3:"all";a:1:{s:9:"style.css";s:24:"themes/garland/style.css";}s:5:"print";a:1:{s:9:"print.css";s:24:"themes/garland/print.css";}}s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:7:"regions";a:5:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";s:7:"content";s:7:"Content";s:6:"header";s:6:"Header";s:6:"footer";s:6:"Footer";}s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:7:"scripts";a:1:{s:9:"script.js";s:24:"themes/garland/script.js";}s:10:"screenshot";s:29:"themes/garland/screenshot.png";s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'themes/garland/minnelli/minnelli.info',
-  'name' => 'minnelli',
-  'type' => 'theme',
-  'owner' => 'themes/engines/phptemplate/phptemplate.engine',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:14:{s:4:"name";s:8:"Minnelli";s:11:"description";s:56:"Tableless, recolorable, multi-column, fixed width theme.";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:10:"base theme";s:7:"garland";s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:12:"minnelli.css";s:36:"themes/garland/minnelli/minnelli.css";}}s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:7:"regions";a:5:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";s:7:"content";s:7:"Content";s:6:"header";s:6:"Header";s:6:"footer";s:6:"Footer";}s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:7:"scripts";a:1:{s:9:"script.js";s:33:"themes/garland/minnelli/script.js";}s:10:"screenshot";s:38:"themes/garland/minnelli/screenshot.png";s:3:"php";s:5:"4.3.5";s:6:"engine";s:11:"phptemplate";}',
-))
-->values(array(
-  'filename' => 'themes/pushbutton/pushbutton.info',
-  'name' => 'pushbutton',
-  'type' => 'theme',
-  'owner' => 'themes/engines/phptemplate/phptemplate.engine',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:13:{s:4:"name";s:10:"Pushbutton";s:11:"description";s:52:"Tabled, multi-column theme in blue and orange tones.";s:7:"version";s:4:"6.17";s:4:"core";s:3:"6.x";s:6:"engine";s:11:"phptemplate";s:7:"project";s:6:"drupal";s:9:"datestamp";s:10:"1275505216";s:7:"regions";a:5:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";s:7:"content";s:7:"Content";s:6:"header";s:6:"Header";s:6:"footer";s:6:"Footer";}s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:27:"themes/pushbutton/style.css";}}s:7:"scripts";a:1:{s:9:"script.js";s:27:"themes/pushbutton/script.js";}s:10:"screenshot";s:32:"themes/pushbutton/screenshot.png";s:3:"php";s:5:"4.3.5";}',
-))
-->execute();
-
-db_create_table('url_alias', array(
-  'fields' => array(
-    'pid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'src' => array(
-      'type' => 'varchar',
-      'length' => 128,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'dst' => array(
-      'type' => 'varchar',
-      'length' => 128,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'language' => array(
-      'type' => 'varchar',
-      'length' => 12,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-  ),
-  'unique keys' => array(
-    'dst_language_pid' => array(
-      'dst',
-      'language',
-      'pid',
-    ),
-  ),
-  'primary key' => array(
-    'pid',
-  ),
-  'indexes' => array(
-    'src_language_pid' => array(
-      'src',
-      'language',
-      'pid',
-    ),
-  ),
-  'module' => 'system',
-  'name' => 'url_alias',
-));
-
-db_create_table('users', array(
-  'fields' => array(
-    'uid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'name' => array(
-      'type' => 'varchar',
-      'length' => 60,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'pass' => array(
-      'type' => 'varchar',
-      'length' => 32,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'mail' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => FALSE,
-      'default' => '',
-    ),
-    'mode' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'sort' => array(
-      'type' => 'int',
-      'not null' => FALSE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'threshold' => array(
-      'type' => 'int',
-      'not null' => FALSE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'theme' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'signature' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'signature_format' => array(
-      'type' => 'int',
-      'size' => 'small',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'created' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'access' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'login' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'status' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'timezone' => array(
-      'type' => 'varchar',
-      'length' => 8,
-      'not null' => FALSE,
-    ),
-    'language' => array(
-      'type' => 'varchar',
-      'length' => 12,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'picture' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'init' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => FALSE,
-      'default' => '',
-    ),
-    'data' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-  ),
-  'indexes' => array(
-    'access' => array(
-      'access',
-    ),
-    'created' => array(
-      'created',
-    ),
-    'mail' => array(
-      'mail',
-    ),
-  ),
-  'unique keys' => array(
-    'name' => array(
-      'name',
-    ),
-  ),
-  'primary key' => array(
-    'uid',
-  ),
-  'module' => 'user',
-  'name' => 'users',
-));
-db_insert('users')->fields(array(
-  'uid',
-  'name',
-  'pass',
-  'mail',
-  'mode',
-  'sort',
-  'threshold',
-  'theme',
-  'signature',
-  'signature_format',
-  'created',
-  'access',
-  'login',
-  'status',
-  'timezone',
-  'language',
-  'picture',
-  'init',
-  'data',
-))
-->values(array(
-  'uid' => 1,
-  'name' => '',
-  'pass' => '',
-  'mail' => '',
-  'mode' => '0',
-  'sort' => '0',
-  'threshold' => '0',
-  'theme' => '',
-  'signature' => '',
-  'signature_format' => '0',
-  'created' => '0',
-  'access' => '0',
-  'login' => '0',
-  'status' => '0',
-  'timezone' => '-21600',
-  'language' => '',
-  'picture' => '',
-  'init' => '',
-  'data' => NULL,
-))
-->values(array(
-  'uid' => 2,
-  'name' => 'admin',
-  'pass' => '21232f297a57a5a743894a0e4a801fc3',
-  'mail' => 'admin@example.com',
-  'mode' => '0',
-  'sort' => '0',
-  'threshold' => '0',
-  'theme' => '',
-  'signature' => '',
-  'signature_format' => '0',
-  'created' => '1277671599',
-  'access' => '1277671612',
-  'login' => '1277671612',
-  'status' => '1',
-  'timezone' => '-21600',
-  'language' => '',
-  'picture' => '',
-  'init' => 'admin@example.com',
-  'data' => 'a:0:{}',
-))
-->execute();
-db_query('UPDATE {users} SET uid = uid - 1');
-
-db_create_table('users_roles', array(
-  'fields' => array(
-    'uid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'rid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'primary key' => array(
-    'uid',
-    'rid',
-  ),
-  'indexes' => array(
-    'rid' => array(
-      'rid',
-    ),
-  ),
-  'module' => 'user',
-  'name' => 'users_roles',
-));
-
-db_create_table('variable', array(
-  'fields' => array(
-    'name' => array(
-      'type' => 'varchar',
-      'length' => 128,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'value' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-      'size' => 'big',
-    ),
-  ),
-  'primary key' => array(
-    'name',
-  ),
-  'module' => 'system',
-  'name' => 'variable',
-));
-db_insert('variable')->fields(array(
-  'name',
-  'value',
-))
-->values(array(
-  'name' => 'clean_url',
-  'value' => 's:1:"1";',
-))
-->values(array(
-  'name' => 'comment_page',
-  'value' => 's:21:"COMMENT_NODE_DISABLED";',
-))
-->values(array(
-  'name' => 'css_js_query_string',
-  'value' => 's:20:"D0000000000000000000";',
-))
-->values(array(
-  'name' => 'date_default_timezone',
-  'value' => 's:1:"0";',
-))
-->values(array(
-  'name' => 'drupal_private_key',
-  'value' => 's:64:"3848c2187413fa0ce132f8e222fdb6893b386ed133e8cf602bd3e40dc9dc12db";',
-))
-->values(array(
-  'name' => 'filter_html_1',
-  'value' => 'i:1;',
-))
-->values(array(
-  'name' => 'install_profile',
-  'value' => 's:7:"default";',
-))
-->values(array(
-  'name' => 'install_task',
-  'value' => 's:4:"done";',
-))
-->values(array(
-  'name' => 'install_time',
-  'value' => 'i:1277671612;',
-))
-->values(array(
-  'name' => 'menu_expanded',
-  'value' => 'a:0:{}',
-))
-->values(array(
-  'name' => 'menu_masks',
-  'value' => 'a:13:{i:0;i:31;i:1;i:30;i:2;i:29;i:3;i:24;i:4;i:21;i:5;i:15;i:6;i:14;i:7;i:11;i:8;i:7;i:9;i:5;i:10;i:3;i:11;i:2;i:12;i:1;}',
-))
-->values(array(
-  'name' => 'node_options_forum',
-  'value' => 'a:1:{i:0;s:6:"status";}',
-))
-->values(array(
-  'name' => 'node_options_page',
-  'value' => 'a:1:{i:0;s:6:"status";}',
-))
-->values(array(
-  'name' => 'site_mail',
-  'value' => 's:17:"admin@example.com";',
-))
-->values(array(
-  'name' => 'site_name',
-  'value' => 's:8:"Drupal 6";',
-))
-->values(array(
-  'name' => 'theme_default',
-  'value' => 's:7:"garland";',
-))
-->values(array(
-  'name' => 'theme_settings',
-  'value' => 'a:1:{s:21:"toggle_node_info_page";b:0;}',
-))
-->values(array(
-  'name' => 'user_email_verification',
-  'value' => 'b:1;',
-))
-->execute();
-
-db_create_table('watchdog', array(
-  'fields' => array(
-    'wid' => array(
-      'type' => 'serial',
-      'not null' => TRUE,
-    ),
-    'uid' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'type' => array(
-      'type' => 'varchar',
-      'length' => 16,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'message' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-      'size' => 'big',
-    ),
-    'variables' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-      'size' => 'big',
-    ),
-    'severity' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'link' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'location' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-    ),
-    'referer' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-    'hostname' => array(
-      'type' => 'varchar',
-      'length' => 128,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'timestamp' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'primary key' => array(
-    'wid',
-  ),
-  'indexes' => array(
-    'type' => array(
-      'type',
-    ),
-  ),
-  'module' => 'dblog',
-  'name' => 'watchdog',
-));
-
diff --git a/modules/simpletest/tests/upgrade/drupal-6.comments.database.php b/modules/simpletest/tests/upgrade/drupal-6.comments.database.php
deleted file mode 100644
index 7da2504..0000000
--- a/modules/simpletest/tests/upgrade/drupal-6.comments.database.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-db_update('node')->fields(array(
-    'comment' => 2
-  ))
-  ->condition('nid', 1)
-  ->execute();
-
-db_insert('comments')->fields(array(
-  'cid',
-  'pid',
-  'nid',
-  'uid',
-  'subject',
-  'comment',
-  'hostname',
-  'timestamp',
-  'status',
-  'format',
-  'thread',
-  'name',
-  'mail',
-  'homepage',
-))
-->values(array(
-  'cid' => 1,
-  'pid' => 0,
-  'nid' => 1,
-  'uid' => 3,
-  'subject' => 'Comment title 1',
-  'comment' => 'Comment body 1 - Comment body 1 - Comment body 1 - Comment body 1 - Comment body 1 - Comment body 1 - Comment body 1 - Comment body 1',
-  'hostname' => '127.0.0.1',
-  'timestamp' => 1008617630,
-  'status' => 0,
-  'format' => 1,
-  'thread' => '01/',
-  'name' => NULL,
-  'mail' => NULL,
-  'homepage' => '',
-))
-->execute();
diff --git a/modules/simpletest/tests/upgrade/drupal-6.duplicate-permission.database.php b/modules/simpletest/tests/upgrade/drupal-6.duplicate-permission.database.php
deleted file mode 100644
index 5da5e84..0000000
--- a/modules/simpletest/tests/upgrade/drupal-6.duplicate-permission.database.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-
-// Simulate duplicated permission condition.
-db_update('permission')->fields(array(
-  'perm' => 'access content, access content',
-))
-->condition('pid', 1)
-->execute();
diff --git a/modules/simpletest/tests/upgrade/drupal-6.filled.database.php b/modules/simpletest/tests/upgrade/drupal-6.filled.database.php
deleted file mode 100644
index a916281..0000000
--- a/modules/simpletest/tests/upgrade/drupal-6.filled.database.php
+++ /dev/null
@@ -1,20384 +0,0 @@
-<?php
-
-/**
- * @file
- * Filled installation of Drupal 6.17, for test purposes.
- *
- * This file was generated by the dump-database-d6.sh tool, from an
- * installation of Drupal 6, filled with data using the generate-d6-content.sh
- * tool. It has the following modules installed:
- *  - block
- *  - color
- *  - comment
- *  - dblog
- *  - filter
- *  - help
- *  - menu
- *  - node
- *  - path
- *  - poll
- *  - system
- *  - taxonomy
- *  - update
- *  - user
- */
-
-db_create_table('access', array(
-  'fields' => array(
-    'aid' => array(
-      'type' => 'serial',
-      'not null' => TRUE,
-    ),
-    'mask' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'type' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'status' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-  ),
-  'primary key' => array(
-    'aid',
-  ),
-  'module' => 'user',
-  'name' => 'access',
-));
-
-db_create_table('actions', array(
-  'fields' => array(
-    'aid' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '0',
-    ),
-    'type' => array(
-      'type' => 'varchar',
-      'length' => 32,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'callback' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'parameters' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-      'size' => 'big',
-    ),
-    'description' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '0',
-    ),
-  ),
-  'primary key' => array(
-    'aid',
-  ),
-  'module' => 'system',
-  'name' => 'actions',
-));
-db_insert('actions')->fields(array(
-  'aid',
-  'type',
-  'callback',
-  'parameters',
-  'description',
-))
-->values(array(
-  'aid' => 'comment_publish_action',
-  'type' => 'comment',
-  'callback' => 'comment_publish_action',
-  'parameters' => '',
-  'description' => 'Publish comment',
-))
-->values(array(
-  'aid' => 'comment_unpublish_action',
-  'type' => 'comment',
-  'callback' => 'comment_unpublish_action',
-  'parameters' => '',
-  'description' => 'Unpublish comment',
-))
-->values(array(
-  'aid' => 'node_make_sticky_action',
-  'type' => 'node',
-  'callback' => 'node_make_sticky_action',
-  'parameters' => '',
-  'description' => 'Make post sticky',
-))
-->values(array(
-  'aid' => 'node_make_unsticky_action',
-  'type' => 'node',
-  'callback' => 'node_make_unsticky_action',
-  'parameters' => '',
-  'description' => 'Make post unsticky',
-))
-->values(array(
-  'aid' => 'node_promote_action',
-  'type' => 'node',
-  'callback' => 'node_promote_action',
-  'parameters' => '',
-  'description' => 'Promote post to front page',
-))
-->values(array(
-  'aid' => 'node_publish_action',
-  'type' => 'node',
-  'callback' => 'node_publish_action',
-  'parameters' => '',
-  'description' => 'Publish post',
-))
-->values(array(
-  'aid' => 'node_save_action',
-  'type' => 'node',
-  'callback' => 'node_save_action',
-  'parameters' => '',
-  'description' => 'Save post',
-))
-->values(array(
-  'aid' => 'node_unpromote_action',
-  'type' => 'node',
-  'callback' => 'node_unpromote_action',
-  'parameters' => '',
-  'description' => 'Remove post from front page',
-))
-->values(array(
-  'aid' => 'node_unpublish_action',
-  'type' => 'node',
-  'callback' => 'node_unpublish_action',
-  'parameters' => '',
-  'description' => 'Unpublish post',
-))
-->values(array(
-  'aid' => 'user_block_ip_action',
-  'type' => 'user',
-  'callback' => 'user_block_ip_action',
-  'parameters' => '',
-  'description' => 'Ban IP address of current user',
-))
-->values(array(
-  'aid' => 'user_block_user_action',
-  'type' => 'user',
-  'callback' => 'user_block_user_action',
-  'parameters' => '',
-  'description' => 'Block current user',
-))
-->execute();
-
-db_create_table('actions_aid', array(
-  'fields' => array(
-    'aid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-  ),
-  'primary key' => array(
-    'aid',
-  ),
-  'module' => 'system',
-  'name' => 'actions_aid',
-));
-
-db_create_table('authmap', array(
-  'fields' => array(
-    'aid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'uid' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'authname' => array(
-      'type' => 'varchar',
-      'length' => 128,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'module' => array(
-      'type' => 'varchar',
-      'length' => 128,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-  ),
-  'unique keys' => array(
-    'authname' => array(
-      'authname',
-    ),
-  ),
-  'primary key' => array(
-    'aid',
-  ),
-  'module' => 'user',
-  'name' => 'authmap',
-));
-
-db_create_table('batch', array(
-  'fields' => array(
-    'bid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'token' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => TRUE,
-    ),
-    'timestamp' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-    ),
-    'batch' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-  ),
-  'primary key' => array(
-    'bid',
-  ),
-  'indexes' => array(
-    'token' => array(
-      'token',
-    ),
-  ),
-  'module' => 'system',
-  'name' => 'batch',
-));
-
-db_create_table('blocks', array(
-  'fields' => array(
-    'bid' => array(
-      'type' => 'serial',
-      'not null' => TRUE,
-    ),
-    'module' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'delta' => array(
-      'type' => 'varchar',
-      'length' => 32,
-      'not null' => TRUE,
-      'default' => '0',
-    ),
-    'theme' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'status' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'weight' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'region' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'custom' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'throttle' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'visibility' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'pages' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-    ),
-    'title' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'cache' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 1,
-      'size' => 'tiny',
-    ),
-  ),
-  'primary key' => array(
-    'bid',
-  ),
-  'unique keys' => array(
-    'tmd' => array(
-      'theme',
-      'module',
-      'delta',
-    ),
-  ),
-  'indexes' => array(
-    'list' => array(
-      'theme',
-      'status',
-      'region',
-      'weight',
-      'module',
-    ),
-  ),
-  'module' => 'block',
-  'name' => 'blocks',
-));
-db_insert('blocks')->fields(array(
-  'bid',
-  'module',
-  'delta',
-  'theme',
-  'status',
-  'weight',
-  'region',
-  'custom',
-  'throttle',
-  'visibility',
-  'pages',
-  'title',
-  'cache',
-))
-->values(array(
-  'bid' => '1',
-  'module' => 'user',
-  'delta' => '0',
-  'theme' => 'garland',
-  'status' => '1',
-  'weight' => '0',
-  'region' => 'left',
-  'custom' => '0',
-  'throttle' => '0',
-  'visibility' => '0',
-  'pages' => '',
-  'title' => '',
-  'cache' => '-1',
-))
-->values(array(
-  'bid' => '2',
-  'module' => 'user',
-  'delta' => '1',
-  'theme' => 'garland',
-  'status' => '1',
-  'weight' => '0',
-  'region' => 'left',
-  'custom' => '0',
-  'throttle' => '0',
-  'visibility' => '0',
-  'pages' => '',
-  'title' => '',
-  'cache' => '-1',
-))
-->values(array(
-  'bid' => '3',
-  'module' => 'system',
-  'delta' => '0',
-  'theme' => 'garland',
-  'status' => '1',
-  'weight' => '10',
-  'region' => 'footer',
-  'custom' => '0',
-  'throttle' => '0',
-  'visibility' => '0',
-  'pages' => '',
-  'title' => '',
-  'cache' => '-1',
-))
-->execute();
-
-db_create_table('blocks_roles', array(
-  'fields' => array(
-    'module' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => TRUE,
-    ),
-    'delta' => array(
-      'type' => 'varchar',
-      'length' => 32,
-      'not null' => TRUE,
-    ),
-    'rid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-  ),
-  'primary key' => array(
-    'module',
-    'delta',
-    'rid',
-  ),
-  'indexes' => array(
-    'rid' => array(
-      'rid',
-    ),
-  ),
-  'module' => 'block',
-  'name' => 'blocks_roles',
-));
-
-db_create_table('boxes', array(
-  'fields' => array(
-    'bid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'body' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'info' => array(
-      'type' => 'varchar',
-      'length' => 128,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'format' => array(
-      'type' => 'int',
-      'size' => 'small',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'unique keys' => array(
-    'info' => array(
-      'info',
-    ),
-  ),
-  'primary key' => array(
-    'bid',
-  ),
-  'module' => 'block',
-  'name' => 'boxes',
-));
-
-db_create_table('cache', array(
-  'fields' => array(
-    'cid' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'data' => array(
-      'type' => 'blob',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'expire' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'created' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'headers' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-    'serialized' => array(
-      'type' => 'int',
-      'size' => 'small',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'indexes' => array(
-    'expire' => array(
-      'expire',
-    ),
-  ),
-  'primary key' => array(
-    'cid',
-  ),
-  'module' => 'system',
-  'name' => 'cache',
-));
-
-db_create_table('cache_block', array(
-  'fields' => array(
-    'cid' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'data' => array(
-      'type' => 'blob',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'expire' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'created' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'headers' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-    'serialized' => array(
-      'type' => 'int',
-      'size' => 'small',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'indexes' => array(
-    'expire' => array(
-      'expire',
-    ),
-  ),
-  'primary key' => array(
-    'cid',
-  ),
-  'module' => 'block',
-  'name' => 'cache_block',
-));
-
-db_create_table('cache_filter', array(
-  'fields' => array(
-    'cid' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'data' => array(
-      'type' => 'blob',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'expire' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'created' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'headers' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-    'serialized' => array(
-      'type' => 'int',
-      'size' => 'small',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'indexes' => array(
-    'expire' => array(
-      'expire',
-    ),
-  ),
-  'primary key' => array(
-    'cid',
-  ),
-  'module' => 'filter',
-  'name' => 'cache_filter',
-));
-
-db_create_table('cache_form', array(
-  'fields' => array(
-    'cid' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'data' => array(
-      'type' => 'blob',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'expire' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'created' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'headers' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-    'serialized' => array(
-      'type' => 'int',
-      'size' => 'small',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'indexes' => array(
-    'expire' => array(
-      'expire',
-    ),
-  ),
-  'primary key' => array(
-    'cid',
-  ),
-  'module' => 'system',
-  'name' => 'cache_form',
-));
-
-db_create_table('cache_menu', array(
-  'fields' => array(
-    'cid' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'data' => array(
-      'type' => 'blob',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'expire' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'created' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'headers' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-    'serialized' => array(
-      'type' => 'int',
-      'size' => 'small',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'indexes' => array(
-    'expire' => array(
-      'expire',
-    ),
-  ),
-  'primary key' => array(
-    'cid',
-  ),
-  'module' => 'system',
-  'name' => 'cache_menu',
-));
-
-db_create_table('cache_page', array(
-  'fields' => array(
-    'cid' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'data' => array(
-      'type' => 'blob',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'expire' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'created' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'headers' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-    'serialized' => array(
-      'type' => 'int',
-      'size' => 'small',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'indexes' => array(
-    'expire' => array(
-      'expire',
-    ),
-  ),
-  'primary key' => array(
-    'cid',
-  ),
-  'module' => 'system',
-  'name' => 'cache_page',
-));
-
-db_create_table('cache_update', array(
-  'fields' => array(
-    'cid' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'data' => array(
-      'type' => 'blob',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'expire' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'created' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'headers' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-    'serialized' => array(
-      'type' => 'int',
-      'size' => 'small',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'indexes' => array(
-    'expire' => array(
-      'expire',
-    ),
-  ),
-  'primary key' => array(
-    'cid',
-  ),
-  'module' => 'update',
-  'name' => 'cache_update',
-));
-
-db_create_table('comments', array(
-  'fields' => array(
-    'cid' => array(
-      'type' => 'serial',
-      'not null' => TRUE,
-    ),
-    'pid' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'nid' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'uid' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'subject' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'comment' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-      'size' => 'big',
-    ),
-    'hostname' => array(
-      'type' => 'varchar',
-      'length' => 128,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'timestamp' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'status' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'format' => array(
-      'type' => 'int',
-      'size' => 'small',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'thread' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-    ),
-    'name' => array(
-      'type' => 'varchar',
-      'length' => 60,
-      'not null' => FALSE,
-    ),
-    'mail' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => FALSE,
-    ),
-    'homepage' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => FALSE,
-    ),
-  ),
-  'indexes' => array(
-    'pid' => array(
-      'pid',
-    ),
-    'nid' => array(
-      'nid',
-    ),
-    'status' => array(
-      'status',
-    ),
-  ),
-  'primary key' => array(
-    'cid',
-  ),
-  'module' => 'comment',
-  'name' => 'comments',
-));
-
-db_create_table('files', array(
-  'fields' => array(
-    'fid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'uid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'filename' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'filepath' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'filemime' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'filesize' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'status' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'timestamp' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'indexes' => array(
-    'uid' => array(
-      'uid',
-    ),
-    'status' => array(
-      'status',
-    ),
-    'timestamp' => array(
-      'timestamp',
-    ),
-  ),
-  'primary key' => array(
-    'fid',
-  ),
-  'module' => 'system',
-  'name' => 'files',
-));
-
-db_create_table('filter_formats', array(
-  'fields' => array(
-    'format' => array(
-      'type' => 'serial',
-      'not null' => TRUE,
-    ),
-    'name' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'roles' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'cache' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-  ),
-  'primary key' => array(
-    'format',
-  ),
-  'unique keys' => array(
-    'name' => array(
-      'name',
-    ),
-  ),
-  'module' => 'filter',
-  'name' => 'filter_formats',
-));
-db_insert('filter_formats')->fields(array(
-  'format',
-  'name',
-  'roles',
-  'cache',
-))
-->values(array(
-  'format' => '1',
-  'name' => 'Filtered HTML',
-  'roles' => ',1,2,',
-  'cache' => '1',
-))
-->values(array(
-  'format' => '2',
-  'name' => 'Full HTML',
-  'roles' => '',
-  'cache' => '1',
-))
-->values(array(
-  'format' => '3',
-  'name' => 'Escape HTML Filter',
-  'roles' => '',
-  'cache' => '1',
-))
-->execute();
-
-db_create_table('filters', array(
-  'fields' => array(
-    'fid' => array(
-      'type' => 'serial',
-      'not null' => TRUE,
-    ),
-    'format' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'module' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'delta' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'weight' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-  ),
-  'primary key' => array(
-    'fid',
-  ),
-  'unique keys' => array(
-    'fmd' => array(
-      'format',
-      'module',
-      'delta',
-    ),
-  ),
-  'indexes' => array(
-    'list' => array(
-      'format',
-      'weight',
-      'module',
-      'delta',
-    ),
-  ),
-  'module' => 'filter',
-  'name' => 'filters',
-));
-db_insert('filters')->fields(array(
-  'fid',
-  'format',
-  'module',
-  'delta',
-  'weight',
-))
-->values(array(
-  'fid' => '1',
-  'format' => '1',
-  'module' => 'filter',
-  'delta' => '2',
-  'weight' => '0',
-))
-->values(array(
-  'fid' => '2',
-  'format' => '1',
-  'module' => 'filter',
-  'delta' => '0',
-  'weight' => '1',
-))
-->values(array(
-  'fid' => '3',
-  'format' => '1',
-  'module' => 'filter',
-  'delta' => '1',
-  'weight' => '2',
-))
-->values(array(
-  'fid' => '4',
-  'format' => '1',
-  'module' => 'filter',
-  'delta' => '3',
-  'weight' => '10',
-))
-->values(array(
-  'fid' => '5',
-  'format' => '2',
-  'module' => 'filter',
-  'delta' => '2',
-  'weight' => '0',
-))
-->values(array(
-  'fid' => '6',
-  'format' => '2',
-  'module' => 'filter',
-  'delta' => '1',
-  'weight' => '1',
-))
-->values(array(
-  'fid' => '7',
-  'format' => '2',
-  'module' => 'filter',
-  'delta' => '3',
-  'weight' => '10',
-))
-->execute();
-
-db_create_table('flood', array(
-  'fields' => array(
-    'fid' => array(
-      'type' => 'serial',
-      'not null' => TRUE,
-    ),
-    'event' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'hostname' => array(
-      'type' => 'varchar',
-      'length' => 128,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'timestamp' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'primary key' => array(
-    'fid',
-  ),
-  'indexes' => array(
-    'allow' => array(
-      'event',
-      'hostname',
-      'timestamp',
-    ),
-  ),
-  'module' => 'system',
-  'name' => 'flood',
-));
-
-db_create_table('history', array(
-  'fields' => array(
-    'uid' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'nid' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'timestamp' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'primary key' => array(
-    'uid',
-    'nid',
-  ),
-  'indexes' => array(
-    'nid' => array(
-      'nid',
-    ),
-  ),
-  'module' => 'system',
-  'name' => 'history',
-));
-
-db_create_table('menu_custom', array(
-  'fields' => array(
-    'menu_name' => array(
-      'type' => 'varchar',
-      'length' => 32,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'title' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'description' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-  ),
-  'primary key' => array(
-    'menu_name',
-  ),
-  'module' => 'menu',
-  'name' => 'menu_custom',
-));
-db_insert('menu_custom')->fields(array(
-  'menu_name',
-  'title',
-  'description',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'title' => 'Navigation',
-  'description' => 'The navigation menu is provided by Drupal and is the main interactive menu for any site. It is usually the only menu that contains personalized links for authenticated users, and is often not even visible to anonymous users.',
-))
-->values(array(
-  'menu_name' => 'primary-links',
-  'title' => 'Primary links',
-  'description' => 'Primary links are often used at the theme layer to show the major sections of a site. A typical representation for primary links would be tabs along the top.',
-))
-->values(array(
-  'menu_name' => 'secondary-links',
-  'title' => 'Secondary links',
-  'description' => 'Secondary links are often used for pages like legal notices, contact details, and other secondary navigation items that play a lesser role than primary links',
-))
-->execute();
-
-db_create_table('menu_links', array(
-  'fields' => array(
-    'menu_name' => array(
-      'type' => 'varchar',
-      'length' => 32,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'mlid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'plid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'link_path' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'router_path' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'link_title' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'options' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-    'module' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => 'system',
-    ),
-    'hidden' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'small',
-    ),
-    'external' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'small',
-    ),
-    'has_children' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'small',
-    ),
-    'expanded' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'small',
-    ),
-    'weight' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'depth' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'small',
-    ),
-    'customized' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'small',
-    ),
-    'p1' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'p2' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'p3' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'p4' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'p5' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'p6' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'p7' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'p8' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'p9' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'updated' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'small',
-    ),
-  ),
-  'indexes' => array(
-    'path_menu' => array(
-      array(
-        'link_path',
-        128,
-      ),
-      'menu_name',
-    ),
-    'menu_plid_expand_child' => array(
-      'menu_name',
-      'plid',
-      'expanded',
-      'has_children',
-    ),
-    'menu_parents' => array(
-      'menu_name',
-      'p1',
-      'p2',
-      'p3',
-      'p4',
-      'p5',
-      'p6',
-      'p7',
-      'p8',
-      'p9',
-    ),
-    'router_path' => array(
-      array(
-        'router_path',
-        128,
-      ),
-    ),
-  ),
-  'primary key' => array(
-    'mlid',
-  ),
-  'module' => 'system',
-  'name' => 'menu_links',
-));
-db_insert('menu_links')->fields(array(
-  'menu_name',
-  'mlid',
-  'plid',
-  'link_path',
-  'router_path',
-  'link_title',
-  'options',
-  'module',
-  'hidden',
-  'external',
-  'has_children',
-  'expanded',
-  'weight',
-  'depth',
-  'customized',
-  'p1',
-  'p2',
-  'p3',
-  'p4',
-  'p5',
-  'p6',
-  'p7',
-  'p8',
-  'p9',
-  'updated',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '1',
-  'plid' => '0',
-  'link_path' => 'batch',
-  'router_path' => 'batch',
-  'link_title' => '',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '1',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '2',
-  'plid' => '0',
-  'link_path' => 'admin',
-  'router_path' => 'admin',
-  'link_title' => 'Administer',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '1',
-  'expanded' => '0',
-  'weight' => '9',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '3',
-  'plid' => '0',
-  'link_path' => 'node',
-  'router_path' => 'node',
-  'link_title' => 'Content',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '3',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '4',
-  'plid' => '0',
-  'link_path' => 'logout',
-  'router_path' => 'logout',
-  'link_title' => 'Log out',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '10',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '4',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '5',
-  'plid' => '0',
-  'link_path' => 'rss.xml',
-  'router_path' => 'rss.xml',
-  'link_title' => 'RSS feed',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '5',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '6',
-  'plid' => '0',
-  'link_path' => 'user',
-  'router_path' => 'user',
-  'link_title' => 'User account',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '6',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '7',
-  'plid' => '0',
-  'link_path' => 'node/%',
-  'router_path' => 'node/%',
-  'link_title' => '',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '7',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '8',
-  'plid' => '2',
-  'link_path' => 'admin/compact',
-  'router_path' => 'admin/compact',
-  'link_title' => 'Compact mode',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '2',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '8',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '9',
-  'plid' => '0',
-  'link_path' => 'filter/tips',
-  'router_path' => 'filter/tips',
-  'link_title' => 'Compose tips',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '9',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '10',
-  'plid' => '2',
-  'link_path' => 'admin/content',
-  'router_path' => 'admin/content',
-  'link_title' => 'Content management',
-  'options' => "a:1:{s:10:\"attributes\";a:1:{s:5:\"title\";s:27:\"Manage your site's content.\";}}",
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '1',
-  'expanded' => '0',
-  'weight' => '-10',
-  'depth' => '2',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '10',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '11',
-  'plid' => '0',
-  'link_path' => 'node/add',
-  'router_path' => 'node/add',
-  'link_title' => 'Create content',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '1',
-  'expanded' => '0',
-  'weight' => '1',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '11',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '12',
-  'plid' => '0',
-  'link_path' => 'comment/delete',
-  'router_path' => 'comment/delete',
-  'link_title' => 'Delete comment',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '12',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '13',
-  'plid' => '0',
-  'link_path' => 'comment/edit',
-  'router_path' => 'comment/edit',
-  'link_title' => 'Edit comment',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '13',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '14',
-  'plid' => '0',
-  'link_path' => 'system/files',
-  'router_path' => 'system/files',
-  'link_title' => 'File download',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '14',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '15',
-  'plid' => '2',
-  'link_path' => 'admin/reports',
-  'router_path' => 'admin/reports',
-  'link_title' => 'Reports',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:59:"View reports from system logs and other status information.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '1',
-  'expanded' => '0',
-  'weight' => '5',
-  'depth' => '2',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '16',
-  'plid' => '2',
-  'link_path' => 'admin/build',
-  'router_path' => 'admin/build',
-  'link_title' => 'Site building',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:38:"Control how your site looks and feels.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '1',
-  'expanded' => '0',
-  'weight' => '-10',
-  'depth' => '2',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '16',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '17',
-  'plid' => '2',
-  'link_path' => 'admin/settings',
-  'router_path' => 'admin/settings',
-  'link_title' => 'Site configuration',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:40:"Adjust basic site configuration options.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '1',
-  'expanded' => '0',
-  'weight' => '-5',
-  'depth' => '2',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '18',
-  'plid' => '0',
-  'link_path' => 'user/autocomplete',
-  'router_path' => 'user/autocomplete',
-  'link_title' => 'User autocomplete',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '18',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '19',
-  'plid' => '2',
-  'link_path' => 'admin/user',
-  'router_path' => 'admin/user',
-  'link_title' => 'User management',
-  'options' => "a:1:{s:10:\"attributes\";a:1:{s:5:\"title\";s:61:\"Manage your site's users, groups and access to site features.\";}}",
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '1',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '2',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '19',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '20',
-  'plid' => '0',
-  'link_path' => 'user/%',
-  'router_path' => 'user/%',
-  'link_title' => 'My account',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '20',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '21',
-  'plid' => '19',
-  'link_path' => 'admin/user/rules',
-  'router_path' => 'admin/user/rules',
-  'link_title' => 'Access rules',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:80:"List and create rules to disallow usernames, e-mail addresses, and IP addresses.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '19',
-  'p3' => '21',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '22',
-  'plid' => '17',
-  'link_path' => 'admin/settings/actions',
-  'router_path' => 'admin/settings/actions',
-  'link_title' => 'Actions',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:41:"Manage the actions defined for your site.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '22',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '23',
-  'plid' => '17',
-  'link_path' => 'admin/settings/admin',
-  'router_path' => 'admin/settings/admin',
-  'link_title' => 'Administration theme',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:55:"Settings for how your administrative pages should look.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '23',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '24',
-  'plid' => '16',
-  'link_path' => 'admin/build/block',
-  'router_path' => 'admin/build/block',
-  'link_title' => 'Blocks',
-  'options' => "a:1:{s:10:\"attributes\";a:1:{s:5:\"title\";s:79:\"Configure what block content appears in your site's sidebars and other regions.\";}}",
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '16',
-  'p3' => '24',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '25',
-  'plid' => '17',
-  'link_path' => 'admin/settings/clean-urls',
-  'router_path' => 'admin/settings/clean-urls',
-  'link_title' => 'Clean URLs',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:43:"Enable or disable clean URLs for your site.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '25',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '26',
-  'plid' => '10',
-  'link_path' => 'admin/content/comment',
-  'router_path' => 'admin/content/comment',
-  'link_title' => 'Comments',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:61:"List and edit site comments and the comment moderation queue.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '10',
-  'p3' => '26',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '27',
-  'plid' => '10',
-  'link_path' => 'admin/content/node',
-  'router_path' => 'admin/content/node',
-  'link_title' => 'Content',
-  'options' => "a:1:{s:10:\"attributes\";a:1:{s:5:\"title\";s:43:\"View, edit, and delete your site's content.\";}}",
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '10',
-  'p3' => '27',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '28',
-  'plid' => '10',
-  'link_path' => 'admin/content/types',
-  'router_path' => 'admin/content/types',
-  'link_title' => 'Content types',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:82:"Manage posts by content type, including default status, front page promotion, etc.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '10',
-  'p3' => '28',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '29',
-  'plid' => '17',
-  'link_path' => 'admin/settings/date-time',
-  'router_path' => 'admin/settings/date-time',
-  'link_title' => 'Date and time',
-  'options' => "a:1:{s:10:\"attributes\";a:1:{s:5:\"title\";s:89:\"Settings for how Drupal displays date and time, as well as the system's default timezone.\";}}",
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '29',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '30',
-  'plid' => '0',
-  'link_path' => 'node/%/delete',
-  'router_path' => 'node/%/delete',
-  'link_title' => 'Delete',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '1',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '30',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '31',
-  'plid' => '20',
-  'link_path' => 'user/%/delete',
-  'router_path' => 'user/%/delete',
-  'link_title' => 'Delete',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '2',
-  'customized' => '0',
-  'p1' => '20',
-  'p2' => '31',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '32',
-  'plid' => '17',
-  'link_path' => 'admin/settings/error-reporting',
-  'router_path' => 'admin/settings/error-reporting',
-  'link_title' => 'Error reporting',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:93:"Control how Drupal deals with errors including 403/404 errors as well as PHP error reporting.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '32',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '33',
-  'plid' => '17',
-  'link_path' => 'admin/settings/file-system',
-  'router_path' => 'admin/settings/file-system',
-  'link_title' => 'File system',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:68:"Tell Drupal where to store uploaded files and how they are accessed.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '33',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '34',
-  'plid' => '17',
-  'link_path' => 'admin/settings/image-toolkit',
-  'router_path' => 'admin/settings/image-toolkit',
-  'link_title' => 'Image toolkit',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:74:"Choose which image toolkit to use if you have installed optional toolkits.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '34',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '35',
-  'plid' => '17',
-  'link_path' => 'admin/settings/filters',
-  'router_path' => 'admin/settings/filters',
-  'link_title' => 'Input formats',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:127:"Configure how content input by users is filtered, including allowed HTML tags. Also allows enabling of module-provided filters.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '35',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '36',
-  'plid' => '17',
-  'link_path' => 'admin/settings/logging',
-  'router_path' => 'admin/settings/logging',
-  'link_title' => 'Logging and alerts',
-  'options' => "a:1:{s:10:\"attributes\";a:1:{s:5:\"title\";s:156:\"Settings for logging and alerts modules. Various modules can route Drupal's system events to different destination, such as syslog, database, email, ...etc.\";}}",
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '1',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '36',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '37',
-  'plid' => '16',
-  'link_path' => 'admin/build/menu',
-  'router_path' => 'admin/build/menu',
-  'link_title' => 'Menus',
-  'options' => "a:1:{s:10:\"attributes\";a:1:{s:5:\"title\";s:116:\"Control your site's navigation menu, primary links and secondary links. as well as rename and reorganize menu items.\";}}",
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '1',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '16',
-  'p3' => '37',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '38',
-  'plid' => '16',
-  'link_path' => 'admin/build/modules',
-  'router_path' => 'admin/build/modules',
-  'link_title' => 'Modules',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:47:"Enable or disable add-on modules for your site.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '16',
-  'p3' => '38',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '39',
-  'plid' => '17',
-  'link_path' => 'admin/settings/performance',
-  'router_path' => 'admin/settings/performance',
-  'link_title' => 'Performance',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:101:"Enable or disable page caching for anonymous users and set CSS and JS bandwidth optimization options.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '39',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '40',
-  'plid' => '19',
-  'link_path' => 'admin/user/permissions',
-  'router_path' => 'admin/user/permissions',
-  'link_title' => 'Permissions',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:64:"Determine access to features by selecting permissions for roles.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '19',
-  'p3' => '40',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '41',
-  'plid' => '10',
-  'link_path' => 'admin/content/node-settings',
-  'router_path' => 'admin/content/node-settings',
-  'link_title' => 'Post settings',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:126:"Control posting behavior, such as teaser length, requiring previews before posting, and the number of posts on the front page.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '10',
-  'p3' => '41',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '42',
-  'plid' => '10',
-  'link_path' => 'admin/content/rss-publishing',
-  'router_path' => 'admin/content/rss-publishing',
-  'link_title' => 'RSS publishing',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:92:"Configure the number of items per feed and whether feeds should be titles/teasers/full-text.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '10',
-  'p3' => '42',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '43',
-  'plid' => '0',
-  'link_path' => 'comment/reply/%',
-  'router_path' => 'comment/reply/%',
-  'link_title' => 'Reply to comment',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '43',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '44',
-  'plid' => '19',
-  'link_path' => 'admin/user/roles',
-  'router_path' => 'admin/user/roles',
-  'link_title' => 'Roles',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:30:"List, edit, or add user roles.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '19',
-  'p3' => '44',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '45',
-  'plid' => '17',
-  'link_path' => 'admin/settings/site-information',
-  'router_path' => 'admin/settings/site-information',
-  'link_title' => 'Site information',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:107:"Change basic site information, such as the site name, slogan, e-mail address, mission, front page and more.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '45',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '46',
-  'plid' => '17',
-  'link_path' => 'admin/settings/site-maintenance',
-  'router_path' => 'admin/settings/site-maintenance',
-  'link_title' => 'Site maintenance',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:63:"Take the site off-line for maintenance or bring it back online.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '46',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '47',
-  'plid' => '15',
-  'link_path' => 'admin/reports/status',
-  'router_path' => 'admin/reports/status',
-  'link_title' => 'Status report',
-  'options' => "a:1:{s:10:\"attributes\";a:1:{s:5:\"title\";s:74:\"Get a status report about your site's operation and any detected problems.\";}}",
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '10',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '47',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '48',
-  'plid' => '16',
-  'link_path' => 'admin/build/themes',
-  'router_path' => 'admin/build/themes',
-  'link_title' => 'Themes',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:57:"Change which theme your site uses or allows users to set.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '16',
-  'p3' => '48',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '49',
-  'plid' => '19',
-  'link_path' => 'admin/user/settings',
-  'router_path' => 'admin/user/settings',
-  'link_title' => 'User settings',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:101:"Configure default behavior of users, including registration requirements, e-mails, and user pictures.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '19',
-  'p3' => '49',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '50',
-  'plid' => '19',
-  'link_path' => 'admin/user/user',
-  'router_path' => 'admin/user/user',
-  'link_title' => 'Users',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:26:"List, add, and edit users.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '19',
-  'p3' => '50',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '51',
-  'plid' => '35',
-  'link_path' => 'admin/settings/filters/%',
-  'router_path' => 'admin/settings/filters/%',
-  'link_title' => '',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '35',
-  'p4' => '51',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '52',
-  'plid' => '25',
-  'link_path' => 'admin/settings/clean-urls/check',
-  'router_path' => 'admin/settings/clean-urls/check',
-  'link_title' => 'Clean URL check',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '25',
-  'p4' => '52',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '53',
-  'plid' => '22',
-  'link_path' => 'admin/settings/actions/configure',
-  'router_path' => 'admin/settings/actions/configure',
-  'link_title' => 'Configure an advanced action',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '22',
-  'p4' => '53',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '54',
-  'plid' => '24',
-  'link_path' => 'admin/build/block/configure',
-  'router_path' => 'admin/build/block/configure',
-  'link_title' => 'Configure block',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '16',
-  'p3' => '24',
-  'p4' => '54',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '55',
-  'plid' => '16',
-  'link_path' => 'admin/build/menu-customize/%',
-  'router_path' => 'admin/build/menu-customize/%',
-  'link_title' => 'Customize menu',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '16',
-  'p3' => '55',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '56',
-  'plid' => '29',
-  'link_path' => 'admin/settings/date-time/lookup',
-  'router_path' => 'admin/settings/date-time/lookup',
-  'link_title' => 'Date and time lookup',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '29',
-  'p4' => '56',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '57',
-  'plid' => '24',
-  'link_path' => 'admin/build/block/delete',
-  'router_path' => 'admin/build/block/delete',
-  'link_title' => 'Delete block',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '16',
-  'p3' => '24',
-  'p4' => '57',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '58',
-  'plid' => '35',
-  'link_path' => 'admin/settings/filters/delete',
-  'router_path' => 'admin/settings/filters/delete',
-  'link_title' => 'Delete input format',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '35',
-  'p4' => '58',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '59',
-  'plid' => '21',
-  'link_path' => 'admin/user/rules/delete',
-  'router_path' => 'admin/user/rules/delete',
-  'link_title' => 'Delete rule',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '19',
-  'p3' => '21',
-  'p4' => '59',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '60',
-  'plid' => '44',
-  'link_path' => 'admin/user/roles/edit',
-  'router_path' => 'admin/user/roles/edit',
-  'link_title' => 'Edit role',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '19',
-  'p3' => '44',
-  'p4' => '60',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '61',
-  'plid' => '21',
-  'link_path' => 'admin/user/rules/edit',
-  'router_path' => 'admin/user/rules/edit',
-  'link_title' => 'Edit rule',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '19',
-  'p3' => '21',
-  'p4' => '61',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '62',
-  'plid' => '47',
-  'link_path' => 'admin/reports/status/php',
-  'router_path' => 'admin/reports/status/php',
-  'link_title' => 'PHP',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '47',
-  'p4' => '62',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '63',
-  'plid' => '41',
-  'link_path' => 'admin/content/node-settings/rebuild',
-  'router_path' => 'admin/content/node-settings/rebuild',
-  'link_title' => 'Rebuild permissions',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '10',
-  'p3' => '41',
-  'p4' => '63',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '64',
-  'plid' => '22',
-  'link_path' => 'admin/settings/actions/orphan',
-  'router_path' => 'admin/settings/actions/orphan',
-  'link_title' => 'Remove orphans',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '22',
-  'p4' => '64',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '65',
-  'plid' => '47',
-  'link_path' => 'admin/reports/status/run-cron',
-  'router_path' => 'admin/reports/status/run-cron',
-  'link_title' => 'Run cron',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '47',
-  'p4' => '65',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '66',
-  'plid' => '47',
-  'link_path' => 'admin/reports/status/sql',
-  'router_path' => 'admin/reports/status/sql',
-  'link_title' => 'SQL',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '47',
-  'p4' => '66',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '67',
-  'plid' => '22',
-  'link_path' => 'admin/settings/actions/delete/%',
-  'router_path' => 'admin/settings/actions/delete/%',
-  'link_title' => 'Delete action',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:17:"Delete an action.";}}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '22',
-  'p4' => '67',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '68',
-  'plid' => '0',
-  'link_path' => 'admin/build/menu-customize/%/delete',
-  'router_path' => 'admin/build/menu-customize/%/delete',
-  'link_title' => 'Delete menu',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '68',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '69',
-  'plid' => '24',
-  'link_path' => 'admin/build/block/list/js',
-  'router_path' => 'admin/build/block/list/js',
-  'link_title' => 'JavaScript List Form',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '16',
-  'p3' => '24',
-  'p4' => '69',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '70',
-  'plid' => '38',
-  'link_path' => 'admin/build/modules/list/confirm',
-  'router_path' => 'admin/build/modules/list/confirm',
-  'link_title' => 'List',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '16',
-  'p3' => '38',
-  'p4' => '70',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '71',
-  'plid' => '0',
-  'link_path' => 'user/reset/%/%/%',
-  'router_path' => 'user/reset/%/%/%',
-  'link_title' => 'Reset password',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '71',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '72',
-  'plid' => '38',
-  'link_path' => 'admin/build/modules/uninstall/confirm',
-  'router_path' => 'admin/build/modules/uninstall/confirm',
-  'link_title' => 'Uninstall',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '16',
-  'p3' => '38',
-  'p4' => '72',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '73',
-  'plid' => '0',
-  'link_path' => 'node/%/revisions/%/delete',
-  'router_path' => 'node/%/revisions/%/delete',
-  'link_title' => 'Delete earlier revision',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '73',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '74',
-  'plid' => '0',
-  'link_path' => 'node/%/revisions/%/revert',
-  'router_path' => 'node/%/revisions/%/revert',
-  'link_title' => 'Revert to earlier revision',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '74',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '75',
-  'plid' => '0',
-  'link_path' => 'node/%/revisions/%/view',
-  'router_path' => 'node/%/revisions/%/view',
-  'link_title' => 'Revisions',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '75',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '76',
-  'plid' => '37',
-  'link_path' => 'admin/build/menu/item/%/delete',
-  'router_path' => 'admin/build/menu/item/%/delete',
-  'link_title' => 'Delete menu item',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '16',
-  'p3' => '37',
-  'p4' => '76',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '77',
-  'plid' => '37',
-  'link_path' => 'admin/build/menu/item/%/edit',
-  'router_path' => 'admin/build/menu/item/%/edit',
-  'link_title' => 'Edit menu item',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '16',
-  'p3' => '37',
-  'p4' => '77',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '78',
-  'plid' => '37',
-  'link_path' => 'admin/build/menu/item/%/reset',
-  'router_path' => 'admin/build/menu/item/%/reset',
-  'link_title' => 'Reset menu item',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '16',
-  'p3' => '37',
-  'p4' => '78',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '79',
-  'plid' => '37',
-  'link_path' => 'admin/build/menu-customize/navigation',
-  'router_path' => 'admin/build/menu-customize/%',
-  'link_title' => 'Navigation',
-  'options' => 'a:0:{}',
-  'module' => 'menu',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '16',
-  'p3' => '37',
-  'p4' => '79',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '80',
-  'plid' => '37',
-  'link_path' => 'admin/build/menu-customize/primary-links',
-  'router_path' => 'admin/build/menu-customize/%',
-  'link_title' => 'Primary links',
-  'options' => 'a:0:{}',
-  'module' => 'menu',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '16',
-  'p3' => '37',
-  'p4' => '80',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '81',
-  'plid' => '37',
-  'link_path' => 'admin/build/menu-customize/secondary-links',
-  'router_path' => 'admin/build/menu-customize/%',
-  'link_title' => 'Secondary links',
-  'options' => 'a:0:{}',
-  'module' => 'menu',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '16',
-  'p3' => '37',
-  'p4' => '81',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '82',
-  'plid' => '0',
-  'link_path' => 'taxonomy/autocomplete',
-  'router_path' => 'taxonomy/autocomplete',
-  'link_title' => 'Autocomplete taxonomy',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '82',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '83',
-  'plid' => '15',
-  'link_path' => 'admin/reports/updates',
-  'router_path' => 'admin/reports/updates',
-  'link_title' => 'Available updates',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:82:"Get a status report about available updates for your installed modules and themes.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '10',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '83',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '84',
-  'plid' => '11',
-  'link_path' => 'node/add/page',
-  'router_path' => 'node/add/page',
-  'link_title' => 'Page',
-  'options' => "a:1:{s:10:\"attributes\";a:1:{s:5:\"title\";s:296:\"A <em>page</em>, similar in form to a <em>story</em>, is a simple method for creating and displaying information that rarely changes, such as an \"About us\" section of a website. By default, a <em>page</em> entry does not allow visitor comments and is not featured on the site's initial home page.\";}}",
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '2',
-  'customized' => '0',
-  'p1' => '11',
-  'p2' => '84',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '85',
-  'plid' => '15',
-  'link_path' => 'admin/reports/dblog',
-  'router_path' => 'admin/reports/dblog',
-  'link_title' => 'Recent log entries',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:43:"View events that have recently been logged.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '-1',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '85',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '86',
-  'plid' => '11',
-  'link_path' => 'node/add/story',
-  'router_path' => 'node/add/story',
-  'link_title' => 'Story',
-  'options' => "a:1:{s:10:\"attributes\";a:1:{s:5:\"title\";s:392:\"A <em>story</em>, similar in form to a <em>page</em>, is ideal for creating and displaying content that informs or engages website visitors. Press releases, site announcements, and informal blog-like entries may all be created with a <em>story</em> entry. By default, a <em>story</em> entry is automatically featured on the site's initial home page, and provides the ability to post comments.\";}}",
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '2',
-  'customized' => '0',
-  'p1' => '11',
-  'p2' => '86',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '87',
-  'plid' => '10',
-  'link_path' => 'admin/content/taxonomy',
-  'router_path' => 'admin/content/taxonomy',
-  'link_title' => 'Taxonomy',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:67:"Manage tagging, categorization, and classification of your content.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '10',
-  'p3' => '87',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '88',
-  'plid' => '0',
-  'link_path' => 'taxonomy/term/%',
-  'router_path' => 'taxonomy/term/%',
-  'link_title' => 'Taxonomy term',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '88',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '89',
-  'plid' => '15',
-  'link_path' => 'admin/reports/access-denied',
-  'router_path' => 'admin/reports/access-denied',
-  'link_title' => "Top 'access denied' errors",
-  'options' => "a:1:{s:10:\"attributes\";a:1:{s:5:\"title\";s:35:\"View 'access denied' errors (403s).\";}}",
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '89',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '90',
-  'plid' => '15',
-  'link_path' => 'admin/reports/page-not-found',
-  'router_path' => 'admin/reports/page-not-found',
-  'link_title' => "Top 'page not found' errors",
-  'options' => "a:1:{s:10:\"attributes\";a:1:{s:5:\"title\";s:36:\"View 'page not found' errors (404s).\";}}",
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '90',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '91',
-  'plid' => '16',
-  'link_path' => 'admin/build/path',
-  'router_path' => 'admin/build/path',
-  'link_title' => 'URL aliases',
-  'options' => "a:1:{s:10:\"attributes\";a:1:{s:5:\"title\";s:46:\"Change your site's URL paths by aliasing them.\";}}",
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '16',
-  'p3' => '91',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '92',
-  'plid' => '36',
-  'link_path' => 'admin/settings/logging/dblog',
-  'router_path' => 'admin/settings/logging/dblog',
-  'link_title' => 'Database logging',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:169:"Settings for logging to the Drupal database logs. This is the most common method for small to medium sites on shared hosting. The logs are viewable from the admin pages.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '17',
-  'p3' => '36',
-  'p4' => '92',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '93',
-  'plid' => '91',
-  'link_path' => 'admin/build/path/delete',
-  'router_path' => 'admin/build/path/delete',
-  'link_title' => 'Delete alias',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '16',
-  'p3' => '91',
-  'p4' => '93',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '94',
-  'plid' => '15',
-  'link_path' => 'admin/reports/event/%',
-  'router_path' => 'admin/reports/event/%',
-  'link_title' => 'Details',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '94',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '95',
-  'plid' => '91',
-  'link_path' => 'admin/build/path/edit',
-  'router_path' => 'admin/build/path/edit',
-  'link_title' => 'Edit alias',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '16',
-  'p3' => '91',
-  'p4' => '95',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '96',
-  'plid' => '87',
-  'link_path' => 'admin/content/taxonomy/%',
-  'router_path' => 'admin/content/taxonomy/%',
-  'link_title' => 'List terms',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '10',
-  'p3' => '87',
-  'p4' => '96',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '97',
-  'plid' => '83',
-  'link_path' => 'admin/reports/updates/check',
-  'router_path' => 'admin/reports/updates/check',
-  'link_title' => 'Manual update check',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '15',
-  'p3' => '83',
-  'p4' => '97',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '98',
-  'plid' => '10',
-  'link_path' => 'admin/content/node-type/page',
-  'router_path' => 'admin/content/node-type/page',
-  'link_title' => 'Page',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '10',
-  'p3' => '98',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '99',
-  'plid' => '10',
-  'link_path' => 'admin/content/node-type/story',
-  'router_path' => 'admin/content/node-type/story',
-  'link_title' => 'Story',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '10',
-  'p3' => '99',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '100',
-  'plid' => '0',
-  'link_path' => 'admin/content/node-type/page/delete',
-  'router_path' => 'admin/content/node-type/page/delete',
-  'link_title' => 'Delete',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '100',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '101',
-  'plid' => '0',
-  'link_path' => 'admin/content/node-type/story/delete',
-  'router_path' => 'admin/content/node-type/story/delete',
-  'link_title' => 'Delete',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '101',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '102',
-  'plid' => '87',
-  'link_path' => 'admin/content/taxonomy/edit/term',
-  'router_path' => 'admin/content/taxonomy/edit/term',
-  'link_title' => 'Edit term',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '10',
-  'p3' => '87',
-  'p4' => '102',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '103',
-  'plid' => '87',
-  'link_path' => 'admin/content/taxonomy/edit/vocabulary/%',
-  'router_path' => 'admin/content/taxonomy/edit/vocabulary/%',
-  'link_title' => 'Edit vocabulary',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '4',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '10',
-  'p3' => '87',
-  'p4' => '103',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '104',
-  'plid' => '0',
-  'link_path' => 'poll',
-  'router_path' => 'poll',
-  'link_title' => 'Polls',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '104',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '105',
-  'plid' => '104',
-  'link_path' => 'poll/js',
-  'router_path' => 'poll/js',
-  'link_title' => 'Javascript Choice Form',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '2',
-  'customized' => '0',
-  'p1' => '104',
-  'p2' => '105',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '106',
-  'plid' => '11',
-  'link_path' => 'node/add/poll',
-  'router_path' => 'node/add/poll',
-  'link_title' => 'Poll',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:191:"A <em>poll</em> is a question with a set of possible responses. A <em>poll</em>, once created, automatically provides a simple running count of the number of votes received for each response.";}}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '2',
-  'customized' => '0',
-  'p1' => '11',
-  'p2' => '106',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '107',
-  'plid' => '10',
-  'link_path' => 'admin/content/node-type/poll',
-  'router_path' => 'admin/content/node-type/poll',
-  'link_title' => 'Poll',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '10',
-  'p3' => '107',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '108',
-  'plid' => '0',
-  'link_path' => 'admin/content/node-type/poll/delete',
-  'router_path' => 'admin/content/node-type/poll/delete',
-  'link_title' => 'Delete',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '108',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '109',
-  'plid' => '2',
-  'link_path' => 'admin/help',
-  'router_path' => 'admin/help',
-  'link_title' => 'Help',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '9',
-  'depth' => '2',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '109',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '110',
-  'plid' => '109',
-  'link_path' => 'admin/help/block',
-  'router_path' => 'admin/help/block',
-  'link_title' => 'block',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '109',
-  'p3' => '110',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '111',
-  'plid' => '109',
-  'link_path' => 'admin/help/color',
-  'router_path' => 'admin/help/color',
-  'link_title' => 'color',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '109',
-  'p3' => '111',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '112',
-  'plid' => '109',
-  'link_path' => 'admin/help/comment',
-  'router_path' => 'admin/help/comment',
-  'link_title' => 'comment',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '109',
-  'p3' => '112',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '113',
-  'plid' => '109',
-  'link_path' => 'admin/help/dblog',
-  'router_path' => 'admin/help/dblog',
-  'link_title' => 'dblog',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '109',
-  'p3' => '113',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '114',
-  'plid' => '109',
-  'link_path' => 'admin/help/filter',
-  'router_path' => 'admin/help/filter',
-  'link_title' => 'filter',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '109',
-  'p3' => '114',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '115',
-  'plid' => '109',
-  'link_path' => 'admin/help/help',
-  'router_path' => 'admin/help/help',
-  'link_title' => 'help',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '109',
-  'p3' => '115',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '116',
-  'plid' => '109',
-  'link_path' => 'admin/help/menu',
-  'router_path' => 'admin/help/menu',
-  'link_title' => 'menu',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '109',
-  'p3' => '116',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '117',
-  'plid' => '109',
-  'link_path' => 'admin/help/node',
-  'router_path' => 'admin/help/node',
-  'link_title' => 'node',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '109',
-  'p3' => '117',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '118',
-  'plid' => '109',
-  'link_path' => 'admin/help/path',
-  'router_path' => 'admin/help/path',
-  'link_title' => 'path',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '109',
-  'p3' => '118',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '119',
-  'plid' => '109',
-  'link_path' => 'admin/help/poll',
-  'router_path' => 'admin/help/poll',
-  'link_title' => 'poll',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '109',
-  'p3' => '119',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '120',
-  'plid' => '109',
-  'link_path' => 'admin/help/system',
-  'router_path' => 'admin/help/system',
-  'link_title' => 'system',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '109',
-  'p3' => '120',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '121',
-  'plid' => '109',
-  'link_path' => 'admin/help/taxonomy',
-  'router_path' => 'admin/help/taxonomy',
-  'link_title' => 'taxonomy',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '109',
-  'p3' => '121',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '122',
-  'plid' => '109',
-  'link_path' => 'admin/help/update',
-  'router_path' => 'admin/help/update',
-  'link_title' => 'update',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '109',
-  'p3' => '122',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '123',
-  'plid' => '109',
-  'link_path' => 'admin/help/user',
-  'router_path' => 'admin/help/user',
-  'link_title' => 'user',
-  'options' => 'a:0:{}',
-  'module' => 'system',
-  'hidden' => '-1',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '0',
-  'depth' => '3',
-  'customized' => '0',
-  'p1' => '2',
-  'p2' => '109',
-  'p3' => '123',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->execute();
-
-db_create_table('menu_router', array(
-  'fields' => array(
-    'path' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'load_functions' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-    ),
-    'to_arg_functions' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-    ),
-    'access_callback' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'access_arguments' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-    'page_callback' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'page_arguments' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-    'fit' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'number_parts' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'small',
-    ),
-    'tab_parent' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'tab_root' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'title' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'title_callback' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'title_arguments' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'type' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'block_callback' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'description' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-    ),
-    'position' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'weight' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'file' => array(
-      'type' => 'text',
-      'size' => 'medium',
-    ),
-  ),
-  'indexes' => array(
-    'fit' => array(
-      'fit',
-    ),
-    'tab_parent' => array(
-      'tab_parent',
-    ),
-    'tab_root_weight_title' => array(
-      array(
-        'tab_root',
-        64,
-      ),
-      'weight',
-      'title',
-    ),
-  ),
-  'primary key' => array(
-    'path',
-  ),
-  'module' => 'system',
-  'name' => 'menu_router',
-));
-db_insert('menu_router')->fields(array(
-  'path',
-  'load_functions',
-  'to_arg_functions',
-  'access_callback',
-  'access_arguments',
-  'page_callback',
-  'page_arguments',
-  'fit',
-  'number_parts',
-  'tab_parent',
-  'tab_root',
-  'title',
-  'title_callback',
-  'title_arguments',
-  'type',
-  'block_callback',
-  'description',
-  'position',
-  'weight',
-  'file',
-))
-->values(array(
-  'path' => 'admin',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'system_main_admin_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '1',
-  'number_parts' => '1',
-  'tab_parent' => '',
-  'tab_root' => 'admin',
-  'title' => 'Administer',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '9',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'system_admin_menu_block_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build',
-  'title' => 'Site building',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Control how your site looks and feels.',
-  'position' => 'right',
-  'weight' => '-10',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/block',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:17:"administer blocks";}',
-  'page_callback' => 'block_admin_display',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/block',
-  'title' => 'Blocks',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => "Configure what block content appears in your site's sidebars and other regions.",
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/block/block.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/block/add',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:17:"administer blocks";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:20:"block_add_block_form";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/build/block',
-  'tab_root' => 'admin/build/block',
-  'title' => 'Add block',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/block/block.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/block/configure',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:17:"administer blocks";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:21:"block_admin_configure";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/block/configure',
-  'title' => 'Configure block',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/block/block.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/block/delete',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:17:"administer blocks";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:16:"block_box_delete";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/block/delete',
-  'title' => 'Delete block',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/block/block.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/block/list',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:17:"administer blocks";}',
-  'page_callback' => 'block_admin_display',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/build/block',
-  'tab_root' => 'admin/build/block',
-  'title' => 'List',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '-10',
-  'file' => 'modules/block/block.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/block/list/bluemarine',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_block_themes_access',
-  'access_arguments' => 'a:1:{i:0;O:8:"stdClass":12:{s:8:"filename";s:33:"themes/bluemarine/bluemarine.info";s:4:"name";s:10:"bluemarine";s:4:"type";s:5:"theme";s:5:"owner";s:45:"themes/engines/phptemplate/phptemplate.engine";s:6:"status";s:1:"0";s:8:"throttle";s:1:"0";s:9:"bootstrap";s:1:"0";s:14:"schema_version";s:2:"-1";s:6:"weight";s:1:"0";s:4:"info";a:11:{s:4:"name";s:10:"Bluemarine";s:11:"description";s:66:"Table-based multi-column theme with a marine and ash color scheme.";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:6:"engine";s:11:"phptemplate";s:7:"regions";a:5:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";s:7:"content";s:7:"Content";s:6:"header";s:6:"Header";s:6:"footer";s:6:"Footer";}s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:27:"themes/bluemarine/style.css";}}s:7:"scripts";a:1:{s:9:"script.js";s:27:"themes/bluemarine/script.js";}s:10:"screenshot";s:32:"themes/bluemarine/screenshot.png";s:3:"php";s:5:"4.3.5";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:27:"themes/bluemarine/style.css";}}s:6:"engine";s:11:"phptemplate";}}',
-  'page_callback' => 'block_admin_display',
-  'page_arguments' => 'a:1:{i:0;s:10:"bluemarine";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/block/list',
-  'tab_root' => 'admin/build/block',
-  'title' => 'Bluemarine',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/block/block.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/block/list/chameleon',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_block_themes_access',
-  'access_arguments' => 'a:1:{i:0;O:8:"stdClass":11:{s:8:"filename";s:31:"themes/chameleon/chameleon.info";s:4:"name";s:9:"chameleon";s:4:"type";s:5:"theme";s:5:"owner";s:32:"themes/chameleon/chameleon.theme";s:6:"status";s:1:"0";s:8:"throttle";s:1:"0";s:9:"bootstrap";s:1:"0";s:14:"schema_version";s:2:"-1";s:6:"weight";s:1:"0";s:4:"info";a:10:{s:4:"name";s:9:"Chameleon";s:11:"description";s:42:"Minimalist tabled theme with light colors.";s:7:"regions";a:2:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";}s:8:"features";a:4:{i:0;s:4:"logo";i:1;s:7:"favicon";i:2;s:4:"name";i:3;s:6:"slogan";}s:11:"stylesheets";a:1:{s:3:"all";a:2:{s:9:"style.css";s:26:"themes/chameleon/style.css";s:10:"common.css";s:27:"themes/chameleon/common.css";}}s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:7:"scripts";a:1:{s:9:"script.js";s:26:"themes/chameleon/script.js";}s:10:"screenshot";s:31:"themes/chameleon/screenshot.png";s:3:"php";s:5:"4.3.5";}s:11:"stylesheets";a:1:{s:3:"all";a:2:{s:9:"style.css";s:26:"themes/chameleon/style.css";s:10:"common.css";s:27:"themes/chameleon/common.css";}}}}',
-  'page_callback' => 'block_admin_display',
-  'page_arguments' => 'a:1:{i:0;s:9:"chameleon";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/block/list',
-  'tab_root' => 'admin/build/block',
-  'title' => 'Chameleon',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/block/block.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/block/list/garland',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_block_themes_access',
-  'access_arguments' => 'a:1:{i:0;O:8:"stdClass":12:{s:8:"filename";s:27:"themes/garland/garland.info";s:4:"name";s:7:"garland";s:4:"type";s:5:"theme";s:5:"owner";s:45:"themes/engines/phptemplate/phptemplate.engine";s:6:"status";s:1:"1";s:8:"throttle";s:1:"0";s:9:"bootstrap";s:1:"0";s:14:"schema_version";s:2:"-1";s:6:"weight";s:1:"0";s:4:"info";a:11:{s:4:"name";s:7:"Garland";s:11:"description";s:66:"Tableless, recolorable, multi-column, fluid width theme (default).";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:6:"engine";s:11:"phptemplate";s:11:"stylesheets";a:2:{s:3:"all";a:1:{s:9:"style.css";s:24:"themes/garland/style.css";}s:5:"print";a:1:{s:9:"print.css";s:24:"themes/garland/print.css";}}s:7:"regions";a:5:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";s:7:"content";s:7:"Content";s:6:"header";s:6:"Header";s:6:"footer";s:6:"Footer";}s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:7:"scripts";a:1:{s:9:"script.js";s:24:"themes/garland/script.js";}s:10:"screenshot";s:29:"themes/garland/screenshot.png";s:3:"php";s:5:"4.3.5";}s:11:"stylesheets";a:2:{s:3:"all";a:1:{s:9:"style.css";s:24:"themes/garland/style.css";}s:5:"print";a:1:{s:9:"print.css";s:24:"themes/garland/print.css";}}s:6:"engine";s:11:"phptemplate";}}',
-  'page_callback' => 'block_admin_display',
-  'page_arguments' => 'a:1:{i:0;s:7:"garland";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/block/list',
-  'tab_root' => 'admin/build/block',
-  'title' => 'Garland',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '-10',
-  'file' => 'modules/block/block.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/block/list/js',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:17:"administer blocks";}',
-  'page_callback' => 'block_admin_display_js',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/block/list/js',
-  'title' => 'JavaScript List Form',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/block/block.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/block/list/marvin',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_block_themes_access',
-  'access_arguments' => 'a:1:{i:0;O:8:"stdClass":12:{s:8:"filename";s:35:"themes/chameleon/marvin/marvin.info";s:4:"name";s:6:"marvin";s:4:"type";s:5:"theme";s:5:"owner";s:0:"";s:6:"status";s:1:"0";s:8:"throttle";s:1:"0";s:9:"bootstrap";s:1:"0";s:14:"schema_version";s:2:"-1";s:6:"weight";s:1:"0";s:4:"info";a:11:{s:4:"name";s:6:"Marvin";s:11:"description";s:31:"Boxy tabled theme in all grays.";s:7:"regions";a:2:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";}s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:10:"base theme";s:9:"chameleon";s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:33:"themes/chameleon/marvin/style.css";}}s:7:"scripts";a:1:{s:9:"script.js";s:33:"themes/chameleon/marvin/script.js";}s:10:"screenshot";s:38:"themes/chameleon/marvin/screenshot.png";s:3:"php";s:5:"4.3.5";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:33:"themes/chameleon/marvin/style.css";}}s:10:"base_theme";s:9:"chameleon";}}',
-  'page_callback' => 'block_admin_display',
-  'page_arguments' => 'a:1:{i:0;s:6:"marvin";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/block/list',
-  'tab_root' => 'admin/build/block',
-  'title' => 'Marvin',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/block/block.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/block/list/minnelli',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_block_themes_access',
-  'access_arguments' => 'a:1:{i:0;O:8:"stdClass":13:{s:8:"filename";s:37:"themes/garland/minnelli/minnelli.info";s:4:"name";s:8:"minnelli";s:4:"type";s:5:"theme";s:5:"owner";s:45:"themes/engines/phptemplate/phptemplate.engine";s:6:"status";s:1:"0";s:8:"throttle";s:1:"0";s:9:"bootstrap";s:1:"0";s:14:"schema_version";s:2:"-1";s:6:"weight";s:1:"0";s:4:"info";a:12:{s:4:"name";s:8:"Minnelli";s:11:"description";s:56:"Tableless, recolorable, multi-column, fixed width theme.";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:10:"base theme";s:7:"garland";s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:12:"minnelli.css";s:36:"themes/garland/minnelli/minnelli.css";}}s:7:"regions";a:5:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";s:7:"content";s:7:"Content";s:6:"header";s:6:"Header";s:6:"footer";s:6:"Footer";}s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:7:"scripts";a:1:{s:9:"script.js";s:33:"themes/garland/minnelli/script.js";}s:10:"screenshot";s:38:"themes/garland/minnelli/screenshot.png";s:3:"php";s:5:"4.3.5";s:6:"engine";s:11:"phptemplate";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:12:"minnelli.css";s:36:"themes/garland/minnelli/minnelli.css";}}s:6:"engine";s:11:"phptemplate";s:10:"base_theme";s:7:"garland";}}',
-  'page_callback' => 'block_admin_display',
-  'page_arguments' => 'a:1:{i:0;s:8:"minnelli";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/block/list',
-  'tab_root' => 'admin/build/block',
-  'title' => 'Minnelli',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/block/block.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/block/list/pushbutton',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_block_themes_access',
-  'access_arguments' => 'a:1:{i:0;O:8:"stdClass":12:{s:8:"filename";s:33:"themes/pushbutton/pushbutton.info";s:4:"name";s:10:"pushbutton";s:4:"type";s:5:"theme";s:5:"owner";s:45:"themes/engines/phptemplate/phptemplate.engine";s:6:"status";s:1:"0";s:8:"throttle";s:1:"0";s:9:"bootstrap";s:1:"0";s:14:"schema_version";s:2:"-1";s:6:"weight";s:1:"0";s:4:"info";a:11:{s:4:"name";s:10:"Pushbutton";s:11:"description";s:52:"Tabled, multi-column theme in blue and orange tones.";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:6:"engine";s:11:"phptemplate";s:7:"regions";a:5:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";s:7:"content";s:7:"Content";s:6:"header";s:6:"Header";s:6:"footer";s:6:"Footer";}s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:27:"themes/pushbutton/style.css";}}s:7:"scripts";a:1:{s:9:"script.js";s:27:"themes/pushbutton/script.js";}s:10:"screenshot";s:32:"themes/pushbutton/screenshot.png";s:3:"php";s:5:"4.3.5";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:27:"themes/pushbutton/style.css";}}s:6:"engine";s:11:"phptemplate";}}',
-  'page_callback' => 'block_admin_display',
-  'page_arguments' => 'a:1:{i:0;s:10:"pushbutton";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/block/list',
-  'tab_root' => 'admin/build/block',
-  'title' => 'Pushbutton',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/block/block.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/menu',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:15:"administer menu";}',
-  'page_callback' => 'menu_overview_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/menu',
-  'title' => 'Menus',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => "Control your site's navigation menu, primary links and secondary links. as well as rename and reorganize menu items.",
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/menu/menu.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/menu-customize/%',
-  'load_functions' => 'a:1:{i:3;s:9:"menu_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:15:"administer menu";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:18:"menu_overview_form";i:1;i:3;}',
-  'fit' => '14',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/menu-customize/%',
-  'title' => 'Customize menu',
-  'title_callback' => 'menu_overview_title',
-  'title_arguments' => 'a:1:{i:0;i:3;}',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/menu/menu.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/menu-customize/%/add',
-  'load_functions' => 'a:1:{i:3;s:9:"menu_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:15:"administer menu";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:4:{i:0;s:14:"menu_edit_item";i:1;s:3:"add";i:2;N;i:3;i:3;}',
-  'fit' => '29',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/menu-customize/%',
-  'tab_root' => 'admin/build/menu-customize/%',
-  'title' => 'Add item',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/menu/menu.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/menu-customize/%/delete',
-  'load_functions' => 'a:1:{i:3;s:9:"menu_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:15:"administer menu";}',
-  'page_callback' => 'menu_delete_menu_page',
-  'page_arguments' => 'a:1:{i:0;i:3;}',
-  'fit' => '29',
-  'number_parts' => '5',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/menu-customize/%/delete',
-  'title' => 'Delete menu',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/menu/menu.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/menu-customize/%/edit',
-  'load_functions' => 'a:1:{i:3;s:9:"menu_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:15:"administer menu";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:3:{i:0;s:14:"menu_edit_menu";i:1;s:4:"edit";i:2;i:3;}',
-  'fit' => '29',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/menu-customize/%',
-  'tab_root' => 'admin/build/menu-customize/%',
-  'title' => 'Edit menu',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/menu/menu.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/menu-customize/%/list',
-  'load_functions' => 'a:1:{i:3;s:9:"menu_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:15:"administer menu";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:18:"menu_overview_form";i:1;i:3;}',
-  'fit' => '29',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/menu-customize/%',
-  'tab_root' => 'admin/build/menu-customize/%',
-  'title' => 'List items',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '-10',
-  'file' => 'modules/menu/menu.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/menu/add',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:15:"administer menu";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:14:"menu_edit_menu";i:1;s:3:"add";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/build/menu',
-  'tab_root' => 'admin/build/menu',
-  'title' => 'Add menu',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/menu/menu.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/menu/item/%/delete',
-  'load_functions' => 'a:1:{i:4;s:14:"menu_link_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:15:"administer menu";}',
-  'page_callback' => 'menu_item_delete_page',
-  'page_arguments' => 'a:1:{i:0;i:4;}',
-  'fit' => '61',
-  'number_parts' => '6',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/menu/item/%/delete',
-  'title' => 'Delete menu item',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/menu/menu.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/menu/item/%/edit',
-  'load_functions' => 'a:1:{i:4;s:14:"menu_link_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:15:"administer menu";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:4:{i:0;s:14:"menu_edit_item";i:1;s:4:"edit";i:2;i:4;i:3;N;}',
-  'fit' => '61',
-  'number_parts' => '6',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/menu/item/%/edit',
-  'title' => 'Edit menu item',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/menu/menu.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/menu/item/%/reset',
-  'load_functions' => 'a:1:{i:4;s:14:"menu_link_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:15:"administer menu";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:23:"menu_reset_item_confirm";i:1;i:4;}',
-  'fit' => '61',
-  'number_parts' => '6',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/menu/item/%/reset',
-  'title' => 'Reset menu item',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/menu/menu.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/menu/list',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:15:"administer menu";}',
-  'page_callback' => 'menu_overview_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/build/menu',
-  'tab_root' => 'admin/build/menu',
-  'title' => 'List menus',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '-10',
-  'file' => 'modules/menu/menu.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/menu/settings',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:15:"administer menu";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:14:"menu_configure";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/build/menu',
-  'tab_root' => 'admin/build/menu',
-  'title' => 'Settings',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '5',
-  'file' => 'modules/menu/menu.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/modules',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:14:"system_modules";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/modules',
-  'title' => 'Modules',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Enable or disable add-on modules for your site.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/modules/list',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:14:"system_modules";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/build/modules',
-  'tab_root' => 'admin/build/modules',
-  'title' => 'List',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/modules/list/confirm',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:14:"system_modules";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/modules/list/confirm',
-  'title' => 'List',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/modules/uninstall',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:24:"system_modules_uninstall";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/build/modules',
-  'tab_root' => 'admin/build/modules',
-  'title' => 'Uninstall',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/modules/uninstall/confirm',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:24:"system_modules_uninstall";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/modules/uninstall/confirm',
-  'title' => 'Uninstall',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/path',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:22:"administer url aliases";}',
-  'page_callback' => 'path_admin_overview',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/path',
-  'title' => 'URL aliases',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => "Change your site's URL paths by aliasing them.",
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/path/path.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/path/add',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:22:"administer url aliases";}',
-  'page_callback' => 'path_admin_edit',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/build/path',
-  'tab_root' => 'admin/build/path',
-  'title' => 'Add alias',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/path/path.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/path/delete',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:22:"administer url aliases";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:25:"path_admin_delete_confirm";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/path/delete',
-  'title' => 'Delete alias',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/path/path.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/path/edit',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:22:"administer url aliases";}',
-  'page_callback' => 'path_admin_edit',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/path/edit',
-  'title' => 'Edit alias',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/path/path.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/path/list',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:22:"administer url aliases";}',
-  'page_callback' => 'path_admin_overview',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/build/path',
-  'tab_root' => 'admin/build/path',
-  'title' => 'List',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '-10',
-  'file' => 'modules/path/path.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/themes',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:18:"system_themes_form";i:1;N;}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/build/themes',
-  'title' => 'Themes',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Change which theme your site uses or allows users to set.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/themes/select',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:18:"system_themes_form";i:1;N;}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/build/themes',
-  'tab_root' => 'admin/build/themes',
-  'title' => 'List',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => 'Select the default theme.',
-  'position' => '',
-  'weight' => '-1',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/themes/settings',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:21:"system_theme_settings";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/build/themes',
-  'tab_root' => 'admin/build/themes',
-  'title' => 'Configure',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/themes/settings/bluemarine',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_system_themes_access',
-  'access_arguments' => 'a:1:{i:0;O:8:"stdClass":12:{s:8:"filename";s:33:"themes/bluemarine/bluemarine.info";s:4:"name";s:10:"bluemarine";s:4:"type";s:5:"theme";s:5:"owner";s:45:"themes/engines/phptemplate/phptemplate.engine";s:6:"status";s:1:"0";s:8:"throttle";s:1:"0";s:9:"bootstrap";s:1:"0";s:14:"schema_version";s:2:"-1";s:6:"weight";s:1:"0";s:4:"info";a:11:{s:4:"name";s:10:"Bluemarine";s:11:"description";s:66:"Table-based multi-column theme with a marine and ash color scheme.";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:6:"engine";s:11:"phptemplate";s:7:"regions";a:5:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";s:7:"content";s:7:"Content";s:6:"header";s:6:"Header";s:6:"footer";s:6:"Footer";}s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:27:"themes/bluemarine/style.css";}}s:7:"scripts";a:1:{s:9:"script.js";s:27:"themes/bluemarine/script.js";}s:10:"screenshot";s:32:"themes/bluemarine/screenshot.png";s:3:"php";s:5:"4.3.5";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:27:"themes/bluemarine/style.css";}}s:6:"engine";s:11:"phptemplate";}}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:21:"system_theme_settings";i:1;s:10:"bluemarine";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/themes/settings',
-  'tab_root' => 'admin/build/themes',
-  'title' => 'Bluemarine',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/themes/settings/chameleon',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_system_themes_access',
-  'access_arguments' => 'a:1:{i:0;O:8:"stdClass":11:{s:8:"filename";s:31:"themes/chameleon/chameleon.info";s:4:"name";s:9:"chameleon";s:4:"type";s:5:"theme";s:5:"owner";s:32:"themes/chameleon/chameleon.theme";s:6:"status";s:1:"0";s:8:"throttle";s:1:"0";s:9:"bootstrap";s:1:"0";s:14:"schema_version";s:2:"-1";s:6:"weight";s:1:"0";s:4:"info";a:10:{s:4:"name";s:9:"Chameleon";s:11:"description";s:42:"Minimalist tabled theme with light colors.";s:7:"regions";a:2:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";}s:8:"features";a:4:{i:0;s:4:"logo";i:1;s:7:"favicon";i:2;s:4:"name";i:3;s:6:"slogan";}s:11:"stylesheets";a:1:{s:3:"all";a:2:{s:9:"style.css";s:26:"themes/chameleon/style.css";s:10:"common.css";s:27:"themes/chameleon/common.css";}}s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:7:"scripts";a:1:{s:9:"script.js";s:26:"themes/chameleon/script.js";}s:10:"screenshot";s:31:"themes/chameleon/screenshot.png";s:3:"php";s:5:"4.3.5";}s:11:"stylesheets";a:1:{s:3:"all";a:2:{s:9:"style.css";s:26:"themes/chameleon/style.css";s:10:"common.css";s:27:"themes/chameleon/common.css";}}}}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:21:"system_theme_settings";i:1;s:9:"chameleon";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/themes/settings',
-  'tab_root' => 'admin/build/themes',
-  'title' => 'Chameleon',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/themes/settings/garland',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_system_themes_access',
-  'access_arguments' => 'a:1:{i:0;O:8:"stdClass":12:{s:8:"filename";s:27:"themes/garland/garland.info";s:4:"name";s:7:"garland";s:4:"type";s:5:"theme";s:5:"owner";s:45:"themes/engines/phptemplate/phptemplate.engine";s:6:"status";s:1:"1";s:8:"throttle";s:1:"0";s:9:"bootstrap";s:1:"0";s:14:"schema_version";s:2:"-1";s:6:"weight";s:1:"0";s:4:"info";a:11:{s:4:"name";s:7:"Garland";s:11:"description";s:66:"Tableless, recolorable, multi-column, fluid width theme (default).";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:6:"engine";s:11:"phptemplate";s:11:"stylesheets";a:2:{s:3:"all";a:1:{s:9:"style.css";s:24:"themes/garland/style.css";}s:5:"print";a:1:{s:9:"print.css";s:24:"themes/garland/print.css";}}s:7:"regions";a:5:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";s:7:"content";s:7:"Content";s:6:"header";s:6:"Header";s:6:"footer";s:6:"Footer";}s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:7:"scripts";a:1:{s:9:"script.js";s:24:"themes/garland/script.js";}s:10:"screenshot";s:29:"themes/garland/screenshot.png";s:3:"php";s:5:"4.3.5";}s:11:"stylesheets";a:2:{s:3:"all";a:1:{s:9:"style.css";s:24:"themes/garland/style.css";}s:5:"print";a:1:{s:9:"print.css";s:24:"themes/garland/print.css";}}s:6:"engine";s:11:"phptemplate";}}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:21:"system_theme_settings";i:1;s:7:"garland";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/themes/settings',
-  'tab_root' => 'admin/build/themes',
-  'title' => 'Garland',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/themes/settings/global',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:21:"system_theme_settings";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/themes/settings',
-  'tab_root' => 'admin/build/themes',
-  'title' => 'Global settings',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '-1',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/themes/settings/marvin',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_system_themes_access',
-  'access_arguments' => 'a:1:{i:0;O:8:"stdClass":12:{s:8:"filename";s:35:"themes/chameleon/marvin/marvin.info";s:4:"name";s:6:"marvin";s:4:"type";s:5:"theme";s:5:"owner";s:0:"";s:6:"status";s:1:"0";s:8:"throttle";s:1:"0";s:9:"bootstrap";s:1:"0";s:14:"schema_version";s:2:"-1";s:6:"weight";s:1:"0";s:4:"info";a:11:{s:4:"name";s:6:"Marvin";s:11:"description";s:31:"Boxy tabled theme in all grays.";s:7:"regions";a:2:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";}s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:10:"base theme";s:9:"chameleon";s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:33:"themes/chameleon/marvin/style.css";}}s:7:"scripts";a:1:{s:9:"script.js";s:33:"themes/chameleon/marvin/script.js";}s:10:"screenshot";s:38:"themes/chameleon/marvin/screenshot.png";s:3:"php";s:5:"4.3.5";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:33:"themes/chameleon/marvin/style.css";}}s:10:"base_theme";s:9:"chameleon";}}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:21:"system_theme_settings";i:1;s:6:"marvin";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/themes/settings',
-  'tab_root' => 'admin/build/themes',
-  'title' => 'Marvin',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/themes/settings/minnelli',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_system_themes_access',
-  'access_arguments' => 'a:1:{i:0;O:8:"stdClass":13:{s:8:"filename";s:37:"themes/garland/minnelli/minnelli.info";s:4:"name";s:8:"minnelli";s:4:"type";s:5:"theme";s:5:"owner";s:45:"themes/engines/phptemplate/phptemplate.engine";s:6:"status";s:1:"0";s:8:"throttle";s:1:"0";s:9:"bootstrap";s:1:"0";s:14:"schema_version";s:2:"-1";s:6:"weight";s:1:"0";s:4:"info";a:12:{s:4:"name";s:8:"Minnelli";s:11:"description";s:56:"Tableless, recolorable, multi-column, fixed width theme.";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:10:"base theme";s:7:"garland";s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:12:"minnelli.css";s:36:"themes/garland/minnelli/minnelli.css";}}s:7:"regions";a:5:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";s:7:"content";s:7:"Content";s:6:"header";s:6:"Header";s:6:"footer";s:6:"Footer";}s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:7:"scripts";a:1:{s:9:"script.js";s:33:"themes/garland/minnelli/script.js";}s:10:"screenshot";s:38:"themes/garland/minnelli/screenshot.png";s:3:"php";s:5:"4.3.5";s:6:"engine";s:11:"phptemplate";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:12:"minnelli.css";s:36:"themes/garland/minnelli/minnelli.css";}}s:6:"engine";s:11:"phptemplate";s:10:"base_theme";s:7:"garland";}}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:21:"system_theme_settings";i:1;s:8:"minnelli";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/themes/settings',
-  'tab_root' => 'admin/build/themes',
-  'title' => 'Minnelli',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/build/themes/settings/pushbutton',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_system_themes_access',
-  'access_arguments' => 'a:1:{i:0;O:8:"stdClass":12:{s:8:"filename";s:33:"themes/pushbutton/pushbutton.info";s:4:"name";s:10:"pushbutton";s:4:"type";s:5:"theme";s:5:"owner";s:45:"themes/engines/phptemplate/phptemplate.engine";s:6:"status";s:1:"0";s:8:"throttle";s:1:"0";s:9:"bootstrap";s:1:"0";s:14:"schema_version";s:2:"-1";s:6:"weight";s:1:"0";s:4:"info";a:11:{s:4:"name";s:10:"Pushbutton";s:11:"description";s:52:"Tabled, multi-column theme in blue and orange tones.";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:6:"engine";s:11:"phptemplate";s:7:"regions";a:5:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";s:7:"content";s:7:"Content";s:6:"header";s:6:"Header";s:6:"footer";s:6:"Footer";}s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:27:"themes/pushbutton/style.css";}}s:7:"scripts";a:1:{s:9:"script.js";s:27:"themes/pushbutton/script.js";}s:10:"screenshot";s:32:"themes/pushbutton/screenshot.png";s:3:"php";s:5:"4.3.5";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:27:"themes/pushbutton/style.css";}}s:6:"engine";s:11:"phptemplate";}}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:21:"system_theme_settings";i:1;s:10:"pushbutton";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/build/themes/settings',
-  'tab_root' => 'admin/build/themes',
-  'title' => 'Pushbutton',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/by-module',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'system_admin_by_module',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => 'admin',
-  'tab_root' => 'admin',
-  'title' => 'By module',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '2',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/by-task',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'system_main_admin_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => 'admin',
-  'tab_root' => 'admin',
-  'title' => 'By task',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/compact',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'system_admin_compact_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'admin/compact',
-  'title' => 'Compact mode',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'system_admin_menu_block_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content',
-  'title' => 'Content management',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => "Manage your site's content.",
-  'position' => 'left',
-  'weight' => '-10',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content/comment',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:19:"administer comments";}',
-  'page_callback' => 'comment_admin',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/comment',
-  'title' => 'Comments',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'List and edit site comments and the comment moderation queue.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/comment/comment.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content/comment/approval',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:19:"administer comments";}',
-  'page_callback' => 'comment_admin',
-  'page_arguments' => 'a:1:{i:0;s:8:"approval";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/content/comment',
-  'tab_root' => 'admin/content/comment',
-  'title' => 'Approval queue',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/comment/comment.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content/comment/new',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:19:"administer comments";}',
-  'page_callback' => 'comment_admin',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/content/comment',
-  'tab_root' => 'admin/content/comment',
-  'title' => 'Published comments',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '-10',
-  'file' => 'modules/comment/comment.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content/node',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:16:"administer nodes";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:18:"node_admin_content";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/node',
-  'title' => 'Content',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => "View, edit, and delete your site's content.",
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/node.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content/node-settings',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:16:"administer nodes";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:14:"node_configure";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/node-settings',
-  'title' => 'Post settings',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Control posting behavior, such as teaser length, requiring previews before posting, and the number of posts on the front page.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/node.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content/node-settings/rebuild',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:30:"node_configure_rebuild_confirm";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/node-settings/rebuild',
-  'title' => 'Rebuild permissions',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/node.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content/node-type/page',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:24:"administer content types";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => "a:2:{i:0;s:14:\"node_type_form\";i:1;O:8:\"stdClass\":14:{s:4:\"type\";s:4:\"page\";s:4:\"name\";s:4:\"Page\";s:6:\"module\";s:4:\"node\";s:11:\"description\";s:296:\"A <em>page</em>, similar in form to a <em>story</em>, is a simple method for creating and displaying information that rarely changes, such as an \"About us\" section of a website. By default, a <em>page</em> entry does not allow visitor comments and is not featured on the site's initial home page.\";s:4:\"help\";s:0:\"\";s:9:\"has_title\";s:1:\"1\";s:11:\"title_label\";s:5:\"Title\";s:8:\"has_body\";s:1:\"1\";s:10:\"body_label\";s:4:\"Body\";s:14:\"min_word_count\";s:1:\"0\";s:6:\"custom\";s:1:\"1\";s:8:\"modified\";s:1:\"1\";s:6:\"locked\";s:1:\"0\";s:9:\"orig_type\";s:4:\"page\";}}",
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/node-type/page',
-  'title' => 'Page',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/content_types.inc',
-))
-->values(array(
-  'path' => 'admin/content/node-type/page/delete',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:24:"administer content types";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => "a:2:{i:0;s:24:\"node_type_delete_confirm\";i:1;O:8:\"stdClass\":14:{s:4:\"type\";s:4:\"page\";s:4:\"name\";s:4:\"Page\";s:6:\"module\";s:4:\"node\";s:11:\"description\";s:296:\"A <em>page</em>, similar in form to a <em>story</em>, is a simple method for creating and displaying information that rarely changes, such as an \"About us\" section of a website. By default, a <em>page</em> entry does not allow visitor comments and is not featured on the site's initial home page.\";s:4:\"help\";s:0:\"\";s:9:\"has_title\";s:1:\"1\";s:11:\"title_label\";s:5:\"Title\";s:8:\"has_body\";s:1:\"1\";s:10:\"body_label\";s:4:\"Body\";s:14:\"min_word_count\";s:1:\"0\";s:6:\"custom\";s:1:\"1\";s:8:\"modified\";s:1:\"1\";s:6:\"locked\";s:1:\"0\";s:9:\"orig_type\";s:4:\"page\";}}",
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/node-type/page/delete',
-  'title' => 'Delete',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/content_types.inc',
-))
-->values(array(
-  'path' => 'admin/content/node-type/page/edit',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:24:"administer content types";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => "a:2:{i:0;s:14:\"node_type_form\";i:1;O:8:\"stdClass\":14:{s:4:\"type\";s:4:\"page\";s:4:\"name\";s:4:\"Page\";s:6:\"module\";s:4:\"node\";s:11:\"description\";s:296:\"A <em>page</em>, similar in form to a <em>story</em>, is a simple method for creating and displaying information that rarely changes, such as an \"About us\" section of a website. By default, a <em>page</em> entry does not allow visitor comments and is not featured on the site's initial home page.\";s:4:\"help\";s:0:\"\";s:9:\"has_title\";s:1:\"1\";s:11:\"title_label\";s:5:\"Title\";s:8:\"has_body\";s:1:\"1\";s:10:\"body_label\";s:4:\"Body\";s:14:\"min_word_count\";s:1:\"0\";s:6:\"custom\";s:1:\"1\";s:8:\"modified\";s:1:\"1\";s:6:\"locked\";s:1:\"0\";s:9:\"orig_type\";s:4:\"page\";}}",
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/content/node-type/page',
-  'tab_root' => 'admin/content/node-type/page',
-  'title' => 'Edit',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/content_types.inc',
-))
-->values(array(
-  'path' => 'admin/content/node-type/poll',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:24:"administer content types";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:14:"node_type_form";i:1;O:8:"stdClass":14:{s:4:"name";s:4:"Poll";s:6:"module";s:4:"poll";s:11:"description";s:191:"A <em>poll</em> is a question with a set of possible responses. A <em>poll</em>, once created, automatically provides a simple running count of the number of votes received for each response.";s:11:"title_label";s:8:"Question";s:8:"has_body";b:0;s:4:"type";s:4:"poll";s:9:"has_title";b:1;s:4:"help";s:0:"";s:14:"min_word_count";i:0;s:6:"custom";b:0;s:8:"modified";b:0;s:6:"locked";b:1;s:9:"orig_type";s:4:"poll";s:6:"is_new";b:1;}}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/node-type/poll',
-  'title' => 'Poll',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/content_types.inc',
-))
-->values(array(
-  'path' => 'admin/content/node-type/poll/delete',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:24:"administer content types";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:24:"node_type_delete_confirm";i:1;O:8:"stdClass":14:{s:4:"name";s:4:"Poll";s:6:"module";s:4:"poll";s:11:"description";s:191:"A <em>poll</em> is a question with a set of possible responses. A <em>poll</em>, once created, automatically provides a simple running count of the number of votes received for each response.";s:11:"title_label";s:8:"Question";s:8:"has_body";b:0;s:4:"type";s:4:"poll";s:9:"has_title";b:1;s:4:"help";s:0:"";s:14:"min_word_count";i:0;s:6:"custom";b:0;s:8:"modified";b:0;s:6:"locked";b:1;s:9:"orig_type";s:4:"poll";s:6:"is_new";b:1;}}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/node-type/poll/delete',
-  'title' => 'Delete',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/content_types.inc',
-))
-->values(array(
-  'path' => 'admin/content/node-type/poll/edit',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:24:"administer content types";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:14:"node_type_form";i:1;O:8:"stdClass":14:{s:4:"name";s:4:"Poll";s:6:"module";s:4:"poll";s:11:"description";s:191:"A <em>poll</em> is a question with a set of possible responses. A <em>poll</em>, once created, automatically provides a simple running count of the number of votes received for each response.";s:11:"title_label";s:8:"Question";s:8:"has_body";b:0;s:4:"type";s:4:"poll";s:9:"has_title";b:1;s:4:"help";s:0:"";s:14:"min_word_count";i:0;s:6:"custom";b:0;s:8:"modified";b:0;s:6:"locked";b:1;s:9:"orig_type";s:4:"poll";s:6:"is_new";b:1;}}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/content/node-type/poll',
-  'tab_root' => 'admin/content/node-type/poll',
-  'title' => 'Edit',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/content_types.inc',
-))
-->values(array(
-  'path' => 'admin/content/node-type/story',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:24:"administer content types";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => "a:2:{i:0;s:14:\"node_type_form\";i:1;O:8:\"stdClass\":14:{s:4:\"type\";s:5:\"story\";s:4:\"name\";s:5:\"Story\";s:6:\"module\";s:4:\"node\";s:11:\"description\";s:392:\"A <em>story</em>, similar in form to a <em>page</em>, is ideal for creating and displaying content that informs or engages website visitors. Press releases, site announcements, and informal blog-like entries may all be created with a <em>story</em> entry. By default, a <em>story</em> entry is automatically featured on the site's initial home page, and provides the ability to post comments.\";s:4:\"help\";s:0:\"\";s:9:\"has_title\";s:1:\"1\";s:11:\"title_label\";s:5:\"Title\";s:8:\"has_body\";s:1:\"1\";s:10:\"body_label\";s:4:\"Body\";s:14:\"min_word_count\";s:1:\"0\";s:6:\"custom\";s:1:\"1\";s:8:\"modified\";s:1:\"1\";s:6:\"locked\";s:1:\"0\";s:9:\"orig_type\";s:5:\"story\";}}",
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/node-type/story',
-  'title' => 'Story',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/content_types.inc',
-))
-->values(array(
-  'path' => 'admin/content/node-type/story/delete',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:24:"administer content types";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => "a:2:{i:0;s:24:\"node_type_delete_confirm\";i:1;O:8:\"stdClass\":14:{s:4:\"type\";s:5:\"story\";s:4:\"name\";s:5:\"Story\";s:6:\"module\";s:4:\"node\";s:11:\"description\";s:392:\"A <em>story</em>, similar in form to a <em>page</em>, is ideal for creating and displaying content that informs or engages website visitors. Press releases, site announcements, and informal blog-like entries may all be created with a <em>story</em> entry. By default, a <em>story</em> entry is automatically featured on the site's initial home page, and provides the ability to post comments.\";s:4:\"help\";s:0:\"\";s:9:\"has_title\";s:1:\"1\";s:11:\"title_label\";s:5:\"Title\";s:8:\"has_body\";s:1:\"1\";s:10:\"body_label\";s:4:\"Body\";s:14:\"min_word_count\";s:1:\"0\";s:6:\"custom\";s:1:\"1\";s:8:\"modified\";s:1:\"1\";s:6:\"locked\";s:1:\"0\";s:9:\"orig_type\";s:5:\"story\";}}",
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/node-type/story/delete',
-  'title' => 'Delete',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/content_types.inc',
-))
-->values(array(
-  'path' => 'admin/content/node-type/story/edit',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:24:"administer content types";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => "a:2:{i:0;s:14:\"node_type_form\";i:1;O:8:\"stdClass\":14:{s:4:\"type\";s:5:\"story\";s:4:\"name\";s:5:\"Story\";s:6:\"module\";s:4:\"node\";s:11:\"description\";s:392:\"A <em>story</em>, similar in form to a <em>page</em>, is ideal for creating and displaying content that informs or engages website visitors. Press releases, site announcements, and informal blog-like entries may all be created with a <em>story</em> entry. By default, a <em>story</em> entry is automatically featured on the site's initial home page, and provides the ability to post comments.\";s:4:\"help\";s:0:\"\";s:9:\"has_title\";s:1:\"1\";s:11:\"title_label\";s:5:\"Title\";s:8:\"has_body\";s:1:\"1\";s:10:\"body_label\";s:4:\"Body\";s:14:\"min_word_count\";s:1:\"0\";s:6:\"custom\";s:1:\"1\";s:8:\"modified\";s:1:\"1\";s:6:\"locked\";s:1:\"0\";s:9:\"orig_type\";s:5:\"story\";}}",
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/content/node-type/story',
-  'tab_root' => 'admin/content/node-type/story',
-  'title' => 'Edit',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/content_types.inc',
-))
-->values(array(
-  'path' => 'admin/content/node/overview',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:16:"administer nodes";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:18:"node_admin_content";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/content/node',
-  'tab_root' => 'admin/content/node',
-  'title' => 'List',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '-10',
-  'file' => 'modules/node/node.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content/rss-publishing',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:25:"system_rss_feeds_settings";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/rss-publishing',
-  'title' => 'RSS publishing',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Configure the number of items per feed and whether feeds should be titles/teasers/full-text.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content/taxonomy',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:19:"administer taxonomy";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:30:"taxonomy_overview_vocabularies";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/taxonomy',
-  'title' => 'Taxonomy',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Manage tagging, categorization, and classification of your content.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/taxonomy/taxonomy.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content/taxonomy/%',
-  'load_functions' => 'a:1:{i:3;s:24:"taxonomy_vocabulary_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:19:"administer taxonomy";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:23:"taxonomy_overview_terms";i:1;i:3;}',
-  'fit' => '14',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/taxonomy/%',
-  'title' => 'List terms',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/taxonomy/taxonomy.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content/taxonomy/%/add/term',
-  'load_functions' => 'a:1:{i:3;s:24:"taxonomy_vocabulary_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:19:"administer taxonomy";}',
-  'page_callback' => 'taxonomy_add_term_page',
-  'page_arguments' => 'a:1:{i:0;i:3;}',
-  'fit' => '59',
-  'number_parts' => '6',
-  'tab_parent' => 'admin/content/taxonomy/%',
-  'tab_root' => 'admin/content/taxonomy/%',
-  'title' => 'Add term',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/taxonomy/taxonomy.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content/taxonomy/%/list',
-  'load_functions' => 'a:1:{i:3;s:24:"taxonomy_vocabulary_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:19:"administer taxonomy";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:23:"taxonomy_overview_terms";i:1;i:3;}',
-  'fit' => '29',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/content/taxonomy/%',
-  'tab_root' => 'admin/content/taxonomy/%',
-  'title' => 'List',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '-10',
-  'file' => 'modules/taxonomy/taxonomy.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content/taxonomy/add/vocabulary',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:19:"administer taxonomy";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:24:"taxonomy_form_vocabulary";}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/content/taxonomy',
-  'tab_root' => 'admin/content/taxonomy',
-  'title' => 'Add vocabulary',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/taxonomy/taxonomy.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content/taxonomy/edit/term',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:19:"administer taxonomy";}',
-  'page_callback' => 'taxonomy_admin_term_edit',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '31',
-  'number_parts' => '5',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/taxonomy/edit/term',
-  'title' => 'Edit term',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/taxonomy/taxonomy.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content/taxonomy/edit/vocabulary/%',
-  'load_functions' => 'a:1:{i:5;s:24:"taxonomy_vocabulary_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:19:"administer taxonomy";}',
-  'page_callback' => 'taxonomy_admin_vocabulary_edit',
-  'page_arguments' => 'a:1:{i:0;i:5;}',
-  'fit' => '62',
-  'number_parts' => '6',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/taxonomy/edit/vocabulary/%',
-  'title' => 'Edit vocabulary',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/taxonomy/taxonomy.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content/taxonomy/list',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:19:"administer taxonomy";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:30:"taxonomy_overview_vocabularies";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/content/taxonomy',
-  'tab_root' => 'admin/content/taxonomy',
-  'title' => 'List',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '-10',
-  'file' => 'modules/taxonomy/taxonomy.admin.inc',
-))
-->values(array(
-  'path' => 'admin/content/types',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:24:"administer content types";}',
-  'page_callback' => 'node_overview_types',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/content/types',
-  'title' => 'Content types',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Manage posts by content type, including default status, front page promotion, etc.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/content_types.inc',
-))
-->values(array(
-  'path' => 'admin/content/types/add',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:24:"administer content types";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:14:"node_type_form";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/content/types',
-  'tab_root' => 'admin/content/types',
-  'title' => 'Add content type',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/content_types.inc',
-))
-->values(array(
-  'path' => 'admin/content/types/list',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:24:"administer content types";}',
-  'page_callback' => 'node_overview_types',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/content/types',
-  'tab_root' => 'admin/content/types',
-  'title' => 'List',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '-10',
-  'file' => 'modules/node/content_types.inc',
-))
-->values(array(
-  'path' => 'admin/help',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'help_main',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'admin/help',
-  'title' => 'Help',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '9',
-  'file' => 'modules/help/help.admin.inc',
-))
-->values(array(
-  'path' => 'admin/help/block',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'help_page',
-  'page_arguments' => 'a:1:{i:0;i:2;}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/help/block',
-  'title' => 'block',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/help/help.admin.inc',
-))
-->values(array(
-  'path' => 'admin/help/color',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'help_page',
-  'page_arguments' => 'a:1:{i:0;i:2;}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/help/color',
-  'title' => 'color',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/help/help.admin.inc',
-))
-->values(array(
-  'path' => 'admin/help/comment',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'help_page',
-  'page_arguments' => 'a:1:{i:0;i:2;}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/help/comment',
-  'title' => 'comment',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/help/help.admin.inc',
-))
-->values(array(
-  'path' => 'admin/help/dblog',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'help_page',
-  'page_arguments' => 'a:1:{i:0;i:2;}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/help/dblog',
-  'title' => 'dblog',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/help/help.admin.inc',
-))
-->values(array(
-  'path' => 'admin/help/filter',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'help_page',
-  'page_arguments' => 'a:1:{i:0;i:2;}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/help/filter',
-  'title' => 'filter',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/help/help.admin.inc',
-))
-->values(array(
-  'path' => 'admin/help/help',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'help_page',
-  'page_arguments' => 'a:1:{i:0;i:2;}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/help/help',
-  'title' => 'help',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/help/help.admin.inc',
-))
-->values(array(
-  'path' => 'admin/help/menu',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'help_page',
-  'page_arguments' => 'a:1:{i:0;i:2;}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/help/menu',
-  'title' => 'menu',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/help/help.admin.inc',
-))
-->values(array(
-  'path' => 'admin/help/node',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'help_page',
-  'page_arguments' => 'a:1:{i:0;i:2;}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/help/node',
-  'title' => 'node',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/help/help.admin.inc',
-))
-->values(array(
-  'path' => 'admin/help/path',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'help_page',
-  'page_arguments' => 'a:1:{i:0;i:2;}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/help/path',
-  'title' => 'path',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/help/help.admin.inc',
-))
-->values(array(
-  'path' => 'admin/help/poll',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'help_page',
-  'page_arguments' => 'a:1:{i:0;i:2;}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/help/poll',
-  'title' => 'poll',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/help/help.admin.inc',
-))
-->values(array(
-  'path' => 'admin/help/system',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'help_page',
-  'page_arguments' => 'a:1:{i:0;i:2;}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/help/system',
-  'title' => 'system',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/help/help.admin.inc',
-))
-->values(array(
-  'path' => 'admin/help/taxonomy',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'help_page',
-  'page_arguments' => 'a:1:{i:0;i:2;}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/help/taxonomy',
-  'title' => 'taxonomy',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/help/help.admin.inc',
-))
-->values(array(
-  'path' => 'admin/help/update',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'help_page',
-  'page_arguments' => 'a:1:{i:0;i:2;}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/help/update',
-  'title' => 'update',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/help/help.admin.inc',
-))
-->values(array(
-  'path' => 'admin/help/user',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'help_page',
-  'page_arguments' => 'a:1:{i:0;i:2;}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/help/user',
-  'title' => 'user',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/help/help.admin.inc',
-))
-->values(array(
-  'path' => 'admin/reports',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:19:"access site reports";}',
-  'page_callback' => 'system_admin_menu_block_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'admin/reports',
-  'title' => 'Reports',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'View reports from system logs and other status information.',
-  'position' => 'left',
-  'weight' => '5',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/reports/access-denied',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:19:"access site reports";}',
-  'page_callback' => 'dblog_top',
-  'page_arguments' => 'a:1:{i:0;s:13:"access denied";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/reports/access-denied',
-  'title' => "Top 'access denied' errors",
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => "View 'access denied' errors (403s).",
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/dblog/dblog.admin.inc',
-))
-->values(array(
-  'path' => 'admin/reports/dblog',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:19:"access site reports";}',
-  'page_callback' => 'dblog_overview',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/reports/dblog',
-  'title' => 'Recent log entries',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'View events that have recently been logged.',
-  'position' => '',
-  'weight' => '-1',
-  'file' => 'modules/dblog/dblog.admin.inc',
-))
-->values(array(
-  'path' => 'admin/reports/event/%',
-  'load_functions' => 'a:1:{i:3;N;}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:19:"access site reports";}',
-  'page_callback' => 'dblog_event',
-  'page_arguments' => 'a:1:{i:0;i:3;}',
-  'fit' => '14',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/reports/event/%',
-  'title' => 'Details',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/dblog/dblog.admin.inc',
-))
-->values(array(
-  'path' => 'admin/reports/page-not-found',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:19:"access site reports";}',
-  'page_callback' => 'dblog_top',
-  'page_arguments' => 'a:1:{i:0;s:14:"page not found";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/reports/page-not-found',
-  'title' => "Top 'page not found' errors",
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => "View 'page not found' errors (404s).",
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/dblog/dblog.admin.inc',
-))
-->values(array(
-  'path' => 'admin/reports/status',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'system_status',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/reports/status',
-  'title' => 'Status report',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => "Get a status report about your site's operation and any detected problems.",
-  'position' => '',
-  'weight' => '10',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/reports/status/php',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'system_php',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/reports/status/php',
-  'title' => 'PHP',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/reports/status/run-cron',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'system_run_cron',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/reports/status/run-cron',
-  'title' => 'Run cron',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/reports/status/sql',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'system_sql',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/reports/status/sql',
-  'title' => 'SQL',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/reports/updates',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'update_status',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/reports/updates',
-  'title' => 'Available updates',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Get a status report about available updates for your installed modules and themes.',
-  'position' => '',
-  'weight' => '10',
-  'file' => 'modules/update/update.report.inc',
-))
-->values(array(
-  'path' => 'admin/reports/updates/check',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'update_manual_status',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/reports/updates/check',
-  'title' => 'Manual update check',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/update/update.fetch.inc',
-))
-->values(array(
-  'path' => 'admin/reports/updates/list',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'update_status',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/reports/updates',
-  'tab_root' => 'admin/reports/updates',
-  'title' => 'List',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/update/update.report.inc',
-))
-->values(array(
-  'path' => 'admin/reports/updates/settings',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:15:"update_settings";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/reports/updates',
-  'tab_root' => 'admin/reports/updates',
-  'title' => 'Settings',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/update/update.settings.inc',
-))
-->values(array(
-  'path' => 'admin/settings',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'system_settings_overview',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings',
-  'title' => 'Site configuration',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Adjust basic site configuration options.',
-  'position' => 'right',
-  'weight' => '-5',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/actions',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer actions";}',
-  'page_callback' => 'system_actions_manage',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/actions',
-  'title' => 'Actions',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Manage the actions defined for your site.',
-  'position' => '',
-  'weight' => '0',
-  'file' => '',
-))
-->values(array(
-  'path' => 'admin/settings/actions/configure',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer actions";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:24:"system_actions_configure";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/actions/configure',
-  'title' => 'Configure an advanced action',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => '',
-))
-->values(array(
-  'path' => 'admin/settings/actions/delete/%',
-  'load_functions' => 'a:1:{i:4;s:12:"actions_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer actions";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:26:"system_actions_delete_form";i:1;i:4;}',
-  'fit' => '30',
-  'number_parts' => '5',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/actions/delete/%',
-  'title' => 'Delete action',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => 'Delete an action.',
-  'position' => '',
-  'weight' => '0',
-  'file' => '',
-))
-->values(array(
-  'path' => 'admin/settings/actions/manage',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer actions";}',
-  'page_callback' => 'system_actions_manage',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/settings/actions',
-  'tab_root' => 'admin/settings/actions',
-  'title' => 'Manage actions',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => 'Manage the actions defined for your site.',
-  'position' => '',
-  'weight' => '-2',
-  'file' => '',
-))
-->values(array(
-  'path' => 'admin/settings/actions/orphan',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer actions";}',
-  'page_callback' => 'system_actions_remove_orphans',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/actions/orphan',
-  'title' => 'Remove orphans',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => '',
-))
-->values(array(
-  'path' => 'admin/settings/admin',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:27:"system_admin_theme_settings";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/admin',
-  'title' => 'Administration theme',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => 'system_admin_theme_settings',
-  'description' => 'Settings for how your administrative pages should look.',
-  'position' => 'left',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/clean-urls',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:25:"system_clean_url_settings";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/clean-urls',
-  'title' => 'Clean URLs',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Enable or disable clean URLs for your site.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/clean-urls/check',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '1',
-  'access_arguments' => 'a:0:{}',
-  'page_callback' => 'drupal_json',
-  'page_arguments' => 'a:1:{i:0;a:1:{s:6:"status";b:1;}}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/clean-urls/check',
-  'title' => 'Clean URL check',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => '',
-))
-->values(array(
-  'path' => 'admin/settings/date-time',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:25:"system_date_time_settings";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/date-time',
-  'title' => 'Date and time',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => "Settings for how Drupal displays date and time, as well as the system's default timezone.",
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/date-time/lookup',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'system_date_time_lookup',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/date-time/lookup',
-  'title' => 'Date and time lookup',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/error-reporting',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:31:"system_error_reporting_settings";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/error-reporting',
-  'title' => 'Error reporting',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Control how Drupal deals with errors including 403/404 errors as well as PHP error reporting.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/file-system',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:27:"system_file_system_settings";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/file-system',
-  'title' => 'File system',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Tell Drupal where to store uploaded files and how they are accessed.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/filters',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer filters";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:21:"filter_admin_overview";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/filters',
-  'title' => 'Input formats',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Configure how content input by users is filtered, including allowed HTML tags. Also allows enabling of module-provided filters.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/filter/filter.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/filters/%',
-  'load_functions' => 'a:1:{i:3;s:18:"filter_format_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer filters";}',
-  'page_callback' => 'filter_admin_format_page',
-  'page_arguments' => 'a:1:{i:0;i:3;}',
-  'fit' => '14',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/filters/%',
-  'title' => '',
-  'title_callback' => 'filter_admin_format_title',
-  'title_arguments' => 'a:1:{i:0;i:3;}',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/filter/filter.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/filters/%/configure',
-  'load_functions' => 'a:1:{i:3;s:18:"filter_format_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer filters";}',
-  'page_callback' => 'filter_admin_configure_page',
-  'page_arguments' => 'a:1:{i:0;i:3;}',
-  'fit' => '29',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/settings/filters/%',
-  'tab_root' => 'admin/settings/filters/%',
-  'title' => 'Configure',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '1',
-  'file' => 'modules/filter/filter.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/filters/%/edit',
-  'load_functions' => 'a:1:{i:3;s:18:"filter_format_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer filters";}',
-  'page_callback' => 'filter_admin_format_page',
-  'page_arguments' => 'a:1:{i:0;i:3;}',
-  'fit' => '29',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/settings/filters/%',
-  'tab_root' => 'admin/settings/filters/%',
-  'title' => 'Edit',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/filter/filter.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/filters/%/order',
-  'load_functions' => 'a:1:{i:3;s:18:"filter_format_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer filters";}',
-  'page_callback' => 'filter_admin_order_page',
-  'page_arguments' => 'a:1:{i:0;i:3;}',
-  'fit' => '29',
-  'number_parts' => '5',
-  'tab_parent' => 'admin/settings/filters/%',
-  'tab_root' => 'admin/settings/filters/%',
-  'title' => 'Rearrange',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '2',
-  'file' => 'modules/filter/filter.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/filters/add',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer filters";}',
-  'page_callback' => 'filter_admin_format_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/settings/filters',
-  'tab_root' => 'admin/settings/filters',
-  'title' => 'Add input format',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '1',
-  'file' => 'modules/filter/filter.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/filters/delete',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer filters";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:19:"filter_admin_delete";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/filters/delete',
-  'title' => 'Delete input format',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/filter/filter.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/filters/list',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:18:"administer filters";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:21:"filter_admin_overview";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/settings/filters',
-  'tab_root' => 'admin/settings/filters',
-  'title' => 'List',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/filter/filter.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/image-toolkit',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:29:"system_image_toolkit_settings";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/image-toolkit',
-  'title' => 'Image toolkit',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Choose which image toolkit to use if you have installed optional toolkits.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/logging',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'system_logging_overview',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/logging',
-  'title' => 'Logging and alerts',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => "Settings for logging and alerts modules. Various modules can route Drupal's system events to different destination, such as syslog, database, email, ...etc.",
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/logging/dblog',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:20:"dblog_admin_settings";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/logging/dblog',
-  'title' => 'Database logging',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Settings for logging to the Drupal database logs. This is the most common method for small to medium sites on shared hosting. The logs are viewable from the admin pages.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/dblog/dblog.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/performance',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:27:"system_performance_settings";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/performance',
-  'title' => 'Performance',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Enable or disable page caching for anonymous users and set CSS and JS bandwidth optimization options.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/site-information',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:32:"system_site_information_settings";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/site-information',
-  'title' => 'Site information',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Change basic site information, such as the site name, slogan, e-mail address, mission, front page and more.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/settings/site-maintenance',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:29:"administer site configuration";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:32:"system_site_maintenance_settings";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/settings/site-maintenance',
-  'title' => 'Site maintenance',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Take the site off-line for maintenance or bring it back online.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:27:"access administration pages";}',
-  'page_callback' => 'system_admin_menu_block_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'admin/user',
-  'title' => 'User management',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => "Manage your site's users, groups and access to site features.",
-  'position' => 'left',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/permissions',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:22:"administer permissions";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:15:"user_admin_perm";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/user/permissions',
-  'title' => 'Permissions',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Determine access to features by selecting permissions for roles.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/roles',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:22:"administer permissions";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:19:"user_admin_new_role";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/user/roles',
-  'title' => 'Roles',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'List, edit, or add user roles.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/roles/edit',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:22:"administer permissions";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:15:"user_admin_role";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/user/roles/edit',
-  'title' => 'Edit role',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/rules',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:22:"administer permissions";}',
-  'page_callback' => 'user_admin_access',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/user/rules',
-  'title' => 'Access rules',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'List and create rules to disallow usernames, e-mail addresses, and IP addresses.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/rules/add',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:22:"administer permissions";}',
-  'page_callback' => 'user_admin_access_add',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/user/rules',
-  'tab_root' => 'admin/user/rules',
-  'title' => 'Add rule',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/rules/check',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:22:"administer permissions";}',
-  'page_callback' => 'user_admin_access_check',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/user/rules',
-  'tab_root' => 'admin/user/rules',
-  'title' => 'Check rules',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/rules/delete',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:22:"administer permissions";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:32:"user_admin_access_delete_confirm";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/user/rules/delete',
-  'title' => 'Delete rule',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/rules/edit',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:22:"administer permissions";}',
-  'page_callback' => 'user_admin_access_edit',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => '',
-  'tab_root' => 'admin/user/rules/edit',
-  'title' => 'Edit rule',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/rules/list',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:22:"administer permissions";}',
-  'page_callback' => 'user_admin_access',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/user/rules',
-  'tab_root' => 'admin/user/rules',
-  'title' => 'List',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '-10',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/settings',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:16:"administer users";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:19:"user_admin_settings";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/user/settings',
-  'title' => 'User settings',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'Configure default behavior of users, including registration requirements, e-mails, and user pictures.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/user',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:16:"administer users";}',
-  'page_callback' => 'user_admin',
-  'page_arguments' => 'a:1:{i:0;s:4:"list";}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'admin/user/user',
-  'title' => 'Users',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'List, add, and edit users.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/user/create',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:16:"administer users";}',
-  'page_callback' => 'user_admin',
-  'page_arguments' => 'a:1:{i:0;s:6:"create";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/user/user',
-  'tab_root' => 'admin/user/user',
-  'title' => 'Add user',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'admin/user/user/list',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:16:"administer users";}',
-  'page_callback' => 'user_admin',
-  'page_arguments' => 'a:1:{i:0;s:4:"list";}',
-  'fit' => '15',
-  'number_parts' => '4',
-  'tab_parent' => 'admin/user/user',
-  'tab_root' => 'admin/user/user',
-  'title' => 'List',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '-10',
-  'file' => 'modules/user/user.admin.inc',
-))
-->values(array(
-  'path' => 'batch',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '1',
-  'access_arguments' => 'a:0:{}',
-  'page_callback' => 'system_batch_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '1',
-  'number_parts' => '1',
-  'tab_parent' => '',
-  'tab_root' => 'batch',
-  'title' => '',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/system/system.admin.inc',
-))
-->values(array(
-  'path' => 'comment/delete',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:19:"administer comments";}',
-  'page_callback' => 'comment_delete',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'comment/delete',
-  'title' => 'Delete comment',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/comment/comment.admin.inc',
-))
-->values(array(
-  'path' => 'comment/edit',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:13:"post comments";}',
-  'page_callback' => 'comment_edit',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'comment/edit',
-  'title' => 'Edit comment',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/comment/comment.pages.inc',
-))
-->values(array(
-  'path' => 'comment/reply/%',
-  'load_functions' => 'a:1:{i:2;s:9:"node_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'node_access',
-  'access_arguments' => 'a:2:{i:0;s:4:"view";i:1;i:2;}',
-  'page_callback' => 'comment_reply',
-  'page_arguments' => 'a:1:{i:0;i:2;}',
-  'fit' => '6',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'comment/reply/%',
-  'title' => 'Reply to comment',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/comment/comment.pages.inc',
-))
-->values(array(
-  'path' => 'filter/tips',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '1',
-  'access_arguments' => 'a:0:{}',
-  'page_callback' => 'filter_tips_long',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'filter/tips',
-  'title' => 'Compose tips',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '20',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/filter/filter.pages.inc',
-))
-->values(array(
-  'path' => 'logout',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_is_logged_in',
-  'access_arguments' => 'a:0:{}',
-  'page_callback' => 'user_logout',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '1',
-  'number_parts' => '1',
-  'tab_parent' => '',
-  'tab_root' => 'logout',
-  'title' => 'Log out',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '10',
-  'file' => 'modules/user/user.pages.inc',
-))
-->values(array(
-  'path' => 'node',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:14:"access content";}',
-  'page_callback' => 'node_page_default',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '1',
-  'number_parts' => '1',
-  'tab_parent' => '',
-  'tab_root' => 'node',
-  'title' => 'Content',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => '',
-))
-->values(array(
-  'path' => 'node/%',
-  'load_functions' => 'a:1:{i:1;s:9:"node_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'node_access',
-  'access_arguments' => 'a:2:{i:0;s:4:"view";i:1;i:1;}',
-  'page_callback' => 'node_page_view',
-  'page_arguments' => 'a:1:{i:0;i:1;}',
-  'fit' => '2',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'node/%',
-  'title' => '',
-  'title_callback' => 'node_page_title',
-  'title_arguments' => 'a:1:{i:0;i:1;}',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => '',
-))
-->values(array(
-  'path' => 'node/%/delete',
-  'load_functions' => 'a:1:{i:1;s:9:"node_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'node_access',
-  'access_arguments' => 'a:2:{i:0;s:6:"delete";i:1;i:1;}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:19:"node_delete_confirm";i:1;i:1;}',
-  'fit' => '5',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'node/%/delete',
-  'title' => 'Delete',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '1',
-  'file' => 'modules/node/node.pages.inc',
-))
-->values(array(
-  'path' => 'node/%/edit',
-  'load_functions' => 'a:1:{i:1;s:9:"node_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'node_access',
-  'access_arguments' => 'a:2:{i:0;s:6:"update";i:1;i:1;}',
-  'page_callback' => 'node_page_edit',
-  'page_arguments' => 'a:1:{i:0;i:1;}',
-  'fit' => '5',
-  'number_parts' => '3',
-  'tab_parent' => 'node/%',
-  'tab_root' => 'node/%',
-  'title' => 'Edit',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '1',
-  'file' => 'modules/node/node.pages.inc',
-))
-->values(array(
-  'path' => 'node/%/results',
-  'load_functions' => 'a:1:{i:1;s:9:"node_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => '_poll_menu_access',
-  'access_arguments' => 'a:3:{i:0;i:1;i:1;s:14:"access content";i:2;b:1;}',
-  'page_callback' => 'poll_results',
-  'page_arguments' => 'a:1:{i:0;i:1;}',
-  'fit' => '5',
-  'number_parts' => '3',
-  'tab_parent' => 'node/%',
-  'tab_root' => 'node/%',
-  'title' => 'Results',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '3',
-  'file' => 'modules/poll/poll.pages.inc',
-))
-->values(array(
-  'path' => 'node/%/revisions',
-  'load_functions' => 'a:1:{i:1;s:9:"node_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => '_node_revision_access',
-  'access_arguments' => 'a:1:{i:0;i:1;}',
-  'page_callback' => 'node_revision_overview',
-  'page_arguments' => 'a:1:{i:0;i:1;}',
-  'fit' => '5',
-  'number_parts' => '3',
-  'tab_parent' => 'node/%',
-  'tab_root' => 'node/%',
-  'title' => 'Revisions',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '2',
-  'file' => 'modules/node/node.pages.inc',
-))
-->values(array(
-  'path' => 'node/%/revisions/%/delete',
-  'load_functions' => 'a:2:{i:1;a:1:{s:9:"node_load";a:1:{i:0;i:3;}}i:3;N;}',
-  'to_arg_functions' => '',
-  'access_callback' => '_node_revision_access',
-  'access_arguments' => 'a:2:{i:0;i:1;i:1;s:6:"delete";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:28:"node_revision_delete_confirm";i:1;i:1;}',
-  'fit' => '21',
-  'number_parts' => '5',
-  'tab_parent' => '',
-  'tab_root' => 'node/%/revisions/%/delete',
-  'title' => 'Delete earlier revision',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/node.pages.inc',
-))
-->values(array(
-  'path' => 'node/%/revisions/%/revert',
-  'load_functions' => 'a:2:{i:1;a:1:{s:9:"node_load";a:1:{i:0;i:3;}}i:3;N;}',
-  'to_arg_functions' => '',
-  'access_callback' => '_node_revision_access',
-  'access_arguments' => 'a:2:{i:0;i:1;i:1;s:6:"update";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:28:"node_revision_revert_confirm";i:1;i:1;}',
-  'fit' => '21',
-  'number_parts' => '5',
-  'tab_parent' => '',
-  'tab_root' => 'node/%/revisions/%/revert',
-  'title' => 'Revert to earlier revision',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/node.pages.inc',
-))
-->values(array(
-  'path' => 'node/%/revisions/%/view',
-  'load_functions' => 'a:2:{i:1;a:1:{s:9:"node_load";a:1:{i:0;i:3;}}i:3;N;}',
-  'to_arg_functions' => '',
-  'access_callback' => '_node_revision_access',
-  'access_arguments' => 'a:1:{i:0;i:1;}',
-  'page_callback' => 'node_show',
-  'page_arguments' => 'a:3:{i:0;i:1;i:1;N;i:2;b:1;}',
-  'fit' => '21',
-  'number_parts' => '5',
-  'tab_parent' => '',
-  'tab_root' => 'node/%/revisions/%/view',
-  'title' => 'Revisions',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => '',
-))
-->values(array(
-  'path' => 'node/%/view',
-  'load_functions' => 'a:1:{i:1;s:9:"node_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'node_access',
-  'access_arguments' => 'a:2:{i:0;s:4:"view";i:1;i:1;}',
-  'page_callback' => 'node_page_view',
-  'page_arguments' => 'a:1:{i:0;i:1;}',
-  'fit' => '5',
-  'number_parts' => '3',
-  'tab_parent' => 'node/%',
-  'tab_root' => 'node/%',
-  'title' => 'View',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '-10',
-  'file' => '',
-))
-->values(array(
-  'path' => 'node/%/votes',
-  'load_functions' => 'a:1:{i:1;s:9:"node_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => '_poll_menu_access',
-  'access_arguments' => 'a:3:{i:0;i:1;i:1;s:17:"inspect all votes";i:2;b:0;}',
-  'page_callback' => 'poll_votes',
-  'page_arguments' => 'a:1:{i:0;i:1;}',
-  'fit' => '5',
-  'number_parts' => '3',
-  'tab_parent' => 'node/%',
-  'tab_root' => 'node/%',
-  'title' => 'Votes',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '3',
-  'file' => 'modules/poll/poll.pages.inc',
-))
-->values(array(
-  'path' => 'node/add',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '_node_add_access',
-  'access_arguments' => 'a:0:{}',
-  'page_callback' => 'node_add_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'node/add',
-  'title' => 'Create content',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '1',
-  'file' => 'modules/node/node.pages.inc',
-))
-->values(array(
-  'path' => 'node/add/page',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'node_access',
-  'access_arguments' => 'a:2:{i:0;s:6:"create";i:1;s:4:"page";}',
-  'page_callback' => 'node_add',
-  'page_arguments' => 'a:1:{i:0;i:2;}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'node/add/page',
-  'title' => 'Page',
-  'title_callback' => 'check_plain',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => "A <em>page</em>, similar in form to a <em>story</em>, is a simple method for creating and displaying information that rarely changes, such as an \"About us\" section of a website. By default, a <em>page</em> entry does not allow visitor comments and is not featured on the site's initial home page.",
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/node.pages.inc',
-))
-->values(array(
-  'path' => 'node/add/poll',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'node_access',
-  'access_arguments' => 'a:2:{i:0;s:6:"create";i:1;s:4:"poll";}',
-  'page_callback' => 'node_add',
-  'page_arguments' => 'a:1:{i:0;i:2;}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'node/add/poll',
-  'title' => 'Poll',
-  'title_callback' => 'check_plain',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => 'A <em>poll</em> is a question with a set of possible responses. A <em>poll</em>, once created, automatically provides a simple running count of the number of votes received for each response.',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/node.pages.inc',
-))
-->values(array(
-  'path' => 'node/add/story',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'node_access',
-  'access_arguments' => 'a:2:{i:0;s:6:"create";i:1;s:5:"story";}',
-  'page_callback' => 'node_add',
-  'page_arguments' => 'a:1:{i:0;i:2;}',
-  'fit' => '7',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'node/add/story',
-  'title' => 'Story',
-  'title_callback' => 'check_plain',
-  'title_arguments' => '',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => "A <em>story</em>, similar in form to a <em>page</em>, is ideal for creating and displaying content that informs or engages website visitors. Press releases, site announcements, and informal blog-like entries may all be created with a <em>story</em> entry. By default, a <em>story</em> entry is automatically featured on the site's initial home page, and provides the ability to post comments.",
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/node/node.pages.inc',
-))
-->values(array(
-  'path' => 'poll',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:14:"access content";}',
-  'page_callback' => 'poll_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '1',
-  'number_parts' => '1',
-  'tab_parent' => '',
-  'tab_root' => 'poll',
-  'title' => 'Polls',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '20',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/poll/poll.pages.inc',
-))
-->values(array(
-  'path' => 'poll/js',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:14:"access content";}',
-  'page_callback' => 'poll_choice_js',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'poll/js',
-  'title' => 'Javascript Choice Form',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => '',
-))
-->values(array(
-  'path' => 'rss.xml',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:14:"access content";}',
-  'page_callback' => 'node_feed',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '1',
-  'number_parts' => '1',
-  'tab_parent' => '',
-  'tab_root' => 'rss.xml',
-  'title' => 'RSS feed',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => '',
-))
-->values(array(
-  'path' => 'system/files',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '1',
-  'access_arguments' => 'a:0:{}',
-  'page_callback' => 'file_download',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'system/files',
-  'title' => 'File download',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => '',
-))
-->values(array(
-  'path' => 'taxonomy/autocomplete',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:14:"access content";}',
-  'page_callback' => 'taxonomy_autocomplete',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'taxonomy/autocomplete',
-  'title' => 'Autocomplete taxonomy',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/taxonomy/taxonomy.pages.inc',
-))
-->values(array(
-  'path' => 'taxonomy/term/%',
-  'load_functions' => 'a:1:{i:2;N;}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:14:"access content";}',
-  'page_callback' => 'taxonomy_term_page',
-  'page_arguments' => 'a:1:{i:0;i:2;}',
-  'fit' => '6',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'taxonomy/term/%',
-  'title' => 'Taxonomy term',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/taxonomy/taxonomy.pages.inc',
-))
-->values(array(
-  'path' => 'user',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => '1',
-  'access_arguments' => 'a:0:{}',
-  'page_callback' => 'user_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '1',
-  'number_parts' => '1',
-  'tab_parent' => '',
-  'tab_root' => 'user',
-  'title' => 'User account',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.pages.inc',
-))
-->values(array(
-  'path' => 'user/%',
-  'load_functions' => 'a:1:{i:1;s:22:"user_uid_optional_load";}',
-  'to_arg_functions' => 'a:1:{i:1;s:24:"user_uid_optional_to_arg";}',
-  'access_callback' => 'user_view_access',
-  'access_arguments' => 'a:1:{i:0;i:1;}',
-  'page_callback' => 'user_view',
-  'page_arguments' => 'a:1:{i:0;i:1;}',
-  'fit' => '2',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'user/%',
-  'title' => 'My account',
-  'title_callback' => 'user_page_title',
-  'title_arguments' => 'a:1:{i:0;i:1;}',
-  'type' => '6',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.pages.inc',
-))
-->values(array(
-  'path' => 'user/%/delete',
-  'load_functions' => 'a:1:{i:1;s:9:"user_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:16:"administer users";}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:2:{i:0;s:19:"user_confirm_delete";i:1;i:1;}',
-  'fit' => '5',
-  'number_parts' => '3',
-  'tab_parent' => '',
-  'tab_root' => 'user/%/delete',
-  'title' => 'Delete',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.pages.inc',
-))
-->values(array(
-  'path' => 'user/%/edit',
-  'load_functions' => 'a:1:{i:1;a:1:{s:18:"user_category_load";a:2:{i:0;s:4:"%map";i:1;s:6:"%index";}}}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_edit_access',
-  'access_arguments' => 'a:1:{i:0;i:1;}',
-  'page_callback' => 'user_edit',
-  'page_arguments' => 'a:1:{i:0;i:1;}',
-  'fit' => '5',
-  'number_parts' => '3',
-  'tab_parent' => 'user/%',
-  'tab_root' => 'user/%',
-  'title' => 'Edit',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.pages.inc',
-))
-->values(array(
-  'path' => 'user/%/edit/account',
-  'load_functions' => 'a:1:{i:1;a:1:{s:18:"user_category_load";a:2:{i:0;s:4:"%map";i:1;s:6:"%index";}}}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_edit_access',
-  'access_arguments' => 'a:1:{i:0;i:1;}',
-  'page_callback' => 'user_edit',
-  'page_arguments' => 'a:1:{i:0;i:1;}',
-  'fit' => '11',
-  'number_parts' => '4',
-  'tab_parent' => 'user/%/edit',
-  'tab_root' => 'user/%',
-  'title' => 'Account',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.pages.inc',
-))
-->values(array(
-  'path' => 'user/%/view',
-  'load_functions' => 'a:1:{i:1;s:9:"user_load";}',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_view_access',
-  'access_arguments' => 'a:1:{i:0;i:1;}',
-  'page_callback' => 'user_view',
-  'page_arguments' => 'a:1:{i:0;i:1;}',
-  'fit' => '5',
-  'number_parts' => '3',
-  'tab_parent' => 'user/%',
-  'tab_root' => 'user/%',
-  'title' => 'View',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '-10',
-  'file' => 'modules/user/user.pages.inc',
-))
-->values(array(
-  'path' => 'user/autocomplete',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_access',
-  'access_arguments' => 'a:1:{i:0;s:20:"access user profiles";}',
-  'page_callback' => 'user_autocomplete',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => '',
-  'tab_root' => 'user/autocomplete',
-  'title' => 'User autocomplete',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.pages.inc',
-))
-->values(array(
-  'path' => 'user/login',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_is_anonymous',
-  'access_arguments' => 'a:0:{}',
-  'page_callback' => 'user_page',
-  'page_arguments' => 'a:0:{}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => 'user',
-  'tab_root' => 'user',
-  'title' => 'Log in',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '136',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.pages.inc',
-))
-->values(array(
-  'path' => 'user/password',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_is_anonymous',
-  'access_arguments' => 'a:0:{}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:9:"user_pass";}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => 'user',
-  'tab_root' => 'user',
-  'title' => 'Request new password',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.pages.inc',
-))
-->values(array(
-  'path' => 'user/register',
-  'load_functions' => '',
-  'to_arg_functions' => '',
-  'access_callback' => 'user_register_access',
-  'access_arguments' => 'a:0:{}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:1:{i:0;s:13:"user_register";}',
-  'fit' => '3',
-  'number_parts' => '2',
-  'tab_parent' => 'user',
-  'tab_root' => 'user',
-  'title' => 'Create new account',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '128',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.pages.inc',
-))
-->values(array(
-  'path' => 'user/reset/%/%/%',
-  'load_functions' => 'a:3:{i:2;N;i:3;N;i:4;N;}',
-  'to_arg_functions' => '',
-  'access_callback' => '1',
-  'access_arguments' => 'a:0:{}',
-  'page_callback' => 'drupal_get_form',
-  'page_arguments' => 'a:4:{i:0;s:15:"user_pass_reset";i:1;i:2;i:2;i:3;i:3;i:4;}',
-  'fit' => '24',
-  'number_parts' => '5',
-  'tab_parent' => '',
-  'tab_root' => 'user/reset/%/%/%',
-  'title' => 'Reset password',
-  'title_callback' => 't',
-  'title_arguments' => '',
-  'type' => '4',
-  'block_callback' => '',
-  'description' => '',
-  'position' => '',
-  'weight' => '0',
-  'file' => 'modules/user/user.pages.inc',
-))
-->execute();
-
-db_create_table('node', array(
-  'fields' => array(
-    'nid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'vid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'type' => array(
-      'type' => 'varchar',
-      'length' => 32,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'language' => array(
-      'type' => 'varchar',
-      'length' => 12,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'title' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'uid' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'status' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 1,
-    ),
-    'created' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'changed' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'comment' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'promote' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'moderate' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'sticky' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'tnid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'translate' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'indexes' => array(
-    'node_changed' => array(
-      'changed',
-    ),
-    'node_created' => array(
-      'created',
-    ),
-    'node_moderate' => array(
-      'moderate',
-    ),
-    'node_promote_status' => array(
-      'promote',
-      'status',
-    ),
-    'node_status_type' => array(
-      'status',
-      'type',
-      'nid',
-    ),
-    'node_title_type' => array(
-      'title',
-      array(
-        'type',
-        4,
-      ),
-    ),
-    'node_type' => array(
-      array(
-        'type',
-        4,
-      ),
-    ),
-    'uid' => array(
-      'uid',
-    ),
-    'tnid' => array(
-      'tnid',
-    ),
-    'translate' => array(
-      'translate',
-    ),
-  ),
-  'unique keys' => array(
-    'vid' => array(
-      'vid',
-    ),
-  ),
-  'primary key' => array(
-    'nid',
-  ),
-  'module' => 'node',
-  'name' => 'node',
-));
-db_insert('node')->fields(array(
-  'nid',
-  'vid',
-  'type',
-  'language',
-  'title',
-  'uid',
-  'status',
-  'created',
-  'changed',
-  'comment',
-  'promote',
-  'moderate',
-  'sticky',
-  'tnid',
-  'translate',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'type' => 'page',
-  'language' => '',
-  'title' => 'node title 1 rev 1 (i=0) rev2 2',
-  'uid' => '3',
-  'status' => '0',
-  'created' => '1262732400',
-  'changed' => '1282936266',
-  'comment' => '0',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'type' => 'page',
-  'language' => '',
-  'title' => 'node title 2 rev 3 (i=1) rev2 4',
-  'uid' => '3',
-  'status' => '0',
-  'created' => '1262818800',
-  'changed' => '1282936266',
-  'comment' => '0',
-  'promote' => '1',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'type' => 'page',
-  'language' => '',
-  'title' => 'node title 3 rev 5 (i=2) rev2 6',
-  'uid' => '3',
-  'status' => '0',
-  'created' => '1262905200',
-  'changed' => '1282936266',
-  'comment' => '0',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'type' => 'page',
-  'language' => '',
-  'title' => 'node title 4 rev 7 (i=3) rev2 8',
-  'uid' => '3',
-  'status' => '0',
-  'created' => '1262991600',
-  'changed' => '1282936266',
-  'comment' => '0',
-  'promote' => '1',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'type' => 'page',
-  'language' => '',
-  'title' => 'node title 5 rev 9 (i=4) rev2 10',
-  'uid' => '3',
-  'status' => '1',
-  'created' => '1263078000',
-  'changed' => '1282936266',
-  'comment' => '0',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'type' => 'page',
-  'language' => '',
-  'title' => 'node title 6 rev 11 (i=5) rev2 12',
-  'uid' => '3',
-  'status' => '1',
-  'created' => '1263164400',
-  'changed' => '1282936266',
-  'comment' => '0',
-  'promote' => '1',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'type' => 'page',
-  'language' => '',
-  'title' => 'node title 7 rev 13 (i=6) rev2 14',
-  'uid' => '3',
-  'status' => '1',
-  'created' => '1263250800',
-  'changed' => '1282936266',
-  'comment' => '0',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'type' => 'page',
-  'language' => '',
-  'title' => 'node title 8 rev 15 (i=7) rev2 16',
-  'uid' => '3',
-  'status' => '1',
-  'created' => '1263337200',
-  'changed' => '1282936266',
-  'comment' => '0',
-  'promote' => '1',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'type' => 'page',
-  'language' => '',
-  'title' => 'node title 9 rev 17 (i=8) rev2 18',
-  'uid' => '4',
-  'status' => '0',
-  'created' => '1263423600',
-  'changed' => '1282936266',
-  'comment' => '0',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'type' => 'page',
-  'language' => '',
-  'title' => 'node title 10 rev 19 (i=9) rev2 20',
-  'uid' => '4',
-  'status' => '0',
-  'created' => '1263510000',
-  'changed' => '1282936266',
-  'comment' => '0',
-  'promote' => '1',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'type' => 'page',
-  'language' => '',
-  'title' => 'node title 11 rev 21 (i=10) rev2 22',
-  'uid' => '4',
-  'status' => '0',
-  'created' => '1263596400',
-  'changed' => '1282936267',
-  'comment' => '0',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'type' => 'page',
-  'language' => '',
-  'title' => 'node title 12 rev 23 (i=11) rev2 24',
-  'uid' => '4',
-  'status' => '0',
-  'created' => '1263682800',
-  'changed' => '1282936267',
-  'comment' => '0',
-  'promote' => '1',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'type' => 'story',
-  'language' => '',
-  'title' => 'node title 13 rev 25 (i=12)',
-  'uid' => '4',
-  'status' => '1',
-  'created' => '1263769200',
-  'changed' => '1282936267',
-  'comment' => '0',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'type' => 'story',
-  'language' => '',
-  'title' => 'node title 14 rev 26 (i=13)',
-  'uid' => '4',
-  'status' => '1',
-  'created' => '1263855600',
-  'changed' => '1282936267',
-  'comment' => '0',
-  'promote' => '1',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'type' => 'story',
-  'language' => '',
-  'title' => 'node title 15 rev 27 (i=14)',
-  'uid' => '4',
-  'status' => '1',
-  'created' => '1263942000',
-  'changed' => '1282936267',
-  'comment' => '0',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'type' => 'story',
-  'language' => '',
-  'title' => 'node title 16 rev 28 (i=15)',
-  'uid' => '4',
-  'status' => '1',
-  'created' => '1264028400',
-  'changed' => '1282936267',
-  'comment' => '0',
-  'promote' => '1',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'type' => 'story',
-  'language' => '',
-  'title' => 'node title 17 rev 29 (i=16)',
-  'uid' => '5',
-  'status' => '0',
-  'created' => '1264114800',
-  'changed' => '1282936267',
-  'comment' => '0',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'type' => 'story',
-  'language' => '',
-  'title' => 'node title 18 rev 30 (i=17)',
-  'uid' => '5',
-  'status' => '0',
-  'created' => '1264201200',
-  'changed' => '1282936267',
-  'comment' => '0',
-  'promote' => '1',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'type' => 'story',
-  'language' => '',
-  'title' => 'node title 19 rev 31 (i=18)',
-  'uid' => '5',
-  'status' => '0',
-  'created' => '1264287600',
-  'changed' => '1282936267',
-  'comment' => '0',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'type' => 'story',
-  'language' => '',
-  'title' => 'node title 20 rev 32 (i=19)',
-  'uid' => '5',
-  'status' => '0',
-  'created' => '1264374000',
-  'changed' => '1282936267',
-  'comment' => '0',
-  'promote' => '1',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'type' => 'story',
-  'language' => '',
-  'title' => 'node title 21 rev 33 (i=20)',
-  'uid' => '5',
-  'status' => '1',
-  'created' => '1264460400',
-  'changed' => '1282936267',
-  'comment' => '0',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'type' => 'story',
-  'language' => '',
-  'title' => 'node title 22 rev 34 (i=21)',
-  'uid' => '5',
-  'status' => '1',
-  'created' => '1264546800',
-  'changed' => '1282936267',
-  'comment' => '0',
-  'promote' => '1',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'type' => 'story',
-  'language' => '',
-  'title' => 'node title 23 rev 35 (i=22)',
-  'uid' => '5',
-  'status' => '1',
-  'created' => '1264633200',
-  'changed' => '1282936267',
-  'comment' => '0',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'type' => 'story',
-  'language' => '',
-  'title' => 'node title 24 rev 36 (i=23)',
-  'uid' => '5',
-  'status' => '1',
-  'created' => '1264719600',
-  'changed' => '1282936267',
-  'comment' => '0',
-  'promote' => '1',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '25',
-  'vid' => '37',
-  'type' => 'poll',
-  'language' => '',
-  'title' => 'poll title 0',
-  'uid' => '3',
-  'status' => '0',
-  'created' => '1262732400',
-  'changed' => '1282936268',
-  'comment' => '0',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '26',
-  'vid' => '38',
-  'type' => 'poll',
-  'language' => '',
-  'title' => 'poll title 1',
-  'uid' => '3',
-  'status' => '0',
-  'created' => '1262775600',
-  'changed' => '1282936268',
-  'comment' => '0',
-  'promote' => '1',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '27',
-  'vid' => '39',
-  'type' => 'poll',
-  'language' => '',
-  'title' => 'poll title 2',
-  'uid' => '3',
-  'status' => '1',
-  'created' => '1262818800',
-  'changed' => '1282936268',
-  'comment' => '0',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '28',
-  'vid' => '40',
-  'type' => 'poll',
-  'language' => '',
-  'title' => 'poll title 3',
-  'uid' => '3',
-  'status' => '1',
-  'created' => '1262862000',
-  'changed' => '1282936268',
-  'comment' => '0',
-  'promote' => '1',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '29',
-  'vid' => '41',
-  'type' => 'poll',
-  'language' => '',
-  'title' => 'poll title 4',
-  'uid' => '4',
-  'status' => '0',
-  'created' => '1262905200',
-  'changed' => '1282936268',
-  'comment' => '0',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '30',
-  'vid' => '42',
-  'type' => 'poll',
-  'language' => '',
-  'title' => 'poll title 5',
-  'uid' => '4',
-  'status' => '0',
-  'created' => '1262948400',
-  'changed' => '1282936268',
-  'comment' => '0',
-  'promote' => '1',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '31',
-  'vid' => '43',
-  'type' => 'poll',
-  'language' => '',
-  'title' => 'poll title 6',
-  'uid' => '4',
-  'status' => '1',
-  'created' => '1262991600',
-  'changed' => '1282936268',
-  'comment' => '0',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '32',
-  'vid' => '44',
-  'type' => 'poll',
-  'language' => '',
-  'title' => 'poll title 7',
-  'uid' => '4',
-  'status' => '1',
-  'created' => '1263034800',
-  'changed' => '1282936268',
-  'comment' => '0',
-  'promote' => '1',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '33',
-  'vid' => '45',
-  'type' => 'poll',
-  'language' => '',
-  'title' => 'poll title 8',
-  'uid' => '5',
-  'status' => '0',
-  'created' => '1263078000',
-  'changed' => '1282936268',
-  'comment' => '0',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '34',
-  'vid' => '46',
-  'type' => 'poll',
-  'language' => '',
-  'title' => 'poll title 9',
-  'uid' => '5',
-  'status' => '0',
-  'created' => '1263121200',
-  'changed' => '1282936268',
-  'comment' => '0',
-  'promote' => '1',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '35',
-  'vid' => '47',
-  'type' => 'poll',
-  'language' => '',
-  'title' => 'poll title 10',
-  'uid' => '5',
-  'status' => '1',
-  'created' => '1263164400',
-  'changed' => '1282936268',
-  'comment' => '0',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '36',
-  'vid' => '48',
-  'type' => 'poll',
-  'language' => '',
-  'title' => 'poll title 11',
-  'uid' => '5',
-  'status' => '1',
-  'created' => '1263207600',
-  'changed' => '1282936268',
-  'comment' => '0',
-  'promote' => '1',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '37',
-  'vid' => '49',
-  'type' => 'broken',
-  'language' => '',
-  'title' => 'node title 24',
-  'uid' => '6',
-  'status' => '1',
-  'created' => '1263769200',
-  'changed' => '1279310614',
-  'comment' => '0',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->execute();
-
-db_create_table('node_access', array(
-  'fields' => array(
-    'nid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'gid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'realm' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'grant_view' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'grant_update' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'grant_delete' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-  ),
-  'primary key' => array(
-    'nid',
-    'gid',
-    'realm',
-  ),
-  'module' => 'node',
-  'name' => 'node_access',
-));
-db_insert('node_access')->fields(array(
-  'nid',
-  'gid',
-  'realm',
-  'grant_view',
-  'grant_update',
-  'grant_delete',
-))
-->values(array(
-  'nid' => '0',
-  'gid' => '0',
-  'realm' => 'all',
-  'grant_view' => '1',
-  'grant_update' => '0',
-  'grant_delete' => '0',
-))
-->execute();
-
-db_create_table('node_comment_statistics', array(
-  'fields' => array(
-    'nid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'last_comment_timestamp' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'last_comment_name' => array(
-      'type' => 'varchar',
-      'length' => 60,
-      'not null' => FALSE,
-    ),
-    'last_comment_uid' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'comment_count' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'primary key' => array(
-    'nid',
-  ),
-  'indexes' => array(
-    'node_comment_timestamp' => array(
-      'last_comment_timestamp',
-    ),
-  ),
-  'module' => 'comment',
-  'name' => 'node_comment_statistics',
-));
-db_insert('node_comment_statistics')->fields(array(
-  'nid',
-  'last_comment_timestamp',
-  'last_comment_name',
-  'last_comment_uid',
-  'comment_count',
-))
-->values(array(
-  'nid' => '1',
-  'last_comment_timestamp' => '1282936266',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '3',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '2',
-  'last_comment_timestamp' => '1282936266',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '3',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '3',
-  'last_comment_timestamp' => '1282936266',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '3',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '4',
-  'last_comment_timestamp' => '1282936266',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '3',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '5',
-  'last_comment_timestamp' => '1282936266',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '3',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '6',
-  'last_comment_timestamp' => '1282936266',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '3',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '7',
-  'last_comment_timestamp' => '1282936266',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '3',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '8',
-  'last_comment_timestamp' => '1282936266',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '3',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '9',
-  'last_comment_timestamp' => '1282936266',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '4',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '10',
-  'last_comment_timestamp' => '1282936266',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '4',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '11',
-  'last_comment_timestamp' => '1282936267',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '4',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '12',
-  'last_comment_timestamp' => '1282936267',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '4',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '13',
-  'last_comment_timestamp' => '1282936267',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '4',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '14',
-  'last_comment_timestamp' => '1282936267',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '4',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '15',
-  'last_comment_timestamp' => '1282936267',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '4',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '16',
-  'last_comment_timestamp' => '1282936267',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '4',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '17',
-  'last_comment_timestamp' => '1282936267',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '5',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '18',
-  'last_comment_timestamp' => '1282936267',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '5',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '19',
-  'last_comment_timestamp' => '1282936267',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '5',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '20',
-  'last_comment_timestamp' => '1282936267',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '5',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '21',
-  'last_comment_timestamp' => '1282936267',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '5',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '22',
-  'last_comment_timestamp' => '1282936267',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '5',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '23',
-  'last_comment_timestamp' => '1282936267',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '5',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '24',
-  'last_comment_timestamp' => '1282936267',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '5',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '25',
-  'last_comment_timestamp' => '1282936268',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '3',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '26',
-  'last_comment_timestamp' => '1282936268',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '3',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '27',
-  'last_comment_timestamp' => '1282936268',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '3',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '28',
-  'last_comment_timestamp' => '1282936268',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '3',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '29',
-  'last_comment_timestamp' => '1282936268',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '4',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '30',
-  'last_comment_timestamp' => '1282936268',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '4',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '31',
-  'last_comment_timestamp' => '1282936268',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '4',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '32',
-  'last_comment_timestamp' => '1282936268',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '4',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '33',
-  'last_comment_timestamp' => '1282936268',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '5',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '34',
-  'last_comment_timestamp' => '1282936268',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '5',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '35',
-  'last_comment_timestamp' => '1282936268',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '5',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '36',
-  'last_comment_timestamp' => '1282936268',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '5',
-  'comment_count' => '0',
-))
-->values(array(
-  'nid' => '37',
-  'last_comment_timestamp' => '1279310615',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '6',
-  'comment_count' => '0',
-))
-->execute();
-
-db_create_table('node_counter', array(
-  'fields' => array(
-    'nid' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'totalcount' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'big',
-    ),
-    'daycount' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'medium',
-    ),
-    'timestamp' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'primary key' => array(
-    'nid',
-  ),
-  'module' => 'node',
-  'name' => 'node_counter',
-));
-
-db_create_table('node_revisions', array(
-  'fields' => array(
-    'nid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'vid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'uid' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'title' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'body' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-      'size' => 'big',
-    ),
-    'teaser' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-      'size' => 'big',
-    ),
-    'log' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-      'size' => 'big',
-    ),
-    'timestamp' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'format' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'indexes' => array(
-    'nid' => array(
-      'nid',
-    ),
-    'uid' => array(
-      'uid',
-    ),
-  ),
-  'primary key' => array(
-    'vid',
-  ),
-  'module' => 'node',
-  'name' => 'node_revisions',
-));
-db_insert('node_revisions')->fields(array(
-  'nid',
-  'vid',
-  'uid',
-  'title',
-  'body',
-  'teaser',
-  'log',
-  'timestamp',
-  'format',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '1',
-  'uid' => '3',
-  'title' => 'node title 1 rev 1 (i=0)',
-  'body' => 'node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0',
-  'teaser' => 'node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0',
-  'log' => 'added 0 node',
-  'timestamp' => '1282936266',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'uid' => '6',
-  'title' => 'node title 1 rev 1 (i=0) rev2 2',
-  'body' => 'node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0node revision body (page) - 0',
-  'teaser' => 'node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0node body (page) - 0',
-  'log' => 'added 0 revision',
-  'timestamp' => '1282936266',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '3',
-  'uid' => '3',
-  'title' => 'node title 2 rev 3 (i=1)',
-  'body' => 'node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1',
-  'teaser' => 'node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1',
-  'log' => 'added 1 node',
-  'timestamp' => '1282936266',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'uid' => '6',
-  'title' => 'node title 2 rev 3 (i=1) rev2 4',
-  'body' => 'node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1node revision body (page) - 1',
-  'teaser' => 'node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1node body (page) - 1',
-  'log' => 'added 1 revision',
-  'timestamp' => '1282936266',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '5',
-  'uid' => '3',
-  'title' => 'node title 3 rev 5 (i=2)',
-  'body' => 'node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2',
-  'teaser' => 'node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2',
-  'log' => 'added 2 node',
-  'timestamp' => '1282936266',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'uid' => '6',
-  'title' => 'node title 3 rev 5 (i=2) rev2 6',
-  'body' => 'node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2node revision body (page) - 2',
-  'teaser' => 'node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2node body (page) - 2',
-  'log' => 'added 2 revision',
-  'timestamp' => '1282936266',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '7',
-  'uid' => '3',
-  'title' => 'node title 4 rev 7 (i=3)',
-  'body' => 'node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3',
-  'teaser' => 'node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3',
-  'log' => 'added 3 node',
-  'timestamp' => '1282936266',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'uid' => '6',
-  'title' => 'node title 4 rev 7 (i=3) rev2 8',
-  'body' => 'node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3node revision body (page) - 3',
-  'teaser' => 'node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3node body (page) - 3',
-  'log' => 'added 3 revision',
-  'timestamp' => '1282936266',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '9',
-  'uid' => '3',
-  'title' => 'node title 5 rev 9 (i=4)',
-  'body' => 'node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4',
-  'teaser' => 'node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4',
-  'log' => 'added 4 node',
-  'timestamp' => '1282936266',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'uid' => '6',
-  'title' => 'node title 5 rev 9 (i=4) rev2 10',
-  'body' => 'node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4node revision body (page) - 4',
-  'teaser' => 'node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4node body (page) - 4',
-  'log' => 'added 4 revision',
-  'timestamp' => '1282936266',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '11',
-  'uid' => '3',
-  'title' => 'node title 6 rev 11 (i=5)',
-  'body' => 'node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5',
-  'teaser' => 'node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5',
-  'log' => 'added 5 node',
-  'timestamp' => '1282936266',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'uid' => '6',
-  'title' => 'node title 6 rev 11 (i=5) rev2 12',
-  'body' => 'node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5node revision body (page) - 5',
-  'teaser' => 'node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5node body (page) - 5',
-  'log' => 'added 5 revision',
-  'timestamp' => '1282936266',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '13',
-  'uid' => '3',
-  'title' => 'node title 7 rev 13 (i=6)',
-  'body' => 'node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6',
-  'teaser' => 'node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6',
-  'log' => 'added 6 node',
-  'timestamp' => '1282936266',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'uid' => '6',
-  'title' => 'node title 7 rev 13 (i=6) rev2 14',
-  'body' => 'node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6node revision body (page) - 6',
-  'teaser' => 'node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6node body (page) - 6',
-  'log' => 'added 6 revision',
-  'timestamp' => '1282936266',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '15',
-  'uid' => '3',
-  'title' => 'node title 8 rev 15 (i=7)',
-  'body' => 'node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7',
-  'teaser' => 'node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7',
-  'log' => 'added 7 node',
-  'timestamp' => '1282936266',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'uid' => '6',
-  'title' => 'node title 8 rev 15 (i=7) rev2 16',
-  'body' => 'node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7node revision body (page) - 7',
-  'teaser' => 'node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7node body (page) - 7',
-  'log' => 'added 7 revision',
-  'timestamp' => '1282936266',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '17',
-  'uid' => '4',
-  'title' => 'node title 9 rev 17 (i=8)',
-  'body' => 'node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8',
-  'teaser' => 'node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8',
-  'log' => 'added 8 node',
-  'timestamp' => '1282936266',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'uid' => '7',
-  'title' => 'node title 9 rev 17 (i=8) rev2 18',
-  'body' => 'node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8node revision body (page) - 8',
-  'teaser' => 'node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8node body (page) - 8',
-  'log' => 'added 8 revision',
-  'timestamp' => '1282936266',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '19',
-  'uid' => '4',
-  'title' => 'node title 10 rev 19 (i=9)',
-  'body' => 'node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9',
-  'teaser' => 'node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9',
-  'log' => 'added 9 node',
-  'timestamp' => '1282936266',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'uid' => '7',
-  'title' => 'node title 10 rev 19 (i=9) rev2 20',
-  'body' => 'node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9node revision body (page) - 9',
-  'teaser' => 'node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9node body (page) - 9',
-  'log' => 'added 9 revision',
-  'timestamp' => '1282936266',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '21',
-  'uid' => '4',
-  'title' => 'node title 11 rev 21 (i=10)',
-  'body' => 'node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10',
-  'teaser' => 'node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (p',
-  'log' => 'added 10 node',
-  'timestamp' => '1282936267',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'uid' => '7',
-  'title' => 'node title 11 rev 21 (i=10) rev2 22',
-  'body' => 'node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10node revision body (page) - 10',
-  'teaser' => 'node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (page) - 10node body (p',
-  'log' => 'added 10 revision',
-  'timestamp' => '1282936267',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '23',
-  'uid' => '4',
-  'title' => 'node title 12 rev 23 (i=11)',
-  'body' => 'node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11',
-  'teaser' => 'node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (p',
-  'log' => 'added 11 node',
-  'timestamp' => '1282936267',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'uid' => '7',
-  'title' => 'node title 12 rev 23 (i=11) rev2 24',
-  'body' => 'node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11node revision body (page) - 11',
-  'teaser' => 'node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (page) - 11node body (p',
-  'log' => 'added 11 revision',
-  'timestamp' => '1282936267',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'uid' => '4',
-  'title' => 'node title 13 rev 25 (i=12)',
-  'body' => 'node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12',
-  'teaser' => 'node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node body (story) - 12node b',
-  'log' => 'added 12 node',
-  'timestamp' => '1282936267',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'uid' => '4',
-  'title' => 'node title 14 rev 26 (i=13)',
-  'body' => 'node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13',
-  'teaser' => 'node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node body (story) - 13node b',
-  'log' => 'added 13 node',
-  'timestamp' => '1282936267',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'uid' => '4',
-  'title' => 'node title 15 rev 27 (i=14)',
-  'body' => 'node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14',
-  'teaser' => 'node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node body (story) - 14node b',
-  'log' => 'added 14 node',
-  'timestamp' => '1282936267',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'uid' => '4',
-  'title' => 'node title 16 rev 28 (i=15)',
-  'body' => 'node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15',
-  'teaser' => 'node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node body (story) - 15node b',
-  'log' => 'added 15 node',
-  'timestamp' => '1282936267',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'uid' => '5',
-  'title' => 'node title 17 rev 29 (i=16)',
-  'body' => 'node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16',
-  'teaser' => 'node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node body (story) - 16node b',
-  'log' => 'added 16 node',
-  'timestamp' => '1282936267',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'uid' => '5',
-  'title' => 'node title 18 rev 30 (i=17)',
-  'body' => 'node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17',
-  'teaser' => 'node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node body (story) - 17node b',
-  'log' => 'added 17 node',
-  'timestamp' => '1282936267',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'uid' => '5',
-  'title' => 'node title 19 rev 31 (i=18)',
-  'body' => 'node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18',
-  'teaser' => 'node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node body (story) - 18node b',
-  'log' => 'added 18 node',
-  'timestamp' => '1282936267',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'uid' => '5',
-  'title' => 'node title 20 rev 32 (i=19)',
-  'body' => 'node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19',
-  'teaser' => 'node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node body (story) - 19node b',
-  'log' => 'added 19 node',
-  'timestamp' => '1282936267',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'uid' => '5',
-  'title' => 'node title 21 rev 33 (i=20)',
-  'body' => 'node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20',
-  'teaser' => 'node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node body (story) - 20node b',
-  'log' => 'added 20 node',
-  'timestamp' => '1282936267',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'uid' => '5',
-  'title' => 'node title 22 rev 34 (i=21)',
-  'body' => 'node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21',
-  'teaser' => 'node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node body (story) - 21node b',
-  'log' => 'added 21 node',
-  'timestamp' => '1282936267',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'uid' => '5',
-  'title' => 'node title 23 rev 35 (i=22)',
-  'body' => 'node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22',
-  'teaser' => 'node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node body (story) - 22node b',
-  'log' => 'added 22 node',
-  'timestamp' => '1282936267',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'uid' => '5',
-  'title' => 'node title 24 rev 36 (i=23)',
-  'body' => 'node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23',
-  'teaser' => 'node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node body (story) - 23node b',
-  'log' => 'added 23 node',
-  'timestamp' => '1282936267',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '25',
-  'vid' => '37',
-  'uid' => '3',
-  'title' => 'poll title 0',
-  'body' => '',
-  'teaser' => '',
-  'log' => 'added 0 poll',
-  'timestamp' => '1282936268',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '26',
-  'vid' => '38',
-  'uid' => '3',
-  'title' => 'poll title 1',
-  'body' => '',
-  'teaser' => '',
-  'log' => 'added 1 poll',
-  'timestamp' => '1282936268',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '27',
-  'vid' => '39',
-  'uid' => '3',
-  'title' => 'poll title 2',
-  'body' => '',
-  'teaser' => '',
-  'log' => 'added 2 poll',
-  'timestamp' => '1282936268',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '28',
-  'vid' => '40',
-  'uid' => '3',
-  'title' => 'poll title 3',
-  'body' => '',
-  'teaser' => '',
-  'log' => 'added 3 poll',
-  'timestamp' => '1282936268',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '29',
-  'vid' => '41',
-  'uid' => '4',
-  'title' => 'poll title 4',
-  'body' => '',
-  'teaser' => '',
-  'log' => 'added 4 poll',
-  'timestamp' => '1282936268',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '30',
-  'vid' => '42',
-  'uid' => '4',
-  'title' => 'poll title 5',
-  'body' => '',
-  'teaser' => '',
-  'log' => 'added 5 poll',
-  'timestamp' => '1282936268',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '31',
-  'vid' => '43',
-  'uid' => '4',
-  'title' => 'poll title 6',
-  'body' => '',
-  'teaser' => '',
-  'log' => 'added 6 poll',
-  'timestamp' => '1282936268',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '32',
-  'vid' => '44',
-  'uid' => '4',
-  'title' => 'poll title 7',
-  'body' => '',
-  'teaser' => '',
-  'log' => 'added 7 poll',
-  'timestamp' => '1282936268',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '33',
-  'vid' => '45',
-  'uid' => '5',
-  'title' => 'poll title 8',
-  'body' => '',
-  'teaser' => '',
-  'log' => 'added 8 poll',
-  'timestamp' => '1282936268',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '34',
-  'vid' => '46',
-  'uid' => '5',
-  'title' => 'poll title 9',
-  'body' => '',
-  'teaser' => '',
-  'log' => 'added 9 poll',
-  'timestamp' => '1282936268',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '35',
-  'vid' => '47',
-  'uid' => '5',
-  'title' => 'poll title 10',
-  'body' => '',
-  'teaser' => '',
-  'log' => 'added 10 poll',
-  'timestamp' => '1282936268',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '36',
-  'vid' => '48',
-  'uid' => '5',
-  'title' => 'poll title 11',
-  'body' => '',
-  'teaser' => '',
-  'log' => 'added 11 poll',
-  'timestamp' => '1282936268',
-  'format' => '0',
-))
-->values(array(
-  'nid' => '37',
-  'vid' => '49',
-  'uid' => '6',
-  'title' => 'node title 24',
-  'body' => 'node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37',
-  'teaser' => 'node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37node body (broken) - 37no',
-  'log' => 'added 12 node',
-  'timestamp' => '1279310614',
-  'format' => '0',
-))
-->execute();
-
-db_create_table('node_type', array(
-  'fields' => array(
-    'type' => array(
-      'type' => 'varchar',
-      'length' => 32,
-      'not null' => TRUE,
-    ),
-    'name' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'module' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-    ),
-    'description' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-      'size' => 'medium',
-    ),
-    'help' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-      'size' => 'medium',
-    ),
-    'has_title' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'size' => 'tiny',
-    ),
-    'title_label' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'has_body' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'size' => 'tiny',
-    ),
-    'body_label' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'min_word_count' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'size' => 'small',
-    ),
-    'custom' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'modified' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'locked' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'orig_type' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-  ),
-  'primary key' => array(
-    'type',
-  ),
-  'module' => 'node',
-  'name' => 'node_type',
-));
-db_insert('node_type')->fields(array(
-  'type',
-  'name',
-  'module',
-  'description',
-  'help',
-  'has_title',
-  'title_label',
-  'has_body',
-  'body_label',
-  'min_word_count',
-  'custom',
-  'modified',
-  'locked',
-  'orig_type',
-))
-->values(array(
-  'type' => 'page',
-  'name' => 'Page',
-  'module' => 'node',
-  'description' => "A <em>page</em>, similar in form to a <em>story</em>, is a simple method for creating and displaying information that rarely changes, such as an \"About us\" section of a website. By default, a <em>page</em> entry does not allow visitor comments and is not featured on the site's initial home page.",
-  'help' => '',
-  'has_title' => '1',
-  'title_label' => 'Title',
-  'has_body' => '1',
-  'body_label' => 'Body',
-  'min_word_count' => '0',
-  'custom' => '1',
-  'modified' => '1',
-  'locked' => '0',
-  'orig_type' => 'page',
-))
-->values(array(
-  'type' => 'poll',
-  'name' => 'Poll',
-  'module' => 'poll',
-  'description' => 'A <em>poll</em> is a question with a set of possible responses. A <em>poll</em>, once created, automatically provides a simple running count of the number of votes received for each response.',
-  'help' => '',
-  'has_title' => '1',
-  'title_label' => 'Question',
-  'has_body' => '0',
-  'body_label' => '',
-  'min_word_count' => '0',
-  'custom' => '0',
-  'modified' => '0',
-  'locked' => '1',
-  'orig_type' => 'poll',
-))
-->values(array(
-  'type' => 'story',
-  'name' => 'Story',
-  'module' => 'node',
-  'description' => "A <em>story</em>, similar in form to a <em>page</em>, is ideal for creating and displaying content that informs or engages website visitors. Press releases, site announcements, and informal blog-like entries may all be created with a <em>story</em> entry. By default, a <em>story</em> entry is automatically featured on the site's initial home page, and provides the ability to post comments.",
-  'help' => '',
-  'has_title' => '1',
-  'title_label' => 'Title',
-  'has_body' => '1',
-  'body_label' => 'Body',
-  'min_word_count' => '0',
-  'custom' => '1',
-  'modified' => '1',
-  'locked' => '0',
-  'orig_type' => 'story',
-))
-->execute();
-
-db_create_table('permission', array(
-  'fields' => array(
-    'pid' => array(
-      'type' => 'serial',
-      'not null' => TRUE,
-    ),
-    'rid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'perm' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'tid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'primary key' => array(
-    'pid',
-  ),
-  'indexes' => array(
-    'rid' => array(
-      'rid',
-    ),
-  ),
-  'module' => 'user',
-  'name' => 'permission',
-));
-db_insert('permission')->fields(array(
-  'pid',
-  'rid',
-  'perm',
-  'tid',
-))
-->values(array(
-  'pid' => '1',
-  'rid' => '1',
-  'perm' => 'access content',
-  'tid' => '0',
-))
-->values(array(
-  'pid' => '2',
-  'rid' => '2',
-  'perm' => 'access comments, access content, post comments, post comments without approval',
-  'tid' => '0',
-))
-->execute();
-
-db_create_table('poll', array(
-  'fields' => array(
-    'nid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'runtime' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'active' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'primary key' => array(
-    'nid',
-  ),
-  'module' => 'poll',
-  'name' => 'poll',
-));
-db_insert('poll')->fields(array(
-  'nid',
-  'runtime',
-  'active',
-))
-->values(array(
-  'nid' => '25',
-  'runtime' => '0',
-  'active' => '1',
-))
-->values(array(
-  'nid' => '26',
-  'runtime' => '0',
-  'active' => '1',
-))
-->values(array(
-  'nid' => '27',
-  'runtime' => '0',
-  'active' => '1',
-))
-->values(array(
-  'nid' => '28',
-  'runtime' => '0',
-  'active' => '1',
-))
-->values(array(
-  'nid' => '29',
-  'runtime' => '0',
-  'active' => '1',
-))
-->values(array(
-  'nid' => '30',
-  'runtime' => '0',
-  'active' => '1',
-))
-->values(array(
-  'nid' => '31',
-  'runtime' => '0',
-  'active' => '1',
-))
-->values(array(
-  'nid' => '32',
-  'runtime' => '0',
-  'active' => '1',
-))
-->values(array(
-  'nid' => '33',
-  'runtime' => '0',
-  'active' => '1',
-))
-->values(array(
-  'nid' => '34',
-  'runtime' => '0',
-  'active' => '1',
-))
-->values(array(
-  'nid' => '35',
-  'runtime' => '0',
-  'active' => '1',
-))
-->values(array(
-  'nid' => '36',
-  'runtime' => '0',
-  'active' => '1',
-))
-->execute();
-
-db_create_table('poll_choices', array(
-  'fields' => array(
-    'chid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'nid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'chtext' => array(
-      'type' => 'varchar',
-      'length' => 128,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'chvotes' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'chorder' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'indexes' => array(
-    'nid' => array(
-      'nid',
-    ),
-  ),
-  'primary key' => array(
-    'chid',
-  ),
-  'module' => 'poll',
-  'name' => 'poll_choices',
-));
-db_insert('poll_choices')->fields(array(
-  'chid',
-  'nid',
-  'chtext',
-  'chvotes',
-  'chorder',
-))
-->values(array(
-  'chid' => '1',
-  'nid' => '25',
-  'chtext' => 'Choice 0 for poll 0',
-  'chvotes' => '3',
-  'chorder' => '0',
-))
-->values(array(
-  'chid' => '2',
-  'nid' => '25',
-  'chtext' => 'Choice 1 for poll 0',
-  'chvotes' => '2',
-  'chorder' => '1',
-))
-->values(array(
-  'chid' => '3',
-  'nid' => '26',
-  'chtext' => 'Choice 0 for poll 1',
-  'chvotes' => '2',
-  'chorder' => '0',
-))
-->values(array(
-  'chid' => '4',
-  'nid' => '26',
-  'chtext' => 'Choice 1 for poll 1',
-  'chvotes' => '2',
-  'chorder' => '1',
-))
-->values(array(
-  'chid' => '5',
-  'nid' => '26',
-  'chtext' => 'Choice 2 for poll 1',
-  'chvotes' => '2',
-  'chorder' => '2',
-))
-->values(array(
-  'chid' => '6',
-  'nid' => '27',
-  'chtext' => 'Choice 0 for poll 2',
-  'chvotes' => '2',
-  'chorder' => '0',
-))
-->values(array(
-  'chid' => '7',
-  'nid' => '27',
-  'chtext' => 'Choice 1 for poll 2',
-  'chvotes' => '2',
-  'chorder' => '1',
-))
-->values(array(
-  'chid' => '8',
-  'nid' => '27',
-  'chtext' => 'Choice 2 for poll 2',
-  'chvotes' => '2',
-  'chorder' => '2',
-))
-->values(array(
-  'chid' => '9',
-  'nid' => '27',
-  'chtext' => 'Choice 3 for poll 2',
-  'chvotes' => '1',
-  'chorder' => '3',
-))
-->values(array(
-  'chid' => '10',
-  'nid' => '28',
-  'chtext' => 'Choice 0 for poll 3',
-  'chvotes' => '2',
-  'chorder' => '0',
-))
-->values(array(
-  'chid' => '11',
-  'nid' => '28',
-  'chtext' => 'Choice 1 for poll 3',
-  'chvotes' => '2',
-  'chorder' => '1',
-))
-->values(array(
-  'chid' => '12',
-  'nid' => '28',
-  'chtext' => 'Choice 2 for poll 3',
-  'chvotes' => '2',
-  'chorder' => '2',
-))
-->values(array(
-  'chid' => '13',
-  'nid' => '28',
-  'chtext' => 'Choice 3 for poll 3',
-  'chvotes' => '1',
-  'chorder' => '3',
-))
-->values(array(
-  'chid' => '14',
-  'nid' => '28',
-  'chtext' => 'Choice 4 for poll 3',
-  'chvotes' => '1',
-  'chorder' => '4',
-))
-->values(array(
-  'chid' => '15',
-  'nid' => '29',
-  'chtext' => 'Choice 0 for poll 4',
-  'chvotes' => '3',
-  'chorder' => '0',
-))
-->values(array(
-  'chid' => '16',
-  'nid' => '29',
-  'chtext' => 'Choice 1 for poll 4',
-  'chvotes' => '2',
-  'chorder' => '1',
-))
-->values(array(
-  'chid' => '17',
-  'nid' => '30',
-  'chtext' => 'Choice 0 for poll 5',
-  'chvotes' => '2',
-  'chorder' => '0',
-))
-->values(array(
-  'chid' => '18',
-  'nid' => '30',
-  'chtext' => 'Choice 1 for poll 5',
-  'chvotes' => '2',
-  'chorder' => '1',
-))
-->values(array(
-  'chid' => '19',
-  'nid' => '30',
-  'chtext' => 'Choice 2 for poll 5',
-  'chvotes' => '2',
-  'chorder' => '2',
-))
-->values(array(
-  'chid' => '20',
-  'nid' => '31',
-  'chtext' => 'Choice 0 for poll 6',
-  'chvotes' => '2',
-  'chorder' => '0',
-))
-->values(array(
-  'chid' => '21',
-  'nid' => '31',
-  'chtext' => 'Choice 1 for poll 6',
-  'chvotes' => '2',
-  'chorder' => '1',
-))
-->values(array(
-  'chid' => '22',
-  'nid' => '31',
-  'chtext' => 'Choice 2 for poll 6',
-  'chvotes' => '2',
-  'chorder' => '2',
-))
-->values(array(
-  'chid' => '23',
-  'nid' => '31',
-  'chtext' => 'Choice 3 for poll 6',
-  'chvotes' => '1',
-  'chorder' => '3',
-))
-->values(array(
-  'chid' => '24',
-  'nid' => '32',
-  'chtext' => 'Choice 0 for poll 7',
-  'chvotes' => '2',
-  'chorder' => '0',
-))
-->values(array(
-  'chid' => '25',
-  'nid' => '32',
-  'chtext' => 'Choice 1 for poll 7',
-  'chvotes' => '2',
-  'chorder' => '1',
-))
-->values(array(
-  'chid' => '26',
-  'nid' => '32',
-  'chtext' => 'Choice 2 for poll 7',
-  'chvotes' => '2',
-  'chorder' => '2',
-))
-->values(array(
-  'chid' => '27',
-  'nid' => '32',
-  'chtext' => 'Choice 3 for poll 7',
-  'chvotes' => '1',
-  'chorder' => '3',
-))
-->values(array(
-  'chid' => '28',
-  'nid' => '32',
-  'chtext' => 'Choice 4 for poll 7',
-  'chvotes' => '1',
-  'chorder' => '4',
-))
-->values(array(
-  'chid' => '29',
-  'nid' => '33',
-  'chtext' => 'Choice 0 for poll 8',
-  'chvotes' => '3',
-  'chorder' => '0',
-))
-->values(array(
-  'chid' => '30',
-  'nid' => '33',
-  'chtext' => 'Choice 1 for poll 8',
-  'chvotes' => '2',
-  'chorder' => '1',
-))
-->values(array(
-  'chid' => '31',
-  'nid' => '34',
-  'chtext' => 'Choice 0 for poll 9',
-  'chvotes' => '2',
-  'chorder' => '0',
-))
-->values(array(
-  'chid' => '32',
-  'nid' => '34',
-  'chtext' => 'Choice 1 for poll 9',
-  'chvotes' => '2',
-  'chorder' => '1',
-))
-->values(array(
-  'chid' => '33',
-  'nid' => '34',
-  'chtext' => 'Choice 2 for poll 9',
-  'chvotes' => '2',
-  'chorder' => '2',
-))
-->values(array(
-  'chid' => '34',
-  'nid' => '35',
-  'chtext' => 'Choice 0 for poll 10',
-  'chvotes' => '2',
-  'chorder' => '0',
-))
-->values(array(
-  'chid' => '35',
-  'nid' => '35',
-  'chtext' => 'Choice 1 for poll 10',
-  'chvotes' => '2',
-  'chorder' => '1',
-))
-->values(array(
-  'chid' => '36',
-  'nid' => '35',
-  'chtext' => 'Choice 2 for poll 10',
-  'chvotes' => '2',
-  'chorder' => '2',
-))
-->values(array(
-  'chid' => '37',
-  'nid' => '35',
-  'chtext' => 'Choice 3 for poll 10',
-  'chvotes' => '1',
-  'chorder' => '3',
-))
-->values(array(
-  'chid' => '38',
-  'nid' => '36',
-  'chtext' => 'Choice 0 for poll 11',
-  'chvotes' => '2',
-  'chorder' => '0',
-))
-->values(array(
-  'chid' => '39',
-  'nid' => '36',
-  'chtext' => 'Choice 1 for poll 11',
-  'chvotes' => '2',
-  'chorder' => '1',
-))
-->values(array(
-  'chid' => '40',
-  'nid' => '36',
-  'chtext' => 'Choice 2 for poll 11',
-  'chvotes' => '2',
-  'chorder' => '2',
-))
-->values(array(
-  'chid' => '41',
-  'nid' => '36',
-  'chtext' => 'Choice 3 for poll 11',
-  'chvotes' => '1',
-  'chorder' => '3',
-))
-->values(array(
-  'chid' => '42',
-  'nid' => '36',
-  'chtext' => 'Choice 4 for poll 11',
-  'chvotes' => '1',
-  'chorder' => '4',
-))
-->execute();
-
-db_create_table('poll_votes', array(
-  'fields' => array(
-    'nid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'uid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'chorder' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => -1,
-    ),
-    'hostname' => array(
-      'type' => 'varchar',
-      'length' => 128,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-  ),
-  'primary key' => array(
-    'nid',
-    'uid',
-    'hostname',
-  ),
-  'indexes' => array(
-    'hostname' => array(
-      'hostname',
-    ),
-    'uid' => array(
-      'uid',
-    ),
-  ),
-  'module' => 'poll',
-  'name' => 'poll_votes',
-));
-db_insert('poll_votes')->fields(array(
-  'nid',
-  'uid',
-  'chorder',
-  'hostname',
-))
-->values(array(
-  'nid' => '25',
-  'uid' => '3',
-  'chorder' => '0',
-  'hostname' => '',
-))
-->values(array(
-  'nid' => '26',
-  'uid' => '3',
-  'chorder' => '0',
-  'hostname' => '',
-))
-->values(array(
-  'nid' => '27',
-  'uid' => '3',
-  'chorder' => '0',
-  'hostname' => '',
-))
-->values(array(
-  'nid' => '28',
-  'uid' => '3',
-  'chorder' => '0',
-  'hostname' => '',
-))
-->values(array(
-  'nid' => '29',
-  'uid' => '4',
-  'chorder' => '0',
-  'hostname' => '',
-))
-->values(array(
-  'nid' => '30',
-  'uid' => '4',
-  'chorder' => '0',
-  'hostname' => '',
-))
-->values(array(
-  'nid' => '31',
-  'uid' => '4',
-  'chorder' => '0',
-  'hostname' => '',
-))
-->values(array(
-  'nid' => '32',
-  'uid' => '4',
-  'chorder' => '0',
-  'hostname' => '',
-))
-->values(array(
-  'nid' => '33',
-  'uid' => '5',
-  'chorder' => '0',
-  'hostname' => '',
-))
-->values(array(
-  'nid' => '34',
-  'uid' => '5',
-  'chorder' => '0',
-  'hostname' => '',
-))
-->values(array(
-  'nid' => '35',
-  'uid' => '5',
-  'chorder' => '0',
-  'hostname' => '',
-))
-->values(array(
-  'nid' => '36',
-  'uid' => '5',
-  'chorder' => '0',
-  'hostname' => '',
-))
-->execute();
-
-db_create_table('role', array(
-  'fields' => array(
-    'rid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'name' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-  ),
-  'unique keys' => array(
-    'name' => array(
-      'name',
-    ),
-  ),
-  'primary key' => array(
-    'rid',
-  ),
-  'module' => 'user',
-  'name' => 'role',
-));
-db_insert('role')->fields(array(
-  'rid',
-  'name',
-))
-->values(array(
-  'rid' => '1',
-  'name' => 'anonymous user',
-))
-->values(array(
-  'rid' => '2',
-  'name' => 'authenticated user',
-))
-->execute();
-
-db_create_table('semaphore', array(
-  'fields' => array(
-    'name' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'value' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'expire' => array(
-      'type' => 'float',
-      'size' => 'big',
-      'not null' => TRUE,
-    ),
-  ),
-  'indexes' => array(
-    'expire' => array(
-      'expire',
-    ),
-  ),
-  'primary key' => array(
-    'name',
-  ),
-  'module' => 'system',
-  'name' => 'semaphore',
-));
-
-db_create_table('sessions', array(
-  'fields' => array(
-    'uid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'sid' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'hostname' => array(
-      'type' => 'varchar',
-      'length' => 128,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'timestamp' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'cache' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'session' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-  ),
-  'primary key' => array(
-    'sid',
-  ),
-  'indexes' => array(
-    'timestamp' => array(
-      'timestamp',
-    ),
-    'uid' => array(
-      'uid',
-    ),
-  ),
-  'module' => 'system',
-  'name' => 'sessions',
-));
-
-db_create_table('system', array(
-  'fields' => array(
-    'filename' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'name' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'type' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'owner' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'status' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'throttle' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'bootstrap' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'schema_version' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => -1,
-      'size' => 'small',
-    ),
-    'weight' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'info' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-  ),
-  'primary key' => array(
-    'filename',
-  ),
-  'indexes' => array(
-    'modules' => array(
-      array(
-        'type',
-        12,
-      ),
-      'status',
-      'weight',
-      'filename',
-    ),
-    'bootstrap' => array(
-      array(
-        'type',
-        12,
-      ),
-      'status',
-      'bootstrap',
-      'weight',
-      'filename',
-    ),
-    'type_name' => array(
-      array(
-        'type',
-        12,
-      ),
-      'name',
-    ),
-  ),
-  'module' => 'system',
-  'name' => 'system',
-));
-db_insert('system')->fields(array(
-  'filename',
-  'name',
-  'type',
-  'owner',
-  'status',
-  'throttle',
-  'bootstrap',
-  'schema_version',
-  'weight',
-  'info',
-))
-->values(array(
-  'filename' => 'modules/aggregator/aggregator.module',
-  'name' => 'aggregator',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:10:"Aggregator";s:11:"description";s:57:"Aggregates syndicated content (RSS, RDF, and Atom feeds).";s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/block/block.module',
-  'name' => 'block',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '1',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '0',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:5:"Block";s:11:"description";s:62:"Controls the boxes that are displayed around the main content.";s:7:"package";s:15:"Core - required";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/blog/blog.module',
-  'name' => 'blog',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:4:"Blog";s:11:"description";s:69:"Enables keeping easily and regularly updated user web pages or blogs.";s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/blogapi/blogapi.module',
-  'name' => 'blogapi',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:8:"Blog API";s:11:"description";s:79:"Allows users to post content using applications that support XML-RPC blog APIs.";s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/book/book.module',
-  'name' => 'book',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:4:"Book";s:11:"description";s:63:"Allows users to structure site pages in a hierarchy or outline.";s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/color/color.module',
-  'name' => 'color',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '1',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '0',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:5:"Color";s:11:"description";s:61:"Allows the user to change the color scheme of certain themes.";s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/comment/comment.module',
-  'name' => 'comment',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '1',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '6003',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:7:"Comment";s:11:"description";s:57:"Allows users to comment on and discuss published content.";s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/contact/contact.module',
-  'name' => 'contact',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:7:"Contact";s:11:"description";s:61:"Enables the use of both personal and site-wide contact forms.";s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/dblog/dblog.module',
-  'name' => 'dblog',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '1',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '6000',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:16:"Database logging";s:11:"description";s:47:"Logs and records system events to the database.";s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/filter/filter.module',
-  'name' => 'filter',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '1',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '0',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:6:"Filter";s:11:"description";s:60:"Handles the filtering of content in preparation for display.";s:7:"package";s:15:"Core - required";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/forum/forum.module',
-  'name' => 'forum',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:5:"Forum";s:11:"description";s:50:"Enables threaded discussions about general topics.";s:12:"dependencies";a:2:{i:0;s:8:"taxonomy";i:1;s:7:"comment";}s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/help/help.module',
-  'name' => 'help',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '1',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '0',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:4:"Help";s:11:"description";s:35:"Manages the display of online help.";s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/locale/locale.module',
-  'name' => 'locale',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:6:"Locale";s:11:"description";s:119:"Adds language handling functionality and enables the translation of the user interface to languages other than English.";s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/menu/menu.module',
-  'name' => 'menu',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '1',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '0',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:4:"Menu";s:11:"description";s:60:"Allows administrators to customize the site navigation menu.";s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/node/node.module',
-  'name' => 'node',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '1',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '0',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:4:"Node";s:11:"description";s:66:"Allows content to be submitted to the site and displayed on pages.";s:7:"package";s:15:"Core - required";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/openid/openid.module',
-  'name' => 'openid',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:6:"OpenID";s:11:"description";s:48:"Allows users to log into your site using OpenID.";s:7:"version";s:8:"6.20-dev";s:7:"package";s:15:"Core - optional";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/path/path.module',
-  'name' => 'path',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '1',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '0',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:4:"Path";s:11:"description";s:28:"Allows users to rename URLs.";s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/php/php.module',
-  'name' => 'php',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:10:"PHP filter";s:11:"description";s:50:"Allows embedded PHP code/snippets to be evaluated.";s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/ping/ping.module',
-  'name' => 'ping',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:4:"Ping";s:11:"description";s:51:"Alerts other sites when your site has been updated.";s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/poll/poll.module',
-  'name' => 'poll',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '1',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '0',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:4:"Poll";s:11:"description";s:95:"Allows your site to capture votes on different topics in the form of multiple choice questions.";s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/profile/profile.module',
-  'name' => 'profile',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:7:"Profile";s:11:"description";s:36:"Supports configurable user profiles.";s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/search/search.module',
-  'name' => 'search',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:6:"Search";s:11:"description";s:36:"Enables site-wide keyword searching.";s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/statistics/statistics.module',
-  'name' => 'statistics',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:10:"Statistics";s:11:"description";s:37:"Logs access statistics for your site.";s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/syslog/syslog.module',
-  'name' => 'syslog',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:6:"Syslog";s:11:"description";s:41:"Logs and records system events to syslog.";s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/system/system.module',
-  'name' => 'system',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '1',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '6055',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:6:"System";s:11:"description";s:54:"Handles general site configuration for administrators.";s:7:"package";s:15:"Core - required";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/taxonomy/taxonomy.module',
-  'name' => 'taxonomy',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '1',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '0',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:8:"Taxonomy";s:11:"description";s:38:"Enables the categorization of content.";s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/throttle/throttle.module',
-  'name' => 'throttle',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:8:"Throttle";s:11:"description";s:66:"Handles the auto-throttling mechanism, to control site congestion.";s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/tracker/tracker.module',
-  'name' => 'tracker',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:7:"Tracker";s:11:"description";s:43:"Enables tracking of recent posts for users.";s:12:"dependencies";a:1:{i:0;s:7:"comment";}s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/translation/translation.module',
-  'name' => 'translation',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:19:"Content translation";s:11:"description";s:57:"Allows content to be translated into different languages.";s:12:"dependencies";a:1:{i:0;s:6:"locale";}s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/trigger/trigger.module',
-  'name' => 'trigger',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:7:"Trigger";s:11:"description";s:90:"Enables actions to be fired on certain system events, such as when new content is created.";s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/update/update.module',
-  'name' => 'update',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '1',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '6000',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:13:"Update status";s:11:"description";s:88:"Checks the status of available updates for Drupal and your installed modules and themes.";s:7:"version";s:8:"6.20-dev";s:7:"package";s:15:"Core - optional";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/upload/upload.module',
-  'name' => 'upload',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:6:"Upload";s:11:"description";s:51:"Allows users to upload and attach files to content.";s:7:"package";s:15:"Core - optional";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'modules/user/user.module',
-  'name' => 'user',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '1',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '0',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:4:"User";s:11:"description";s:47:"Manages the user registration and login system.";s:7:"package";s:15:"Core - required";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'sites/all/modules/admin_menu/admin_menu.module',
-  'name' => 'admin_menu',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:19:"Administration Menu";s:11:"description";s:90:"Renders a menu tree for administrative purposes as dropdown menu at the top of the window.";s:7:"package";s:14:"Administration";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:7:"version";N;s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'sites/all/modules/cck/content.module',
-  'name' => 'content',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:7:"Content";s:11:"description";s:50:"Allows administrators to define new content types.";s:7:"package";s:3:"CCK";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:7:"version";N;s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'sites/all/modules/cck/modules/content_copy/content_copy.module',
-  'name' => 'content_copy',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:12:"Content Copy";s:11:"description";s:51:"Enables ability to import/export field definitions.";s:12:"dependencies";a:1:{i:0;s:7:"content";}s:7:"package";s:3:"CCK";s:4:"core";s:3:"6.x";s:10:"dependents";a:0:{}s:7:"version";N;s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'sites/all/modules/cck/modules/content_permissions/content_permissions.module',
-  'name' => 'content_permissions',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:19:"Content Permissions";s:11:"description";s:43:"Set field-level permissions for CCK fields.";s:7:"package";s:3:"CCK";s:4:"core";s:3:"6.x";s:12:"dependencies";a:1:{i:0;s:7:"content";}s:10:"dependents";a:0:{}s:7:"version";N;s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'sites/all/modules/cck/modules/fieldgroup/fieldgroup.module',
-  'name' => 'fieldgroup',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:10:"Fieldgroup";s:11:"description";s:35:"Create field groups for CCK fields.";s:12:"dependencies";a:1:{i:0;s:7:"content";}s:7:"package";s:3:"CCK";s:4:"core";s:3:"6.x";s:10:"dependents";a:0:{}s:7:"version";N;s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'sites/all/modules/cck/modules/nodereference/nodereference.module',
-  'name' => 'nodereference',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:14:"Node Reference";s:11:"description";s:59:"Defines a field type for referencing one node from another.";s:12:"dependencies";a:3:{i:0;s:7:"content";i:1;s:4:"text";i:2;s:13:"optionwidgets";}s:7:"package";s:3:"CCK";s:4:"core";s:3:"6.x";s:10:"dependents";a:0:{}s:7:"version";N;s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'sites/all/modules/cck/modules/number/number.module',
-  'name' => 'number',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:6:"Number";s:11:"description";s:28:"Defines numeric field types.";s:12:"dependencies";a:1:{i:0;s:7:"content";}s:7:"package";s:3:"CCK";s:4:"core";s:3:"6.x";s:10:"dependents";a:0:{}s:7:"version";N;s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'sites/all/modules/cck/modules/optionwidgets/optionwidgets.module',
-  'name' => 'optionwidgets',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:14:"Option Widgets";s:11:"description";s:82:"Defines selection, check box and radio button widgets for text and numeric fields.";s:12:"dependencies";a:1:{i:0;s:7:"content";}s:7:"package";s:3:"CCK";s:4:"core";s:3:"6.x";s:10:"dependents";a:0:{}s:7:"version";N;s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'sites/all/modules/cck/modules/text/text.module',
-  'name' => 'text',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:4:"Text";s:11:"description";s:32:"Defines simple text field types.";s:12:"dependencies";a:1:{i:0;s:7:"content";}s:7:"package";s:3:"CCK";s:4:"core";s:3:"6.x";s:10:"dependents";a:0:{}s:7:"version";N;s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'sites/all/modules/cck/modules/userreference/userreference.module',
-  'name' => 'userreference',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:14:"User Reference";s:11:"description";s:56:"Defines a field type for referencing a user from a node.";s:12:"dependencies";a:3:{i:0;s:7:"content";i:1;s:4:"text";i:2;s:13:"optionwidgets";}s:7:"package";s:3:"CCK";s:4:"core";s:3:"6.x";s:10:"dependents";a:0:{}s:7:"version";N;s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'sites/all/modules/devel/devel.module',
-  'name' => 'devel',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:5:"Devel";s:11:"description";s:52:"Various blocks, pages, and functions for developers.";s:7:"package";s:11:"Development";s:12:"dependencies";a:1:{i:0;s:4:"menu";}s:4:"core";s:3:"6.x";s:10:"dependents";a:0:{}s:7:"version";N;s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'sites/all/modules/devel/devel_generate.module',
-  'name' => 'devel_generate',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:14:"Devel generate";s:11:"description";s:48:"Generate dummy users, nodes, and taxonomy terms.";s:7:"package";s:11:"Development";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:7:"version";N;s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'sites/all/modules/devel/devel_node_access.module',
-  'name' => 'devel_node_access',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:17:"Devel node access";s:11:"description";s:67:"Developer block and page illustrating relevant node_access records.";s:7:"package";s:11:"Development";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:7:"version";N;s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'sites/all/modules/devel/devel_themer.module',
-  'name' => 'devel_themer',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:15:"Theme developer";s:11:"description";s:52:"Essential theme API information for theme developers";s:7:"package";s:11:"Development";s:12:"dependencies";a:1:{i:0;s:5:"devel";}s:4:"core";s:3:"6.x";s:10:"dependents";a:0:{}s:7:"version";N;s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'sites/all/modules/devel/macro.module',
-  'name' => 'macro',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:5:"Macro";s:11:"description";s:62:"Allows administrators to record and playback form submissions.";s:7:"package";s:11:"Development";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:7:"version";N;s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'sites/all/modules/devel/performance/performance.module',
-  'name' => 'performance',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:19:"Performance Logging";s:11:"description";s:91:"Logs detailed and/or summary page generation time and memory consumption for page requests.";s:7:"package";s:11:"Development";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:7:"version";N;s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'sites/all/modules/drush_extras/drush_extras.module',
-  'name' => 'drush_extras',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:9:{s:4:"name";s:12:"Drush extras";s:11:"description";s:43:"Useful Drush commands. Requires Drush core.";s:7:"package";s:11:"Development";s:4:"core";s:3:"7.x";s:5:"files";a:7:{i:0;s:19:"drush_extras.module";i:1;s:12:"pm.drush.inc";i:2;s:16:"pm_cvs.drush.inc";i:3;s:16:"pm_svn.drush.inc";i:4;s:20:"simpletest.drush.inc";i:5;s:13:"sql.drush.inc";i:6;s:15:"tools.drush.inc";}s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:7:"version";N;s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'sites/all/modules/mymap/mymap.module',
-  'name' => 'mymap',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:7:{s:4:"name";s:6:"My Map";s:11:"description";s:36:"Allows any node to have a Google map";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:7:"version";N;s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'sites/all/modules/plugin_manager.module',
-  'name' => 'plugin_manager',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:14:"Plugin Manager";s:11:"description";s:72:"Enables the automated installation of modules and themes from drupal.org";s:4:"core";s:3:"6.x";s:3:"php";s:1:"5";s:7:"package";s:14:"Administration";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:7:"version";N;}',
-))
-->values(array(
-  'filename' => 'sites/all/modules/schema/schema.module',
-  'name' => 'schema',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:6:"Schema";s:11:"description";s:65:"The Schema module provides functionality built on the Schema API.";s:7:"package";s:8:"Database";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:7:"version";N;s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'sites/all/modules/views/views.module',
-  'name' => 'views',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:5:"Views";s:11:"description";s:55:"Create customized lists and queries from your database.";s:7:"package";s:5:"Views";s:4:"core";s:3:"6.x";s:12:"dependencies";a:0:{}s:10:"dependents";a:0:{}s:7:"version";N;s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'sites/all/modules/views/views_export/views_export.module',
-  'name' => 'views_export',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:14:"Views exporter";s:11:"description";s:40:"Allows exporting multiple views at once.";s:7:"package";s:5:"Views";s:12:"dependencies";a:1:{i:0;s:5:"views";}s:4:"core";s:3:"6.x";s:10:"dependents";a:0:{}s:7:"version";N;s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'sites/all/modules/views/views_ui.module',
-  'name' => 'views_ui',
-  'type' => 'module',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:8:{s:4:"name";s:8:"Views UI";s:11:"description";s:93:"Administrative interface to views. Without this module, you cannot create or edit your views.";s:7:"package";s:5:"Views";s:4:"core";s:3:"6.x";s:12:"dependencies";a:1:{i:0;s:5:"views";}s:10:"dependents";a:0:{}s:7:"version";N;s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'themes/bluemarine/bluemarine.info',
-  'name' => 'bluemarine',
-  'type' => 'theme',
-  'owner' => 'themes/engines/phptemplate/phptemplate.engine',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:11:{s:4:"name";s:10:"Bluemarine";s:11:"description";s:66:"Table-based multi-column theme with a marine and ash color scheme.";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:6:"engine";s:11:"phptemplate";s:7:"regions";a:5:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";s:7:"content";s:7:"Content";s:6:"header";s:6:"Header";s:6:"footer";s:6:"Footer";}s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:27:"themes/bluemarine/style.css";}}s:7:"scripts";a:1:{s:9:"script.js";s:27:"themes/bluemarine/script.js";}s:10:"screenshot";s:32:"themes/bluemarine/screenshot.png";s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'themes/chameleon/chameleon.info',
-  'name' => 'chameleon',
-  'type' => 'theme',
-  'owner' => 'themes/chameleon/chameleon.theme',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:10:{s:4:"name";s:9:"Chameleon";s:11:"description";s:42:"Minimalist tabled theme with light colors.";s:7:"regions";a:2:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";}s:8:"features";a:4:{i:0;s:4:"logo";i:1;s:7:"favicon";i:2;s:4:"name";i:3;s:6:"slogan";}s:11:"stylesheets";a:1:{s:3:"all";a:2:{s:9:"style.css";s:26:"themes/chameleon/style.css";s:10:"common.css";s:27:"themes/chameleon/common.css";}}s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:7:"scripts";a:1:{s:9:"script.js";s:26:"themes/chameleon/script.js";}s:10:"screenshot";s:31:"themes/chameleon/screenshot.png";s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'themes/chameleon/marvin/marvin.info',
-  'name' => 'marvin',
-  'type' => 'theme',
-  'owner' => '',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:11:{s:4:"name";s:6:"Marvin";s:11:"description";s:31:"Boxy tabled theme in all grays.";s:7:"regions";a:2:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";}s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:10:"base theme";s:9:"chameleon";s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:33:"themes/chameleon/marvin/style.css";}}s:7:"scripts";a:1:{s:9:"script.js";s:33:"themes/chameleon/marvin/script.js";}s:10:"screenshot";s:38:"themes/chameleon/marvin/screenshot.png";s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'themes/garland/garland.info',
-  'name' => 'garland',
-  'type' => 'theme',
-  'owner' => 'themes/engines/phptemplate/phptemplate.engine',
-  'status' => '1',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:11:{s:4:"name";s:7:"Garland";s:11:"description";s:66:"Tableless, recolorable, multi-column, fluid width theme (default).";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:6:"engine";s:11:"phptemplate";s:11:"stylesheets";a:2:{s:3:"all";a:1:{s:9:"style.css";s:24:"themes/garland/style.css";}s:5:"print";a:1:{s:9:"print.css";s:24:"themes/garland/print.css";}}s:7:"regions";a:5:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";s:7:"content";s:7:"Content";s:6:"header";s:6:"Header";s:6:"footer";s:6:"Footer";}s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:7:"scripts";a:1:{s:9:"script.js";s:24:"themes/garland/script.js";}s:10:"screenshot";s:29:"themes/garland/screenshot.png";s:3:"php";s:5:"4.3.5";}',
-))
-->values(array(
-  'filename' => 'themes/garland/minnelli/minnelli.info',
-  'name' => 'minnelli',
-  'type' => 'theme',
-  'owner' => 'themes/engines/phptemplate/phptemplate.engine',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:12:{s:4:"name";s:8:"Minnelli";s:11:"description";s:56:"Tableless, recolorable, multi-column, fixed width theme.";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:10:"base theme";s:7:"garland";s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:12:"minnelli.css";s:36:"themes/garland/minnelli/minnelli.css";}}s:7:"regions";a:5:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";s:7:"content";s:7:"Content";s:6:"header";s:6:"Header";s:6:"footer";s:6:"Footer";}s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:7:"scripts";a:1:{s:9:"script.js";s:33:"themes/garland/minnelli/script.js";}s:10:"screenshot";s:38:"themes/garland/minnelli/screenshot.png";s:3:"php";s:5:"4.3.5";s:6:"engine";s:11:"phptemplate";}',
-))
-->values(array(
-  'filename' => 'themes/pushbutton/pushbutton.info',
-  'name' => 'pushbutton',
-  'type' => 'theme',
-  'owner' => 'themes/engines/phptemplate/phptemplate.engine',
-  'status' => '0',
-  'throttle' => '0',
-  'bootstrap' => '0',
-  'schema_version' => '-1',
-  'weight' => '0',
-  'info' => 'a:11:{s:4:"name";s:10:"Pushbutton";s:11:"description";s:52:"Tabled, multi-column theme in blue and orange tones.";s:7:"version";s:8:"6.20-dev";s:4:"core";s:3:"6.x";s:6:"engine";s:11:"phptemplate";s:7:"regions";a:5:{s:4:"left";s:12:"Left sidebar";s:5:"right";s:13:"Right sidebar";s:7:"content";s:7:"Content";s:6:"header";s:6:"Header";s:6:"footer";s:6:"Footer";}s:8:"features";a:10:{i:0;s:20:"comment_user_picture";i:1;s:7:"favicon";i:2;s:7:"mission";i:3;s:4:"logo";i:4;s:4:"name";i:5;s:17:"node_user_picture";i:6;s:6:"search";i:7;s:6:"slogan";i:8;s:13:"primary_links";i:9;s:15:"secondary_links";}s:11:"stylesheets";a:1:{s:3:"all";a:1:{s:9:"style.css";s:27:"themes/pushbutton/style.css";}}s:7:"scripts";a:1:{s:9:"script.js";s:27:"themes/pushbutton/script.js";}s:10:"screenshot";s:32:"themes/pushbutton/screenshot.png";s:3:"php";s:5:"4.3.5";}',
-))
-->execute();
-
-db_create_table('term_data', array(
-  'fields' => array(
-    'tid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'vid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'name' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'description' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'weight' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-  ),
-  'primary key' => array(
-    'tid',
-  ),
-  'indexes' => array(
-    'taxonomy_tree' => array(
-      'vid',
-      'weight',
-      'name',
-    ),
-    'vid_name' => array(
-      'vid',
-      'name',
-    ),
-  ),
-  'module' => 'taxonomy',
-  'name' => 'term_data',
-));
-db_insert('term_data')->fields(array(
-  'tid',
-  'vid',
-  'name',
-  'description',
-  'weight',
-))
-->values(array(
-  'tid' => '1',
-  'vid' => '1',
-  'name' => 'term 1 of vocabulary 1 (j=0)',
-  'description' => 'description of term 1 of vocabulary 1 (j=0)',
-  'weight' => '0',
-))
-->values(array(
-  'tid' => '2',
-  'vid' => '2',
-  'name' => 'term 2 of vocabulary 2 (j=0)',
-  'description' => 'description of term 2 of vocabulary 2 (j=0)',
-  'weight' => '3',
-))
-->values(array(
-  'tid' => '3',
-  'vid' => '2',
-  'name' => 'term 3 of vocabulary 2 (j=1)',
-  'description' => 'description of term 3 of vocabulary 2 (j=1)',
-  'weight' => '4',
-))
-->values(array(
-  'tid' => '4',
-  'vid' => '3',
-  'name' => 'term 4 of vocabulary 3 (j=0)',
-  'description' => 'description of term 4 of vocabulary 3 (j=0)',
-  'weight' => '6',
-))
-->values(array(
-  'tid' => '5',
-  'vid' => '3',
-  'name' => 'term 5 of vocabulary 3 (j=1)',
-  'description' => 'description of term 5 of vocabulary 3 (j=1)',
-  'weight' => '7',
-))
-->values(array(
-  'tid' => '6',
-  'vid' => '3',
-  'name' => 'term 6 of vocabulary 3 (j=2)',
-  'description' => 'description of term 6 of vocabulary 3 (j=2)',
-  'weight' => '8',
-))
-->values(array(
-  'tid' => '7',
-  'vid' => '4',
-  'name' => 'term 7 of vocabulary 4 (j=0)',
-  'description' => 'description of term 7 of vocabulary 4 (j=0)',
-  'weight' => '9',
-))
-->values(array(
-  'tid' => '8',
-  'vid' => '5',
-  'name' => 'term 8 of vocabulary 5 (j=0)',
-  'description' => 'description of term 8 of vocabulary 5 (j=0)',
-  'weight' => '12',
-))
-->values(array(
-  'tid' => '9',
-  'vid' => '5',
-  'name' => 'term 9 of vocabulary 5 (j=1)',
-  'description' => 'description of term 9 of vocabulary 5 (j=1)',
-  'weight' => '13',
-))
-->values(array(
-  'tid' => '10',
-  'vid' => '6',
-  'name' => 'term 10 of vocabulary 6 (j=0)',
-  'description' => 'description of term 10 of vocabulary 6 (j=0)',
-  'weight' => '15',
-))
-->values(array(
-  'tid' => '11',
-  'vid' => '6',
-  'name' => 'term 11 of vocabulary 6 (j=1)',
-  'description' => 'description of term 11 of vocabulary 6 (j=1)',
-  'weight' => '16',
-))
-->values(array(
-  'tid' => '12',
-  'vid' => '6',
-  'name' => 'term 12 of vocabulary 6 (j=2)',
-  'description' => 'description of term 12 of vocabulary 6 (j=2)',
-  'weight' => '17',
-))
-->values(array(
-  'tid' => '13',
-  'vid' => '7',
-  'name' => 'term 13 of vocabulary 7 (j=0)',
-  'description' => 'description of term 13 of vocabulary 7 (j=0)',
-  'weight' => '18',
-))
-->values(array(
-  'tid' => '14',
-  'vid' => '8',
-  'name' => 'term 14 of vocabulary 8 (j=0)',
-  'description' => 'description of term 14 of vocabulary 8 (j=0)',
-  'weight' => '21',
-))
-->values(array(
-  'tid' => '15',
-  'vid' => '8',
-  'name' => 'term 15 of vocabulary 8 (j=1)',
-  'description' => 'description of term 15 of vocabulary 8 (j=1)',
-  'weight' => '22',
-))
-->values(array(
-  'tid' => '16',
-  'vid' => '9',
-  'name' => 'term 16 of vocabulary 9 (j=0)',
-  'description' => 'description of term 16 of vocabulary 9 (j=0)',
-  'weight' => '24',
-))
-->values(array(
-  'tid' => '17',
-  'vid' => '9',
-  'name' => 'term 17 of vocabulary 9 (j=1)',
-  'description' => 'description of term 17 of vocabulary 9 (j=1)',
-  'weight' => '25',
-))
-->values(array(
-  'tid' => '18',
-  'vid' => '9',
-  'name' => 'term 18 of vocabulary 9 (j=2)',
-  'description' => 'description of term 18 of vocabulary 9 (j=2)',
-  'weight' => '26',
-))
-->values(array(
-  'tid' => '19',
-  'vid' => '10',
-  'name' => 'term 19 of vocabulary 10 (j=0)',
-  'description' => 'description of term 19 of vocabulary 10 (j=0)',
-  'weight' => '27',
-))
-->values(array(
-  'tid' => '20',
-  'vid' => '11',
-  'name' => 'term 20 of vocabulary 11 (j=0)',
-  'description' => 'description of term 20 of vocabulary 11 (j=0)',
-  'weight' => '30',
-))
-->values(array(
-  'tid' => '21',
-  'vid' => '11',
-  'name' => 'term 21 of vocabulary 11 (j=1)',
-  'description' => 'description of term 21 of vocabulary 11 (j=1)',
-  'weight' => '31',
-))
-->values(array(
-  'tid' => '22',
-  'vid' => '12',
-  'name' => 'term 22 of vocabulary 12 (j=0)',
-  'description' => 'description of term 22 of vocabulary 12 (j=0)',
-  'weight' => '33',
-))
-->values(array(
-  'tid' => '23',
-  'vid' => '12',
-  'name' => 'term 23 of vocabulary 12 (j=1)',
-  'description' => 'description of term 23 of vocabulary 12 (j=1)',
-  'weight' => '34',
-))
-->values(array(
-  'tid' => '24',
-  'vid' => '12',
-  'name' => 'term 24 of vocabulary 12 (j=2)',
-  'description' => 'description of term 24 of vocabulary 12 (j=2)',
-  'weight' => '35',
-))
-->values(array(
-  'tid' => '25',
-  'vid' => '13',
-  'name' => 'term 25 of vocabulary 13 (j=0)',
-  'description' => 'description of term 25 of vocabulary 13 (j=0)',
-  'weight' => '36',
-))
-->values(array(
-  'tid' => '26',
-  'vid' => '14',
-  'name' => 'term 26 of vocabulary 14 (j=0)',
-  'description' => 'description of term 26 of vocabulary 14 (j=0)',
-  'weight' => '39',
-))
-->values(array(
-  'tid' => '27',
-  'vid' => '14',
-  'name' => 'term 27 of vocabulary 14 (j=1)',
-  'description' => 'description of term 27 of vocabulary 14 (j=1)',
-  'weight' => '40',
-))
-->values(array(
-  'tid' => '28',
-  'vid' => '15',
-  'name' => 'term 28 of vocabulary 15 (j=0)',
-  'description' => 'description of term 28 of vocabulary 15 (j=0)',
-  'weight' => '42',
-))
-->values(array(
-  'tid' => '29',
-  'vid' => '15',
-  'name' => 'term 29 of vocabulary 15 (j=1)',
-  'description' => 'description of term 29 of vocabulary 15 (j=1)',
-  'weight' => '43',
-))
-->values(array(
-  'tid' => '30',
-  'vid' => '15',
-  'name' => 'term 30 of vocabulary 15 (j=2)',
-  'description' => 'description of term 30 of vocabulary 15 (j=2)',
-  'weight' => '44',
-))
-->values(array(
-  'tid' => '31',
-  'vid' => '16',
-  'name' => 'term 31 of vocabulary 16 (j=0)',
-  'description' => 'description of term 31 of vocabulary 16 (j=0)',
-  'weight' => '45',
-))
-->values(array(
-  'tid' => '32',
-  'vid' => '17',
-  'name' => 'term 32 of vocabulary 17 (j=0)',
-  'description' => 'description of term 32 of vocabulary 17 (j=0)',
-  'weight' => '48',
-))
-->values(array(
-  'tid' => '33',
-  'vid' => '17',
-  'name' => 'term 33 of vocabulary 17 (j=1)',
-  'description' => 'description of term 33 of vocabulary 17 (j=1)',
-  'weight' => '49',
-))
-->values(array(
-  'tid' => '34',
-  'vid' => '18',
-  'name' => 'term 34 of vocabulary 18 (j=0)',
-  'description' => 'description of term 34 of vocabulary 18 (j=0)',
-  'weight' => '51',
-))
-->values(array(
-  'tid' => '35',
-  'vid' => '18',
-  'name' => 'term 35 of vocabulary 18 (j=1)',
-  'description' => 'description of term 35 of vocabulary 18 (j=1)',
-  'weight' => '52',
-))
-->values(array(
-  'tid' => '36',
-  'vid' => '18',
-  'name' => 'term 36 of vocabulary 18 (j=2)',
-  'description' => 'description of term 36 of vocabulary 18 (j=2)',
-  'weight' => '53',
-))
-->values(array(
-  'tid' => '37',
-  'vid' => '19',
-  'name' => 'term 37 of vocabulary 19 (j=0)',
-  'description' => 'description of term 37 of vocabulary 19 (j=0)',
-  'weight' => '54',
-))
-->values(array(
-  'tid' => '38',
-  'vid' => '20',
-  'name' => 'term 38 of vocabulary 20 (j=0)',
-  'description' => 'description of term 38 of vocabulary 20 (j=0)',
-  'weight' => '57',
-))
-->values(array(
-  'tid' => '39',
-  'vid' => '20',
-  'name' => 'term 39 of vocabulary 20 (j=1)',
-  'description' => 'description of term 39 of vocabulary 20 (j=1)',
-  'weight' => '58',
-))
-->values(array(
-  'tid' => '40',
-  'vid' => '21',
-  'name' => 'term 40 of vocabulary 21 (j=0)',
-  'description' => 'description of term 40 of vocabulary 21 (j=0)',
-  'weight' => '60',
-))
-->values(array(
-  'tid' => '41',
-  'vid' => '21',
-  'name' => 'term 41 of vocabulary 21 (j=1)',
-  'description' => 'description of term 41 of vocabulary 21 (j=1)',
-  'weight' => '61',
-))
-->values(array(
-  'tid' => '42',
-  'vid' => '21',
-  'name' => 'term 42 of vocabulary 21 (j=2)',
-  'description' => 'description of term 42 of vocabulary 21 (j=2)',
-  'weight' => '62',
-))
-->values(array(
-  'tid' => '43',
-  'vid' => '22',
-  'name' => 'term 43 of vocabulary 22 (j=0)',
-  'description' => 'description of term 43 of vocabulary 22 (j=0)',
-  'weight' => '63',
-))
-->values(array(
-  'tid' => '44',
-  'vid' => '23',
-  'name' => 'term 44 of vocabulary 23 (j=0)',
-  'description' => 'description of term 44 of vocabulary 23 (j=0)',
-  'weight' => '66',
-))
-->values(array(
-  'tid' => '45',
-  'vid' => '23',
-  'name' => 'term 45 of vocabulary 23 (j=1)',
-  'description' => 'description of term 45 of vocabulary 23 (j=1)',
-  'weight' => '67',
-))
-->values(array(
-  'tid' => '46',
-  'vid' => '24',
-  'name' => 'term 46 of vocabulary 24 (j=0)',
-  'description' => 'description of term 46 of vocabulary 24 (j=0)',
-  'weight' => '69',
-))
-->values(array(
-  'tid' => '47',
-  'vid' => '24',
-  'name' => 'term 47 of vocabulary 24 (j=1)',
-  'description' => 'description of term 47 of vocabulary 24 (j=1)',
-  'weight' => '70',
-))
-->values(array(
-  'tid' => '48',
-  'vid' => '24',
-  'name' => 'term 48 of vocabulary 24 (j=2)',
-  'description' => 'description of term 48 of vocabulary 24 (j=2)',
-  'weight' => '71',
-))
-->execute();
-
-db_create_table('term_hierarchy', array(
-  'fields' => array(
-    'tid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'parent' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'indexes' => array(
-    'parent' => array(
-      'parent',
-    ),
-  ),
-  'primary key' => array(
-    'tid',
-    'parent',
-  ),
-  'module' => 'taxonomy',
-  'name' => 'term_hierarchy',
-));
-db_insert('term_hierarchy')->fields(array(
-  'tid',
-  'parent',
-))
-->values(array(
-  'tid' => '1',
-  'parent' => '0',
-))
-->values(array(
-  'tid' => '2',
-  'parent' => '0',
-))
-->values(array(
-  'tid' => '4',
-  'parent' => '0',
-))
-->values(array(
-  'tid' => '7',
-  'parent' => '0',
-))
-->values(array(
-  'tid' => '8',
-  'parent' => '0',
-))
-->values(array(
-  'tid' => '10',
-  'parent' => '0',
-))
-->values(array(
-  'tid' => '13',
-  'parent' => '0',
-))
-->values(array(
-  'tid' => '14',
-  'parent' => '0',
-))
-->values(array(
-  'tid' => '16',
-  'parent' => '0',
-))
-->values(array(
-  'tid' => '19',
-  'parent' => '0',
-))
-->values(array(
-  'tid' => '20',
-  'parent' => '0',
-))
-->values(array(
-  'tid' => '22',
-  'parent' => '0',
-))
-->values(array(
-  'tid' => '25',
-  'parent' => '0',
-))
-->values(array(
-  'tid' => '26',
-  'parent' => '0',
-))
-->values(array(
-  'tid' => '28',
-  'parent' => '0',
-))
-->values(array(
-  'tid' => '31',
-  'parent' => '0',
-))
-->values(array(
-  'tid' => '32',
-  'parent' => '0',
-))
-->values(array(
-  'tid' => '34',
-  'parent' => '0',
-))
-->values(array(
-  'tid' => '37',
-  'parent' => '0',
-))
-->values(array(
-  'tid' => '38',
-  'parent' => '0',
-))
-->values(array(
-  'tid' => '40',
-  'parent' => '0',
-))
-->values(array(
-  'tid' => '43',
-  'parent' => '0',
-))
-->values(array(
-  'tid' => '44',
-  'parent' => '0',
-))
-->values(array(
-  'tid' => '46',
-  'parent' => '0',
-))
-->values(array(
-  'tid' => '3',
-  'parent' => '2',
-))
-->values(array(
-  'tid' => '5',
-  'parent' => '4',
-))
-->values(array(
-  'tid' => '6',
-  'parent' => '4',
-))
-->values(array(
-  'tid' => '6',
-  'parent' => '5',
-))
-->values(array(
-  'tid' => '9',
-  'parent' => '8',
-))
-->values(array(
-  'tid' => '11',
-  'parent' => '10',
-))
-->values(array(
-  'tid' => '12',
-  'parent' => '10',
-))
-->values(array(
-  'tid' => '12',
-  'parent' => '11',
-))
-->values(array(
-  'tid' => '15',
-  'parent' => '14',
-))
-->values(array(
-  'tid' => '17',
-  'parent' => '16',
-))
-->values(array(
-  'tid' => '18',
-  'parent' => '16',
-))
-->values(array(
-  'tid' => '18',
-  'parent' => '17',
-))
-->values(array(
-  'tid' => '21',
-  'parent' => '20',
-))
-->values(array(
-  'tid' => '23',
-  'parent' => '22',
-))
-->values(array(
-  'tid' => '24',
-  'parent' => '22',
-))
-->values(array(
-  'tid' => '24',
-  'parent' => '23',
-))
-->values(array(
-  'tid' => '27',
-  'parent' => '26',
-))
-->values(array(
-  'tid' => '29',
-  'parent' => '28',
-))
-->values(array(
-  'tid' => '30',
-  'parent' => '28',
-))
-->values(array(
-  'tid' => '30',
-  'parent' => '29',
-))
-->values(array(
-  'tid' => '33',
-  'parent' => '32',
-))
-->values(array(
-  'tid' => '35',
-  'parent' => '34',
-))
-->values(array(
-  'tid' => '36',
-  'parent' => '34',
-))
-->values(array(
-  'tid' => '36',
-  'parent' => '35',
-))
-->values(array(
-  'tid' => '39',
-  'parent' => '38',
-))
-->values(array(
-  'tid' => '41',
-  'parent' => '40',
-))
-->values(array(
-  'tid' => '42',
-  'parent' => '40',
-))
-->values(array(
-  'tid' => '42',
-  'parent' => '41',
-))
-->values(array(
-  'tid' => '45',
-  'parent' => '44',
-))
-->values(array(
-  'tid' => '47',
-  'parent' => '46',
-))
-->values(array(
-  'tid' => '48',
-  'parent' => '46',
-))
-->values(array(
-  'tid' => '48',
-  'parent' => '47',
-))
-->execute();
-
-db_create_table('term_node', array(
-  'fields' => array(
-    'nid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'vid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'tid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'indexes' => array(
-    'vid' => array(
-      'vid',
-    ),
-    'nid' => array(
-      'nid',
-    ),
-  ),
-  'primary key' => array(
-    'tid',
-    'vid',
-  ),
-  'module' => 'taxonomy',
-  'name' => 'term_node',
-));
-db_insert('term_node')->fields(array(
-  'nid',
-  'vid',
-  'tid',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '1',
-  'tid' => '0',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '1',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '2',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '3',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '4',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '5',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '6',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '7',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '8',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '9',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '10',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '11',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '12',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '13',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '14',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '15',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '16',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '17',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '18',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '19',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '20',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '21',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '22',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '23',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '24',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '25',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '26',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '27',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '28',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '29',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '30',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '31',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '32',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '33',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '34',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '35',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '36',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '37',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '38',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '39',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '40',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '41',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '42',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '43',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '44',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '45',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '46',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '2',
-  'tid' => '47',
-))
-->values(array(
-  'nid' => '1',
-  'vid' => '1',
-  'tid' => '48',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '3',
-  'tid' => '2',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '3',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '4',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '5',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '6',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '7',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '8',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '9',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '10',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '11',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '12',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '13',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '14',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '15',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '16',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '17',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '18',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '19',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '20',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '21',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '22',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '23',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '24',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '25',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '26',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '27',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '28',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '29',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '30',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '31',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '32',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '33',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '34',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '35',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '36',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '37',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '38',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '39',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '40',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '41',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '42',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '43',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '44',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '45',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '46',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '3',
-  'tid' => '47',
-))
-->values(array(
-  'nid' => '2',
-  'vid' => '4',
-  'tid' => '48',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '2',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '5',
-  'tid' => '3',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '4',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '5',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '6',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '7',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '8',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '9',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '10',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '11',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '12',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '13',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '14',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '15',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '16',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '17',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '18',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '19',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '20',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '21',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '22',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '23',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '24',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '25',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '26',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '27',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '28',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '29',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '30',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '31',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '32',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '33',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '34',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '35',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '36',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '37',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '38',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '39',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '40',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '41',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '42',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '43',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '44',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '45',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '5',
-  'tid' => '46',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '47',
-))
-->values(array(
-  'nid' => '3',
-  'vid' => '6',
-  'tid' => '48',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '2',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '3',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '7',
-  'tid' => '4',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '5',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '6',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '7',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '8',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '9',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '10',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '11',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '12',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '13',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '14',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '15',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '16',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '17',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '18',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '19',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '20',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '21',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '22',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '23',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '24',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '25',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '26',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '27',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '28',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '29',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '30',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '31',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '32',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '33',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '34',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '35',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '36',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '37',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '38',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '39',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '40',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '41',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '42',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '43',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '44',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '7',
-  'tid' => '45',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '46',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '47',
-))
-->values(array(
-  'nid' => '4',
-  'vid' => '8',
-  'tid' => '48',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '2',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '3',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '4',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '9',
-  'tid' => '5',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '6',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '7',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '8',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '9',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '10',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '11',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '12',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '13',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '14',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '15',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '16',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '17',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '18',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '19',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '20',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '21',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '22',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '23',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '24',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '25',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '26',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '27',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '28',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '29',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '30',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '31',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '32',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '33',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '34',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '35',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '36',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '37',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '38',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '39',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '40',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '41',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '42',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '43',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '9',
-  'tid' => '44',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '45',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '46',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '47',
-))
-->values(array(
-  'nid' => '5',
-  'vid' => '10',
-  'tid' => '48',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '2',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '3',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '4',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '5',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '11',
-  'tid' => '6',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '7',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '8',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '9',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '10',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '11',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '12',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '13',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '14',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '15',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '16',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '17',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '18',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '19',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '20',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '21',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '22',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '23',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '24',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '25',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '26',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '27',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '28',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '29',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '30',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '31',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '32',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '33',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '34',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '35',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '36',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '37',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '38',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '39',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '40',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '41',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '42',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '11',
-  'tid' => '43',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '44',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '45',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '46',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '47',
-))
-->values(array(
-  'nid' => '6',
-  'vid' => '12',
-  'tid' => '48',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '2',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '3',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '4',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '5',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '6',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '13',
-  'tid' => '7',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '8',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '9',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '10',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '11',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '12',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '13',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '14',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '15',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '16',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '17',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '18',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '19',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '20',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '21',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '22',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '23',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '24',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '25',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '26',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '27',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '28',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '29',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '30',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '31',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '32',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '33',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '34',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '35',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '36',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '37',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '38',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '39',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '40',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '41',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '13',
-  'tid' => '42',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '43',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '44',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '45',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '46',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '47',
-))
-->values(array(
-  'nid' => '7',
-  'vid' => '14',
-  'tid' => '48',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '2',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '3',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '4',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '5',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '6',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '7',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '15',
-  'tid' => '8',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '9',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '10',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '11',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '12',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '13',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '14',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '15',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '16',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '17',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '18',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '19',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '20',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '21',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '22',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '23',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '24',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '25',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '26',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '27',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '28',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '29',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '30',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '31',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '32',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '33',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '34',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '35',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '36',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '37',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '38',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '39',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '40',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '15',
-  'tid' => '41',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '42',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '43',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '44',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '45',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '46',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '47',
-))
-->values(array(
-  'nid' => '8',
-  'vid' => '16',
-  'tid' => '48',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '2',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '3',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '4',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '5',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '6',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '7',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '8',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '17',
-  'tid' => '9',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '10',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '11',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '12',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '13',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '14',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '15',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '16',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '17',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '18',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '19',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '20',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '21',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '22',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '23',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '24',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '25',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '26',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '27',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '28',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '29',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '30',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '31',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '32',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '33',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '34',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '35',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '36',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '37',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '38',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '39',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '17',
-  'tid' => '40',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '41',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '42',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '43',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '44',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '45',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '46',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '47',
-))
-->values(array(
-  'nid' => '9',
-  'vid' => '18',
-  'tid' => '48',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '2',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '3',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '4',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '5',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '6',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '7',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '8',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '9',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '19',
-  'tid' => '10',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '11',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '12',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '13',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '14',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '15',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '16',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '17',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '18',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '19',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '20',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '21',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '22',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '23',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '24',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '25',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '26',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '27',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '28',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '29',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '30',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '31',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '32',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '33',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '34',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '35',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '36',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '37',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '38',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '19',
-  'tid' => '39',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '40',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '41',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '42',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '43',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '44',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '45',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '46',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '47',
-))
-->values(array(
-  'nid' => '10',
-  'vid' => '20',
-  'tid' => '48',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '2',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '3',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '4',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '5',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '6',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '7',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '8',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '9',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '10',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '21',
-  'tid' => '11',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '12',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '13',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '14',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '15',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '16',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '17',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '18',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '19',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '20',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '21',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '22',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '23',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '24',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '25',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '26',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '27',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '28',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '29',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '30',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '31',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '32',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '33',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '34',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '35',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '36',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '37',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '21',
-  'tid' => '38',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '39',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '40',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '41',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '42',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '43',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '44',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '45',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '46',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '47',
-))
-->values(array(
-  'nid' => '11',
-  'vid' => '22',
-  'tid' => '48',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '2',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '3',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '4',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '5',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '6',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '7',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '8',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '9',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '10',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '11',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '23',
-  'tid' => '12',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '13',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '14',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '15',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '16',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '17',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '18',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '19',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '20',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '21',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '22',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '23',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '24',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '25',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '26',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '27',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '28',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '29',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '30',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '31',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '32',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '33',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '34',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '35',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '36',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '23',
-  'tid' => '37',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '38',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '39',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '40',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '41',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '42',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '43',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '44',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '45',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '46',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '47',
-))
-->values(array(
-  'nid' => '12',
-  'vid' => '24',
-  'tid' => '48',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '2',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '3',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '4',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '5',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '6',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '7',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '8',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '9',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '10',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '11',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '12',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '14',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '15',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '16',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '17',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '18',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '19',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '20',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '21',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '22',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '23',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '24',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '25',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '26',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '27',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '28',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '29',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '30',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '31',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '32',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '33',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '34',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '35',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '37',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '38',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '39',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '40',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '41',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '42',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '43',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '44',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '45',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '46',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '47',
-))
-->values(array(
-  'nid' => '13',
-  'vid' => '25',
-  'tid' => '48',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '2',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '3',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '4',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '5',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '6',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '7',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '8',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '9',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '10',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '11',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '12',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '13',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '15',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '16',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '17',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '18',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '19',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '20',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '21',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '22',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '23',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '24',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '25',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '26',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '27',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '28',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '29',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '30',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '31',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '32',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '33',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '34',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '36',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '37',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '38',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '39',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '40',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '41',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '42',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '43',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '44',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '45',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '46',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '47',
-))
-->values(array(
-  'nid' => '14',
-  'vid' => '26',
-  'tid' => '48',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '2',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '3',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '4',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '5',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '6',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '7',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '8',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '9',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '10',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '11',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '12',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '13',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '14',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '16',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '17',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '18',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '19',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '20',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '21',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '22',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '23',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '24',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '25',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '26',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '27',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '28',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '29',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '30',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '31',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '32',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '33',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '35',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '36',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '37',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '38',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '39',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '40',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '41',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '42',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '43',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '44',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '45',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '46',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '47',
-))
-->values(array(
-  'nid' => '15',
-  'vid' => '27',
-  'tid' => '48',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '2',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '3',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '4',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '5',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '6',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '7',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '8',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '9',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '10',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '11',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '12',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '13',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '14',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '15',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '17',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '18',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '19',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '20',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '21',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '22',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '23',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '24',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '25',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '26',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '27',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '28',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '29',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '30',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '31',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '32',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '34',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '35',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '36',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '37',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '38',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '39',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '40',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '41',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '42',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '43',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '44',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '45',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '46',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '47',
-))
-->values(array(
-  'nid' => '16',
-  'vid' => '28',
-  'tid' => '48',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '2',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '3',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '4',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '5',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '6',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '7',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '8',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '9',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '10',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '11',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '12',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '13',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '14',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '15',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '16',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '18',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '19',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '20',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '21',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '22',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '23',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '24',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '25',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '26',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '27',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '28',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '29',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '30',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '31',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '33',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '34',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '35',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '36',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '37',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '38',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '39',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '40',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '41',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '42',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '43',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '44',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '45',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '46',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '47',
-))
-->values(array(
-  'nid' => '17',
-  'vid' => '29',
-  'tid' => '48',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '2',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '3',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '4',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '5',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '6',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '7',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '8',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '9',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '10',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '11',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '12',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '13',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '14',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '15',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '16',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '17',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '19',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '20',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '21',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '22',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '23',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '24',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '25',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '26',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '27',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '28',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '29',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '30',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '32',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '33',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '34',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '35',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '36',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '37',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '38',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '39',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '40',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '41',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '42',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '43',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '44',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '45',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '46',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '47',
-))
-->values(array(
-  'nid' => '18',
-  'vid' => '30',
-  'tid' => '48',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '2',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '3',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '4',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '5',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '6',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '7',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '8',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '9',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '10',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '11',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '12',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '13',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '14',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '15',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '16',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '17',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '18',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '20',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '21',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '22',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '23',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '24',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '25',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '26',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '27',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '28',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '29',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '31',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '32',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '33',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '34',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '35',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '36',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '37',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '38',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '39',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '40',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '41',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '42',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '43',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '44',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '45',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '46',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '47',
-))
-->values(array(
-  'nid' => '19',
-  'vid' => '31',
-  'tid' => '48',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '2',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '3',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '4',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '5',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '6',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '7',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '8',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '9',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '10',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '11',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '12',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '13',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '14',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '15',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '16',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '17',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '18',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '19',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '21',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '22',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '23',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '24',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '25',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '26',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '27',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '28',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '30',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '31',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '32',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '33',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '34',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '35',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '36',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '37',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '38',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '39',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '40',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '41',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '42',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '43',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '44',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '45',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '46',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '47',
-))
-->values(array(
-  'nid' => '20',
-  'vid' => '32',
-  'tid' => '48',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '2',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '3',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '4',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '5',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '6',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '7',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '8',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '9',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '10',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '11',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '12',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '13',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '14',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '15',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '16',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '17',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '18',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '19',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '20',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '22',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '23',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '24',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '25',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '26',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '27',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '29',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '30',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '31',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '32',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '33',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '34',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '35',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '36',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '37',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '38',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '39',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '40',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '41',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '42',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '43',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '44',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '45',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '46',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '47',
-))
-->values(array(
-  'nid' => '21',
-  'vid' => '33',
-  'tid' => '48',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '2',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '3',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '4',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '5',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '6',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '7',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '8',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '9',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '10',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '11',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '12',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '13',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '14',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '15',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '16',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '17',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '18',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '19',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '20',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '21',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '23',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '24',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '25',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '26',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '28',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '29',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '30',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '31',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '32',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '33',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '34',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '35',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '36',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '37',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '38',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '39',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '40',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '41',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '42',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '43',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '44',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '45',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '46',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '47',
-))
-->values(array(
-  'nid' => '22',
-  'vid' => '34',
-  'tid' => '48',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '2',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '3',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '4',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '5',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '6',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '7',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '8',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '9',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '10',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '11',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '12',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '13',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '14',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '15',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '16',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '17',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '18',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '19',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '20',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '21',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '22',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '24',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '25',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '27',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '28',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '29',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '30',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '31',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '32',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '33',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '34',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '35',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '36',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '37',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '38',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '39',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '40',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '41',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '42',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '43',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '44',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '45',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '46',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '47',
-))
-->values(array(
-  'nid' => '23',
-  'vid' => '35',
-  'tid' => '48',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '1',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '2',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '3',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '4',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '5',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '6',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '7',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '8',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '9',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '10',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '11',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '12',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '13',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '14',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '15',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '16',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '17',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '18',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '19',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '20',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '21',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '22',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '23',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '26',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '27',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '28',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '29',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '30',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '31',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '32',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '33',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '34',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '35',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '36',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '37',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '38',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '39',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '40',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '41',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '42',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '43',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '44',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '45',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '46',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '47',
-))
-->values(array(
-  'nid' => '24',
-  'vid' => '36',
-  'tid' => '48',
-))
-->execute();
-
-db_create_table('term_relation', array(
-  'fields' => array(
-    'trid' => array(
-      'type' => 'serial',
-      'not null' => TRUE,
-    ),
-    'tid1' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'tid2' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'unique keys' => array(
-    'tid1_tid2' => array(
-      'tid1',
-      'tid2',
-    ),
-  ),
-  'indexes' => array(
-    'tid2' => array(
-      'tid2',
-    ),
-  ),
-  'primary key' => array(
-    'trid',
-  ),
-  'module' => 'taxonomy',
-  'name' => 'term_relation',
-));
-
-db_create_table('term_synonym', array(
-  'fields' => array(
-    'tsid' => array(
-      'type' => 'serial',
-      'not null' => TRUE,
-    ),
-    'tid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'name' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-  ),
-  'indexes' => array(
-    'tid' => array(
-      'tid',
-    ),
-    'name_tid' => array(
-      'name',
-      'tid',
-    ),
-  ),
-  'primary key' => array(
-    'tsid',
-  ),
-  'module' => 'taxonomy',
-  'name' => 'term_synonym',
-));
-
-db_create_table('url_alias', array(
-  'fields' => array(
-    'pid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'src' => array(
-      'type' => 'varchar',
-      'length' => 128,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'dst' => array(
-      'type' => 'varchar',
-      'length' => 128,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'language' => array(
-      'type' => 'varchar',
-      'length' => 12,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-  ),
-  'unique keys' => array(
-    'dst_language_pid' => array(
-      'dst',
-      'language',
-      'pid',
-    ),
-  ),
-  'primary key' => array(
-    'pid',
-  ),
-  'indexes' => array(
-    'src_language_pid' => array(
-      'src',
-      'language',
-      'pid',
-    ),
-  ),
-  'module' => 'system',
-  'name' => 'url_alias',
-));
-db_insert('url_alias')->fields(array(
-  'pid',
-  'src',
-  'dst',
-  'language',
-))
-->values(array(
-  'pid' => '1',
-  'src' => 'node/1',
-  'dst' => 'content/1262732400',
-  'language' => '',
-))
-->values(array(
-  'pid' => '2',
-  'src' => 'node/2',
-  'dst' => 'content/1262818800',
-  'language' => '',
-))
-->values(array(
-  'pid' => '3',
-  'src' => 'node/3',
-  'dst' => 'content/1262905200',
-  'language' => '',
-))
-->values(array(
-  'pid' => '4',
-  'src' => 'node/4',
-  'dst' => 'content/1262991600',
-  'language' => '',
-))
-->values(array(
-  'pid' => '5',
-  'src' => 'node/5',
-  'dst' => 'content/1263078000',
-  'language' => '',
-))
-->values(array(
-  'pid' => '6',
-  'src' => 'node/6',
-  'dst' => 'content/1263164400',
-  'language' => '',
-))
-->values(array(
-  'pid' => '7',
-  'src' => 'node/7',
-  'dst' => 'content/1263250800',
-  'language' => '',
-))
-->values(array(
-  'pid' => '8',
-  'src' => 'node/8',
-  'dst' => 'content/1263337200',
-  'language' => '',
-))
-->values(array(
-  'pid' => '9',
-  'src' => 'node/9',
-  'dst' => 'content/1263423600',
-  'language' => '',
-))
-->values(array(
-  'pid' => '10',
-  'src' => 'node/10',
-  'dst' => 'content/1263510000',
-  'language' => '',
-))
-->values(array(
-  'pid' => '11',
-  'src' => 'node/11',
-  'dst' => 'content/1263596400',
-  'language' => '',
-))
-->values(array(
-  'pid' => '12',
-  'src' => 'node/12',
-  'dst' => 'content/1263682800',
-  'language' => '',
-))
-->values(array(
-  'pid' => '13',
-  'src' => 'node/13',
-  'dst' => 'content/1263769200',
-  'language' => '',
-))
-->values(array(
-  'pid' => '14',
-  'src' => 'node/14',
-  'dst' => 'content/1263855600',
-  'language' => '',
-))
-->values(array(
-  'pid' => '15',
-  'src' => 'node/15',
-  'dst' => 'content/1263942000',
-  'language' => '',
-))
-->values(array(
-  'pid' => '16',
-  'src' => 'node/16',
-  'dst' => 'content/1264028400',
-  'language' => '',
-))
-->values(array(
-  'pid' => '17',
-  'src' => 'node/17',
-  'dst' => 'content/1264114800',
-  'language' => '',
-))
-->values(array(
-  'pid' => '18',
-  'src' => 'node/18',
-  'dst' => 'content/1264201200',
-  'language' => '',
-))
-->values(array(
-  'pid' => '19',
-  'src' => 'node/19',
-  'dst' => 'content/1264287600',
-  'language' => '',
-))
-->values(array(
-  'pid' => '20',
-  'src' => 'node/20',
-  'dst' => 'content/1264374000',
-  'language' => '',
-))
-->values(array(
-  'pid' => '21',
-  'src' => 'node/21',
-  'dst' => 'content/1264460400',
-  'language' => '',
-))
-->values(array(
-  'pid' => '22',
-  'src' => 'node/22',
-  'dst' => 'content/1264546800',
-  'language' => '',
-))
-->values(array(
-  'pid' => '23',
-  'src' => 'node/23',
-  'dst' => 'content/1264633200',
-  'language' => '',
-))
-->values(array(
-  'pid' => '24',
-  'src' => 'node/24',
-  'dst' => 'content/1264719600',
-  'language' => '',
-))
-->values(array(
-  'pid' => '25',
-  'src' => 'node/25',
-  'dst' => 'content/poll/0',
-  'language' => '',
-))
-->values(array(
-  'pid' => '26',
-  'src' => 'node/25/results',
-  'dst' => 'content/poll/0/results',
-  'language' => '',
-))
-->values(array(
-  'pid' => '27',
-  'src' => 'node/26',
-  'dst' => 'content/poll/1',
-  'language' => '',
-))
-->values(array(
-  'pid' => '28',
-  'src' => 'node/26/results',
-  'dst' => 'content/poll/1/results',
-  'language' => '',
-))
-->values(array(
-  'pid' => '29',
-  'src' => 'node/27',
-  'dst' => 'content/poll/2',
-  'language' => '',
-))
-->values(array(
-  'pid' => '30',
-  'src' => 'node/27/results',
-  'dst' => 'content/poll/2/results',
-  'language' => '',
-))
-->values(array(
-  'pid' => '31',
-  'src' => 'node/28',
-  'dst' => 'content/poll/3',
-  'language' => '',
-))
-->values(array(
-  'pid' => '32',
-  'src' => 'node/28/results',
-  'dst' => 'content/poll/3/results',
-  'language' => '',
-))
-->values(array(
-  'pid' => '33',
-  'src' => 'node/29',
-  'dst' => 'content/poll/4',
-  'language' => '',
-))
-->values(array(
-  'pid' => '34',
-  'src' => 'node/29/results',
-  'dst' => 'content/poll/4/results',
-  'language' => '',
-))
-->values(array(
-  'pid' => '35',
-  'src' => 'node/30',
-  'dst' => 'content/poll/5',
-  'language' => '',
-))
-->values(array(
-  'pid' => '36',
-  'src' => 'node/30/results',
-  'dst' => 'content/poll/5/results',
-  'language' => '',
-))
-->values(array(
-  'pid' => '37',
-  'src' => 'node/31',
-  'dst' => 'content/poll/6',
-  'language' => '',
-))
-->values(array(
-  'pid' => '38',
-  'src' => 'node/31/results',
-  'dst' => 'content/poll/6/results',
-  'language' => '',
-))
-->values(array(
-  'pid' => '39',
-  'src' => 'node/32',
-  'dst' => 'content/poll/7',
-  'language' => '',
-))
-->values(array(
-  'pid' => '40',
-  'src' => 'node/32/results',
-  'dst' => 'content/poll/7/results',
-  'language' => '',
-))
-->values(array(
-  'pid' => '41',
-  'src' => 'node/33',
-  'dst' => 'content/poll/8',
-  'language' => '',
-))
-->values(array(
-  'pid' => '42',
-  'src' => 'node/33/results',
-  'dst' => 'content/poll/8/results',
-  'language' => '',
-))
-->values(array(
-  'pid' => '43',
-  'src' => 'node/34',
-  'dst' => 'content/poll/9',
-  'language' => '',
-))
-->values(array(
-  'pid' => '44',
-  'src' => 'node/34/results',
-  'dst' => 'content/poll/9/results',
-  'language' => '',
-))
-->values(array(
-  'pid' => '45',
-  'src' => 'node/35',
-  'dst' => 'content/poll/10',
-  'language' => '',
-))
-->values(array(
-  'pid' => '46',
-  'src' => 'node/35/results',
-  'dst' => 'content/poll/10/results',
-  'language' => '',
-))
-->values(array(
-  'pid' => '47',
-  'src' => 'node/36',
-  'dst' => 'content/poll/11',
-  'language' => '',
-))
-->values(array(
-  'pid' => '48',
-  'src' => 'node/36/results',
-  'dst' => 'content/poll/11/results',
-  'language' => '',
-))
-->values(array(
-  'pid' => '49',
-  'src' => 'node/37',
-  'dst' => 'content/1263769200',
-  'language' => '',
-))
-->execute();
-
-db_create_table('users', array(
-  'fields' => array(
-    'uid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'name' => array(
-      'type' => 'varchar',
-      'length' => 60,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'pass' => array(
-      'type' => 'varchar',
-      'length' => 32,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'mail' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => FALSE,
-      'default' => '',
-    ),
-    'mode' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'sort' => array(
-      'type' => 'int',
-      'not null' => FALSE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'threshold' => array(
-      'type' => 'int',
-      'not null' => FALSE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'theme' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'signature' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'signature_format' => array(
-      'type' => 'int',
-      'size' => 'small',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'created' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'access' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'login' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'status' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'timezone' => array(
-      'type' => 'varchar',
-      'length' => 8,
-      'not null' => FALSE,
-    ),
-    'language' => array(
-      'type' => 'varchar',
-      'length' => 12,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'picture' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'init' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => FALSE,
-      'default' => '',
-    ),
-    'data' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-  ),
-  'indexes' => array(
-    'access' => array(
-      'access',
-    ),
-    'created' => array(
-      'created',
-    ),
-    'mail' => array(
-      'mail',
-    ),
-  ),
-  'unique keys' => array(
-    'name' => array(
-      'name',
-    ),
-  ),
-  'primary key' => array(
-    'uid',
-  ),
-  'module' => 'user',
-  'name' => 'users',
-));
-db_insert('users')->fields(array(
-  'uid',
-  'name',
-  'pass',
-  'mail',
-  'mode',
-  'sort',
-  'threshold',
-  'theme',
-  'signature',
-  'signature_format',
-  'created',
-  'access',
-  'login',
-  'status',
-  'timezone',
-  'language',
-  'picture',
-  'init',
-  'data',
-))
-->values(array(
-  'uid' => 1,
-  'name' => '',
-  'pass' => '',
-  'mail' => '',
-  'mode' => '0',
-  'sort' => '0',
-  'threshold' => '0',
-  'theme' => '',
-  'signature' => '',
-  'signature_format' => '0',
-  'created' => '0',
-  'access' => '0',
-  'login' => '0',
-  'status' => '0',
-  'timezone' => NULL,
-  'language' => '',
-  'picture' => '',
-  'init' => '',
-  'data' => NULL,
-))
-->values(array(
-  'uid' => 2,
-  'name' => 'admin',
-  'pass' => '21232f297a57a5a743894a0e4a801fc3',
-  'mail' => 'admin@aexample.com',
-  'mode' => '0',
-  'sort' => '0',
-  'threshold' => '0',
-  'theme' => '',
-  'signature' => '',
-  'signature_format' => '0',
-  'created' => '1282936261',
-  'access' => '1282936264',
-  'login' => '1282936263',
-  'status' => '1',
-  'timezone' => NULL,
-  'language' => '',
-  'picture' => '',
-  'init' => 'admin@aexample.com',
-  'data' => 'a:0:{}',
-))
-->values(array(
-  'uid' => 4,
-  'name' => 'test user 0',
-  'pass' => '4dd188028f74622e61048f6683208c2f',
-  'mail' => 'test0@example.com',
-  'mode' => '0',
-  'sort' => '0',
-  'threshold' => '0',
-  'theme' => '',
-  'signature' => '',
-  'signature_format' => '0',
-  'created' => '1262300400',
-  'access' => '1262300400',
-  'login' => '0',
-  'status' => '1',
-  'timezone' => NULL,
-  'language' => '',
-  'picture' => '',
-  'init' => '',
-  'data' => NULL,
-))
-->values(array(
-  'uid' => 5,
-  'name' => 'test user 1',
-  'pass' => '388ee5249286bf5eed0dae9205743969',
-  'mail' => 'test1@example.com',
-  'mode' => '0',
-  'sort' => '0',
-  'threshold' => '0',
-  'theme' => '',
-  'signature' => '',
-  'signature_format' => '0',
-  'created' => '1262386800',
-  'access' => '1262386800',
-  'login' => '0',
-  'status' => '1',
-  'timezone' => NULL,
-  'language' => '',
-  'picture' => '',
-  'init' => '',
-  'data' => NULL,
-))
-->values(array(
-  'uid' => 6,
-  'name' => 'test user 2',
-  'pass' => 'ff8a825362e1e06dca5c13c60fe407c9',
-  'mail' => 'test2@example.com',
-  'mode' => '0',
-  'sort' => '0',
-  'threshold' => '0',
-  'theme' => '',
-  'signature' => '',
-  'signature_format' => '0',
-  'created' => '1262473200',
-  'access' => '1262473200',
-  'login' => '0',
-  'status' => '1',
-  'timezone' => NULL,
-  'language' => '',
-  'picture' => '',
-  'init' => '',
-  'data' => NULL,
-))
-->values(array(
-  'uid' => 7,
-  'name' => 'test user 3',
-  'pass' => '9d4bd7b0570cb513dc7c6ea8de15003a',
-  'mail' => 'test3@example.com',
-  'mode' => '0',
-  'sort' => '0',
-  'threshold' => '0',
-  'theme' => '',
-  'signature' => '',
-  'signature_format' => '0',
-  'created' => '1262559600',
-  'access' => '1262559600',
-  'login' => '0',
-  'status' => '1',
-  'timezone' => NULL,
-  'language' => '',
-  'picture' => '',
-  'init' => '',
-  'data' => NULL,
-))
-->values(array(
-  'uid' => 8,
-  'name' => 'test user 4',
-  'pass' => '7903c9dd9d71bcd70e3a18141711cb42',
-  'mail' => 'test4@example.com',
-  'mode' => '0',
-  'sort' => '0',
-  'threshold' => '0',
-  'theme' => '',
-  'signature' => '',
-  'signature_format' => '0',
-  'created' => '1262646000',
-  'access' => '1262646000',
-  'login' => '0',
-  'status' => '1',
-  'timezone' => NULL,
-  'language' => '',
-  'picture' => '',
-  'init' => '',
-  'data' => NULL,
-))
-->values(array(
-  'uid' => 9,
-  'name' => 'test user 5',
-  'pass' => '8eb7221204ea80db4e66247b4c748071',
-  'mail' => 'test5@example.com',
-  'mode' => '0',
-  'sort' => '0',
-  'threshold' => '0',
-  'theme' => '',
-  'signature' => '',
-  'signature_format' => '0',
-  'created' => '1262732400',
-  'access' => '1262732400',
-  'login' => '0',
-  'status' => '1',
-  'timezone' => NULL,
-  'language' => '',
-  'picture' => '',
-  'init' => '',
-  'data' => NULL,
-))
-->execute();
-db_query('UPDATE {users} SET uid = uid - 1');
-
-db_create_table('users_roles', array(
-  'fields' => array(
-    'uid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'rid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'primary key' => array(
-    'uid',
-    'rid',
-  ),
-  'indexes' => array(
-    'rid' => array(
-      'rid',
-    ),
-  ),
-  'module' => 'user',
-  'name' => 'users_roles',
-));
-
-db_create_table('variable', array(
-  'fields' => array(
-    'name' => array(
-      'type' => 'varchar',
-      'length' => 128,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'value' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-      'size' => 'big',
-    ),
-  ),
-  'primary key' => array(
-    'name',
-  ),
-  'module' => 'system',
-  'name' => 'variable',
-));
-db_insert('variable')->fields(array(
-  'name',
-  'value',
-))
-->values(array(
-  'name' => 'clean_url',
-  'value' => 's:1:"1";',
-))
-->values(array(
-  'name' => 'comment_page',
-  'value' => 'i:0;',
-))
-->values(array(
-  'name' => 'cron_last',
-  'value' => 'i:1282936266;',
-))
-->values(array(
-  'name' => 'css_js_query_string',
-  'value' => 's:20:"i0000000000000000000";',
-))
-->values(array(
-  'name' => 'date_default_timezone',
-  'value' => 's:6:"-39600";',
-))
-->values(array(
-  'name' => 'drupal_private_key',
-  'value' => 's:64:"c2f015f78636f97527f2ce6c0869fccd1c7a674005ed203d48b106cbd6db3947";',
-))
-->values(array(
-  'name' => 'file_directory_temp',
-  'value' => 's:29:"/drupal-6/file/directory/temp";',
-))
-->values(array(
-  'name' => 'file_directory_path',
-  'value' => 's:29:"/drupal-6/file/directory/path";',
-))
-->values(array(
-  'name' => 'file_downloads',
-  'value' => 'i:2;',
-))
-->values(array(
-  'name' => 'filter_html_1',
-  'value' => 'i:1;',
-))
-// Add the Escape HTML filter to the custom input format 'Escape HTML Filter'
-// to test that the filter may be upgraded to its Drupal 7 equivalent.
-->values(array(
-  'name' => 'filter_html_3',
-  'value' => 'i:2;',
-))
-->values(array(
-  'name' => 'install_profile',
-  'value' => 's:7:"default";',
-))
-->values(array(
-  'name' => 'install_task',
-  'value' => 's:4:"done";',
-))
-->values(array(
-  'name' => 'install_time',
-  'value' => 'i:1282936263;',
-))
-->values(array(
-  'name' => 'javascript_parsed',
-  'value' => 'a:0:{}',
-))
-->values(array(
-  'name' => 'menu_expanded',
-  'value' => 'a:0:{}',
-))
-->values(array(
-  'name' => 'menu_masks',
-  'value' => 'a:17:{i:0;i:62;i:1;i:61;i:2;i:59;i:3;i:31;i:4;i:30;i:5;i:29;i:6;i:24;i:7;i:21;i:8;i:15;i:9;i:14;i:10;i:11;i:11;i:7;i:12;i:6;i:13;i:5;i:14;i:3;i:15;i:2;i:16;i:1;}',
-))
-->values(array(
-  'name' => 'node_options_forum',
-  'value' => 'a:1:{i:0;s:6:"status";}',
-))
-->values(array(
-  'name' => 'node_options_page',
-  'value' => 'a:1:{i:0;s:6:"status";}',
-))
-->values(array(
-  'name' => 'site_mail',
-  'value' => 's:21:"site_mail@example.com";',
-))
-->values(array(
-  'name' => 'site_name',
-  'value' => 's:9:"site_name";',
-))
-->values(array(
-  'name' => 'theme_default',
-  'value' => 's:7:"garland";',
-))
-->values(array(
-  'name' => 'theme_settings',
-  'value' => 'a:1:{s:21:"toggle_node_info_page";b:0;}',
-))
-->values(array(
-  'name' => 'update_last_check',
-  'value' => 'i:1282936266;',
-))
-->values(array(
-  'name' => 'user_email_verification',
-  'value' => 'b:1;',
-))
-->execute();
-
-db_create_table('vocabulary', array(
-  'fields' => array(
-    'vid' => array(
-      'type' => 'serial',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-    ),
-    'name' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'description' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-      'size' => 'big',
-    ),
-    'help' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'relations' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'hierarchy' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'multiple' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'required' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'tags' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'module' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'weight' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-  ),
-  'primary key' => array(
-    'vid',
-  ),
-  'indexes' => array(
-    'list' => array(
-      'weight',
-      'name',
-    ),
-  ),
-  'module' => 'taxonomy',
-  'name' => 'vocabulary',
-));
-db_insert('vocabulary')->fields(array(
-  'vid',
-  'name',
-  'description',
-  'help',
-  'relations',
-  'hierarchy',
-  'multiple',
-  'required',
-  'tags',
-  'module',
-  'weight',
-))
-->values(array(
-  'vid' => '1',
-  'name' => 'vocabulary 1 (i=0)',
-  'description' => 'description of vocabulary 1 (i=0)',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '0',
-  'multiple' => '0',
-  'required' => '0',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '0',
-))
-->values(array(
-  'vid' => '2',
-  'name' => 'vocabulary 2 (i=1)',
-  'description' => 'description of vocabulary 2 (i=1)',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '1',
-  'multiple' => '1',
-  'required' => '0',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '1',
-))
-->values(array(
-  'vid' => '3',
-  'name' => 'vocabulary 3 (i=2)',
-  'description' => 'description of vocabulary 3 (i=2)',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '2',
-  'multiple' => '0',
-  'required' => '0',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '2',
-))
-->values(array(
-  'vid' => '4',
-  'name' => 'vocabulary 4 (i=3)',
-  'description' => 'description of vocabulary 4 (i=3)',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '0',
-  'multiple' => '1',
-  'required' => '0',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '3',
-))
-->values(array(
-  'vid' => '5',
-  'name' => 'vocabulary 5 (i=4)',
-  'description' => 'description of vocabulary 5 (i=4)',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '1',
-  'multiple' => '0',
-  'required' => '0',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '4',
-))
-->values(array(
-  'vid' => '6',
-  'name' => 'vocabulary 6 (i=5)',
-  'description' => 'description of vocabulary 6 (i=5)',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '2',
-  'multiple' => '1',
-  'required' => '0',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '5',
-))
-->values(array(
-  'vid' => '7',
-  'name' => 'vocabulary 7 (i=6)',
-  'description' => 'description of vocabulary 7 (i=6)',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '0',
-  'multiple' => '0',
-  'required' => '1',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '6',
-))
-->values(array(
-  'vid' => '8',
-  'name' => 'vocabulary 8 (i=7)',
-  'description' => 'description of vocabulary 8 (i=7)',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '1',
-  'multiple' => '1',
-  'required' => '1',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '7',
-))
-->values(array(
-  'vid' => '9',
-  'name' => 'vocabulary 9 (i=8)',
-  'description' => 'description of vocabulary 9 (i=8)',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '2',
-  'multiple' => '0',
-  'required' => '1',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '8',
-))
-->values(array(
-  'vid' => '10',
-  'name' => 'vocabulary 10 (i=9)',
-  'description' => 'description of vocabulary 10 (i=9)',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '0',
-  'multiple' => '1',
-  'required' => '1',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '9',
-))
-->values(array(
-  'vid' => '11',
-  'name' => 'vocabulary 11 (i=10)',
-  'description' => 'description of vocabulary 11 (i=10)',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '1',
-  'multiple' => '0',
-  'required' => '1',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '10',
-))
-->values(array(
-  'vid' => '12',
-  'name' => 'vocabulary 12 (i=11)',
-  'description' => 'description of vocabulary 12 (i=11)',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '2',
-  'multiple' => '1',
-  'required' => '1',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '11',
-))
-->values(array(
-  'vid' => '13',
-  'name' => 'vocabulary 13 (i=12)',
-  'description' => 'description of vocabulary 13 (i=12)',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '0',
-  'multiple' => '0',
-  'required' => '0',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '12',
-))
-->values(array(
-  'vid' => '14',
-  'name' => 'vocabulary 14 (i=13)',
-  'description' => 'description of vocabulary 14 (i=13)',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '1',
-  'multiple' => '1',
-  'required' => '0',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '13',
-))
-->values(array(
-  'vid' => '15',
-  'name' => 'vocabulary 15 (i=14)',
-  'description' => 'description of vocabulary 15 (i=14)',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '2',
-  'multiple' => '0',
-  'required' => '0',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '14',
-))
-->values(array(
-  'vid' => '16',
-  'name' => 'vocabulary 16 (i=15)',
-  'description' => 'description of vocabulary 16 (i=15)',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '0',
-  'multiple' => '1',
-  'required' => '0',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '15',
-))
-->values(array(
-  'vid' => '17',
-  'name' => 'vocabulary 17 (i=16)',
-  'description' => 'description of vocabulary 17 (i=16)',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '1',
-  'multiple' => '0',
-  'required' => '0',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '16',
-))
-->values(array(
-  'vid' => '18',
-  'name' => 'vocabulary 18 (i=17)',
-  'description' => 'description of vocabulary 18 (i=17)',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '2',
-  'multiple' => '1',
-  'required' => '0',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '17',
-))
-->values(array(
-  'vid' => '19',
-  'name' => 'vocabulary 19 (i=18)',
-  'description' => 'description of vocabulary 19 (i=18)',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '0',
-  'multiple' => '0',
-  'required' => '1',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '18',
-))
-->values(array(
-  'vid' => '20',
-  'name' => 'vocabulary 20 (i=19)',
-  'description' => 'description of vocabulary 20 (i=19)',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '1',
-  'multiple' => '1',
-  'required' => '1',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '19',
-))
-->values(array(
-  'vid' => '21',
-  'name' => 'vocabulary 21 (i=20)',
-  'description' => 'description of vocabulary 21 (i=20)',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '2',
-  'multiple' => '0',
-  'required' => '1',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '20',
-))
-->values(array(
-  'vid' => '22',
-  'name' => 'vocabulary 22 (i=21)',
-  'description' => 'description of vocabulary 22 (i=21)',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '0',
-  'multiple' => '1',
-  'required' => '1',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '21',
-))
-->values(array(
-  'vid' => '23',
-  'name' => 'vocabulary 23 (i=22)',
-  'description' => 'description of vocabulary 23 (i=22)',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '1',
-  'multiple' => '0',
-  'required' => '1',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '22',
-))
-->values(array(
-  'vid' => '24',
-  'name' => 'vocabulary 24 (i=23)',
-  'description' => 'description of vocabulary 24 (i=23)',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '2',
-  'multiple' => '1',
-  'required' => '1',
-  'tags' => '0',
-  'module' => 'taxonomy',
-  'weight' => '23',
-))
-->execute();
-
-db_create_table('vocabulary_node_types', array(
-  'fields' => array(
-    'vid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'type' => array(
-      'type' => 'varchar',
-      'length' => 32,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-  ),
-  'primary key' => array(
-    'type',
-    'vid',
-  ),
-  'indexes' => array(
-    'vid' => array(
-      'vid',
-    ),
-  ),
-  'module' => 'taxonomy',
-  'name' => 'vocabulary_node_types',
-));
-db_insert('vocabulary_node_types')->fields(array(
-  'vid',
-  'type',
-))
-->values(array(
-  'vid' => '13',
-  'type' => 'page',
-))
-->values(array(
-  'vid' => '14',
-  'type' => 'page',
-))
-->values(array(
-  'vid' => '15',
-  'type' => 'page',
-))
-->values(array(
-  'vid' => '16',
-  'type' => 'page',
-))
-->values(array(
-  'vid' => '17',
-  'type' => 'page',
-))
-->values(array(
-  'vid' => '18',
-  'type' => 'page',
-))
-->values(array(
-  'vid' => '19',
-  'type' => 'page',
-))
-->values(array(
-  'vid' => '20',
-  'type' => 'page',
-))
-->values(array(
-  'vid' => '21',
-  'type' => 'page',
-))
-->values(array(
-  'vid' => '22',
-  'type' => 'page',
-))
-->values(array(
-  'vid' => '23',
-  'type' => 'page',
-))
-->values(array(
-  'vid' => '24',
-  'type' => 'page',
-))
-->execute();
-
-db_create_table('watchdog', array(
-  'fields' => array(
-    'wid' => array(
-      'type' => 'serial',
-      'not null' => TRUE,
-    ),
-    'uid' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'type' => array(
-      'type' => 'varchar',
-      'length' => 16,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'message' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-      'size' => 'big',
-    ),
-    'variables' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-      'size' => 'big',
-    ),
-    'severity' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'link' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'location' => array(
-      'type' => 'text',
-      'not null' => TRUE,
-    ),
-    'referer' => array(
-      'type' => 'text',
-      'not null' => FALSE,
-    ),
-    'hostname' => array(
-      'type' => 'varchar',
-      'length' => 128,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'timestamp' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'primary key' => array(
-    'wid',
-  ),
-  'indexes' => array(
-    'type' => array(
-      'type',
-    ),
-  ),
-  'module' => 'dblog',
-  'name' => 'watchdog',
-));
-
diff --git a/modules/simpletest/tests/upgrade/drupal-6.forum.database.php b/modules/simpletest/tests/upgrade/drupal-6.forum.database.php
deleted file mode 100644
index 059af6d..0000000
--- a/modules/simpletest/tests/upgrade/drupal-6.forum.database.php
+++ /dev/null
@@ -1,274 +0,0 @@
-<?php
-
-/**
- * Database additions for forum tests.
- */
-
-db_create_table('forum', array(
-  'fields' => array(
-    'nid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'vid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'tid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'indexes' => array(
-    'nid' => array(
-      'nid',
-    ),
-    'tid' => array(
-      'tid',
-    ),
-  ),
-  'primary key' => array(
-    'vid',
-  ),
-  'module' => 'forum',
-  'name' => 'forum',
-));
-db_insert('forum')->fields(array(
-  'nid',
-  'vid',
-  'tid',
-))
-->values(array(
-  'nid' => '51',
-  'vid' => '61',
-  'tid' => '81',
-))
-->execute();
-
-db_insert('node')->fields(array(
-  'nid',
-  'vid',
-  'type',
-  'language',
-  'title',
-  'uid',
-  'status',
-  'created',
-  'changed',
-  'comment',
-  'promote',
-  'moderate',
-  'sticky',
-  'tnid',
-  'translate',
-))
-->values(array(
-  'nid' => '51',
-  'vid' => '61',
-  'type' => 'forum',
-  'language' => '',
-  'title' => 'Apples',
-  'uid' => '1',
-  'status' => '1',
-  'created' => '1298363952',
-  'changed' => '1298363952',
-  'comment' => '2',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->execute();
-
-db_insert('node_revisions')->fields(array(
-  'nid',
-  'vid',
-  'uid',
-  'title',
-  'body',
-  'teaser',
-  'log',
-  'timestamp',
-  'format',
-))
-->values(array(
-  'nid' => '51',
-  'vid' => '61',
-  'uid' => '1',
-  'title' => 'Apples',
-  'body' => 'A fruit.',
-  'teaser' => 'A fruit.',
-  'log' => '',
-  'timestamp' => '1298363952',
-  'format' => '1',
-))
-->execute();
-
-db_insert('node_comment_statistics')->fields(array(
-  'nid',
-  'last_comment_timestamp',
-  'last_comment_name',
-  'last_comment_uid',
-  'comment_count',
-))
-->values(array(
-  'nid' => '51',
-  'last_comment_timestamp' => '1298363952',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '1',
-  'comment_count' => '0',
-))
-->execute();
-
-db_insert('node_type')->fields(array(
-  'type',
-  'name',
-  'module',
-  'description',
-  'help',
-  'has_title',
-  'title_label',
-  'has_body',
-  'body_label',
-  'min_word_count',
-  'custom',
-  'modified',
-  'locked',
-  'orig_type',
-))
-->values(array(
-  'type' => 'forum',
-  'name' => 'Forum topic',
-  'module' => 'forum',
-  'description' => 'A <em>forum topic</em> is the initial post to a new discussion thread within a forum.',
-  'help' => '',
-  'has_title' => '1',
-  'title_label' => 'Subject',
-  'has_body' => '1',
-  'body_label' => 'Body',
-  'min_word_count' => '0',
-  'custom' => '0',
-  'modified' => '0',
-  'locked' => '1',
-  'orig_type' => 'forum',
-))
-->execute();
-
-db_update('system')->fields(array(
-  'schema_version' => '6000',
-  'status' => '1',
-))
-->condition('filename', 'modules/forum/forum.module')
-->execute();
-
-db_insert('term_data')->fields(array(
-  'tid',
-  'vid',
-  'name',
-  'description',
-  'weight',
-))
-->values(array(
-  'tid' => '81',
-  'vid' => '101',
-  'name' => 'Fruits',
-  'description' => 'Fruits.',
-  'weight' => '0',
-))
-->execute();
-
-db_insert('term_hierarchy')->fields(array(
-  'tid',
-  'parent',
-))
-->values(array(
-  'tid' => '81',
-  'parent' => '0',
-))
-->execute();
-
-db_insert('term_node')->fields(array(
-  'nid',
-  'vid',
-  'tid',
-))
-->values(array(
-  'nid' => '51',
-  'vid' => '61',
-  'tid' => '81',
-))
-->execute();
-
-db_insert('variable')->fields(array(
-  'name',
-  'value',
-))
-->values(array(
-  'name' => 'forum_nav_vocabulary',
-  'value' => 's:3:"101";',
-))
-->values(array(
-  'name' => 'forum_containers',
-  'value' => 'a:1:{i:0;s:3:"101";}',
-))
-->execute();
-
-db_insert('vocabulary')->fields(array(
-  'vid',
-  'name',
-  'description',
-  'help',
-  'relations',
-  'hierarchy',
-  'multiple',
-  'required',
-  'tags',
-  'module',
-  'weight',
-))
-->values(array(
-  'vid' => '101',
-  'name' => 'Upgrade test for forums',
-  'description' => 'Vocabulary used for Forums. The name is changed from the default "Forums" so that the upgrade path may be tested.',
-  'help' => '',
-  'relations' => '1',
-  'hierarchy' => '1',
-  'multiple' => '0',
-  'required' => '0',
-  'tags' => '0',
-  'module' => 'forum',
-  'weight' => '-10',
-))
-->execute();
-
-db_insert('vocabulary_node_types')->fields(array(
-  'vid',
-  'type',
-))
-->values(array(
-  'vid' => '101',
-  'type' => 'forum',
-))
-->execute();
-
-// Provide all users with the ability to create forum topics.
-$results = db_select('permission', 'p')
-  ->fields('p')
-  ->execute();
-
-foreach ($results as $result) {
-  $permissions = $result->perm . ', create forum topics';
-  db_update('permission')
-    ->fields(array(
-      'perm' => $permissions,
-    ))
-    ->condition('rid', $result->rid)
-    ->execute();
-}
diff --git a/modules/simpletest/tests/upgrade/drupal-6.locale.database.php b/modules/simpletest/tests/upgrade/drupal-6.locale.database.php
deleted file mode 100644
index c8af671..0000000
--- a/modules/simpletest/tests/upgrade/drupal-6.locale.database.php
+++ /dev/null
@@ -1,276 +0,0 @@
-<?php
-
-/**
- * Database additions for locale tests.
- */
-
-db_create_table('languages', array(
-  'fields' => array(
-    'language' => array(
-      'type' => 'varchar',
-      'length' => 12,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'name' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'native' => array(
-      'type' => 'varchar',
-      'length' => 64,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'direction' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'enabled' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'plurals' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'formula' => array(
-      'type' => 'varchar',
-      'length' => 128,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'domain' => array(
-      'type' => 'varchar',
-      'length' => 128,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'prefix' => array(
-      'type' => 'varchar',
-      'length' => 128,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'weight' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'javascript' => array(
-      'type' => 'varchar',
-      'length' => 32,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-  ),
-  'primary key' => array(
-    'language',
-  ),
-  'indexes' => array(
-    'list' => array(
-      'weight',
-      'name',
-    ),
-  ),
-  'module' => 'locale',
-  'name' => 'languages',
-));
-db_insert('languages')->fields(array(
-  'language',
-  'name',
-  'native',
-  'direction',
-  'enabled',
-  'plurals',
-  'formula',
-  'domain',
-  'prefix',
-  'weight',
-  'javascript',
-))
-->values(array(
-  'language' => 'en',
-  'name' => 'English',
-  'native' => 'English',
-  'direction' => '0',
-  'enabled' => '1',
-  'plurals' => '0',
-  'formula' => '',
-  'domain' => 'http://en.example.com',
-  'prefix' => 'en',
-  'weight' => '0',
-  'javascript' => '',
-))
-->values(array(
-  'language' => 'fr',
-  'name' => 'French',
-  'native' => 'Français',
-  'direction' => '0',
-  'enabled' => '1',
-  'plurals' => '2',
-  'formula' => '($n>1)',
-  'domain' => '',
-  'prefix' => 'fr',
-  'weight' => '-3',
-  'javascript' => '51e92dcfe1491f4595b9df7f3b287753',
-))
-->execute();
-
-db_create_table('locales_source', array(
-  'fields' => array(
-    'lid' => array(
-      'type' => 'serial',
-      'not null' => TRUE,
-    ),
-    'location' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'textgroup' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => 'default',
-    ),
-    'source' => array(
-      'type' => 'text',
-      'mysql_type' => 'blob',
-      'not null' => TRUE,
-    ),
-    'version' => array(
-      'type' => 'varchar',
-      'length' => 20,
-      'not null' => TRUE,
-      'default' => 'none',
-    ),
-  ),
-  'primary key' => array(
-    'lid',
-  ),
-  'indexes' => array(
-    'source' => array(
-      array(
-        'source',
-        30,
-      ),
-    ),
-  ),
-  'module' => 'locale',
-  'name' => 'locales_source',
-));
-
-db_create_table('locales_target', array(
-  'fields' => array(
-    'lid' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'translation' => array(
-      'type' => 'text',
-      'mysql_type' => 'blob',
-      'not null' => TRUE,
-    ),
-    'language' => array(
-      'type' => 'varchar',
-      'length' => 12,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'plid' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'plural' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'primary key' => array(
-    'language',
-    'lid',
-    'plural',
-  ),
-  'indexes' => array(
-    'lid' => array(
-      'lid',
-    ),
-    'plid' => array(
-      'plid',
-    ),
-    'plural' => array(
-      'plural',
-    ),
-  ),
-  'module' => 'locale',
-  'name' => 'locales_target',
-));
-
-// Enable the locale module.
-db_update('system')->fields(array(
-  'status' => 1,
-  'schema_version' => '6006',
-))
-->condition('type', 'module')
-->condition('name', 'locale')
-->execute();
-
-// Set the default language.
-db_insert('variable')->fields(array(
-  'name',
-  'value',
-))
-->values(array(
-  'name' => 'language_default',
-  'value' => 'O:8:"stdClass":11:{s:8:"language";s:2:"fr";s:4:"name";s:6:"French";s:6:"native";s:9:"Français";s:9:"direction";s:1:"0";s:7:"enabled";i:1;s:7:"plurals";s:1:"2";s:7:"formula";s:6:"($n>1)";s:6:"domain";s:0:"";s:6:"prefix";s:0:"";s:6:"weight";s:2:"-3";s:10:"javascript";s:32:"51e92dcfe1491f4595b9df7f3b287753";}',
-))
-->values(array(
-  'name' => 'language_count',
-  'value' => 'i:2;',
-))
-->values(array(
-  'name' => 'language_negotiation',
-  'value' => 'i:0;',
-))
-->execute();
-
-// Add the language switcher block in the left region.
-db_insert('blocks')->fields(array(
-  'module',
-  'delta',
-  'theme',
-  'status',
-  'weight',
-  'region',
-  'custom',
-  'throttle',
-  'visibility',
-  'pages',
-  'title',
-  'cache',
-))
-->values(array(
-  'module' => 'locale',
-  'delta' => '0',
-  'theme' => 'garland',
-  'status' => '1',
-  'weight' => '0',
-  'region' => 'left',
-  'custom' => '0',
-  'throttle' => '0',
-  'visibility' => '0',
-  'pages' => '',
-  'title' => '',
-  'cache' => '-1',
-))
-->execute();
diff --git a/modules/simpletest/tests/upgrade/drupal-6.menu.database.php b/modules/simpletest/tests/upgrade/drupal-6.menu.database.php
deleted file mode 100644
index 7fae337..0000000
--- a/modules/simpletest/tests/upgrade/drupal-6.menu.database.php
+++ /dev/null
@@ -1,202 +0,0 @@
-<?php
-db_insert('variable')->fields(array(
-  'name',
-  'value',
-))
-->values(array(
-  'name' => 'menu_default_node_menu',
-  'value' => 's:15:"secondary-links";',
-))
-->values(array(
-  'name' => 'menu_primary_links_source',
-  'value' => 's:15:"secondary-links";',
-))
-->values(array(
-  'name' => 'menu_secondary_links_source',
-  'value' => 's:13:"primary-links";',
-))
-->execute();
-
-// Add some links to the menus.
-db_insert('menu_links')->fields(array(
-  'menu_name',
-  'mlid',
-  'plid',
-  'link_path',
-  'router_path',
-  'link_title',
-  'options',
-  'module',
-  'hidden',
-  'external',
-  'has_children',
-  'expanded',
-  'weight',
-  'depth',
-  'customized',
-  'p1',
-  'p2',
-  'p3',
-  'p4',
-  'p5',
-  'p6',
-  'p7',
-  'p8',
-  'p9',
-  'updated',
-))
-->values(array(
-  'menu_name' => 'navigation',
-  'mlid' => '201',
-  'plid' => '0',
-  'link_path' => 'node/add',
-  'router_path' => 'node/add',
-  'link_title' => 'nodeadd-navigation',
-  'options' => 'a:0:{}',
-  'module' => 'menu',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '1',
-  'expanded' => '0',
-  'weight' => '1',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '201',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'primary-links',
-  'mlid' => '204',
-  'plid' => '0',
-  'link_path' => 'node/add',
-  'router_path' => 'node/add',
-  'link_title' => 'nodeadd-primary',
-  'options' => 'a:0:{}',
-  'module' => 'menu',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '1',
-  'expanded' => '0',
-  'weight' => '1',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '204',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'secondary-links',
-  'mlid' => '205',
-  'plid' => '0',
-  'link_path' => 'node/add',
-  'router_path' => 'node/add',
-  'link_title' => 'nodeadd-secondary',
-  'options' => 'a:0:{}',
-  'module' => 'menu',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '1',
-  'expanded' => '0',
-  'weight' => '1',
-  'depth' => '1',
-  'customized' => '0',
-  'p1' => '205',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->values(array(
-  'menu_name' => 'secondary-links',
-  'mlid' => '206',
-  'plid' => '0',
-  'link_path' => 'node',
-  'router_path' => 'node',
-  'link_title' => 'node-page-with-query',
-  'options' => 'a:2:{s:5:"query";s:14:"page=1&node=10";s:10:"attributes";a:1:{s:5:"title";s:0:"";}}',
-  'module' => 'menu',
-  'hidden' => '0',
-  'external' => '0',
-  'has_children' => '0',
-  'expanded' => '0',
-  'weight' => '2',
-  'depth' => '1',
-  'customized' => '1',
-  'p1' => '206',
-  'p2' => '0',
-  'p3' => '0',
-  'p4' => '0',
-  'p5' => '0',
-  'p6' => '0',
-  'p7' => '0',
-  'p8' => '0',
-  'p9' => '0',
-  'updated' => '0',
-))
-->execute();
-db_insert('blocks')->fields(array(
-  'bid',
-  'module',
-  'delta',
-  'theme',
-  'status',
-  'weight',
-  'region',
-  'custom',
-  'throttle',
-  'visibility',
-  'pages',
-  'title',
-  'cache',
-))
-->values(array(
-  'bid' => '4',
-  'module' => 'menu',
-  'delta' => 'primary-links',
-  'theme' => 'garland',
-  'status' => '1',
-  'weight' => '0',
-  'region' => 'left',
-  'custom' => '0',
-  'throttle' => '0',
-  'visibility' => '0',
-  'pages' => '',
-  'title' => 'My Primary Links',
-  'cache' => '-1',
-))
-->values(array(
-  'bid' => '5',
-  'module' => 'menu',
-  'delta' => 'secondary-links',
-  'theme' => 'garland',
-  'status' => '1',
-  'weight' => '0',
-  'region' => 'left',
-  'custom' => '0',
-  'throttle' => '0',
-  'visibility' => '0',
-  'pages' => '',
-  'title' => 'My Secondary Links',
-  'cache' => '-1',
-))
-->execute();
diff --git a/modules/simpletest/tests/upgrade/drupal-6.node_type_broken.database.php b/modules/simpletest/tests/upgrade/drupal-6.node_type_broken.database.php
deleted file mode 100644
index 1dc1946..0000000
--- a/modules/simpletest/tests/upgrade/drupal-6.node_type_broken.database.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-db_insert('comments')->fields(array(
-  'cid',
-  'pid',
-  'nid',
-  'uid',
-  'subject',
-  'comment',
-  'hostname',
-  'timestamp',
-  'status',
-  'format',
-  'thread',
-  'name',
-  'mail',
-  'homepage',
-))
-->values(array(
-  'cid' => 1,
-  'pid' => 0,
-  'nid' => 37,
-  'uid' => 3,
-  'subject' => 'Comment title 1',
-  'comment' => 'Comment body 1 - Comment body 1 - Comment body 1 - Comment body 1 - Comment body 1 - Comment body 1 - Comment body 1 - Comment body 1',
-  'hostname' => '127.0.0.1',
-  'timestamp' => 1008617630,
-  'status' => 0,
-  'format' => 1,
-  'thread' => '01/',
-  'name' => NULL,
-  'mail' => NULL,
-  'homepage' => '',
-))
-->execute();
diff --git a/modules/simpletest/tests/upgrade/drupal-6.translatable.database.php b/modules/simpletest/tests/upgrade/drupal-6.translatable.database.php
deleted file mode 100644
index 5162116..0000000
--- a/modules/simpletest/tests/upgrade/drupal-6.translatable.database.php
+++ /dev/null
@@ -1,125 +0,0 @@
-<?php
-
-/**
- * Database additions for translatable tests.
- */
-
-db_insert('node')->fields(array(
-  'nid',
-  'vid',
-  'type',
-  'language',
-  'title',
-  'uid',
-  'status',
-  'created',
-  'changed',
-  'comment',
-  'promote',
-  'moderate',
-  'sticky',
-  'tnid',
-  'translate',
-))
-->values(array(
-  'nid' => '53',
-  'vid' => '63',
-  'type' => 'translatable_page',
-  'language' => 'fr',
-  'title' => 'First translatable page',
-  'uid' => '1',
-  'status' => '1',
-  'created' => '1298363952',
-  'changed' => '1298363952',
-  'comment' => '2',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->execute();
-
-db_insert('node_revisions')->fields(array(
-  'nid',
-  'vid',
-  'uid',
-  'title',
-  'body',
-  'teaser',
-  'log',
-  'timestamp',
-  'format',
-))
-->values(array(
-  'nid' => '53',
-  'vid' => '63',
-  'uid' => '1',
-  'title' => 'First translatable page',
-  'body' => 'Body of the first translatable page.',
-  'teaser' => 'Teaser of the first translatable page.',
-  'log' => '',
-  'timestamp' => '1298363952',
-  'format' => '1',
-))
-->execute();
-
-db_insert('node_comment_statistics')->fields(array(
-  'nid',
-  'last_comment_timestamp',
-  'last_comment_name',
-  'last_comment_uid',
-  'comment_count',
-))
-->values(array(
-  'nid' => '53',
-  'last_comment_timestamp' => '1298363952',
-  'last_comment_name' => NULL,
-  'last_comment_uid' => '1',
-  'comment_count' => '0',
-))
-->execute();
-
-db_insert('node_type')->fields(array(
-  'type',
-  'name',
-  'module',
-  'description',
-  'help',
-  'has_title',
-  'title_label',
-  'has_body',
-  'body_label',
-  'min_word_count',
-  'custom',
-  'modified',
-  'locked',
-  'orig_type',
-))
-->values(array(
-  'type' => 'translatable_page',
-  'name' => 'Translatable page',
-  'module' => 'node',
-  'description' => 'A <em>translatable page</em> is like a normal page, but with multilanguage support.',
-  'help' => '',
-  'has_title' => '1',
-  'title_label' => 'Title',
-  'has_body' => '1',
-  'body_label' => 'Body',
-  'min_word_count' => '0',
-  'custom' => '0',
-  'modified' => '0',
-  'locked' => '1',
-  'orig_type' => '',
-))
-->execute();
-
-db_insert('variable')->fields(array(
-  'name',
-  'value',
-))
-->values(array(
-  'name' => 'language_content_type_translatable_page',
-  'value' => 's:1:"1";',
-))
-->execute();
diff --git a/modules/simpletest/tests/upgrade/drupal-6.trigger.database.php b/modules/simpletest/tests/upgrade/drupal-6.trigger.database.php
deleted file mode 100644
index 0962f35..0000000
--- a/modules/simpletest/tests/upgrade/drupal-6.trigger.database.php
+++ /dev/null
@@ -1,82 +0,0 @@
-<?php
-/**
- * @file
- * Test content for the trigger upgrade path.
- */
-db_create_table('trigger_assignments', array(
-  'fields' => array(
-    'hook' => array(
-      'type' => 'varchar',
-      'length' => 32,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'op' => array(
-      'type' => 'varchar',
-      'length' => 32,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'aid' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'weight' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-  ),
-  'primary key' => array('hook', 'op', 'aid'),
-  'module' => 'trigger',
-  'name' => 'trigger_assignments',
-));
-
-
-// Add several trigger configurations.
-db_insert('trigger_assignments')->fields(array(
-  'hook',
-  'op',
-  'aid',
-  'weight',
-))
-->values(array(
-  'hook' => 'node',
-  'op' => 'presave',
-  'aid' => 'node_publish_action',
-  'weight' => '1',
-))
-->values(array(
-  'hook' => 'comment',
-  'op' => 'presave',
-  'aid' => 'comment_publish_action',
-  'weight' => '1',
-))
-->values(array(
-  'hook' => 'comment_delete',
-  'op' => 'presave',
-  'aid' => 'node_save_action',
-  'weight' => '1',
-))
-->values(array(
-  'hook' => 'nodeapi',
-  'op' => 'presave',
-  'aid' => 'node_make_sticky_action',
-  'weight' => '1',
-))
-->values(array(
-  'hook' => 'nodeapi',
-  'op' => 'somehow_nodeapi_got_a_very_long',
-  'aid' => 'node_save_action',
-  'weight' => '1',
-))
-->execute();
-
-db_update('system')->fields(array(
-  'schema_version' => '6000',
-  'status' => '1',
-))
-->condition('filename', 'modules/trigger/trigger.module')
-->execute();
diff --git a/modules/simpletest/tests/upgrade/drupal-6.upload.database.php b/modules/simpletest/tests/upgrade/drupal-6.upload.database.php
deleted file mode 100644
index 46ebe2c..0000000
--- a/modules/simpletest/tests/upgrade/drupal-6.upload.database.php
+++ /dev/null
@@ -1,449 +0,0 @@
-<?php
-
-db_insert('files')->fields(array(
-  'fid',
-  'uid',
-  'filename',
-  'filepath',
-  'filemime',
-  'filesize',
-  'status',
-  'timestamp',
-))
-/*
- * This entry is deliberately omitted to test the upgrade routine when facing
- * possible data corruption.
- *
-->values(array(
-  'fid' => '1',
-  'uid' => '1',
-  'filename' => 'powered-blue-80x15.png',
-  'filepath' => 'sites/default/files/powered-blue-80x15.png',
-  'filemime' => 'image/png',
-  'filesize' => '1011',
-  'status' => '1',
-  'timestamp' => '1285700240',
-)) */
-->values(array(
-  'fid' => '2',
-  'uid' => '1',
-  'filename' => 'powered-blue-80x15.png',
-  'filepath' => 'sites/default/files/powered-blue-80x15_0.png',
-  'filemime' => 'image/png',
-  'filesize' => '1011',
-  'status' => '1',
-  'timestamp' => '1285700317',
-))
-->values(array(
-  'fid' => '3',
-  'uid' => '1',
-  'filename' => 'powered-blue-88x31.png',
-  'filepath' => 'sites/default/files/powered-blue-88x31.png',
-  'filemime' => 'image/png',
-  'filesize' => '2113',
-  'status' => '1',
-  'timestamp' => '1285700343',
-))
-->values(array(
-  'fid' => '4',
-  'uid' => '1',
-  'filename' => 'powered-blue-135x42.png',
-  'filepath' => 'sites/default/files/powered-blue-135x42.png',
-  'filemime' => 'image/png',
-  'filesize' => '3027',
-  'status' => '1',
-  'timestamp' => '1285700366',
-))
-->values(array(
-  'fid' => '5',
-  'uid' => '1',
-  'filename' => 'powered-black-80x15.png',
-  'filepath' => 'sites/default/files/powered-black-80x15.png',
-  'filemime' => 'image/png',
-  'filesize' => '1467',
-  'status' => '1',
-  'timestamp' => '1285700529',
-))
-->values(array(
-  'fid' => '6',
-  'uid' => '1',
-  'filename' => 'powered-black-135x42.png',
-  'filepath' => 'sites/default/files/powered-black-135x42.png',
-  'filemime' => 'image/png',
-  'filesize' => '2817',
-  'status' => '1',
-  'timestamp' => '1285700552',
-))
-->values(array(
-  'fid' => '7',
-  'uid' => '1',
-  'filename' => 'forum-hot-new.png',
-  'filepath' => 'sites/default/files/forum-hot-new.png',
-  'filemime' => 'image/png',
-  'filesize' => '237',
-  'status' => '1',
-  'timestamp' => '1285708937',
-))
-->values(array(
-  'fid' => '8',
-  'uid' => '1',
-  'filename' => 'forum-hot.png',
-  'filepath' => 'sites/default/files/forum-hot.png',
-  'filemime' => 'image/png',
-  'filesize' => '229',
-  'status' => '1',
-  'timestamp' => '1285708944',
-))
-->values(array(
-  'fid' => '9',
-  'uid' => '1',
-  'filename' => 'forum-new.png',
-  'filepath' => 'sites/default/files/forum-new.png',
-  'filemime' => 'image/png',
-  'filesize' => '175',
-  'status' => '1',
-  'timestamp' => '1285708950',
-))
-->values(array(
-  'fid' => '10',
-  'uid' => '1',
-  'filename' => 'forum-sticky.png',
-  'filepath' => 'sites/default/files/forum-sticky.png',
-  'filemime' => 'image/png',
-  'filesize' => '329',
-  'status' => '1',
-  'timestamp' => '1285708957',
-))
-/*
- * This is a case where the path is repeated twice.
- */
-->values(array(
-  'fid' => '11',
-  'uid' => '1',
-  'filename' => 'crazy-basename.png',
-  'filepath' => '/drupal-6/file/directory/path/drupal-6/file/directory/path/crazy-basename.png',
-  'filemime' => 'image/png',
-  'filesize' => '329',
-  'status' => '1',
-  'timestamp' => '1285708958',
-))
-->execute();
-
-db_insert('node')->fields(array(
-  'nid',
-  'vid',
-  'type',
-  'language',
-  'title',
-  'uid',
-  'status',
-  'created',
-  'changed',
-  'comment',
-  'promote',
-  'moderate',
-  'sticky',
-  'tnid',
-  'translate',
-))
-->values(array(
-  'nid' => '38',
-  'vid' => '50',
-  'type' => 'page',
-  'language' => '',
-  'title' => 'node title 38 revision 50',
-  'uid' => '1',
-  'status' => '1',
-  'created' => '1285603317',
-  'changed' => '1285603317',
-  'comment' => '0',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '39',
-  'vid' => '52',
-  'type' => 'page',
-  'language' => '',
-  'title' => 'node title 39 revision 52',
-  'uid' => '1',
-  'status' => '1',
-  'created' => '1285700317',
-  'changed' => '1285700600',
-  'comment' => '0',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
-->values(array(
-  'nid' => '40',
-  'vid' => '53',
-  'type' => 'page',
-  'language' => '',
-  'title' => 'node title 40 revision 53',
-  'uid' => '1',
-  'status' => '1',
-  'created' => '1285709012',
-  'changed' => '1285709012',
-  'comment' => '0',
-  'promote' => '0',
-  'moderate' => '0',
-  'sticky' => '0',
-  'tnid' => '0',
-  'translate' => '0',
-))
- ->execute();
-
-db_insert('node_revisions')->fields(array(
-  'nid',
-  'vid',
-  'uid',
-  'title',
-  'body',
-  'teaser',
-  'log',
-  'timestamp',
-  'format',
-))
-->values(array(
-  'nid' => '38',
-  'vid' => '50',
-  'uid' => '1',
-  'title' => 'node title 38 revision 50',
-  'body' => "Attachments:\r\npowered-blue-80x15.png",
-  'teaser' => "Attachments:\r\npowered-blue-80x15.png",
-  'log' => '',
-  'timestamp' => '1285603317',
-  'format' => '1',
-))
-->values(array(
-  'nid' => '39',
-  'vid' => '51',
-  'uid' => '1',
-  'title' => 'node title 39 revision 51',
-  'body' => "Attachments:\r\npowered-blue-80x15.png\r\npowered-blue-88x31.png\r\npowered-blue-135x42.png",
-  'teaser' => "Attachments:\r\npowered-blue-80x15.png\r\npowered-blue-88x31.png\r\npowered-blue-135x42.png",
-  'log' => '',
-  'timestamp' => '1285700487',
-  'format' => '1',
-))
-->values(array(
-  'nid' => '39',
-  'vid' => '52',
-  'uid' => '1',
-  'title' => 'node title 39 revision 52',
-  'body' => "Attachments:\r\npowered-blue-88x31.png\r\npowered-black-80x15.png\r\npowered-black-135x42.png",
-  'teaser' => "Attachments:\r\npowered-blue-88x31.png\r\npowered-black-80x15.png\r\npowered-black-135x42.png",
-  'log' => '',
-  'timestamp' => '1285700600',
-  'format' => '1',
-))
-->values(array(
-  'nid' => '40',
-  'vid' => '53',
-  'uid' => '1',
-  'title' => 'node title 40 revision 53',
-  'body' => "Attachments:\r\nforum-hot-new.png\r\nforum-hot.png\r\nforum-sticky.png\r\nforum-new.png\r\ncrazy-basename.png",
-  'teaser' => "Attachments:\r\nforum-hot-new.png\r\nforum-hot.png\r\nforum-sticky.png\r\nforum-new.png\r\ncrazy-basename.png",
-  'log' => '',
-  'timestamp' => '1285709012',
-  'format' => '1',
-))
- ->execute();
-
-db_create_table('upload', array(
-  'fields' => array(
-    'fid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'nid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'vid' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-    ),
-    'description' => array(
-      'type' => 'varchar',
-      'length' => 255,
-      'not null' => TRUE,
-      'default' => '',
-    ),
-    'list' => array(
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-    'weight' => array(
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-      'size' => 'tiny',
-    ),
-  ),
-  'primary key' => array(
-    'vid',
-    'fid',
-  ),
-  'indexes' => array(
-    'fid' => array(
-      'fid',
-    ),
-    'nid' => array(
-      'nid',
-    ),
-  ),
-  'module' => 'upload',
-  'name' => 'upload',
-));
-db_insert('upload')->fields(array(
-  'fid',
-  'nid',
-  'vid',
-  'description',
-  'list',
-  'weight',
-))
-->values(array(
-  'fid' => '1',
-  'nid' => '38',
-  'vid' => '50',
-  'description' => 'powered-blue-80x15.png',
-  'list' => '1',
-  'weight' => '0',
-))
-->values(array(
-  'fid' => '2',
-  'nid' => '39',
-  'vid' => '51',
-  'description' => 'powered-blue-80x15.png',
-  'list' => '1',
-  'weight' => '0',
-))
-->values(array(
-  'fid' => '3',
-  'nid' => '39',
-  'vid' => '51',
-  'description' => 'powered-blue-88x31.png',
-  'list' => '1',
-  'weight' => '0',
-))
-->values(array(
-  'fid' => '4',
-  'nid' => '39',
-  'vid' => '51',
-  'description' => 'powered-blue-135x42.png',
-  'list' => '1',
-  'weight' => '0',
-))
-->values(array(
-  'fid' => '3',
-  'nid' => '39',
-  'vid' => '52',
-  'description' => 'powered-blue-88x31.png',
-  'list' => '1',
-  'weight' => '0',
-))
-->values(array(
-  'fid' => '5',
-  'nid' => '39',
-  'vid' => '52',
-  'description' => 'powered-black-80x15.png',
-  'list' => '1',
-  'weight' => '0',
-))
-->values(array(
-  'fid' => '6',
-  'nid' => '39',
-  'vid' => '52',
-  'description' => 'powered-black-135x42.png',
-  'list' => '1',
-  'weight' => '0',
-))
-->values(array(
-  'fid' => '7',
-  'nid' => '40',
-  'vid' => '53',
-  'description' => 'forum-hot-new.png',
-  'list' => '1',
-  'weight' => '-4',
-))
-->values(array(
-  'fid' => '8',
-  'nid' => '40',
-  'vid' => '53',
-  'description' => 'forum-hot.png',
-  'list' => '1',
-  'weight' => '-3',
-))
-->values(array(
-  'fid' => '10',
-  'nid' => '40',
-  'vid' => '53',
-  'description' => 'forum-sticky.png',
-  'list' => '1',
-  'weight' => '-2',
-))
-->values(array(
-  'fid' => '9',
-  'nid' => '40',
-  'vid' => '53',
-  'description' => 'forum-new.png',
-  'list' => '1',
-  'weight' => '-1',
-))
-->values(array(
-  'fid' => '11',
-  'nid' => '40',
-  'vid' => '53',
-  'description' => 'crazy-basename.png',
-  'list' => '1',
-  'weight' => '0',
-))
-->execute();
-
-// Add series of entries for invalid node vids to the {upload} table.
-for ($i = 30; $i < 250; $i += 2) {
-  db_insert('upload')->fields(array(
-    'fid',
-    'nid',
-    'vid',
-    'description',
-    'list',
-    'weight',
-  ))
-  // Invalid fid, invalid vid.
-  ->values(array(
-    'fid' => $i,
-    'nid' => '40',
-    'vid' => 24 + $i,
-    'description' => 'crazy-basename.png',
-    'list' => '1',
-    'weight' => '0',
-  ))
-  // Valid fid, invalid vid.
-  ->values(array(
-    'fid' => 2,
-    'nid' => '40',
-    'vid' => 24 + $i + 1,
-    'description' => 'crazy-basename.png',
-    'list' => '1',
-    'weight' => '0',
-  ))
-  ->execute();
-}
diff --git a/modules/simpletest/tests/upgrade/drupal-6.user-no-password-token.database.php b/modules/simpletest/tests/upgrade/drupal-6.user-no-password-token.database.php
deleted file mode 100644
index 6463194..0000000
--- a/modules/simpletest/tests/upgrade/drupal-6.user-no-password-token.database.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-db_insert('variable')->fields(array(
-  'name',
-  'value',
-))
-->values(array(
-  'name' => 'user_mail_register_no_approval_required_body',
-  'value' => 's:86:"!username, !site, !uri, !uri_brief, !mailto, !date, !login_uri, !edit_uri, !login_url.";',
-))
-->execute();
diff --git a/modules/simpletest/tests/upgrade/drupal-6.user-password-token.database.php b/modules/simpletest/tests/upgrade/drupal-6.user-password-token.database.php
deleted file mode 100644
index e91b6e4..0000000
--- a/modules/simpletest/tests/upgrade/drupal-6.user-password-token.database.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-db_insert('variable')->fields(array(
-  'name',
-  'value',
-))
-->values(array(
-  'name' => 'user_mail_register_no_approval_required_body',
-  'value' => 's:97:"!password, !username, !site, !uri, !uri_brief, !mailto, !date, !login_uri, !edit_uri, !login_url.";',
-))
-->execute();
-
-db_insert('users')->fields(array(
-  'uid',
-  'name',
-  'pass',
-  'mail',
-  'mode',
-  'sort',
-  'threshold',
-  'theme',
-  'signature',
-  'signature_format',
-  'created',
-  'access',
-  'login',
-  'status',
-  'timezone',
-  'language',
-  'picture',
-  'init',
-  'data',
-))
-->values(array(
-  'uid' => 3,
-  'name' => 'hashtester',
-  // This is not a valid D7 hash, but a truncated one.
-  'pass' => '$S$DAK00p3Dkojkf4O/UizYxenguXnjv',
-  'mail' => 'hashtester@example.com',
-  'mode' => '0',
-  'sort' => '0',
-  'threshold' => '0',
-  'theme' => '',
-  'signature' => '',
-  'signature_format' => '0',
-  'created' => '1277671599',
-  'access' => '1277671612',
-  'login' => '1277671612',
-  'status' => '1',
-  'timezone' => '-21600',
-  'language' => '',
-  'picture' => '',
-  'init' => 'hashtester@example.com',
-  'data' => 'a:0:{}',
-))
-->execute();
diff --git a/modules/simpletest/tests/upgrade/drupal-7.aggregator.database.php b/modules/simpletest/tests/upgrade/drupal-7.aggregator.database.php
deleted file mode 100644
index 00ea7d2..0000000
--- a/modules/simpletest/tests/upgrade/drupal-7.aggregator.database.php
+++ /dev/null
@@ -1,149 +0,0 @@
-<?php
-/**
- * @file
- * Test content for the aggregator update path.
- */
-
-db_insert('aggregator_feed')->fields(array(
-  'fid',
-  'title',
-  'url',
-  'refresh',
-  'checked',
-  'queued',
-  'link',
-  'description',
-  'image',
-  'hash',
-  'etag',
-  'modified',
-  'block',
-))
-  ->values(array(
-  'fid' => '1',
-  'title' => 'Drupal commit log',
-  'url' => 'http://drupal.org/commitlog/feed',
-  'refresh' => '3600',
-  'checked' => '1347209523',
-  'queued' => '0',
-  'link' => 'http://drupal.org/versioncontrol/garbage/path',
-  'description' => '',
-  'image' => '',
-  'hash' => '84f57ae5bffa7fd56942a6293be91244d8551cd18204a7c7de6a17065ea4d54d',
-  'etag' => '"1347206975"',
-  'modified' => '1347206975',
-  'block' => '5',
-))
-  ->execute();
-
-db_insert('aggregator_item')->fields(array(
-  'iid',
-  'fid',
-  'title',
-  'link',
-  'author',
-  'description',
-  'timestamp',
-  'guid',
-))
-  ->values(array(
-  'iid' => '1',
-  'fid' => '1',
-  'title' => 'Domain Access: Commit b904022 on 7.x-2.x authored by bforchhammer, committed by agentrickard',
-  'link' => 'http://drupal.org/commitlog/commit/2%2C410/b90402243b4a9dee0d2e2c4a729dcb2f58dc53c0',
-  'author' => 'bforchhammer',
-  'description' => "<div class=\"view view-commitlog-commit-items view-id-commitlog_commit_items view-display-id-block_1 view-dom-id-10\">\n    \n  \n  \n      <div class=\"view-content\">\n        <div class=\"views-row views-row-1 views-row-odd views-row-first\">\n      \n  <div class=\"views-field-path\">\n                <span class=\"field-content\"><a href=\"http://drupalcode.org/project/domain.git/blob/b90402243b4a9dee0d2e2c4a729dcb2f58dc53c0:/domain_source/domain_source.info\">/domain_source/domain_source.info</a></span>\n  </div>\n  \n  <div class=\"views-field-changed-lines\">\n                <span class=\"field-content\">1 addition & 1 deletion</span>\n  </div>\n  \n  <div class=\"views-field-visual-diffstat\">\n                <span class=\"field-content\"><span class=\"versioncontrol-diffstat clear-block\"><span class=\"plus\">+</span><span class=\"minus\">-</span><span class=\"no-op\"> </span><span class=\"no-op\"> </span><span class=\"no-op\"> </span><span class=\"no-op\"> </span><span class=\"no-op\"> </span></span></span>\n  </div>\n  </div>\n  <div class=\"views-row views-row-2 views-row-even views-row-last\">\n      \n  <div class=\"views-field-path\">\n                <span class=\"field-content\"><a href=\"http://drupalcode.org/project/domain.git/blob/b90402243b4a9dee0d2e2c4a729dcb2f58dc53c0:/domain_source/domain_source.views.inc\">/domain_source/domain_source.views.inc</a></span>\n  </div>\n  \n  <div class=\"views-field-changed-lines\">\n                <span class=\"field-content\">13 additions & 1 deletion</span>\n  </div>\n  \n  <div class=\"views-field-visual-diffstat\">\n                <span class=\"field-content\"><span class=\"versioncontrol-diffstat clear-block\"><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"minus\">-</span></span></span>\n  </div>\n  </div>\n    </div>\n  \n  \n  \n  \n  \n  \n</div>\n<pre>Patch #1685658 by bforchhammer. Better handling of current domain for Domain Source.\n</pre>",
-  'timestamp' => '1347206044',
-  'guid' => 'VCS Operation 3936918 at http://drupal.org',
-))
-  ->values(array(
-  'iid' => '2',
-  'fid' => '1',
-  'title' => 'Video: Commit b0b7ff0 on 7.x-2.x by Jorrit',
-  'link' => 'http://drupal.org/commitlog/commit/846/b0b7ff08fed89c76454aa54627cc219361365d7b',
-  'author' => 'Jorrit',
-  'description' => "<div class=\"view view-commitlog-commit-items view-id-commitlog_commit_items view-display-id-block_1 view-dom-id-9\">\n    \n  \n  \n      <div class=\"view-content\">\n        <div class=\"views-row views-row-1 views-row-odd views-row-first\">\n      \n  <div class=\"views-field-path\">\n                <span class=\"field-content\"><a href=\"http://drupalcode.org/project/video.git/blob/b0b7ff08fed89c76454aa54627cc219361365d7b:/libraries/phpvideotoolkit/phpvideotoolkit.php5.php\">/libraries/phpvideotoolkit/phpvideotoolkit.php5.php</a></span>\n  </div>\n  \n  <div class=\"views-field-changed-lines\">\n                <span class=\"field-content\">5 additions & 5 deletions</span>\n  </div>\n  \n  <div class=\"views-field-visual-diffstat\">\n                <span class=\"field-content\"><span class=\"versioncontrol-diffstat clear-block\"><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"minus\">-</span><span class=\"minus\">-</span><span class=\"minus\">-</span><span class=\"no-op\"> </span></span></span>\n  </div>\n  </div>\n  <div class=\"views-row views-row-2 views-row-even\">\n      \n  <div class=\"views-field-path\">\n                <span class=\"field-content\"><a href=\"http://drupalcode.org/project/video.git/blob/b0b7ff08fed89c76454aa54627cc219361365d7b:/tests/TranscoderAbstractionFactoryFfmpeg.test\">/tests/TranscoderAbstractionFactoryFfmpeg.test</a></span>\n  </div>\n  \n  <div class=\"views-field-changed-lines\">\n                <span class=\"field-content\">21 additions & 7 deletions</span>\n  </div>\n  \n  <div class=\"views-field-visual-diffstat\">\n                <span class=\"field-content\"><span class=\"versioncontrol-diffstat clear-block\"><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"minus\">-</span><span class=\"minus\">-</span></span></span>\n  </div>\n  </div>\n  <div class=\"views-row views-row-3 views-row-odd views-row-last\">\n      \n  <div class=\"views-field-path\">\n                <span class=\"field-content\"><a href=\"http://drupalcode.org/project/video.git/blob/b0b7ff08fed89c76454aa54627cc219361365d7b:/transcoders/TranscoderAbstractionFactoryFfmpeg.inc\">/transcoders/TranscoderAbstractionFactoryFfmpeg.inc</a></span>\n  </div>\n  \n  <div class=\"views-field-changed-lines\">\n                <span class=\"field-content\">31 additions & 22 deletions</span>\n  </div>\n  \n  <div class=\"views-field-visual-diffstat\">\n                <span class=\"field-content\"><span class=\"versioncontrol-diffstat clear-block\"><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"minus\">-</span><span class=\"minus\">-</span><span class=\"minus\">-</span></span></span>\n  </div>\n  </div>\n    </div>\n  \n  \n  \n  \n  \n  \n</div>\n<pre>Issue #1492296 by Jorrit: Added support for avconv binaries instead of FFmpeg.\n</pre>",
-  'timestamp' => '1347206397',
-  'guid' => 'VCS Operation 3936924 at http://drupal.org',
-))
-  ->values(array(
-  'iid' => '3',
-  'fid' => '1',
-  'title' => 'Remove Login Tabs: Commit 6e1eb5a on 7.x-1.x by highrockmedia',
-  'link' => 'http://drupal.org/commitlog/commit/41%2C610/6e1eb5a4a952db3264e7696e840ac3d797f4b477',
-  'author' => 'highrockmedia',
-  'description' => "<div class=\"view view-commitlog-commit-items view-id-commitlog_commit_items view-display-id-block_1 view-dom-id-8\">\n    \n  \n  \n      <div class=\"view-content\">\n        <div class=\"views-row views-row-1 views-row-odd views-row-first views-row-last\">\n      \n  <div class=\"views-field-path\">\n                <span class=\"field-content\"><a href=\"http://drupalcode.org/sandbox/highrockmedia/1702096.git/blob/6e1eb5a4a952db3264e7696e840ac3d797f4b477:/readme.txt\">/readme.txt</a></span>\n  </div>\n  \n  <div class=\"views-field-changed-lines\">\n                <span class=\"field-content\">10 additions & 2 deletions</span>\n  </div>\n  \n  <div class=\"views-field-visual-diffstat\">\n                <span class=\"field-content\"><span class=\"versioncontrol-diffstat clear-block\"><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"minus\">-</span></span></span>\n  </div>\n  </div>\n    </div>\n  \n  \n  \n  \n  \n  \n</div>\n<pre>Updating readme\n</pre>",
-  'timestamp' => '1347206401',
-  'guid' => 'VCS Operation 3936920 at http://drupal.org',
-))
-  ->values(array(
-  'iid' => '4',
-  'fid' => '1',
-  'title' => 'TimeGroup: Commit 6ed4c08 on 7.x-1.x by Sweetchuck',
-  'link' => 'http://drupal.org/commitlog/commit/40%2C448/6ed4c085e5d9a8d33e091e1b8a65c73eab2dc99e',
-  'author' => 'Sweetchuck',
-  'description' => "<div class=\"view view-commitlog-commit-items view-id-commitlog_commit_items view-display-id-block_1 view-dom-id-7\">\n    \n  \n  \n      <div class=\"view-content\">\n        <div class=\"views-row views-row-1 views-row-odd views-row-first views-row-last\">\n      \n  <div class=\"views-field-path\">\n                <span class=\"field-content\"><a href=\"http://drupalcode.org/sandbox/Sweetchuck/1666642.git/blob/6ed4c085e5d9a8d33e091e1b8a65c73eab2dc99e:/includes/ctools/export_ui/timegroup.inc\">/includes/ctools/export_ui/timegroup.inc</a></span>\n  </div>\n  \n  <div class=\"views-field-changed-lines\">\n                <span class=\"field-content\">1 addition & 1 deletion</span>\n  </div>\n  \n  <div class=\"views-field-visual-diffstat\">\n                <span class=\"field-content\"><span class=\"versioncontrol-diffstat clear-block\"><span class=\"plus\">+</span><span class=\"minus\">-</span><span class=\"no-op\"> </span><span class=\"no-op\"> </span><span class=\"no-op\"> </span><span class=\"no-op\"> </span><span class=\"no-op\"> </span></span></span>\n  </div>\n  </div>\n    </div>\n  \n  \n  \n  \n  \n  \n</div>\n<pre>CTools UI - Wrong default value for timeoffset fix.\n</pre>",
-  'timestamp' => '1347206533',
-  'guid' => 'VCS Operation 3936942 at http://drupal.org',
-))
-  ->values(array(
-  'iid' => '5',
-  'fid' => '1',
-  'title' => 'Domain Access: Commit 1140172 on 6.x-2.x authored by bforchhammer, committed by agentrickard',
-  'link' => 'http://drupal.org/commitlog/commit/2%2C410/11401723f5c5d11032dd141ba4939ed889a7a915',
-  'author' => 'bforchhammer',
-  'description' => "<div class=\"view view-commitlog-commit-items view-id-commitlog_commit_items view-display-id-block_1 view-dom-id-6\">\n    \n  \n  \n      <div class=\"view-content\">\n        <div class=\"views-row views-row-1 views-row-odd views-row-first\">\n      \n  <div class=\"views-field-path\">\n                <span class=\"field-content\"><a href=\"http://drupalcode.org/project/domain.git/blob/11401723f5c5d11032dd141ba4939ed889a7a915:/domain_source/domain_source.views.inc\">/domain_source/domain_source.views.inc</a></span>\n  </div>\n  \n  <div class=\"views-field-changed-lines\">\n                <span class=\"field-content\">33 additions & 1 deletion</span>\n  </div>\n  \n  <div class=\"views-field-visual-diffstat\">\n                <span class=\"field-content\"><span class=\"versioncontrol-diffstat clear-block\"><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"no-op\"> </span></span></span>\n  </div>\n  </div>\n  <div class=\"views-row views-row-2 views-row-even views-row-last\">\n      \n  <div class=\"views-field-path\">\n                <span class=\"field-content\"><a href=\"http://drupalcode.org/project/domain.git/blob/11401723f5c5d11032dd141ba4939ed889a7a915:/domain_source/includes/domain_source_handler_filter_domain_id.inc\">/domain_source/includes/domain_source_handler_filter_domain_id.inc</a></span>\n  </div>\n  \n  <div class=\"views-field-changed-lines\">\n                <span class=\"field-content\">28 additions & 0 deletions</span>\n  </div>\n  \n  <div class=\"views-field-visual-diffstat\">\n                <span class=\"field-content\"><span class=\"versioncontrol-diffstat clear-block\"><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span></span></span>\n  </div>\n  </div>\n    </div>\n  \n  \n  \n  \n  \n  \n</div>\n<pre>Patch #1685658 by bforchhammer. Better handling of current domain for Domain Source.\n</pre>",
-  'timestamp' => '1347206541',
-  'guid' => 'VCS Operation 3936926 at http://drupal.org',
-))
-  ->values(array(
-  'iid' => '6',
-  'fid' => '1',
-  'title' => 'Domain Access: Commit 19b1c36 on 7.x-2.x by agentrickard',
-  'link' => 'http://drupal.org/commitlog/commit/2%2C410/19b1c366d86cecd8a9f6e1a6e835c0566f5c02db',
-  'author' => 'agentrickard',
-  'description' => "<div class=\"view view-commitlog-commit-items view-id-commitlog_commit_items view-display-id-block_1 view-dom-id-5\">\n    \n  \n  \n      <div class=\"view-content\">\n        <div class=\"views-row views-row-1 views-row-odd views-row-first views-row-last\">\n      \n  <div class=\"views-field-path\">\n                <span class=\"field-content\"><a href=\"http://drupalcode.org/project/domain.git/blob/19b1c366d86cecd8a9f6e1a6e835c0566f5c02db:/domain_source/includes/domain_source_handler_filter_domain_id.inc\">/domain_source/includes/domain_source_handler_filter_domain_id.inc</a></span>\n  </div>\n  \n  <div class=\"views-field-changed-lines\">\n                <span class=\"field-content\">28 additions & 0 deletions</span>\n  </div>\n  \n  <div class=\"views-field-visual-diffstat\">\n                <span class=\"field-content\"><span class=\"versioncontrol-diffstat clear-block\"><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span></span></span>\n  </div>\n  </div>\n    </div>\n  \n  \n  \n  \n  \n  \n</div>\n<pre>Adds new Views file to Domain Source.\n</pre>",
-  'timestamp' => '1347206601',
-  'guid' => 'VCS Operation 3936928 at http://drupal.org',
-))
-  ->values(array(
-  'iid' => '7',
-  'fid' => '1',
-  'title' => 'Domain Access: Commit d2d5456 on 7.x-3.x by agentrickard',
-  'link' => 'http://drupal.org/commitlog/commit/2%2C410/d2d5456cad6ca57bb72e743da6a7112a74d7a331',
-  'author' => 'agentrickard',
-  'description' => "<div class=\"view view-commitlog-commit-items view-id-commitlog_commit_items view-display-id-block_1 view-dom-id-4\">\n    \n  \n  \n      <div class=\"view-content\">\n        <div class=\"views-row views-row-1 views-row-odd views-row-first views-row-last\">\n      \n  <div class=\"views-field-path\">\n                <span class=\"field-content\"><a href=\"http://drupalcode.org/project/domain.git/blob/d2d5456cad6ca57bb72e743da6a7112a74d7a331:/domain_source/includes/domain_source_handler_filter_domain_id.inc\">/domain_source/includes/domain_source_handler_filter_domain_id.inc</a></span>\n  </div>\n  \n  <div class=\"views-field-changed-lines\">\n                <span class=\"field-content\">29 additions & 0 deletions</span>\n  </div>\n  \n  <div class=\"views-field-visual-diffstat\">\n                <span class=\"field-content\"><span class=\"versioncontrol-diffstat clear-block\"><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span></span></span>\n  </div>\n  </div>\n    </div>\n  \n  \n  \n  \n  \n  \n</div>\n<pre>Adds new Views file to Domain Source.\n</pre>",
-  'timestamp' => '1347206620',
-  'guid' => 'VCS Operation 3936930 at http://drupal.org',
-))
-  ->values(array(
-  'iid' => '8',
-  'fid' => '1',
-  'title' => 'Skarabee: Commit 400b519 on 7.x-1.x by sboersma',
-  'link' => 'http://drupal.org/commitlog/commit/23%2C278/400b5190f59b1cb58d6b27fa10ac668e9580aa73',
-  'author' => 'sboersma',
-  'description' => "<div class=\"view view-commitlog-commit-items view-id-commitlog_commit_items view-display-id-block_1 view-dom-id-3\">\n    \n  \n  \n      <div class=\"view-content\">\n        <div class=\"views-row views-row-1 views-row-odd views-row-first views-row-last\">\n      \n  <div class=\"views-field-path\">\n                <span class=\"field-content\"><a href=\"http://drupalcode.org/sandbox/sboersma/1176520.git/blob/400b5190f59b1cb58d6b27fa10ac668e9580aa73:/skarabee.install\">/skarabee.install</a></span>\n  </div>\n  \n  <div class=\"views-field-changed-lines\">\n                <span class=\"field-content\">3 additions & 3 deletions</span>\n  </div>\n  \n  <div class=\"views-field-visual-diffstat\">\n                <span class=\"field-content\"><span class=\"versioncontrol-diffstat clear-block\"><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"minus\">-</span><span class=\"minus\">-</span><span class=\"minus\">-</span><span class=\"no-op\"> </span></span></span>\n  </div>\n  </div>\n    </div>\n  \n  \n  \n  \n  \n  \n</div>\n<pre>sboersma: Changed variable deletion method.\n</pre>",
-  'timestamp' => '1347206709',
-  'guid' => 'VCS Operation 3936932 at http://drupal.org',
-))
-  ->values(array(
-  'iid' => '9',
-  'fid' => '1',
-  'title' => 'Config entity listing plugin API: Commit dd3fa73 on 8.x-list by damiankloip',
-  'link' => 'http://drupal.org/commitlog/commit/43%2C586/dd3fa73b0bcdca833bbde1d1ddb3cefe42003693',
-  'author' => 'damiankloip',
-  'description' => "<div class=\"view view-commitlog-commit-items view-id-commitlog_commit_items view-display-id-block_1 view-dom-id-2\">\n    \n  \n  \n      <div class=\"view-content\">\n        <div class=\"views-row views-row-1 views-row-odd views-row-first views-row-last\">\n      \n  <div class=\"views-field-path\">\n                <span class=\"field-content\"><a href=\"http://drupalcode.org/sandbox/damiankloip/1778654.git/blob/dd3fa73b0bcdca833bbde1d1ddb3cefe42003693:/core/modules/config/lib/Drupal/config/Tests/ConfigEntityListingTest.php\">/core/modules/config/lib/Drupal/config/Tests/ConfigEntityListingTest.php</a></span>\n  </div>\n  \n  <div class=\"views-field-changed-lines\">\n                <span class=\"field-content\">10 additions & 2 deletions</span>\n  </div>\n  \n  <div class=\"views-field-visual-diffstat\">\n                <span class=\"field-content\"><span class=\"versioncontrol-diffstat clear-block\"><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"minus\">-</span></span></span>\n  </div>\n  </div>\n    </div>\n  \n  \n  \n  \n  \n  \n</div>\n<pre>Added tests for getList() method\n</pre>",
-  'timestamp' => '1347206738',
-  'guid' => 'VCS Operation 3936936 at http://drupal.org',
-))
-  ->values(array(
-  'iid' => '10',
-  'fid' => '1',
-  'title' => 'AutoSlave: Commit 76891da on 7.x-1.x by gielfeldt',
-  'link' => 'http://drupal.org/commitlog/commit/42%2C968/76891daf3cea9c294daf56a26760cb1bf33ea58a',
-  'author' => 'gielfeldt',
-  'description' => "<div class=\"view view-commitlog-commit-items view-id-commitlog_commit_items view-display-id-block_1 view-dom-id-1\">\n    \n  \n  \n      <div class=\"view-content\">\n        <div class=\"views-row views-row-1 views-row-odd views-row-first\">\n      \n  <div class=\"views-field-path\">\n                <span class=\"field-content\"><a href=\"http://drupalcode.org/project/autoslave.git/blob/76891daf3cea9c294daf56a26760cb1bf33ea58a:/autoslave.module\">/autoslave.module</a></span>\n  </div>\n  \n  <div class=\"views-field-changed-lines\">\n                <span class=\"field-content\">10 additions & 7 deletions</span>\n  </div>\n  \n  <div class=\"views-field-visual-diffstat\">\n                <span class=\"field-content\"><span class=\"versioncontrol-diffstat clear-block\"><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"minus\">-</span><span class=\"minus\">-</span><span class=\"minus\">-</span></span></span>\n  </div>\n  </div>\n  <div class=\"views-row views-row-2 views-row-even views-row-last\">\n      \n  <div class=\"views-field-path\">\n                <span class=\"field-content\"><a href=\"http://drupalcode.org/project/autoslave.git/blob/76891daf3cea9c294daf56a26760cb1bf33ea58a:/autoslave/database.inc\">/autoslave/database.inc</a></span>\n  </div>\n  \n  <div class=\"views-field-changed-lines\">\n                <span class=\"field-content\">10 additions & 2 deletions</span>\n  </div>\n  \n  <div class=\"views-field-visual-diffstat\">\n                <span class=\"field-content\"><span class=\"versioncontrol-diffstat clear-block\"><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"plus\">+</span><span class=\"minus\">-</span></span></span>\n  </div>\n  </div>\n    </div>\n  \n  \n  \n  \n  \n  \n</div>\n<pre>Keep track of affected tables per commit.\n</pre>",
-  'timestamp' => '1347206751',
-  'guid' => 'VCS Operation 3936934 at http://drupal.org',
-))
-  ->execute();
diff --git a/modules/simpletest/tests/upgrade/drupal-7.bare.minimal.database.php.gz b/modules/simpletest/tests/upgrade/drupal-7.bare.minimal.database.php.gz
deleted file mode 100644
index 41be271..0000000
Binary files a/modules/simpletest/tests/upgrade/drupal-7.bare.minimal.database.php.gz and /dev/null differ
diff --git a/modules/simpletest/tests/upgrade/drupal-7.bare.standard_all.database.php.gz b/modules/simpletest/tests/upgrade/drupal-7.bare.standard_all.database.php.gz
deleted file mode 100644
index c47ae87..0000000
Binary files a/modules/simpletest/tests/upgrade/drupal-7.bare.standard_all.database.php.gz and /dev/null differ
diff --git a/modules/simpletest/tests/upgrade/drupal-7.field.database.php b/modules/simpletest/tests/upgrade/drupal-7.field.database.php
deleted file mode 100644
index 6304761..0000000
--- a/modules/simpletest/tests/upgrade/drupal-7.field.database.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-
-/**
- * @file
- * Test content for the field update path.
- */
-
-db_insert('variable')->fields(array(
-  'name',
-  'value',
-))
-->values(array(
-  'name' => 'field_bundle_settings',
-  'value' => 'a:1:{s:4:"node";a:1:{s:4:"poll";a:1:{s:12:"extra_fields";a:1:{s:7:"display";a:2:{s:16:"poll_view_voting";a:1:{s:7:"default";a:2:{s:6:"weight";s:1:"0";s:7:"visible";b:1;}}s:17:"poll_view_results";a:1:{s:7:"default";a:2:{s:6:"weight";s:1:"0";s:7:"visible";b:0;}}}}}}}',
-))
-->execute();
diff --git a/modules/simpletest/tests/upgrade/drupal-7.filled.minimal.database.php.gz b/modules/simpletest/tests/upgrade/drupal-7.filled.minimal.database.php.gz
deleted file mode 100644
index de2dceb..0000000
Binary files a/modules/simpletest/tests/upgrade/drupal-7.filled.minimal.database.php.gz and /dev/null differ
diff --git a/modules/simpletest/tests/upgrade/drupal-7.filled.standard_all.database.php.gz b/modules/simpletest/tests/upgrade/drupal-7.filled.standard_all.database.php.gz
deleted file mode 100644
index 472eedb..0000000
Binary files a/modules/simpletest/tests/upgrade/drupal-7.filled.standard_all.database.php.gz and /dev/null differ
diff --git a/modules/simpletest/tests/upgrade/drupal-7.trigger.database.php b/modules/simpletest/tests/upgrade/drupal-7.trigger.database.php
deleted file mode 100644
index 996f711..0000000
--- a/modules/simpletest/tests/upgrade/drupal-7.trigger.database.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-/**
- * @file
- * Test content for the trigger upgrade path.
- */
-
-// Add several trigger configurations.
-db_insert('trigger_assignments')->fields(array(
-  'hook',
-  'aid',
-  'weight',
-))
-->values(array(
-  'hook' => 'node_presave',
-  'aid' => 'node_publish_action',
-  'weight' => '1',
-))
-->values(array(
-  'hook' => 'comment_presave',
-  'aid' => 'comment_publish_action',
-  'weight' => '1',
-))
-->values(array(
-  'hook' => 'comment_delete',
-  'aid' => 'node_save_action',
-  'weight' => '1',
-))
-->execute();
diff --git a/modules/simpletest/tests/upgrade/update.aggregator.test b/modules/simpletest/tests/upgrade/update.aggregator.test
deleted file mode 100644
index d413577..0000000
--- a/modules/simpletest/tests/upgrade/update.aggregator.test
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-/**
- * @file
- * Tests schema changes in aggregator.module.
- */
-class AggregatorUpdatePathTestCase extends UpdatePathTestCase {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Aggregator update path',
-      'description' => 'Aggregator update path tests.',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    // Use the normal installation and add our feed data.
-    $path = drupal_get_path('module', 'simpletest') . '/tests/upgrade';
-    $this->databaseDumpFiles = array(
-      $path . '/drupal-7.bare.standard_all.database.php.gz',
-      $path . '/drupal-7.aggregator.database.php',
-    );
-    parent::setUp();
-
-    // Our test data only relies on aggregator.module.
-    $this->uninstallModulesExcept(array('aggregator'));
-  }
-
-  /**
-   * Tests that the aggregator.module update is successful.
-   */
-  public function testAggregatorUpdate() {
-    // Get a selection of the fields affected by the schema update.
-    $query = db_select('aggregator_feed', 'af');
-    $query->join('aggregator_item', 'ai', 'af.fid = ai.fid');
-    $query
-      ->fields('af', array('url', 'link'))
-      ->fields('ai', array('link', 'guid'));
-
-    $pre_update_data = $query->execute()->fetchAll();
-    $this->assertTrue($this->performUpgrade(), 'The update was completed successfully.');
-    $post_update_data = $query->execute()->fetchAll();
-
-    $this->assertTrue($pre_update_data == $post_update_data, 'Feed data was preserved during the update.');
-  }
-
-}
diff --git a/modules/simpletest/tests/upgrade/update.field.test b/modules/simpletest/tests/upgrade/update.field.test
deleted file mode 100644
index a4b11c3..0000000
--- a/modules/simpletest/tests/upgrade/update.field.test
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-
-/**
- * @file
- * Provides update path tests for the Field module.
- */
-
-/**
- * Tests the Field 7.0 -> 7.x update path.
- */
-class FieldUpdatePathTestCase extends UpdatePathTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Field update path',
-      'description' => 'Field update path tests.',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    // Use the filled update path and our field data.
-    $path = drupal_get_path('module', 'simpletest') . '/tests/upgrade';
-    $this->databaseDumpFiles = array(
-      $path . '/drupal-7.filled.standard_all.database.php.gz',
-      $path . '/drupal-7.field.database.php',
-    );
-    parent::setUp();
-
-    // Our test data includes poll extra field settings.
-    $this->uninstallModulesExcept(array('field', 'poll'));
-  }
-
-  /**
-   * Tests that the update is successful.
-   */
-  public function testFilledUpgrade() {
-    $this->assertTrue($this->performUpgrade(), 'The update was completed successfully.');
-    $expected_settings = array(
-      'extra_fields' => array(
-        'display' => array(
-          'poll_view_voting' => array(
-            'default' => array(
-              'weight' => '0',
-              'visible' => TRUE,
-            ),
-          ),
-          'poll_view_results' => array(
-            'default' => array(
-              'weight' => '0',
-              'visible' => FALSE,
-            ),
-          ),
-        ),
-        'form' => array(),
-      ),
-      'view_modes' => array(),
-    );
-    $actual_settings = field_bundle_settings('node', 'poll');
-    $this->assertEqual($expected_settings, $actual_settings, 'Settings stored in field_bundle_settings were updated to per-bundle settings.');
-  }
-}
diff --git a/modules/simpletest/tests/upgrade/update.trigger.test b/modules/simpletest/tests/upgrade/update.trigger.test
deleted file mode 100644
index 24ac87c..0000000
--- a/modules/simpletest/tests/upgrade/update.trigger.test
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-/**
- * @file
- * Provides upgrade path tests for the Trigger module.
- */
-
-/**
- * Tests the Trigger 7.0 -> 7.x upgrade path.
- */
-class TriggerUpdatePathTestCase extends UpdatePathTestCase {
-  public static function getInfo() {
-    return array(
-      'name'  => 'Trigger update path',
-      'description'  => 'Trigger update path tests.',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    // Use the filled upgrade path and our trigger data.
-    $this->databaseDumpFiles = array(
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-7.filled.standard_all.database.php.gz',
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-7.trigger.database.php',
-    );
-    parent::setUp();
-
-    // Our test data includes node and comment trigger assignments.
-    $this->uninstallModulesExcept(array('comment', 'trigger'));
-  }
-
-  /**
-   * Tests that the upgrade is successful.
-   */
-  public function testFilledUpgrade() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-  }
-}
diff --git a/modules/simpletest/tests/upgrade/update.user.test b/modules/simpletest/tests/upgrade/update.user.test
deleted file mode 100644
index dd0fc1b..0000000
--- a/modules/simpletest/tests/upgrade/update.user.test
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-/**
- * @file
- * Provides update path tests for the User module.
- */
-
-/**
- * Tests the User 7.0 -> 7.x update path.
- */
-class UserUpdatePathTestCase extends UpdatePathTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'User update path',
-      'description' => 'User update path tests.',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    // Use the filled update path and our field data.
-    $this->databaseDumpFiles = array(
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-7.filled.standard_all.database.php.gz',
-    );
-    parent::setUp();
-  }
-
-  /**
-   * Tests that the update is successful.
-   */
-  public function testFilledUpgrade() {
-    $this->assertTrue($this->performUpgrade(), 'The update was completed successfully.');
-    $this->assertTrue(db_index_exists('users', 'picture'), 'The {users}.picture column has an index.');
-  }
-}
diff --git a/modules/simpletest/tests/upgrade/upgrade.comment.test b/modules/simpletest/tests/upgrade/upgrade.comment.test
deleted file mode 100644
index 40d893a..0000000
--- a/modules/simpletest/tests/upgrade/upgrade.comment.test
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-/**
- * Upgrade test for comment.module.
- */
-class CommentUpgradePathTestCase extends UpgradePathTestCase {
-  public static function getInfo() {
-    return array(
-      'name'  => 'Comment upgrade path',
-      'description'  => 'Comment upgrade path tests.',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    // Path to the database dump files.
-    $this->databaseDumpFiles = array(
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.filled.database.php',
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.comments.database.php',
-    );
-    parent::setUp();
-
-    $this->uninstallModulesExcept(array('comment'));
-  }
-
-  /**
-   * Test a successful upgrade.
-   */
-  public function testCommentUpgrade() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-  }
-}
diff --git a/modules/simpletest/tests/upgrade/upgrade.filter.test b/modules/simpletest/tests/upgrade/upgrade.filter.test
deleted file mode 100644
index 584f4d9..0000000
--- a/modules/simpletest/tests/upgrade/upgrade.filter.test
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-/**
- * Upgrade test for filter format identifiers.
- *
- * Filter format identifiers changed from sequential ids to machine names.
- * Verify that filter formats and references to filter formats in core are
- * converted properly.
- */
-class FilterFormatUpgradePathTestCase extends UpgradePathTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Filter format upgrade path',
-      'description' => 'Verifies that filter formats and references to filter formats are converted properly.',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  function setUp() {
-    // Path to the database dump.
-    $this->databaseDumpFiles = array(
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.filled.database.php',
-    );
-    parent::setUp();
-  }
-
-  /**
-   * Test a successful upgrade.
-   */
-  function testFilterFormatUpgrade() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-
-    $format = filter_format_load('1');
-    $this->assertTrue($format->format == '1', 'Filter format found.');
-    $format->format = 'test_filter';
-    $format->name = 'Test filter';
-    filter_format_save($format);
-    $format = filter_format_load('test_filter');
-    $this->assertTrue($format->format == 'test_filter', 'Saved a filter format with machine name.');
-
-    $account = user_load(4);
-    user_save($account, array('signature_format' => 'test_filter'));
-    $account = user_load(4);
-    $this->assertTrue($account->signature_format == 'test_filter', 'Signature format changed successfully to a filter format with machine name.');
-
-    $delta = db_insert('block_custom')
-      ->fields(array(
-        'body' => 'Test block',
-        'info' => 'Test block',
-        'format' => 'test_filter',
-      ))
-      ->execute();
-    $this->assertTrue($delta > 0, 'Created a custom block using a filter format with machine name.');
-  }
-}
diff --git a/modules/simpletest/tests/upgrade/upgrade.forum.test b/modules/simpletest/tests/upgrade/upgrade.forum.test
deleted file mode 100644
index b0bbd4e..0000000
--- a/modules/simpletest/tests/upgrade/upgrade.forum.test
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-/**
- * Upgrade test for forum.module.
- */
-class ForumUpgradePathTestCase extends UpgradePathTestCase {
-  public static function getInfo() {
-    return array(
-      'name'  => 'Forum upgrade path',
-      'description'  => 'Upgrade path tests for the Forum module.',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    // Path to the database dump files.
-    $this->databaseDumpFiles = array(
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.filled.database.php',
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.forum.database.php',
-    );
-    parent::setUp();
-
-    $this->uninstallModulesExcept(array('comment', 'forum', 'taxonomy'));
-  }
-
-  /**
-   * Test a successful upgrade (no negotiation).
-   */
-  public function testForumUpgrade() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-
-    // Work around http://drupal.org/node/931512
-    $this->drupalPost('admin/structure/types/manage/forum/fields', array(), t('Save'));
-
-    // The D6 database forum vocabulary contains the term "Fruits" with id 81.
-    $tid = 81;
-    $this->drupalGet("forum/$tid");
-
-    // There is one forum topic in Fruits, with the title "Apples".
-    $this->clickLink('Apples');
-    $this->clickLink('Edit');
-
-    // Add a forum topic "Bananas" to the "Fruits" forum.
-    $edit = array(
-      'title' => $title = 'Bananas',
-      'body[' . LANGUAGE_NONE . '][0][value]' => $body = 'It is another fruit.',
-    );
-    $this->drupalPost("node/add/forum/$tid", $edit, t('Save'));
-    $type = t('Forum topic');
-    $this->assertRaw(t('@type %title has been created.', array('@type' => $type, '%title' => $title)), 'Forum topic was created');
-
-    // Retrieve node object, ensure that the topic was created and in the proper forum.
-    $node = $this->drupalGetNodeByTitle($title);
-    $this->assertTrue($node != NULL, format_string('Node @title was loaded', array('@title' => $title)));
-    $this->assertEqual($node->taxonomy_forums[LANGUAGE_NONE][0]['tid'], $tid, 'Saved forum topic was in the expected forum');
-
-    $this->drupalGet("forum/$tid");
-    $this->assertText('Bananas');
-    $this->drupalLogout();
-
-    $this->drupalGet("node/add/forum/$tid");
-    $this->assertResponse(200, 'User can access forum creation page.');
-  }
-}
diff --git a/modules/simpletest/tests/upgrade/upgrade.locale.test b/modules/simpletest/tests/upgrade/upgrade.locale.test
deleted file mode 100644
index 2a3056b..0000000
--- a/modules/simpletest/tests/upgrade/upgrade.locale.test
+++ /dev/null
@@ -1,143 +0,0 @@
-<?php
-
-/**
- * Upgrade test for locale.module.
- */
-class LocaleUpgradePathTestCase extends UpgradePathTestCase {
-  public static function getInfo() {
-    return array(
-      'name'  => 'Locale upgrade path',
-      'description'  => 'Upgrade path tests for the Locale module.',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    // Path to the database dump files.
-    $this->databaseDumpFiles = array(
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.filled.database.php',
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.locale.database.php',
-    );
-    parent::setUp();
-
-    $this->uninstallModulesExcept(array('locale', 'comment'));
-  }
-
-  /**
-   * Test a successful upgrade (no negotiation).
-   */
-  public function testLocaleUpgrade() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-
-    // The home page should be in French.
-    $this->assertPageInLanguage('', 'fr');
-
-    // No prefixed page should exist.
-    $this->drupalGet('en');
-    $this->assertResponse(404);
-    $this->drupalGet('fr');
-    $this->assertResponse(404);
-  }
-
-  /**
-   * Test an upgrade with path-based negotiation.
-   */
-  public function testLocaleUpgradePathDefault() {
-    // LANGUAGE_NEGOTIATION_PATH_DEFAULT.
-    $this->variable_set('language_negotiation', 1);
-
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-
-    // The home page should be in French.
-    $this->assertPageInLanguage('', 'fr');
-
-    // The language switcher block should be displayed.
-    $this->assertRaw('block-locale-language', 'The language switcher block is displayed.');
-
-    // The French prefix should not be active because French is the default language.
-    $this->drupalGet('fr');
-    $this->assertResponse(404);
-
-    // The English prefix should be active.
-    $this->assertPageInLanguage('en', 'en');
-  }
-
-  /**
-   * Test an upgrade with path-based (with fallback) negotiation.
-   */
-  public function testLocaleUpgradePathFallback() {
-    // LANGUAGE_NEGOTIATION_PATH.
-    $this->variable_set('language_negotiation', 2);
-
-    // Set the language of the admin user to English.
-    db_update('users')
-      ->fields(array('language' => 'en'))
-      ->condition('uid', 1)
-      ->execute();
-
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-
-    // Both prefixes should be active.
-    $this->assertPageInLanguage('fr', 'fr');
-    $this->assertPageInLanguage('en', 'en');
-
-    // The home page should be in the admin user language.
-    $this->assertPageInLanguage('', 'en');
-
-    // The language switcher block should be displayed.
-    $this->assertRaw('block-locale-language', 'The language switcher block is displayed.');
-  }
-
-  /**
-   * Test an upgrade with domain-based negotiation.
-   */
-  public function testLocaleUpgradeDomain() {
-    // LANGUAGE_NEGOTIATION_DOMAIN.
-    $this->variable_set('language_negotiation', 3);
-
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-
-    // The home page should be in French.
-    $this->assertPageInLanguage('', 'fr');
-
-    // The language switcher block should be displayed.
-    $this->assertRaw('block-locale-language', 'The language switcher block is displayed.');
-
-    // The language switcher block should point to http://en.example.com.
-    $language_links = $this->xpath('//ul[contains(@class, :class)]/li/a', array(':class' => 'language-switcher-locale-url'));
-    $found_english_link = FALSE;
-    foreach ($language_links as $link) {
-      if ((string) $link['href'] == 'http://en.example.com/') {
-        $found_english_link = TRUE;
-      }
-    }
-    $this->assertTrue($found_english_link, 'The English link points to the correct domain.');
-
-    // Both prefixes should be inactive.
-    $this->drupalGet('en');
-    $this->assertResponse(404);
-    $this->drupalGet('fr');
-    $this->assertResponse(404);
-
-  }
-
-  /**
-   * Asserts that a page exists and is in the specified language.
-   */
-  public function assertPageInLanguage($path = NULL, $langcode) {
-    if (isset($path)) {
-      $this->drupalGet($path);
-    }
-
-    if (!$this->assertResponse(200)) {
-      return FALSE;
-    }
-
-    if ($this->parse()) {
-      return $this->assertIdentical($langcode, (string) $this->elements['xml:lang']);
-    }
-    else {
-      return FALSE;
-    }
-  }
-}
diff --git a/modules/simpletest/tests/upgrade/upgrade.menu.test b/modules/simpletest/tests/upgrade/upgrade.menu.test
deleted file mode 100644
index d9ae6c1..0000000
--- a/modules/simpletest/tests/upgrade/upgrade.menu.test
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-
-/**
- * Upgrade test for menu.module.
- */
-class MenuUpgradePathTestCase extends UpgradePathTestCase {
-  public static function getInfo() {
-    return array(
-      'name'  => 'Menu upgrade path',
-      'description'  => 'Menu upgrade path tests.',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    // Path to the database dump files.
-    $this->databaseDumpFiles = array(
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.filled.database.php',
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.menu.database.php',
-    );
-    parent::setUp();
-
-    $this->uninstallModulesExcept(array('menu'));
-  }
-
-  /**
-   * Test a successful upgrade.
-   */
-  public function testMenuUpgrade() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-
-    // Test the migration of "Default menu for content" setting to individual
-    // node types.
-    $this->drupalGet('admin/structure/types/manage/page/edit');
-    $this->assertNoFieldChecked('edit-menu-options-management', 'Management menu is not selected as available menu');
-    $this->assertNoFieldChecked('edit-menu-options-navigation', 'Navigation menu is not selected as available menu');
-    $this->assertNoFieldChecked('edit-menu-options-main-menu', 'Main menu is not selected as available menu');
-    $this->assertFieldChecked('edit-menu-options-secondary-menu', 'Secondary menu is selected as available menu');
-    $this->assertNoFieldChecked('edit-menu-options-user-menu', 'User menu is not selected as available menu');
-    $this->assertOptionSelected('edit-menu-parent', 'secondary-menu:0', 'Secondary menu is selected as default parent item');
-
-    $this->assertEqual(variable_get('menu_default_node_menu'), NULL, 'Redundant variable menu_default_node_menu has been removed');
-
-    // Verify Primary/Secondary Links have been renamed.
-    $this->drupalGet('admin/structure/menu');
-    $this->assertNoLinkByHref('admin/structure/menu/manage/primary-links');
-    $this->assertLinkByHref('admin/structure/menu/manage/main-menu');
-    $this->assertNoLinkByHref('admin/structure/menu/manage/secondary-links');
-    $this->assertLinkByHref('admin/structure/menu/manage/secondary-menu');
-
-    // Verify the existence of all system-defined (default) menus.
-    foreach (menu_list_system_menus() as $menu_name => $title) {
-      $this->assertLinkByHref('admin/structure/menu/manage/' . $menu_name, 0, 'Found default menu: ' . $title);
-    }
-
-    // Verify a few known links are still present, plus the ones created here.
-    $test_menus = array(
-      'navigation' => array('Add content', 'nodeadd-navigation'),
-      'management' => array('Administration', 'Account settings'),
-      'user-menu' => array('My account', 'Log out'),
-      'main-menu' => array('nodeadd-primary'),
-      'secondary-menu' => array('nodeadd-secondary'),
-    );
-
-    foreach ($test_menus as $menu_name => $links) {
-      $this->drupalGet('admin/structure/menu/manage/' . $menu_name);
-      $this->assertResponse(200, 'Access menu management for ' . $menu_name);
-      foreach ($links as $link_text) {
-        $this->assertLink(t($link_text));
-      }
-    }
-
-    // Check the "source for primary/secondary links" setting.
-    $this->drupalGet('admin/structure/menu/settings');
-    $this->assertOptionSelected('edit-menu-main-links-source', 'secondary-menu');
-    $this->assertOptionSelected('edit-menu-secondary-links-source', 'main-menu');
-
-    // Check that both primary/secondary links blocks are visible.
-    $this->drupalGet('node');
-    $this->assertText('My Primary Links', '(Formerly) Primary Links block is still visible');
-    $this->assertText('My Secondary Links', '(Formerly) Secondary Links block is still visible');
-  }
-}
diff --git a/modules/simpletest/tests/upgrade/upgrade.node.test b/modules/simpletest/tests/upgrade/upgrade.node.test
deleted file mode 100644
index 4ac14c5..0000000
--- a/modules/simpletest/tests/upgrade/upgrade.node.test
+++ /dev/null
@@ -1,148 +0,0 @@
-<?php
-
-/**
- * Upgrade test for node bodies.
- *
- * Load a filled installation of Drupal 6 and run the upgrade process on it.
- */
-class NodeBodyUpgradePathTestCase extends UpgradePathTestCase {
-  public static function getInfo() {
-    return array(
-      'name'  => 'Node body upgrade path',
-      'description'  => 'Node body upgrade path tests.',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    // Path to the database dump.
-    $this->databaseDumpFiles = array(
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.filled.database.php',
-    );
-    parent::setUp();
-  }
-
-  /**
-   * Test a successful upgrade.
-   */
-  public function testNodeBodyUpgrade() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-
-    $instance = field_info_instance('node', 'body', 'story');
-    $this->assertIdentical($instance['required'], 0, 'The required setting was preserved during the upgrade path.');
-    $this->assertTrue($instance['description'], 'The description was preserved during the upgrade path');
-
-    $this->drupalGet("content/1263769200");
-    $this->assertText('node body (broken) - 37');
-
-    // Find a published node revision and make sure it still has a body.
-    $revision = db_query_range("SELECT r.nid, r.vid FROM {node_revision} r JOIN {node} n ON n.nid = r.nid WHERE n.status = 1 AND n.type <> 'poll' AND n.vid <> r.vid", 0, 1)->fetch();
-    $revision = node_load($revision->nid, $revision->vid);
-    $this->assertTrue(!empty($revision->body), 'Non-current node revisions still have a node body.');
-    // Find an unpublished node revision and make sure it still has a body.
-    $revision = db_query_range("SELECT r.nid, r.vid FROM {node_revision} r JOIN {node} n ON n.nid = r.nid WHERE n.status = 0 AND n.type <> 'poll' AND n.vid <> r.vid", 0, 1)->fetch();
-    $revision = node_load($revision->nid, $revision->vid);
-    $this->assertTrue(!empty($revision->body), 'Unpublished non-current node revisions still have a node body.');
-
-    // Check that fields created during the upgrade can be edited and resaved
-    // in the UI.
-    $this->drupalPost('admin/structure/types/manage/story/fields/body', array(), t('Save settings'));
-  }
-}
-
-/**
- * Tests the upgrade path for node disabled node types.
- *
- * Load a filled installation of Drupal 6 and run the upgrade process on it.
- */
-class DisabledNodeTypeTestCase extends UpgradePathTestCase {
-  public static function getInfo() {
-    return array(
-      'name'  => 'Disabled node type upgrade path',
-      'description'  => 'Disabled node type upgrade path tests.',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    // Path to the database dump.
-    $this->databaseDumpFiles = array(
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.filled.database.php',
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.node_type_broken.database.php',
-    );
-    parent::setUp();
-  }
-
-  /**
-   * Tests a successful upgrade.
-   */
-  public function testDisabledNodeTypeUpgrade() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-    $this->assertTrue(field_info_instance('comment', 'comment_body', 'comment_node_broken'), 'Comment body field instance was created for comments attached to the disabled broken node type');
-  }
-}
-
-/**
- * Upgrade test for node type poll.
- *
- * Load a bare installation of Drupal 6 and run the upgrade process on it.
- *
- * The install only contains dblog (although it's optional, it's only so that
- * another hook_watchdog module can take its place, the site is not functional
- * without watchdog) and update.
- */
-class PollUpgradePathTestCase extends UpgradePathTestCase {
-  public static function getInfo() {
-    return array(
-      'name'  => 'Poll upgrade path',
-      'description'  => 'Poll upgrade path tests.',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    // Path to the database dump.
-    $this->databaseDumpFiles = array(
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.filled.database.php',
-    );
-    parent::setUp();
-
-    $this->uninstallModulesExcept(array('poll'));
-  }
-
-  /**
-   * Test a successful upgrade.
-   */
-  public function testPollUpgrade() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-
-    // Check modules page for poll
-    $this->drupalGet('admin/modules');
-
-    // Verify that the poll data is still correctly available
-    for ($i = 0; $i < 12; $i++) {
-      $this->drupalGet("content/poll/$i");
-
-      $nbchoices = ($i % 4) + 2;
-
-      for ($c = 0; $c < $nbchoices; $c++) {
-        $this->assertText("Choice $c for poll $i", 'Choice text is displayed correctly on poll view');
-      }
-
-      // Now check that the votes are correct
-      $this->clickLink(t('Results'));
-
-      for ($c = 0; $c < $nbchoices; $c++) {
-        $this->assertText("Choice $c for poll $i", 'Choice text is displayed correctly on result view');
-      }
-
-      $nbvotes = floor (($i % 4) + 5);
-      $elements = $this->xpath("//div[@class='percent']");
-      for ($c = 0; $c < $nbchoices; $c++) {
-        $votes = floor($nbvotes / $nbchoices);
-        if (($nbvotes % $nbchoices) > $c) $votes++;
-        $this->assertTrue(preg_match("/$votes vote/", $elements[$c]), 'The number of votes is displayed correctly: expected ' . $votes . ', got ' . $elements[$c]);
-      }
-    }
-  }
-}
diff --git a/modules/simpletest/tests/upgrade/upgrade.poll.test b/modules/simpletest/tests/upgrade/upgrade.poll.test
deleted file mode 100644
index ac4ea43..0000000
--- a/modules/simpletest/tests/upgrade/upgrade.poll.test
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-
-/**
- * Upgrade test for poll.module.
- *
- * Load a bare installation of Drupal 6 and run the upgrade process on it.
- *
- * The install only contains dblog (although it's optional, it's only so that
- * another hook_watchdog module can take its place, the site is not functional
- * without watchdog) and update.
- */
-class PollUpgradePathTestCase extends UpgradePathTestCase {
-  public static function getInfo() {
-    return array(
-      'name'  => 'Poll upgrade path',
-      'description'  => 'Poll upgrade path tests.',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    // Path to the database dump files.
-    $this->databaseDumpFiles = array(
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.filled.database.php',
-    );
-    parent::setUp();
-
-    $this->uninstallModulesExcept(array('poll'));
-  }
-
-  /**
-   * Test a successful upgrade.
-   */
-  public function testPollUpgrade() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-
-    // Check modules page for poll
-    $this->drupalGet('admin/modules');
-
-    // Verify that the poll data is still correctly available
-    for ($i = 0; $i < 12; $i++) {
-      $this->drupalGet("content/poll/$i");
-
-      $nbchoices = ($i % 4) + 2;
-
-      for ($c = 0; $c < $nbchoices; $c++) {
-        $this->assertText("Choice $c for poll $i", 'Choice text is displayed correctly on poll view');
-      }
-
-      // Now check that the votes are correct
-      $this->clickLink(t('Results'));
-
-      for ($c = 0; $c < $nbchoices; $c++) {
-        $this->assertText("Choice $c for poll $i", 'Choice text is displayed correctly on result view');
-      }
-
-      $nbvotes = floor (($i % 4) + 5);
-      $elements = $this->xpath("//div[@class='percent']");
-      for ($c = 0; $c < $nbchoices; $c++) {
-        $votes = floor($nbvotes / $nbchoices);
-        if (($nbvotes % $nbchoices) > $c) $votes++;
-        $this->assertTrue(preg_match("/$votes vote/", $elements[$c]), 'The number of votes is displayed correctly: expected ' . $votes . ', got ' . $elements[$c]);
-      }
-    }
-  }
-}
diff --git a/modules/simpletest/tests/upgrade/upgrade.test b/modules/simpletest/tests/upgrade/upgrade.test
deleted file mode 100644
index 784a091..0000000
--- a/modules/simpletest/tests/upgrade/upgrade.test
+++ /dev/null
@@ -1,737 +0,0 @@
-<?php
-
-/**
- * Perform end-to-end tests of the upgrade path.
- */
-abstract class UpgradePathTestCase extends DrupalWebTestCase {
-
-  /**
-   * The file path(s) to the dumped database(s) to load into the child site.
-   *
-   * @var array
-   */
-  var $databaseDumpFiles = array();
-
-  /**
-   * Flag that indicates whether the child site has been upgraded.
-   */
-  var $upgradedSite = FALSE;
-
-  /**
-   * Array of errors triggered during the upgrade process.
-   */
-  var $upgradeErrors = array();
-
-  /**
-   * Array of modules loaded when the test starts.
-   */
-  var $loadedModules = array();
-
-  /**
-   * Flag to indicate whether zlib is installed or not.
-   */
-  var $zlibInstalled = TRUE;
-
-  /**
-   * Flag to indicate whether there are pending updates or not.
-   */
-  var $pendingUpdates = TRUE;
-
-  /**
-   * Constructs an UpgradePathTestCase object.
-   *
-   * @param $test_id
-   *   (optional) The ID of the test. Tests with the same id are reported
-   *   together.
-   */
-  function __construct($test_id = NULL) {
-    parent::__construct($test_id);
-    $this->zlibInstalled = function_exists('gzopen');
-  }
-
-  /**
-   * Prepares the appropriate session for the release of Drupal being upgraded.
-   */
-  protected function prepareD7Session() {
-    // Generate and set a D6-compatible session cookie.
-    $this->curlInitialize();
-    $sid = drupal_hash_base64(uniqid(mt_rand(), TRUE) . drupal_random_bytes(55));
-    $session_name = update_get_d6_session_name();
-    curl_setopt($this->curlHandle, CURLOPT_COOKIE, rawurlencode($session_name) . '=' . rawurlencode($sid));
-
-    // Force our way into the session of the child site.
-    drupal_save_session(TRUE);
-    // A session cannot be written without the ssid column which is missing on
-    // Drupal 6 sites.
-    db_add_field('sessions', 'ssid', array('description' => "Secure session ID. The value is generated by Drupal's session handlers.", 'type' => 'varchar', 'length' => 128, 'not null' => TRUE, 'default' => ''));
-    _drupal_session_write($sid, '');
-    // Remove the temporarily added ssid column.
-    db_drop_field('sessions', 'ssid');
-    drupal_save_session(FALSE);
-  }
-
-  /**
-   * Overrides DrupalWebTestCase::setUp() for upgrade testing.
-   *
-   * @see DrupalWebTestCase::prepareDatabasePrefix()
-   * @see DrupalWebTestCase::changeDatabasePrefix()
-   * @see DrupalWebTestCase::prepareEnvironment()
-   */
-  protected function setUp() {
-    // We are going to set a missing zlib requirement property for usage
-    // during the performUpgrade() and tearDown() methods. Also set that the
-    // tests failed.
-    if (!$this->zlibInstalled) {
-      parent::setUp();
-      return;
-    }
-
-    global $user, $language, $conf;
-
-    // Load the Update API.
-    require_once DRUPAL_ROOT . '/includes/update.inc';
-
-    // Reset flags.
-    $this->upgradedSite = FALSE;
-    $this->upgradeErrors = array();
-
-    $this->loadedModules = module_list();
-
-    // Create the database prefix for this test.
-    $this->prepareDatabasePrefix();
-
-    // Prepare the environment for running tests.
-    $this->prepareEnvironment();
-    if (!$this->setupEnvironment) {
-      return FALSE;
-    }
-
-    // Reset all statics and variables to perform tests in a clean environment.
-    $conf = array();
-    drupal_static_reset();
-
-    // Change the database prefix.
-    // All static variables need to be reset before the database prefix is
-    // changed, since DrupalCacheArray implementations attempt to
-    // write back to persistent caches when they are destructed.
-    $this->changeDatabasePrefix();
-    if (!$this->setupDatabasePrefix) {
-      return FALSE;
-    }
-
-    // Unregister the registry.
-    // This is required to make sure that the database layer works properly.
-    spl_autoload_unregister('drupal_autoload_class');
-    spl_autoload_unregister('drupal_autoload_interface');
-
-    // Load the database from the portable PHP dump.
-    // The files may be gzipped.
-    foreach ($this->databaseDumpFiles as $file) {
-      if (substr($file, -3) == '.gz') {
-        $file = "compress.zlib://$file";
-      }
-      require $file;
-    }
-
-    // Set path variables.
-    $this->variable_set('file_public_path', $this->public_files_directory);
-    $this->variable_set('file_private_path', $this->private_files_directory);
-    $this->variable_set('file_temporary_path', $this->temp_files_directory);
-
-    $this->pass('Finished loading the dump.');
-
-    // Ensure that the session is not written to the new environment and replace
-    // the global $user session with uid 1 from the new test site.
-    drupal_save_session(FALSE);
-    // Login as uid 1.
-    $user = db_query('SELECT * FROM {users} WHERE uid = :uid', array(':uid' => 1))->fetchObject();
-
-    // Generate and set a D6-compatible session cookie.
-    $this->prepareD7Session();
-
-    // Restore necessary variables.
-    $this->variable_set('clean_url', $this->originalCleanUrl);
-    $this->variable_set('site_mail', 'simpletest@example.com');
-
-    drupal_set_time_limit($this->timeLimit);
-    $this->setup = TRUE;
-  }
-
-  /**
-   * Specialized variable_set() that works even if the child site is not upgraded.
-   *
-   * @param $name
-   *   The name of the variable to set.
-   * @param $value
-   *   The value to set. This can be any PHP data type; these functions take care
-   *   of serialization as necessary.
-   */
-  protected function variable_set($name, $value) {
-    db_delete('variable')
-      ->condition('name', $name)
-      ->execute();
-    db_insert('variable')
-      ->fields(array(
-        'name' => $name,
-        'value' => serialize($value),
-      ))
-      ->execute();
-
-    try {
-      cache_clear_all('variables', 'cache');
-      cache_clear_all('variables', 'cache_bootstrap');
-    }
-    // Since cache_bootstrap won't exist in a Drupal 6 site, ignore the
-    // exception if the above fails.
-    catch (Exception $e) {}
-  }
-
-  /**
-   * Specialized refreshVariables().
-   */
-  protected function refreshVariables() {
-    // No operation if the child has not been upgraded yet.
-    if (!$this->upgradedSite) {
-      return parent::refreshVariables();
-    }
-  }
-
-  /**
-   * Perform the upgrade.
-   *
-   * @param $register_errors
-   *   Register the errors during the upgrade process as failures.
-   * @return
-   *   TRUE if the upgrade succeeded, FALSE otherwise.
-   */
-  protected function performUpgrade($register_errors = TRUE) {
-    if (!$this->zlibInstalled) {
-      $this->fail(t('Missing zlib requirement for upgrade tests.'));
-      return FALSE;
-    }
-
-    $update_url = $GLOBALS['base_url'] . '/update.php';
-
-    // Load the first update screen.
-    $this->drupalGet($update_url, array('external' => TRUE));
-    if (!$this->assertResponse(200)) {
-      return FALSE;
-    }
-
-    // Continue.
-    $this->drupalPost(NULL, array(), t('Continue'));
-    if (!$this->assertResponse(200)) {
-      return FALSE;
-    }
-
-    // The test should pass if there are no pending updates.
-    $content = $this->drupalGetContent();
-    if (strpos($content, t('No pending updates.')) !== FALSE) {
-      $this->pass(t('No pending updates and therefore no upgrade process to test.'));
-      $this->pendingUpdates = FALSE;
-      return TRUE;
-    }
-
-    // Go!
-    $this->drupalPost(NULL, array(), t('Apply pending updates'));
-    if (!$this->assertResponse(200)) {
-      return FALSE;
-    }
-
-    // Check for errors during the update process.
-    foreach ($this->xpath('//li[@class=:class]', array(':class' => 'failure')) as $element) {
-      $message = strip_tags($element->asXML());
-      $this->upgradeErrors[] = $message;
-      if ($register_errors) {
-        $this->fail($message);
-      }
-    }
-
-    if (!empty($this->upgradeErrors)) {
-      // Upgrade failed, the installation might be in an inconsistent state,
-      // don't process.
-      return FALSE;
-    }
-
-    // Check if there still are pending updates.
-    $this->drupalGet($update_url, array('external' => TRUE));
-    $this->drupalPost(NULL, array(), t('Continue'));
-    if (!$this->assertText(t('No pending updates.'), 'No pending updates at the end of the update process.')) {
-      return FALSE;
-    }
-
-    // Upgrade succeed, rebuild the environment so that we can call the API
-    // of the child site directly from this request.
-    $this->upgradedSite = TRUE;
-
-    // Reload module list. For modules that are enabled in the test database,
-    // but not on the test client, we need to load the code here.
-    $new_modules = array_diff(module_list(TRUE), $this->loadedModules);
-    foreach ($new_modules as $module) {
-      drupal_load('module', $module);
-    }
-
-    // Reload hook implementations
-    module_implements('', FALSE, TRUE);
-
-    // Rebuild caches.
-    drupal_static_reset();
-    drupal_flush_all_caches();
-
-    // Reload global $conf array and permissions.
-    $this->refreshVariables();
-    $this->checkPermissions(array(), TRUE);
-
-    return TRUE;
-  }
-
-  /**
-   * Force uninstall all modules from a test database, except those listed.
-   *
-   * @param $modules
-   *   The list of modules to keep installed. Required core modules will
-   *   always be kept.
-   */
-  protected function uninstallModulesExcept(array $modules) {
-    $required_modules = array('block', 'dblog', 'filter', 'node', 'system', 'update', 'user');
-
-    $modules = array_merge($required_modules, $modules);
-
-    db_delete('system')
-      ->condition('type', 'module')
-      ->condition('name', $modules, 'NOT IN')
-      ->execute();
-  }
-
-}
-
-/**
- * Performs end-to-end point test of the release update path.
- */
-abstract class UpdatePathTestCase extends UpgradePathTestCase {
-  /**
-   * Overrides UpgradePathTestCase::prepareD7Session().
-   */
-  protected function prepareD7Session() {
-    // Generate and set a D7-compatible session cookie.
-    $this->curlInitialize();
-    $sid = drupal_hash_base64(uniqid(mt_rand(), TRUE) . drupal_random_bytes(55));
-    curl_setopt($this->curlHandle, CURLOPT_COOKIE, rawurlencode(session_name()) . '=' . rawurlencode($sid));
-
-    // Force our way into the session of the child site.
-    drupal_save_session(TRUE);
-    _drupal_session_write($sid, '');
-    drupal_save_session(FALSE);
-  }
-}
-
-/**
- * Perform basic upgrade tests.
- *
- * Load a bare installation of Drupal 6 and run the upgrade process on it.
- *
- * The install only contains dblog (although it's optional, it's only so that
- * another hook_watchdog module can take its place, the site is not functional
- * without watchdog) and update.
- */
-class BasicUpgradePath extends UpgradePathTestCase {
-  public static function getInfo() {
-    return array(
-      'name'  => 'Basic upgrade path',
-      'description'  => 'Basic upgrade path tests.',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    // Path to the database dump files.
-    $this->databaseDumpFiles = array(
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.bare.database.php',
-    );
-    parent::setUp();
-  }
-
-  /**
-   * Test a failed upgrade, and verify that the failure is reported.
-   */
-  public function testFailedUpgrade() {
-    // Destroy a table that the upgrade process needs.
-    db_drop_table('access');
-    // Assert that the upgrade fails.
-    $this->assertFalse($this->performUpgrade(FALSE) && $this->pendingUpdates, 'A failed upgrade should return messages.');
-  }
-
-  /**
-   * Test a successful upgrade.
-   */
-  public function testBasicUpgrade() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-
-    // Hit the frontpage.
-    $this->drupalGet('');
-    $this->assertResponse(200);
-
-    // Verify that we are still logged in.
-    $this->drupalGet('user');
-    $this->clickLink(t('Edit'));
-    $this->assertEqual($this->getUrl(), url('user/1/edit', array('absolute' => TRUE)), 'We are still logged in as admin at the end of the upgrade.');
-
-    // Logout and verify that we can login back in with our initial password.
-    $this->drupalLogout();
-    $this->drupalLogin((object) array(
-      'uid' => 1,
-      'name' => 'admin',
-      'pass_raw' => 'admin',
-    ));
-
-    // The previous login should've triggered a password rehash, so login one
-    // more time to make sure the new hash is readable.
-    $this->drupalLogout();
-    $this->drupalLogin((object) array(
-      'uid' => 1,
-      'name' => 'admin',
-      'pass_raw' => 'admin',
-    ));
-
-    // Test that the site name is correctly displayed.
-    $this->assertText('Drupal 6', 'The site name is correctly displayed.');
-
-    // Verify that the main admin sections are available.
-    $this->drupalGet('admin');
-    $this->assertText(t('Content'));
-    $this->assertText(t('Appearance'));
-    $this->assertText(t('People'));
-    $this->assertText(t('Configuration'));
-    $this->assertText(t('Reports'));
-    $this->assertText(t('Structure'));
-    $this->assertText(t('Modules'));
-
-    // Confirm that no {menu_links} entry exists for user/autocomplete.
-    $result = db_query('SELECT COUNT(*) FROM {menu_links} WHERE link_path = :user_autocomplete', array(':user_autocomplete' => 'user/autocomplete'))->fetchField();
-    $this->assertFalse($result, 'No {menu_links} entry exists for user/autocomplete');
-
-    // Test that the environment after the upgrade is in a consistent status.
-    $update_d6 = variable_get('update_d6', FALSE);
-    $this->assertFalse($update_d6, 'The D6 upgrade flag variable has been correctly disabled.');
-  }
-}
-
-/**
- * Performs point release update tests on a bare database.
- *
- * Loads an installation of Drupal 7.0 and runs the update process on it.
- *
- * The install contains the standard profile (plus all optional) modules
- * without any content so that an update from any of the modules under this
- * profile installation can be wholly tested.
- */
-class BasicStandardUpdatePath extends UpdatePathTestCase {
-  public static function getInfo() {
-    return array(
-      'name'  => 'Basic standard + all profile update path',
-      'description'  => 'Basic update path tests for a standard profile install with all enabled modules.',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    // Path to the database dump files.
-    $this->databaseDumpFiles = array(
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-7.bare.standard_all.database.php.gz',
-    );
-    parent::setUp();
-  }
-
-  /**
-   * Tests a successful point release update.
-   */
-  public function testBasicStandardUpdate() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-
-    // Hit the frontpage.
-    $this->drupalGet('');
-    $this->assertResponse(200);
-
-    // Verify that we are still logged in.
-    $this->drupalGet('user');
-    $this->clickLink(t('Edit'));
-    $this->assertEqual($this->getUrl(), url('user/1/edit', array('absolute' => TRUE)), 'We are still logged in as admin at the end of the upgrade.');
-
-    // Logout and verify that we can login back in with our initial password.
-    $this->drupalLogout();
-    $this->drupalLogin((object) array(
-      'uid' => 1,
-      'name' => 'admin',
-      'pass_raw' => 'admin',
-    ));
-
-    // The previous login should've triggered a password rehash, so login one
-    // more time to make sure the new hash is readable.
-    $this->drupalLogout();
-    $this->drupalLogin((object) array(
-      'uid' => 1,
-      'name' => 'admin',
-      'pass_raw' => 'admin',
-    ));
-
-    // Test that the site name is correctly displayed.
-    $this->assertText('Drupal', 'The site name is correctly displayed.');
-
-    // Verify that the main admin sections are available.
-    $this->drupalGet('admin');
-    $this->assertText(t('Content'));
-    $this->assertText(t('Appearance'));
-    $this->assertText(t('People'));
-    $this->assertText(t('Configuration'));
-    $this->assertText(t('Reports'));
-    $this->assertText(t('Structure'));
-    $this->assertText(t('Modules'));
-
-    // Confirm that no {menu_links} entry exists for user/autocomplete.
-    $result = db_query('SELECT COUNT(*) FROM {menu_links} WHERE link_path = :user_autocomplete', array(':user_autocomplete' => 'user/autocomplete'))->fetchField();
-    $this->assertFalse($result, 'No {menu_links} entry exists for user/autocomplete');
-  }
-}
-
-/**
- * Performs point release update tests on a bare database.
- *
- * Loads an installation of Drupal 7.0 and runs the update process on it.
- *
- * The install contains the minimal profile modules (without any generated
- * content) so that an update from of a site under this profile may be tested.
- */
-class BasicMinimalUpdatePath extends UpdatePathTestCase {
-  public static function getInfo() {
-    return array(
-      'name'  => 'Basic minimal profile update path',
-      'description'  => 'Basic update path tests for a minimal profile install.',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    // Path to the database dump files.
-    $this->databaseDumpFiles = array(
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-7.bare.minimal.database.php.gz',
-    );
-    parent::setUp();
-  }
-
-  /**
-   * Tests a successful point release update.
-   */
-  public function testBasicMinimalUpdate() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-
-    // Hit the frontpage.
-    $this->drupalGet('');
-    $this->assertResponse(200);
-
-    // Verify that we are still logged in.
-    $this->drupalGet('user');
-    $this->clickLink(t('Edit'));
-    $this->assertEqual($this->getUrl(), url('user/1/edit', array('absolute' => TRUE)), 'We are still logged in as admin at the end of the upgrade.');
-
-    // Logout and verify that we can login back in with our initial password.
-    $this->drupalLogout();
-    $this->drupalLogin((object) array(
-      'uid' => 1,
-      'name' => 'admin',
-      'pass_raw' => 'admin',
-    ));
-
-    // The previous login should've triggered a password rehash, so login one
-    // more time to make sure the new hash is readable.
-    $this->drupalLogout();
-    $this->drupalLogin((object) array(
-      'uid' => 1,
-      'name' => 'admin',
-      'pass_raw' => 'admin',
-    ));
-
-    // Test that the site name is correctly displayed.
-    $this->assertText('Drupal', 'The site name is correctly displayed.');
-
-    // Verify that the main admin sections are available.
-    $this->drupalGet('admin');
-    $this->assertText(t('Content'));
-    $this->assertText(t('Appearance'));
-    $this->assertText(t('People'));
-    $this->assertText(t('Configuration'));
-    $this->assertText(t('Reports'));
-    $this->assertText(t('Structure'));
-    $this->assertText(t('Modules'));
-
-    // Confirm that no {menu_links} entry exists for user/autocomplete.
-    $result = db_query('SELECT COUNT(*) FROM {menu_links} WHERE link_path = :user_autocomplete', array(':user_autocomplete' => 'user/autocomplete'))->fetchField();
-    $this->assertFalse($result, 'No {menu_links} entry exists for user/autocomplete');
-
-    // Confirm that a date format that just differs in the case can be added.
-    $admin_date_format = 'j M y';
-    $edit = array('date_format' => $admin_date_format);
-    $this->drupalPost('admin/config/regional/date-time/formats/add', $edit, t('Add format'));
-
-    // Add a new date format which just differs in the case.
-    $admin_date_format_uppercase = 'j M Y';
-    $edit = array('date_format' => $admin_date_format_uppercase);
-    $this->drupalPost('admin/config/regional/date-time/formats/add', $edit, t('Add format'));
-    $this->assertText(t('Custom date format added.'));
-
-    // Verify that the unique key on {date_formats}.format still exists.
-    $this->assertTrue(db_index_exists('date_formats', 'formats'), 'Unique key on {date_formats} exists');
-  }
-}
-
-/**
- * Performs point release update tests on a 'filled' database.
- *
- * Loads an installation of Drupal 7.0 and runs the update process on it.
- *
- * The install contains the standard profile (plus all optional) modules
- * with generated content so that an update from any of the modules under this
- * profile installation can be wholly tested.
- */
-class FilledStandardUpdatePath extends UpdatePathTestCase {
-  public static function getInfo() {
-    return array(
-      'name'  => 'Basic standard + all profile update path, populated database',
-      'description'  => 'Basic update path tests for a standard profile install with all enabled modules and a populated database.',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    // Path to the database dump files.
-    $this->databaseDumpFiles = array(
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-7.filled.standard_all.database.php.gz',
-    );
-    parent::setUp();
-  }
-
-  /**
-   * Tests a successful point release update.
-   */
-  public function testFilledStandardUpdate() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-
-    // Hit the frontpage.
-    $this->drupalGet('');
-    $this->assertResponse(200);
-
-    // Verify that we are still logged in.
-    $this->drupalGet('user');
-    $this->clickLink(t('Edit'));
-    $this->assertEqual($this->getUrl(), url('user/1/edit', array('absolute' => TRUE)), 'We are still logged in as admin at the end of the upgrade.');
-
-    // Logout and verify that we can login back in with our initial password.
-    $this->drupalLogout();
-    $this->drupalLogin((object) array(
-      'uid' => 1,
-      'name' => 'admin',
-      'pass_raw' => 'admin',
-    ));
-
-    // The previous login should've triggered a password rehash, so login one
-    // more time to make sure the new hash is readable.
-    $this->drupalLogout();
-    $this->drupalLogin((object) array(
-      'uid' => 1,
-      'name' => 'admin',
-      'pass_raw' => 'admin',
-    ));
-
-    // Test that the site name is correctly displayed.
-    $this->assertText('Drupal', 'The site name is correctly displayed.');
-
-    // Verify that the main admin sections are available.
-    $this->drupalGet('admin');
-    $this->assertText(t('Content'));
-    $this->assertText(t('Appearance'));
-    $this->assertText(t('People'));
-    $this->assertText(t('Configuration'));
-    $this->assertText(t('Reports'));
-    $this->assertText(t('Structure'));
-    $this->assertText(t('Modules'));
-
-    // Confirm that no {menu_links} entry exists for user/autocomplete.
-    $result = db_query('SELECT COUNT(*) FROM {menu_links} WHERE link_path = :user_autocomplete', array(':user_autocomplete' => 'user/autocomplete'))->fetchField();
-    $this->assertFalse($result, 'No {menu_links} entry exists for user/autocomplete');
-  }
-}
-
-/**
- * Performs point release update tests on a populated database.
- *
- * Loads an installation of Drupal 7.0 and runs the update process on it.
- *
- * The install contains the minimal profile modules (along with generated
- * content) so that an update from of a site under this profile may be tested.
- */
-class FilledMinimalUpdatePath extends UpdatePathTestCase {
-  public static function getInfo() {
-    return array(
-      'name'  => 'Basic minimal profile update path, populated database',
-      'description'  => 'Basic update path tests for a minimal profile install with a populated database.',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    // Path to the database dump files.
-    $this->databaseDumpFiles = array(
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-7.filled.minimal.database.php.gz',
-    );
-    parent::setUp();
-  }
-
-  /**
-   * Tests a successful point release update.
-   */
-  public function testFilledStandardUpdate() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-
-    // Hit the frontpage.
-    $this->drupalGet('');
-    $this->assertResponse(200);
-
-    // Verify that we are still logged in.
-    $this->drupalGet('user');
-    $this->clickLink(t('Edit'));
-    $this->assertEqual($this->getUrl(), url('user/1/edit', array('absolute' => TRUE)), 'We are still logged in as admin at the end of the upgrade.');
-
-    // Logout and verify that we can login back in with our initial password.
-    $this->drupalLogout();
-    $this->drupalLogin((object) array(
-      'uid' => 1,
-      'name' => 'admin',
-      'pass_raw' => 'admin',
-    ));
-
-    // The previous login should've triggered a password rehash, so login one
-    // more time to make sure the new hash is readable.
-    $this->drupalLogout();
-    $this->drupalLogin((object) array(
-      'uid' => 1,
-      'name' => 'admin',
-      'pass_raw' => 'admin',
-    ));
-
-    // Test that the site name is correctly displayed.
-    $this->assertText('Drupal', 'The site name is correctly displayed.');
-
-    // Verify that the main admin sections are available.
-    $this->drupalGet('admin');
-    $this->assertText(t('Content'));
-    $this->assertText(t('Appearance'));
-    $this->assertText(t('People'));
-    $this->assertText(t('Configuration'));
-    $this->assertText(t('Reports'));
-    $this->assertText(t('Structure'));
-    $this->assertText(t('Modules'));
-
-    // Confirm that no {menu_links} entry exists for user/autocomplete.
-    $result = db_query('SELECT COUNT(*) FROM {menu_links} WHERE link_path = :user_autocomplete', array(':user_autocomplete' => 'user/autocomplete'))->fetchField();
-    $this->assertFalse($result, 'No {menu_links} entry exists for user/autocomplete');
-  }
-}
diff --git a/modules/simpletest/tests/upgrade/upgrade.translatable.test b/modules/simpletest/tests/upgrade/upgrade.translatable.test
deleted file mode 100644
index 6fefb0f..0000000
--- a/modules/simpletest/tests/upgrade/upgrade.translatable.test
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-/**
- * Upgrade test for translatable content types of node.module.
- */
-class TranslatableUpgradePathTestCase extends UpgradePathTestCase {
-  public static function getInfo() {
-    return array(
-      'name'  => 'Translatable content upgrade path',
-      'description'  => 'Upgrade path tests for the translatable content types of Node module.',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    // Path to the database dump files.
-    $this->databaseDumpFiles = array(
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.filled.database.php',
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.locale.database.php',
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.translatable.database.php',
-    );
-    parent::setUp();
-
-    $this->uninstallModulesExcept(array('locale'));
-  }
-
-  /**
-   * Test a successful upgrade (no negotiation).
-   */
-  public function testTranslatableUpgrade() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-
-    // The D6 database contains the english node "First translatable page" with
-    // nid 53.
-    $nid = 53;
-    $title = 'First translatable page';
-    $teaser = 'Teaser of the first translatable page.';
-    $body = 'Body of the first translatable page.';
-
-    // Check whether the node displays properly.
-    $this->drupalGet("node/$nid");
-    $this->assertText($body, 'Translatable node body displays properly');
-
-    // Retrieve node object, ensure that both the body and the teaser has
-    // survived upgrade properly.
-    $node = $this->drupalGetNodeByTitle($title);
-    $this->assertTrue($node != NULL, format_string('Node @title was loaded', array('@title' => $title)));
-    $this->assertEqual($node->body[LANGUAGE_NONE][0]['value'], $body, 'Body of the node survived upgrade properly');
-    $this->assertEqual($node->body[LANGUAGE_NONE][0]['summary'], $teaser, 'Teaser of the node survived upgrade properly');
-  }
-}
diff --git a/modules/simpletest/tests/upgrade/upgrade.trigger.test b/modules/simpletest/tests/upgrade/upgrade.trigger.test
deleted file mode 100644
index ef23941..0000000
--- a/modules/simpletest/tests/upgrade/upgrade.trigger.test
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-/**
- * @file
- * Provides upgrade path tests for the Trigger module.
- */
-
-/**
- * Tests the Trigger 6 -> 7 upgrade path.
- */
-class UpgradePathTriggerTestCase extends UpgradePathTestCase {
-  public static function getInfo() {
-    return array(
-      'name'  => 'Trigger upgrade path',
-      'description'  => 'Trigger upgrade path tests for Drupal 6.x.',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    // Path to the database dump.
-    $this->databaseDumpFiles = array(
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.filled.database.php',
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.trigger.database.php',
-    );
-    parent::setUp();
-  }
-
-  /**
-   * Basic tests for the trigger upgrade.
-   */
-  public function testTaxonomyUpgrade() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-    $this->drupalGet('admin/structure/trigger/node');
-    $this->assertRaw('<td>'. t('Make post sticky') .'</td>');
-    $this->assertRaw('<td>'. t('Publish post') .'</td>');
-    $this->drupalGet('admin/structure/trigger/comment');
-    $this->assertRaw('<td>'. t('Publish comment') .'</td>');
-  }
-}
diff --git a/modules/simpletest/tests/upgrade/upgrade.upload.test b/modules/simpletest/tests/upgrade/upgrade.upload.test
deleted file mode 100644
index be352bd..0000000
--- a/modules/simpletest/tests/upgrade/upgrade.upload.test
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-
-/**
- * Upgrade test for comment.module.
- */
-class UploadUpgradePathTestCase extends UpgradePathTestCase {
-  public static function getInfo() {
-    return array(
-      'name'  => 'Upload upgrade path',
-      'description'  => 'Upload upgrade path tests.',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    // Path to the database dump files.
-    $this->databaseDumpFiles = array(
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.filled.database.php',
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.upload.database.php',
-    );
-    parent::setUp();
-    // Set a small batch size to test multiple iterations of the batch.
-    $this->variable_set('upload_update_batch_size', 2);
-
-    $this->uninstallModulesExcept(array('upload'));
-  }
-
-  /**
-   * Test a successful upgrade.
-   */
-  public function testUploadUpgrade() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-    $query = new EntityFieldQuery();
-    $query->entityCondition('entity_type', 'node');
-    $query->entityCondition('bundle', 'page');
-    $query->age(FIELD_LOAD_REVISION);
-    $query->fieldCondition('upload');
-    $entities = $query->execute();
-    $revisions = $entities['node'];
-    // Node revision 50 should not have uploaded files, as the entry in {files}
-    // is corrupted.
-    $this->assertFalse((isset($revisions[50])), 'Nodes with missing files do not contain filefield data.');
-    // Node revisions 51-53 should have uploaded files.
-    $this->assertTrue((isset($revisions[51]) && isset($revisions[52]) && isset($revisions[53])), 'Nodes with uploaded files now contain filefield data.');
-    // The test database lists uploaded filenames in the body of each node with
-    // uploaded files attached. Make sure all files are there in the same order.
-    foreach ($revisions as $vid => $revision) {
-      $node = node_load($revision->nid, $vid);
-
-      // Assemble a list of the filenames as recorded in the node body before
-      // the upgrade.
-      $recorded_filenames = preg_split('/\s+/', $node->body[LANGUAGE_NONE][0]['value']);
-      // The first line of the node body should be "Attachments:"
-      if (strstr($recorded_filenames[0], "Attachments:")) {
-        unset($recorded_filenames[0]);
-      }
-      $recorded_filenames = array_values($recorded_filenames);
-
-      $files = $node->upload[LANGUAGE_NONE];
-      // Assemble a list of the filenames as they exist after the upgrade.
-      $filenames = array();
-      foreach ($files as $file) {
-        $filenames[] = $file['filename'];
-      }
-      $this->assertIdentical($filenames, $recorded_filenames, 'The uploaded files are present in the same order after the upgrade.');
-    }
-    // Test for the file with repeating basename to only have the streaming
-    // path replaced.
-    $node = node_load(40, 53);
-    $repeated_basename_file = $node->upload[LANGUAGE_NONE][4];
-    $this->assertEqual($repeated_basename_file['uri'], 'private://drupal-6/file/directory/path/crazy-basename.png', "The file with the repeated basename path only had the stream portion replaced");
-
-    // Make sure the file settings were properly migrated.
-    $d6_file_directory_temp = '/drupal-6/file/directory/temp';
-    $d6_file_directory_path = '/drupal-6/file/directory/path';
-    $d6_file_downloads = 2; // FILE_DOWNLOADS_PRIVATE
-
-    $this->assertNull(variable_get('file_directory_temp', NULL), "The 'file_directory_temp' variable was properly removed.");
-    $this->assertEqual(variable_get('file_temporary_path', 'drupal-7-bogus'), $d6_file_directory_temp, "The 'file_temporary_path' setting was properly migrated.");
-    $this->assertEqual(variable_get('file_default_scheme', 'drupal-7-bogus'), 'private', "The 'file_default_scheme' setting was properly migrated.");
-    $this->assertEqual(variable_get('file_private_path', 'drupal-7-bogus'), $d6_file_directory_path, "The 'file_private_path' setting was properly migrated.");
-  }
-}
diff --git a/modules/simpletest/tests/upgrade/upgrade.user.test b/modules/simpletest/tests/upgrade/upgrade.user.test
deleted file mode 100644
index d33234e..0000000
--- a/modules/simpletest/tests/upgrade/upgrade.user.test
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-/**
- * Upgrade test for user.module (password token involved).
- */
-class UserUpgradePathPasswordTokenTestCase extends UpgradePathTestCase {
-  public static function getInfo() {
-    return array(
-      'name'  => 'User upgrade path (password token involved)',
-      'description'  => 'User upgrade path tests (password token involved).',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    // Path to the database dump files.
-    $this->databaseDumpFiles = array(
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.bare.database.php',
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.user-password-token.database.php',
-    );
-    parent::setUp();
-  }
-
-  /**
-   * Test a successful upgrade.
-   */
-  public function testUserUpgrade() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-    $this->assertEqual(variable_get('user_mail_register_no_approval_required_body'), ', [user:name], [site:name], [site:url], [site:url-brief], [user:mail], [date:medium], [site:login-url], [user:edit-url], [user:one-time-login-url].', 'Existing email templates have been modified (password token involved).');
-    // Check that a non-md5 hash was untouched.
-    $pass = db_query('SELECT pass FROM {users} WHERE uid = 3')->fetchField();
-    $this->assertEqual('$S$DAK00p3Dkojkf4O/UizYxenguXnjv', $pass, 'Pre-existing non-MD5 password hash was not altered');
-  }
-}
-
-/**
- * Upgrade test for user.module (password token not involved).
- */
-class UserUpgradePathNoPasswordTokenTestCase extends UpgradePathTestCase {
-  public static function getInfo() {
-    return array(
-      'name'  => 'User upgrade path (password token not involved)',
-      'description'  => 'User upgrade path tests (password token not involved).',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    // Path to the database dump files.
-    $this->databaseDumpFiles = array(
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.bare.database.php',
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.user-no-password-token.database.php',
-    );
-    parent::setUp();
-  }
-
-  /**
-   * Test a successful upgrade.
-   */
-  public function testUserUpgrade() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-    $this->assertEqual(variable_get('user_mail_register_no_approval_required_body'), '[user:name], [site:name], [site:url], [site:url-brief], [user:mail], [date:medium], [site:login-url], [user:edit-url], [user:one-time-login-url].', 'Existing email templates have been modified (password token not involved).');
-  }
-}
-
-/**
- * Upgrade test for user.module (duplicated permission).
- */
-class UserUpgradePathDuplicatedPermissionTestCase extends UpgradePathTestCase {
-  public static function getInfo() {
-    return array(
-      'name'  => 'User upgrade path (duplicated permission)',
-      'description'  => 'User upgrade path tests (duplicated permission).',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    // Path to the database dump files.
-    $this->databaseDumpFiles = array(
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.bare.database.php',
-      drupal_get_path('module', 'simpletest') . '/tests/upgrade/drupal-6.duplicate-permission.database.php',
-    );
-    parent::setUp();
-  }
-
-  /**
-   * Test a successful upgrade.
-   */
-  public function testUserUpgrade() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-  }
-}
diff --git a/modules/simpletest/tests/url_alter_test.info b/modules/simpletest/tests/url_alter_test.info
deleted file mode 100644
index a8e9474..0000000
--- a/modules/simpletest/tests/url_alter_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = Url_alter tests
-description = A support modules for url_alter hook testing.
-core = 7.x
-package = Testing
-version = VERSION
-hidden = TRUE
diff --git a/modules/simpletest/tests/url_alter_test.install b/modules/simpletest/tests/url_alter_test.install
deleted file mode 100644
index 6e09ab5..0000000
--- a/modules/simpletest/tests/url_alter_test.install
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-
-/**
- * Impelement hook_install().
- */
-function url_alter_test_install() {
-  // Set the weight of this module to one higher than forum.module.
-  db_update('system')
-    ->fields(array('weight' => 2))
-    ->condition('name', 'url_alter_test')
-    ->execute();
-}
diff --git a/modules/simpletest/tests/url_alter_test.module b/modules/simpletest/tests/url_alter_test.module
deleted file mode 100644
index 9287ff5..0000000
--- a/modules/simpletest/tests/url_alter_test.module
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-
-/**
- * @file
- * Module to help test hook_url_inbound_alter() and hook_url_outbound_alter().
- */
-
-/**
- * Implements hook_menu().
- */
-function url_alter_test_menu() {
-  $items['url-alter-test/foo'] = array(
-    'title' => 'Foo',
-    'page callback' => 'url_alter_test_foo',
-    'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
-  );
-  return $items;
-}
-
-/**
- * Menu callback.
- */
-function url_alter_test_foo() {
-  print 'current_path=' . current_path() . ' request_path=' . request_path();
-  exit;
-}
-
-/**
- * Implements hook_url_inbound_alter().
- */
-function url_alter_test_url_inbound_alter(&$path, $original_path, $path_language) {
-  if (!request_path() && !empty($_GET['q'])) {
-    drupal_set_message("\$_GET['q'] is non-empty with an empty request path.");
-  }
-
-  // Rewrite user/username to user/uid.
-  if (preg_match('!^user/([^/]+)(/.*)?!', $path, $matches)) {
-    if ($account = user_load_by_name($matches[1])) {
-      $matches += array(2 => '');
-      $path = 'user/' . $account->uid . $matches[2];
-    }
-  }
-
-  // Rewrite community/ to forum/.
-  if ($path == 'community' || strpos($path, 'community/') === 0) {
-    $path = 'forum' . substr($path, 9);
-  }
-
-  if ($path == 'url-alter-test/bar') {
-    $path = 'url-alter-test/foo';
-  }
-}
-
-/**
- * Implements hook_url_outbound_alter().
- */
-function url_alter_test_url_outbound_alter(&$path, &$options, $original_path) {
-  // Rewrite user/uid to user/username.
-  if (preg_match('!^user/([0-9]+)(/.*)?!', $path, $matches)) {
-    if ($account = user_load($matches[1])) {
-      $matches += array(2 => '');
-      $path = 'user/' . $account->name . $matches[2];
-    }
-  }
-
-  // Rewrite forum/ to community/.
-  if ($path == 'forum' || strpos($path, 'forum/') === 0) {
-    $path = 'community' . substr($path, 5);
-  }
-}
diff --git a/modules/simpletest/tests/xmlrpc.test b/modules/simpletest/tests/xmlrpc.test
deleted file mode 100644
index 1a0fd86..0000000
--- a/modules/simpletest/tests/xmlrpc.test
+++ /dev/null
@@ -1,244 +0,0 @@
-<?php
-
-/**
- * Perform basic XML-RPC tests that do not require addition callbacks.
- */
-class XMLRPCBasicTestCase extends DrupalWebTestCase {
-
-  public static function getInfo() {
-    return array(
-      'name'  => 'XML-RPC basic',
-      'description'  => 'Perform basic XML-RPC tests that do not require additional callbacks.',
-      'group' => 'XML-RPC',
-    );
-  }
-
-  /**
-   * Ensure that a basic XML-RPC call with no parameters works.
-   */
-  protected function testListMethods() {
-    // Minimum list of methods that should be included.
-    $minimum = array(
-      'system.multicall',
-      'system.methodSignature',
-      'system.getCapabilities',
-      'system.listMethods',
-      'system.methodHelp',
-    );
-
-    // Invoke XML-RPC call to get list of methods.
-    $url = url(NULL, array('absolute' => TRUE)) . 'xmlrpc.php';
-    $methods = xmlrpc($url, array('system.listMethods' => array()));
-
-    // Ensure that the minimum methods were found.
-    $count = 0;
-    foreach ($methods as $method) {
-      if (in_array($method, $minimum)) {
-        $count++;
-      }
-    }
-
-    $this->assertEqual($count, count($minimum), 'system.listMethods returned at least the minimum listing');
-  }
-
-  /**
-   * Ensure that system.methodSignature returns an array of signatures.
-   */
-  protected function testMethodSignature() {
-    $url = url(NULL, array('absolute' => TRUE)) . 'xmlrpc.php';
-    $signature = xmlrpc($url, array('system.methodSignature' => array('system.listMethods')));
-    $this->assert(is_array($signature) && !empty($signature) && is_array($signature[0]),
-      'system.methodSignature returns an array of signature arrays.');
-  }
-
-  /**
-   * Ensure that XML-RPC correctly handles invalid messages when parsing.
-   */
-  protected function testInvalidMessageParsing() {
-    $invalid_messages = array(
-      array(
-        'message' => xmlrpc_message(''),
-        'assertion' => 'Empty message correctly rejected during parsing.',
-      ),
-      array(
-        'message' => xmlrpc_message('<?xml version="1.0" encoding="ISO-8859-1"?>'),
-        'assertion' => 'Empty message with XML declaration correctly rejected during parsing.',
-      ),
-      array(
-        'message' => xmlrpc_message('<?xml version="1.0"?><params><param><value><string>value</string></value></param></params>'),
-        'assertion' => 'Non-empty message without a valid message type is rejected during parsing.',
-      ),
-      array(
-        'message' => xmlrpc_message('<methodResponse><params><param><value><string>value</string></value></param></methodResponse>'),
-        'assertion' => 'Non-empty malformed message is rejected during parsing.',
-      ),
-    );
-
-    foreach ($invalid_messages as $assertion) {
-      $this->assertFalse(xmlrpc_message_parse($assertion['message']), $assertion['assertion']);
-    }
-  }
-}
-
-class XMLRPCValidator1IncTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'XML-RPC validator',
-      'description' => 'See <a href="http://www.xmlrpc.com/validator1Docs">the xmlrpc validator1 specification</a>.',
-      'group' => 'XML-RPC',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('xmlrpc_test');
-  }
-
-  /**
-   * Run validator1 tests.
-   */
-  function testValidator1() {
-    $xml_url = url(NULL, array('absolute' => TRUE)) . 'xmlrpc.php';
-    srand();
-    mt_srand();
-
-    $array_1 = array(array('curly' => mt_rand(-100, 100)),
-                  array('curly' => mt_rand(-100, 100)),
-                  array('larry' => mt_rand(-100, 100)),
-                  array('larry' => mt_rand(-100, 100)),
-                  array('moe' => mt_rand(-100, 100)),
-                  array('moe' => mt_rand(-100, 100)),
-                  array('larry' => mt_rand(-100, 100)));
-    shuffle($array_1);
-    $l_res_1 = xmlrpc_test_arrayOfStructsTest($array_1);
-    $r_res_1 = xmlrpc($xml_url, array('validator1.arrayOfStructsTest' => array($array_1)));
-    $this->assertIdentical($l_res_1, $r_res_1);
-
-    $string_2 = 't\'&>>zf"md>yr>xlcev<h<"k&j<og"w&&>">>uai"np&s>>q\'&b<>"&&&';
-    $l_res_2 = xmlrpc_test_countTheEntities($string_2);
-    $r_res_2 = xmlrpc($xml_url, array('validator1.countTheEntities' => array($string_2)));
-    $this->assertIdentical($l_res_2, $r_res_2);
-
-    $struct_3 = array('moe' => mt_rand(-100, 100), 'larry' => mt_rand(-100, 100), 'curly' => mt_rand(-100, 100), 'homer' => mt_rand(-100, 100));
-    $l_res_3 = xmlrpc_test_easyStructTest($struct_3);
-    $r_res_3 = xmlrpc($xml_url, array('validator1.easyStructTest' => array($struct_3)));
-    $this->assertIdentical($l_res_3, $r_res_3);
-
-    $struct_4 = array('sub1' => array('bar' => 13),
-                    'sub2' => 14,
-                    'sub3' => array('foo' => 1, 'baz' => 2),
-                    'sub4' => array('ss' => array('sss' => array('ssss' => 'sssss'))));
-    $l_res_4 = xmlrpc_test_echoStructTest($struct_4);
-    $r_res_4 = xmlrpc($xml_url, array('validator1.echoStructTest' => array($struct_4)));
-    $this->assertIdentical($l_res_4, $r_res_4);
-
-    $int_5     = mt_rand(-100, 100);
-    $bool_5    = (($int_5 % 2) == 0);
-    $string_5  = $this->randomName();
-    $double_5  = (double)(mt_rand(-1000, 1000) / 100);
-    $time_5    = REQUEST_TIME;
-    $base64_5  = $this->randomName(100);
-    $l_res_5 = xmlrpc_test_manyTypesTest($int_5, $bool_5, $string_5, $double_5, xmlrpc_date($time_5), $base64_5);
-    // See http://drupal.org/node/37766 why this currently fails
-    $l_res_5[5] = $l_res_5[5]->data;
-    $r_res_5 = xmlrpc($xml_url, array('validator1.manyTypesTest' => array($int_5, $bool_5, $string_5, $double_5, xmlrpc_date($time_5), xmlrpc_base64($base64_5))));
-    // @todo Contains objects, objects are not equal.
-    $this->assertEqual($l_res_5, $r_res_5);
-
-    $size = mt_rand(100, 200);
-    $array_6 = array();
-    for ($i = 0; $i < $size; $i++) {
-      $array_6[] = $this->randomName(mt_rand(8, 12));
-    }
-
-    $l_res_6 = xmlrpc_test_moderateSizeArrayCheck($array_6);
-    $r_res_6 = xmlrpc($xml_url, array('validator1.moderateSizeArrayCheck' => array($array_6)));
-    $this->assertIdentical($l_res_6, $r_res_6);
-
-    $struct_7 = array();
-    for ($y = 2000; $y < 2002; $y++) {
-      for ($m = 3; $m < 5; $m++) {
-        for ($d = 1; $d < 6; $d++) {
-          $ys = (string) $y;
-          $ms = sprintf('%02d', $m);
-          $ds = sprintf('%02d', $d);
-          $struct_7[$ys][$ms][$ds]['moe']   = mt_rand(-100, 100);
-          $struct_7[$ys][$ms][$ds]['larry'] = mt_rand(-100, 100);
-          $struct_7[$ys][$ms][$ds]['curly'] = mt_rand(-100, 100);
-        }
-      }
-    }
-    $l_res_7 = xmlrpc_test_nestedStructTest($struct_7);
-    $r_res_7 = xmlrpc($xml_url, array('validator1.nestedStructTest' => array($struct_7)));
-    $this->assertIdentical($l_res_7, $r_res_7);
-
-
-    $int_8 = mt_rand(-100, 100);
-    $l_res_8 = xmlrpc_test_simpleStructReturnTest($int_8);
-    $r_res_8 = xmlrpc($xml_url, array('validator1.simpleStructReturnTest' => array($int_8)));
-    $this->assertIdentical($l_res_8, $r_res_8);
-
-    /* Now test multicall */
-    $x = array();
-    $x['validator1.arrayOfStructsTest'] = array($array_1);
-    $x['validator1.countTheEntities'] = array($string_2);
-    $x['validator1.easyStructTest'] = array($struct_3);
-    $x['validator1.echoStructTest'] = array($struct_4);
-    $x['validator1.manyTypesTest'] = array($int_5, $bool_5, $string_5, $double_5, xmlrpc_date($time_5), xmlrpc_base64($base64_5));
-    $x['validator1.moderateSizeArrayCheck'] = array($array_6);
-    $x['validator1.nestedStructTest'] = array($struct_7);
-    $x['validator1.simpleStructReturnTest'] = array($int_8);
-
-    $a_l_res = array($l_res_1, $l_res_2, $l_res_3, $l_res_4, $l_res_5, $l_res_6, $l_res_7, $l_res_8);
-    $a_r_res = xmlrpc($xml_url, $x);
-    $this->assertEqual($a_l_res, $a_r_res);
-  }
-}
-
-class XMLRPCMessagesTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name'  => 'XML-RPC message and alteration',
-      'description' => 'Test large messages and method alterations.',
-      'group' => 'XML-RPC',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('xmlrpc_test');
-  }
-
-  /**
-   * Make sure that XML-RPC can transfer large messages.
-   */
-  function testSizedMessages() {
-    $xml_url = url(NULL, array('absolute' => TRUE)) . 'xmlrpc.php';
-    $sizes = array(8, 80, 160);
-    foreach ($sizes as $size) {
-      $xml_message_l = xmlrpc_test_message_sized_in_kb($size);
-      $xml_message_r = xmlrpc($xml_url, array('messages.messageSizedInKB' => array($size)));
-
-      $this->assertEqual($xml_message_l, $xml_message_r, format_string('XML-RPC messages.messageSizedInKB of %s Kb size received', array('%s' => $size)));
-    }
-  }
-
-  /**
-   * Ensure that hook_xmlrpc_alter() can hide even builtin methods.
-   */
-  protected function testAlterListMethods() {
-
-    // Ensure xmlrpc_test_xmlrpc_alter() is disabled and retrieve regular list of methods.
-    variable_set('xmlrpc_test_xmlrpc_alter', FALSE);
-    $url = url(NULL, array('absolute' => TRUE)) . 'xmlrpc.php';
-    $methods1 = xmlrpc($url, array('system.listMethods' => array()));
-
-    // Enable the alter hook and retrieve the list of methods again.
-    variable_set('xmlrpc_test_xmlrpc_alter', TRUE);
-    $methods2 = xmlrpc($url, array('system.listMethods' => array()));
-
-    $diff = array_diff($methods1, $methods2);
-    $this->assertTrue(is_array($diff) && !empty($diff), 'Method list is altered by hook_xmlrpc_alter');
-    $removed = reset($diff);
-    $this->assertEqual($removed, 'system.methodSignature', 'Hiding builting system.methodSignature with hook_xmlrpc_alter works');
-  }
-
-}
diff --git a/modules/simpletest/tests/xmlrpc_test.info b/modules/simpletest/tests/xmlrpc_test.info
deleted file mode 100644
index bddfc95..0000000
--- a/modules/simpletest/tests/xmlrpc_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "XML-RPC Test"
-description = "Support module for XML-RPC tests according to the validator1 specification."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/xmlrpc_test.module b/modules/simpletest/tests/xmlrpc_test.module
deleted file mode 100644
index db8f113..0000000
--- a/modules/simpletest/tests/xmlrpc_test.module
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-
-function xmlrpc_test_arrayOfStructsTest($array) {
-  $sum = 0;
-  foreach ($array as $struct) {
-    if (isset($struct['curly'])) {
-      $sum += $struct['curly'];
-    }
-  }
-  return $sum;
-}
-
-function xmlrpc_test_countTheEntities($string) {
-  return array(
-    'ctLeftAngleBrackets' => substr_count($string, '<'),
-    'ctRightAngleBrackets' => substr_count($string, '>'),
-    'ctAmpersands' => substr_count($string, '&'),
-    'ctApostrophes' => substr_count($string, "'"),
-    'ctQuotes' => substr_count($string, '"'),
-  );
-}
-
-function xmlrpc_test_easyStructTest($array) {
-  return $array["curly"] + $array["moe"] + $array["larry"];
-}
-
-function xmlrpc_test_echoStructTest($array) {
-  return $array;
-}
-
-function xmlrpc_test_manyTypesTest($number, $boolean, $string, $double, $dateTime, $base64) {
-  $timestamp = gmmktime($dateTime->hour, $dateTime->minute, $dateTime->second, $dateTime->month, $dateTime->day, $dateTime->year);
-  return array($number, $boolean, $string, $double, xmlrpc_date($timestamp), xmlrpc_Base64($base64));
-}
-
-function xmlrpc_test_moderateSizeArrayCheck($array) {
-  return array_shift($array) . array_pop($array);
-}
-
-function xmlrpc_test_nestedStructTest($array) {
-  return $array["2000"]["04"]["01"]["larry"] + $array["2000"]["04"]["01"]["moe"] + $array["2000"]["04"]["01"]["curly"];
-}
-
-function xmlrpc_test_simpleStructReturnTest($number) {
-  return array("times10" => ($number*10), "times100" => ($number*100), "times1000" => ($number*1000));
-}
-
-/**
- * Implements hook_xmlrpc().
- */
-function xmlrpc_test_xmlrpc() {
-  return array(
-    'validator1.arrayOfStructsTest' => 'xmlrpc_test_arrayOfStructsTest',
-    'validator1.countTheEntities' => 'xmlrpc_test_countTheEntities',
-    'validator1.easyStructTest' => 'xmlrpc_test_easyStructTest',
-    'validator1.echoStructTest' => 'xmlrpc_test_echoStructTest',
-    'validator1.manyTypesTest' => 'xmlrpc_test_manyTypesTest',
-    'validator1.moderateSizeArrayCheck' => 'xmlrpc_test_moderateSizeArrayCheck',
-    'validator1.nestedStructTest' => 'xmlrpc_test_nestedStructTest',
-    'validator1.simpleStructReturnTest' => 'xmlrpc_test_simpleStructReturnTest',
-    'messages.messageSizedInKB' => 'xmlrpc_test_message_sized_in_kb',
-  );
-}
-
-/**
- * Implements hook_xmlrpc_alter().
- *
- * Hide (or not) the system.methodSignature() service depending on a variable.
- */
-function xmlrpc_test_xmlrpc_alter(&$services) {
-  if (variable_get('xmlrpc_test_xmlrpc_alter', FALSE)) {
-    $remove = NULL;
-    foreach ($services as $key => $value) {
-      if (!is_array($value)) {
-        continue;
-      }
-      if ($value[0] == 'system.methodSignature') {
-        $remove = $key;
-        break;
-      }
-    }
-    if (isset($remove)) {
-      unset($services[$remove]);
-    }
-  }
-}
-
-/**
- * Created a message of the desired size in KB.
- *
- * @param $size
- *   Message size in KB.
- * @return array
- *   Generated message structure.
- */
-function xmlrpc_test_message_sized_in_kb($size) {
-  $message = array();
-
-  $word = 'abcdefg';
-
-  // Create a ~1KB sized struct.
-  for ($i = 0 ; $i < 128; $i++) {
-    $line['word_' . $i] = $word;
-  }
-
-  for ($i = 0; $i < $size; $i++) {
-    $message['line_' . $i] = $line;
-  }
-
-  return $message;
-}
diff --git a/modules/statistics/statistics.info b/modules/statistics/statistics.info
deleted file mode 100644
index d3d1f54..0000000
--- a/modules/statistics/statistics.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Statistics
-description = Logs access statistics for your site.
-package = Core
-version = VERSION
-core = 7.x
-files[] = statistics.test
-configure = admin/config/system/statistics
diff --git a/modules/statistics/statistics.tokens.inc b/modules/statistics/statistics.tokens.inc
deleted file mode 100644
index c2c8fc3..0000000
--- a/modules/statistics/statistics.tokens.inc
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-
-/**
- * @file
- * Builds placeholder replacement tokens for node visitor statistics.
- */
-
-/**
- * Implements hook_token_info().
- */
-function statistics_token_info() {
-  $node['total-count'] = array(
-    'name' => t("Number of views"),
-    'description' => t("The number of visitors who have read the node."),
-  );
-  $node['day-count'] = array(
-    'name' => t("Views today"),
-    'description' => t("The number of visitors who have read the node today."),
-  );
-  $node['last-view'] = array(
-    'name' => t("Last view"),
-    'description' => t("The date on which a visitor last read the node."),
-    'type' => 'date',
-  );
-
-  return array(
-    'tokens' => array('node' => $node),
-  );
-}
-
-/**
- * Implements hook_tokens().
- */
-function statistics_tokens($type, $tokens, array $data = array(), array $options = array()) {
-  $url_options = array('absolute' => TRUE);
-  $replacements = array();
-
-  if ($type == 'node' & !empty($data['node'])) {
-    $node = $data['node'];
-
-    foreach ($tokens as $name => $original) {
-      if ($name == 'total-count') {
-        $statistics = statistics_get($node->nid);
-        $replacements[$original] = $statistics['totalcount'];
-      }
-      elseif ($name == 'day-count') {
-        $statistics = statistics_get($node->nid);
-        $replacements[$original] = $statistics['daycount'];
-      }
-      elseif ($name == 'last-view') {
-        $statistics = statistics_get($node->nid);
-        $replacements[$original] = format_date($statistics['timestamp']);
-      }
-    }
-
-    if ($created_tokens = token_find_with_prefix($tokens, 'last-view')) {
-      $statistics = statistics_get($node->nid);
-      $replacements += token_generate('date', $created_tokens, array('date' => $statistics['timestamp']), $options);
-    }
-  }
-
-  return $replacements;
-}
diff --git a/modules/syslog/syslog.info b/modules/syslog/syslog.info
deleted file mode 100644
index 6c821dc..0000000
--- a/modules/syslog/syslog.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Syslog
-description = Logs and records system events to syslog.
-package = Core
-version = VERSION
-core = 7.x
-files[] = syslog.test
-configure = admin/config/development/logging
diff --git a/modules/syslog/syslog.install b/modules/syslog/syslog.install
deleted file mode 100644
index 12ff4fb..0000000
--- a/modules/syslog/syslog.install
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the syslog module.
- */
-
-/**
- * Implements hook_uninstall().
- */
-function syslog_uninstall() {
-  variable_del('syslog_identity');
-  variable_del('syslog_facility');
-  variable_del('syslog_format');
-}
diff --git a/modules/syslog/syslog.module b/modules/syslog/syslog.module
deleted file mode 100644
index af3eb0a..0000000
--- a/modules/syslog/syslog.module
+++ /dev/null
@@ -1,119 +0,0 @@
-<?php
-
-/**
- * @file
- * Redirects logging messages to syslog.
- */
-
-if (defined('LOG_LOCAL0')) {
-  /**
-   * Sets the proper logging facility.
-   *
-   * Note that LOG_LOCAL0 through LOG_LOCAL7 are not available on Windows, so we
-   * check for availability. If LOG_LOCAL0 is defined by the PHP environment, we
-   * set that as the default; if not, we use LOG_USER.
-   *
-   * @see http://php.net/manual/function.syslog.php
-   */
-  define('DEFAULT_SYSLOG_FACILITY', LOG_LOCAL0);
-}
-else {
-  define('DEFAULT_SYSLOG_FACILITY', LOG_USER);
-}
-
-/**
- * Implements hook_help().
- */
-function syslog_help($path, $arg) {
-  switch ($path) {
-    case 'admin/help#syslog':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t("The Syslog module logs events by sending messages to the logging facility of your web server's operating system. Syslog is an operating system administrative logging tool that provides valuable information for use in system management and security auditing. Most suited to medium and large sites, Syslog provides filtering tools that allow messages to be routed by type and severity. For more information, see the online handbook entry for <a href='@syslog'>Syslog module</a> and PHP's <a href='@php_openlog'>openlog</a> and <a href='@php_syslog'>syslog</a> functions.", array('@syslog' => 'http://drupal.org/documentation/modules/syslog', '@php_openlog' => 'http://www.php.net/manual/function.openlog.php', '@php_syslog' => 'http://www.php.net/manual/function.syslog.php')) . '</p>';
-      $output .= '<h3>' . t('Uses') . '</h3>';
-      $output .= '<dl>';
-      $output .= '<dt>' . t('Logging for UNIX, Linux, and Mac OS X') . '</dt>';
-      $output .= '<dd>' . t('On UNIX, Linux, and Mac OS X, the file <em>/etc/syslog.conf</em> defines the routing configuration. Messages can be flagged with the codes <code>LOG_LOCAL0</code> through <code>LOG_LOCAL7</code>. For information on Syslog facilities, severity levels, and how to set up <em>syslog.conf</em>, see the <em>syslog.conf</em> manual page on your command line.') . '</dd>';
-      $output .= '<dt>' . t('Logging for Microsoft Windows') . '</dt>';
-      $output .= '<dd>' . t('On Microsoft Windows, messages are always sent to the Event Log using the code <code>LOG_USER</code>.') . '</dd>';
-      $output .= '</dl>';
-      return $output;
-  }
-}
-
-/**
- * Implements hook_form_FORM_ID_alter().
- */
-function syslog_form_system_logging_settings_alter(&$form, &$form_state) {
-  $help = module_exists('help') ? ' ' . l(t('More information'), 'admin/help/syslog') . '.' : NULL;
-  $form['syslog_identity'] = array(
-    '#type'          => 'textfield',
-    '#title'         => t('Syslog identity'),
-    '#default_value' => variable_get('syslog_identity', 'drupal'),
-    '#description'   => t('A string that will be prepended to every message logged to Syslog. If you have multiple sites logging to the same Syslog log file, a unique identity per site makes it easy to tell the log entries apart.') . $help,
-  );
-  if (defined('LOG_LOCAL0')) {
-    $form['syslog_facility'] = array(
-      '#type'          => 'select',
-      '#title'         => t('Syslog facility'),
-      '#default_value' => variable_get('syslog_facility', LOG_LOCAL0),
-      '#options'       => syslog_facility_list(),
-      '#description'   => t('Depending on the system configuration, Syslog and other logging tools use this code to identify or filter messages from within the entire system log.') . $help,
-     );
-  }
-  $form['syslog_format'] = array(
-    '#type'          => 'textarea',
-    '#title'         => t('Syslog format'),
-    '#default_value' => variable_get('syslog_format', '!base_url|!timestamp|!type|!ip|!request_uri|!referer|!uid|!link|!message'),
-    '#description'   => t('Specify the format of the syslog entry. Available variables are: <dl><dt><code>!base_url</code></dt><dd>Base URL of the site.</dd><dt><code>!timestamp</code></dt><dd>Unix timestamp of the log entry.</dd><dt><code>!type</code></dt><dd>The category to which this message belongs.</dd><dt><code>!ip</code></dt><dd>IP address of the user triggering the message.</dd><dt><code>!request_uri</code></dt><dd>The requested URI.</dd><dt><code>!referer</code></dt><dd>HTTP Referer if available.</dd><dt><code>!uid</code></dt><dd>User ID.</dd><dt><code>!link</code></dt><dd>A link to associate with the message.</dd><dt><code>!message</code></dt><dd>The message to store in the log.</dd></dl>'),
-  );
-  $form['actions']['#weight'] = 1;
-}
-
-/**
- * Lists all possible syslog facilities for UNIX/Linux.
- *
- * @return array
- *   An array of syslog facilities for UNIX/Linux.
- */
-function syslog_facility_list() {
-  return array(
-    LOG_LOCAL0 => 'LOG_LOCAL0',
-    LOG_LOCAL1 => 'LOG_LOCAL1',
-    LOG_LOCAL2 => 'LOG_LOCAL2',
-    LOG_LOCAL3 => 'LOG_LOCAL3',
-    LOG_LOCAL4 => 'LOG_LOCAL4',
-    LOG_LOCAL5 => 'LOG_LOCAL5',
-    LOG_LOCAL6 => 'LOG_LOCAL6',
-    LOG_LOCAL7 => 'LOG_LOCAL7',
-  );
-}
-
-/**
- * Implements hook_watchdog().
- */
-function syslog_watchdog(array $log_entry) {
-  global $base_url;
-
-  $log_init = &drupal_static(__FUNCTION__, FALSE);
-
-  if (!$log_init) {
-    $log_init = TRUE;
-    $default_facility = defined('LOG_LOCAL0') ? LOG_LOCAL0 : LOG_USER;
-    openlog(variable_get('syslog_identity', 'drupal'), LOG_NDELAY, variable_get('syslog_facility', $default_facility));
-  }
-
-  $message = strtr(variable_get('syslog_format', '!base_url|!timestamp|!type|!ip|!request_uri|!referer|!uid|!link|!message'), array(
-    '!base_url'    => $base_url,
-    '!timestamp'   => $log_entry['timestamp'],
-    '!type'        => $log_entry['type'],
-    '!ip'          => $log_entry['ip'],
-    '!request_uri' => $log_entry['request_uri'],
-    '!referer'     => $log_entry['referer'],
-    '!uid'         => $log_entry['uid'],
-    '!link'        => strip_tags($log_entry['link']),
-    '!message'     => strip_tags(!isset($log_entry['variables']) ? $log_entry['message'] : strtr($log_entry['message'], $log_entry['variables'])),
-  ));
-
-  syslog($log_entry['severity'], $message);
-}
diff --git a/modules/syslog/syslog.test b/modules/syslog/syslog.test
deleted file mode 100644
index 4707bd0..0000000
--- a/modules/syslog/syslog.test
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for syslog.module.
- */
-
-/**
- * Tests the Syslog module functionality.
- */
-class SyslogTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Syslog functionality',
-      'description' => 'Test syslog settings.',
-      'group' => 'Syslog'
-    );
-  }
-
-  function setUp() {
-    parent::setUp('syslog');
-  }
-
-  /**
-   * Tests the syslog settings page.
-   */
-  function testSettings() {
-    $admin_user = $this->drupalCreateUser(array('administer site configuration'));
-    $this->drupalLogin($admin_user);
-
-    $edit = array();
-    // If we're on Windows, there is no configuration form.
-    if (defined('LOG_LOCAL6')) {
-      $this->drupalPost('admin/config/development/logging', array('syslog_facility' => LOG_LOCAL6), t('Save configuration'));
-      $this->assertText(t('The configuration options have been saved.'));
-
-      $this->drupalGet('admin/config/development/logging');
-      if ($this->parse()) {
-        $field = $this->xpath('//option[@value=:value]', array(':value' => LOG_LOCAL6)); // Should be one field.
-        $this->assertTrue($field[0]['selected'] == 'selected', 'Facility value saved.');
-      }
-    }
-  }
-}
diff --git a/modules/system/html.tpl.php b/modules/system/html.tpl.php
deleted file mode 100644
index c3e24c9..0000000
--- a/modules/system/html.tpl.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to display the basic html structure of a single
- * Drupal page.
- *
- * Variables:
- * - $css: An array of CSS files for the current page.
- * - $language: (object) The language the site is being displayed in.
- *   $language->language contains its textual representation.
- *   $language->dir contains the language direction. It will either be 'ltr' or 'rtl'.
- * - $rdf_namespaces: All the RDF namespace prefixes used in the HTML document.
- * - $grddl_profile: A GRDDL profile allowing agents to extract the RDF data.
- * - $head_title: A modified version of the page title, for use in the TITLE
- *   tag.
- * - $head_title_array: (array) An associative array containing the string parts
- *   that were used to generate the $head_title variable, already prepared to be
- *   output as TITLE tag. The key/value pairs may contain one or more of the
- *   following, depending on conditions:
- *   - title: The title of the current page, if any.
- *   - name: The name of the site.
- *   - slogan: The slogan of the site, if any, and if there is no title.
- * - $head: Markup for the HEAD section (including meta tags, keyword tags, and
- *   so on).
- * - $styles: Style tags necessary to import all CSS files for the page.
- * - $scripts: Script tags necessary to load the JavaScript files and settings
- *   for the page.
- * - $page_top: Initial markup from any modules that have altered the
- *   page. This variable should always be output first, before all other dynamic
- *   content.
- * - $page: The rendered page content.
- * - $page_bottom: Final closing markup from any modules that have altered the
- *   page. This variable should always be output last, after all other dynamic
- *   content.
- * - $classes String of classes that can be used to style contextually through
- *   CSS.
- *
- * @see template_preprocess()
- * @see template_preprocess_html()
- * @see template_process()
- *
- * @ingroup themeable
- */
-?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN"
-  "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php print $language->language; ?>" version="XHTML+RDFa 1.0" dir="<?php print $language->dir; ?>"<?php print $rdf_namespaces; ?>>
-
-<head profile="<?php print $grddl_profile; ?>">
-  <?php print $head; ?>
-  <title><?php print $head_title; ?></title>
-  <?php print $styles; ?>
-  <?php print $scripts; ?>
-</head>
-<body class="<?php print $classes; ?>" <?php print $attributes;?>>
-  <div id="skip-link">
-    <a href="#main-content" class="element-invisible element-focusable"><?php print t('Skip to main content'); ?></a>
-  </div>
-  <?php print $page_top; ?>
-  <?php print $page; ?>
-  <?php print $page_bottom; ?>
-</body>
-</html>
diff --git a/modules/system/maintenance-page.tpl.php b/modules/system/maintenance-page.tpl.php
deleted file mode 100644
index 69d267f..0000000
--- a/modules/system/maintenance-page.tpl.php
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to display a single Drupal page while offline.
- *
- * All the available variables are mirrored in html.tpl.php and page.tpl.php.
- * Some may be blank but they are provided for consistency.
- *
- * @see template_preprocess()
- * @see template_preprocess_maintenance_page()
- *
- * @ingroup themeable
- */
-?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php print $language->language ?>" lang="<?php print $language->language ?>" dir="<?php print $language->dir ?>">
-
-<head>
-  <title><?php print $head_title; ?></title>
-  <?php print $head; ?>
-  <?php print $styles; ?>
-  <?php print $scripts; ?>
-</head>
-<body class="<?php print $classes; ?>">
-  <div id="page">
-    <div id="header">
-      <div id="logo-title">
-
-        <?php if (!empty($logo)): ?>
-          <a href="<?php print $base_path; ?>" title="<?php print t('Home'); ?>" rel="home" id="logo">
-            <img src="<?php print $logo; ?>" alt="<?php print t('Home'); ?>" />
-          </a>
-        <?php endif; ?>
-
-        <div id="name-and-slogan">
-          <?php if (!empty($site_name)): ?>
-            <h1 id="site-name">
-              <a href="<?php print $base_path ?>" title="<?php print t('Home'); ?>" rel="home"><span><?php print $site_name; ?></span></a>
-            </h1>
-          <?php endif; ?>
-
-          <?php if (!empty($site_slogan)): ?>
-            <div id="site-slogan"><?php print $site_slogan; ?></div>
-          <?php endif; ?>
-        </div> <!-- /name-and-slogan -->
-      </div> <!-- /logo-title -->
-
-      <?php if (!empty($header)): ?>
-        <div id="header-region">
-          <?php print $header; ?>
-        </div>
-      <?php endif; ?>
-
-    </div> <!-- /header -->
-
-    <div id="container" class="clearfix">
-
-      <?php if (!empty($sidebar_first)): ?>
-        <div id="sidebar-first" class="column sidebar">
-          <?php print $sidebar_first; ?>
-        </div> <!-- /sidebar-first -->
-      <?php endif; ?>
-
-      <div id="main" class="column"><div id="main-squeeze">
-
-        <div id="content">
-          <?php if (!empty($title)): ?><h1 class="title" id="page-title"><?php print $title; ?></h1><?php endif; ?>
-          <?php if (!empty($messages)): print $messages; endif; ?>
-          <div id="content-content" class="clearfix">
-            <?php print $content; ?>
-          </div> <!-- /content-content -->
-        </div> <!-- /content -->
-
-      </div></div> <!-- /main-squeeze /main -->
-
-      <?php if (!empty($sidebar_second)): ?>
-        <div id="sidebar-second" class="column sidebar">
-          <?php print $sidebar_second; ?>
-        </div> <!-- /sidebar-second -->
-      <?php endif; ?>
-
-    </div> <!-- /container -->
-
-    <div id="footer-wrapper">
-      <div id="footer">
-        <?php if (!empty($footer)): print $footer; endif; ?>
-      </div> <!-- /footer -->
-    </div> <!-- /footer-wrapper -->
-
-  </div> <!-- /page -->
-
-</body>
-</html>
diff --git a/modules/system/page.tpl.php b/modules/system/page.tpl.php
deleted file mode 100644
index bd61489..0000000
--- a/modules/system/page.tpl.php
+++ /dev/null
@@ -1,156 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to display a single Drupal page.
- *
- * The doctype, html, head and body tags are not in this template. Instead they
- * can be found in the html.tpl.php template in this directory.
- *
- * Available variables:
- *
- * General utility variables:
- * - $base_path: The base URL path of the Drupal installation. At the very
- *   least, this will always default to /.
- * - $directory: The directory the template is located in, e.g. modules/system
- *   or themes/bartik.
- * - $is_front: TRUE if the current page is the front page.
- * - $logged_in: TRUE if the user is registered and signed in.
- * - $is_admin: TRUE if the user has permission to access administration pages.
- *
- * Site identity:
- * - $front_page: The URL of the front page. Use this instead of $base_path,
- *   when linking to the front page. This includes the language domain or
- *   prefix.
- * - $logo: The path to the logo image, as defined in theme configuration.
- * - $site_name: The name of the site, empty when display has been disabled
- *   in theme settings.
- * - $site_slogan: The slogan of the site, empty when display has been disabled
- *   in theme settings.
- *
- * Navigation:
- * - $main_menu (array): An array containing the Main menu links for the
- *   site, if they have been configured.
- * - $secondary_menu (array): An array containing the Secondary menu links for
- *   the site, if they have been configured.
- * - $breadcrumb: The breadcrumb trail for the current page.
- *
- * Page content (in order of occurrence in the default page.tpl.php):
- * - $title_prefix (array): An array containing additional output populated by
- *   modules, intended to be displayed in front of the main title tag that
- *   appears in the template.
- * - $title: The page title, for use in the actual HTML content.
- * - $title_suffix (array): An array containing additional output populated by
- *   modules, intended to be displayed after the main title tag that appears in
- *   the template.
- * - $messages: HTML for status and error messages. Should be displayed
- *   prominently.
- * - $tabs (array): Tabs linking to any sub-pages beneath the current page
- *   (e.g., the view and edit tabs when displaying a node).
- * - $action_links (array): Actions local to the page, such as 'Add menu' on the
- *   menu administration interface.
- * - $feed_icons: A string of all feed icons for the current page.
- * - $node: The node object, if there is an automatically-loaded node
- *   associated with the page, and the node ID is the second argument
- *   in the page's path (e.g. node/12345 and node/12345/revisions, but not
- *   comment/reply/12345).
- *
- * Regions:
- * - $page['help']: Dynamic help text, mostly for admin pages.
- * - $page['highlighted']: Items for the highlighted content region.
- * - $page['content']: The main content of the current page.
- * - $page['sidebar_first']: Items for the first sidebar.
- * - $page['sidebar_second']: Items for the second sidebar.
- * - $page['header']: Items for the header region.
- * - $page['footer']: Items for the footer region.
- *
- * @see template_preprocess()
- * @see template_preprocess_page()
- * @see template_process()
- * @see html.tpl.php
- *
- * @ingroup themeable
- */
-?>
-
-  <div id="page-wrapper"><div id="page">
-
-    <div id="header"><div class="section clearfix">
-
-      <?php if ($logo): ?>
-        <a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home" id="logo">
-          <img src="<?php print $logo; ?>" alt="<?php print t('Home'); ?>" />
-        </a>
-      <?php endif; ?>
-
-      <?php if ($site_name || $site_slogan): ?>
-        <div id="name-and-slogan">
-          <?php if ($site_name): ?>
-            <?php if ($title): ?>
-              <div id="site-name"><strong>
-                <a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home"><span><?php print $site_name; ?></span></a>
-              </strong></div>
-            <?php else: /* Use h1 when the content title is empty */ ?>
-              <h1 id="site-name">
-                <a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home"><span><?php print $site_name; ?></span></a>
-              </h1>
-            <?php endif; ?>
-          <?php endif; ?>
-
-          <?php if ($site_slogan): ?>
-            <div id="site-slogan"><?php print $site_slogan; ?></div>
-          <?php endif; ?>
-        </div> <!-- /#name-and-slogan -->
-      <?php endif; ?>
-
-      <?php print render($page['header']); ?>
-
-    </div></div> <!-- /.section, /#header -->
-
-    <?php if ($main_menu || $secondary_menu): ?>
-      <div id="navigation"><div class="section">
-        <?php print theme('links__system_main_menu', array('links' => $main_menu, 'attributes' => array('id' => 'main-menu', 'class' => array('links', 'inline', 'clearfix')), 'heading' => t('Main menu'))); ?>
-        <?php print theme('links__system_secondary_menu', array('links' => $secondary_menu, 'attributes' => array('id' => 'secondary-menu', 'class' => array('links', 'inline', 'clearfix')), 'heading' => t('Secondary menu'))); ?>
-      </div></div> <!-- /.section, /#navigation -->
-    <?php endif; ?>
-
-    <?php if ($breadcrumb): ?>
-      <div id="breadcrumb"><?php print $breadcrumb; ?></div>
-    <?php endif; ?>
-
-    <?php print $messages; ?>
-
-    <div id="main-wrapper"><div id="main" class="clearfix">
-
-      <div id="content" class="column"><div class="section">
-        <?php if ($page['highlighted']): ?><div id="highlighted"><?php print render($page['highlighted']); ?></div><?php endif; ?>
-        <a id="main-content"></a>
-        <?php print render($title_prefix); ?>
-        <?php if ($title): ?><h1 class="title" id="page-title"><?php print $title; ?></h1><?php endif; ?>
-        <?php print render($title_suffix); ?>
-        <?php if ($tabs): ?><div class="tabs"><?php print render($tabs); ?></div><?php endif; ?>
-        <?php print render($page['help']); ?>
-        <?php if ($action_links): ?><ul class="action-links"><?php print render($action_links); ?></ul><?php endif; ?>
-        <?php print render($page['content']); ?>
-        <?php print $feed_icons; ?>
-      </div></div> <!-- /.section, /#content -->
-
-      <?php if ($page['sidebar_first']): ?>
-        <div id="sidebar-first" class="column sidebar"><div class="section">
-          <?php print render($page['sidebar_first']); ?>
-        </div></div> <!-- /.section, /#sidebar-first -->
-      <?php endif; ?>
-
-      <?php if ($page['sidebar_second']): ?>
-        <div id="sidebar-second" class="column sidebar"><div class="section">
-          <?php print render($page['sidebar_second']); ?>
-        </div></div> <!-- /.section, /#sidebar-second -->
-      <?php endif; ?>
-
-    </div></div> <!-- /#main, /#main-wrapper -->
-
-    <div id="footer"><div class="section">
-      <?php print render($page['footer']); ?>
-    </div></div> <!-- /.section, /#footer -->
-
-  </div></div> <!-- /#page, /#page-wrapper -->
diff --git a/modules/system/region.tpl.php b/modules/system/region.tpl.php
deleted file mode 100644
index deb8d3a..0000000
--- a/modules/system/region.tpl.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to display a region.
- *
- * Available variables:
- * - $content: The content for this region, typically blocks.
- * - $classes: String of classes that can be used to style contextually through
- *   CSS. It can be manipulated through the variable $classes_array from
- *   preprocess functions. The default values can be one or more of the following:
- *   - region: The current template type, i.e., "theming hook".
- *   - region-[name]: The name of the region with underscores replaced with
- *     dashes. For example, the page_top region would have a region-page-top class.
- * - $region: The name of the region variable as defined in the theme's .info file.
- *
- * Helper variables:
- * - $classes_array: Array of html class attribute values. It is flattened
- *   into a string within the variable $classes.
- * - $is_admin: Flags true when the current user is an administrator.
- * - $is_front: Flags true when presented in the front page.
- * - $logged_in: Flags true when the current user is a logged-in member.
- *
- * @see template_preprocess()
- * @see template_preprocess_region()
- * @see template_process()
- *
- * @ingroup themeable
- */
-?>
-<?php if ($content): ?>
-  <div class="<?php print $classes; ?>">
-    <?php print $content; ?>
-  </div>
-<?php endif; ?>
diff --git a/modules/system/system.admin-rtl.css b/modules/system/system.admin-rtl.css
deleted file mode 100644
index 362a406..0000000
--- a/modules/system/system.admin-rtl.css
+++ /dev/null
@@ -1,86 +0,0 @@
-
-/**
- * @file
- * RTL styles for administration pages.
- */
-
-/**
- * Administration blocks.
- */
-div.admin-panel .body {
-  padding: 0 8px 2px 4px;
-}
-div.admin .left {
-  float: right;
-  margin-left: 0;
-  margin-right: 1em;
-}
-div.admin .right {
-  float: left;
-  margin-left: 1em;
-  margin-right: 0;
-}
-div.admin .expert-link {
-  margin-right: 0;
-  margin-left: 1em;
-  padding-right: 0;
-  padding-left: 4px;
-  text-align: left;
-}
-
-/**
- * Status report.
- */
-table.system-status-report td.status-icon {
-  padding-left: 0;
-  padding-right: 6px;
-}
-table.system-status-report tr.merge-up td {
-  padding: 0 28px 8px 6px;
-}
-
-/**
- * Appearance page.
- */
-table.screenshot {
-  margin-left: 1em;
-}
-.system-themes-list-enabled .theme-selector .screenshot,
-.system-themes-list-enabled .theme-selector .no-screenshot {
-  float: right;
-  margin: 0 0 0 20px;
-}
-.system-themes-list-disabled .theme-selector {
-  float: right;
-  padding: 20px 0 20px 20px;
-}
-.theme-selector .operations li {
-  border-right: none;
-  border-left: 1px solid #cdcdcd;
-  float: right;
-}
-.theme-selector .operations li.last {
-  border-left: none;
-  padding: 0 0.7em 0 0;
-}
-.theme-selector .operations li.first {
-  padding: 0 0 0 0.7em;
-}
-
-/**
- * Exposed filters.
- */
-.exposed-filters .filters {
-  float: right;
-  margin-left: 1em;
-  margin-right: 0;
-}
-.exposed-filters .form-item label {
-  float: right;
-}
-/* Current filters */
-.exposed-filters .additional-filters {
-  float: right;
-  margin-left: 1em;
-  margin-right: 0;
-}
diff --git a/modules/system/system.admin.css b/modules/system/system.admin.css
deleted file mode 100644
index 43340b5..0000000
--- a/modules/system/system.admin.css
+++ /dev/null
@@ -1,271 +0,0 @@
-
-/**
- * @file
- * Styles for administration pages.
- */
-
-/**
- * Administration blocks.
- */
-div.admin-panel {
-  margin: 0;
-  padding: 5px 5px 15px 5px;
-}
-div.admin-panel .description {
-  margin: 0 0 3px;
-  padding: 2px 0 3px 0;
-}
-div.admin-panel .body {
-  padding: 0 4px 2px 8px; /* LTR */
-}
-div.admin {
-  padding-top: 15px;
-}
-div.admin .left {
-  float: left; /* LTR */
-  width: 47%;
-  margin-left: 1em; /* LTR */
-}
-div.admin .right {
-  float: right; /* LTR */
-  width: 47%;
-  margin-right: 1em; /* LTR */
-}
-div.admin .expert-link {
-  text-align: right; /* LTR */
-  margin-right: 1em; /* LTR */
-  padding-right: 4px; /* LTR */
-}
-
-/**
- * Markup generated by theme_system_compact_link().
- */
-.compact-link {
-  margin: 0 0 0.5em 0;
-}
-
-/**
- * Quick inline admin links.
- */
-small .admin-link:before {
-  content: '[';
-}
-small .admin-link:after {
-  content: ']';
-}
-
-/**
- * Modules page.
- */
-#system-modules div.incompatible {
-  font-weight: bold;
-}
-div.admin-requirements,
-div.admin-required {
-  font-size: 0.9em;
-  color: #444;
-}
-span.admin-disabled {
-  color: #800;
-}
-span.admin-enabled {
-  color: #080;
-}
-span.admin-missing {
-  color: #f00;
-}
-a.module-link {
-  display: block;
-  padding: 1px 0 1px 20px; /* LTR */
-  white-space: nowrap;
-}
-a.module-link-help {
-  background: url(../../misc/help.png) 0 50% no-repeat; /* LTR */
-}
-a.module-link-permissions {
-  background: url(../../misc/permissions.png) 0 50% no-repeat; /* LTR */
-}
-a.module-link-configure {
-  background: url(../../misc/configure.png) 0 50% no-repeat; /* LTR */
-}
-.module-help {
-  margin-left: 1em; /* LTR */
-  float: right; /* LTR */
-}
-
-/**
- * Status report.
- */
-table.system-status-report td {
-  padding: 6px;
-  vertical-align: middle;
-}
-table.system-status-report tr.merge-up td {
-  padding: 0 6px 8px 28px; /* LTR */
-}
-table.system-status-report td.status-icon {
-  width: 16px;
-  padding-right: 0; /* LTR */
-}
-table.system-status-report td.status-icon div {
-  background-repeat: no-repeat;
-  height: 16px;
-  width: 16px;
-}
-table.system-status-report tr.error td.status-icon div {
-  background-image: url(../../misc/message-16-error.png);
-}
-table.system-status-report tr.warning td.status-icon div {
-  background-image: url(../../misc/message-16-warning.png);
-}
-tr.merge-down,
-tr.merge-down td {
-  border-bottom-width: 0 !important;
-}
-tr.merge-up,
-tr.merge-up td {
-  border-top-width: 0 !important;
-}
-
-/**
- * Theme settings.
- */
-.theme-settings-left {
-  float: left;
-  width: 49%;
-}
-.theme-settings-right {
-  float: right;
-  width: 49%;
-}
-.theme-settings-bottom {
-  clear: both;
-}
-
-/**
- * Appearance page.
- */
-table.screenshot {
-  margin-right: 1em; /* LTR */
-}
-.theme-info h2 {
-  margin-bottom: 0;
-}
-.theme-info p {
-  margin-top: 0;
-}
-.system-themes-list {
-  margin-bottom: 20px;
-}
-.system-themes-list-disabled {
-  border-top: 1px solid #cdcdcd;
-  padding-top: 20px;
-}
-.system-themes-list h2 {
-  margin: 0;
-}
-.theme-selector {
-  padding-top: 20px;
-}
-.theme-selector .screenshot,
-.theme-selector .no-screenshot {
-  border: 1px solid #e0e0d8;
-  padding: 2px;
-  vertical-align: bottom;
-  width: 294px;
-  height: 219px;
-  line-height: 219px;
-  text-align: center;
-}
-.theme-default .screenshot {
-  border: 1px solid #aaa;
-}
-.system-themes-list-enabled .theme-selector .screenshot,
-.system-themes-list-enabled .theme-selector .no-screenshot {
-  float: left; /* LTR */
-  margin: 0 20px 0 0; /* LTR */
-}
-.system-themes-list-disabled .theme-selector .screenshot,
-.system-themes-list-disabled .theme-selector .no-screenshot {
-  width: 194px;
-  height: 144px;
-  line-height: 144px;
-}
-.theme-selector h3 {
-  font-weight: normal;
-}
-.theme-default h3 {
-  font-weight: bold;
-}
-.system-themes-list-enabled .theme-selector h3 {
-  margin-top: 0;
-}
-.system-themes-list-disabled .theme-selector {
-  width: 300px;
-  float: left; /* LTR */
-  padding: 20px 20px 20px 0; /* LTR */
-}
-.system-themes-list-enabled .theme-info {
-  max-width: 940px;
-}
-.system-themes-list-disabled .theme-info {
-  min-height: 170px;
-}
-.theme-selector .incompatible {
-  margin-top: 10px;
-  font-weight: bold;
-}
-.theme-selector .operations {
-  margin: 10px 0 0 0;
-  padding: 0;
-}
-.theme-selector .operations li {
-  float: left; /* LTR */
-  margin: 0;
-  padding: 0 0.7em;
-  list-style-type: none;
-  border-right: 1px solid #cdcdcd;  /* LTR */
-}
-.theme-selector .operations li.last {
-  padding: 0 0 0 0.7em; /* LTR */
-  border-right: none; /* LTR */
-}
-.theme-selector .operations li.first {
-  padding: 0 0.7em 0 0; /* LTR */
-}
-#system-themes-admin-form {
-  clear: left;
-}
-
-/**
- * Exposed filters.
- */
-.exposed-filters .filters {
-  float: left; /* LTR */
-  margin-right: 1em; /* LTR */
-  width: 25em; /* IE6 */
-}
-.exposed-filters .form-item {
-  margin: 0 0 0.1em 0;
-  padding: 0;
-}
-.exposed-filters .form-item label {
-  float: left; /* LTR */
-  font-weight: normal;
-  width: 10em;
-}
-.exposed-filters .form-select {
-  width: 14em;
-}
-/* Current filters */
-.exposed-filters .current-filters {
-  margin-bottom: 1em;
-}
-.exposed-filters .current-filters .placeholder {
-  font-style: normal;
-  font-weight: bold;
-}
-.exposed-filters .additional-filters {
-  float: left; /* LTR */
-  margin-right: 1em; /* LTR */
-}
diff --git a/modules/system/system.archiver.inc b/modules/system/system.archiver.inc
deleted file mode 100644
index c37f07d..0000000
--- a/modules/system/system.archiver.inc
+++ /dev/null
@@ -1,139 +0,0 @@
-<?php
-
-/**
- * @file
- * Archiver implementations provided by the system module.
- */
-
-/**
- * Archiver for .tar files.
- */
-class ArchiverTar implements ArchiverInterface {
-
-  /**
-   * The underlying Archive_Tar instance that does the heavy lifting.
-   *
-   * @var Archive_Tar
-   */
-  protected $tar;
-
-  public function __construct($file_path) {
-    $this->tar = new Archive_Tar($file_path);
-  }
-
-  public function add($file_path) {
-    $this->tar->add($file_path);
-
-    return $this;
-  }
-
-  public function remove($file_path) {
-    // @todo Archive_Tar doesn't have a remove operation
-    // so we'll have to simulate it somehow, probably by
-    // creating a new archive with everything but the removed
-    // file.
-
-    return $this;
-  }
-
-  public function extract($path, Array $files = array()) {
-    if ($files) {
-      $this->tar->extractList($files, $path);
-    }
-    else {
-      $this->tar->extract($path);
-    }
-
-    return $this;
-  }
-
-  public function listContents() {
-    $files = array();
-    foreach ($this->tar->listContent() as $file_data) {
-      $files[] = $file_data['filename'];
-    }
-    return $files;
-  }
-
-  /**
-   * Retrieve the tar engine itself.
-   *
-   * In some cases it may be necessary to directly access the underlying
-   * Archive_Tar object for implementation-specific logic. This is for advanced
-   * use only as it is not shared by other implementations of ArchiveInterface.
-   *
-   * @return
-   *   The Archive_Tar object used by this object.
-   */
-  public function getArchive() {
-    return $this->tar;
-  }
-}
-
-/**
- * Archiver for .zip files.
- *
- * @link http://php.net/zip
- */
-class ArchiverZip implements ArchiverInterface {
-
-  /**
-   * The underlying ZipArchive instance that does the heavy lifting.
-   *
-   * @var ZipArchive
-   */
-  protected $zip;
-
-  public function __construct($file_path) {
-    $this->zip = new ZipArchive();
-    if ($this->zip->open($file_path) !== TRUE) {
-      // @todo: This should be an interface-specific exception some day.
-      throw new Exception(t('Cannot open %file_path', array('%file_path' => $file_path)));
-    }
-  }
-
-  public function add($file_path) {
-    $this->zip->addFile($file_path);
-
-    return $this;
-  }
-
-  public function remove($file_path) {
-    $this->zip->deleteName($file_path);
-
-    return $this;
-  }
-
-  public function extract($path, Array $files = array()) {
-    if ($files) {
-      $this->zip->extractTo($path, $files);
-    }
-    else {
-      $this->zip->extractTo($path);
-    }
-
-    return $this;
-  }
-
-  public function listContents() {
-    $files = array();
-    for ($i=0; $i < $this->zip->numFiles; $i++) {
-      $files[] = $this->zip->getNameIndex($i);
-    }
-    return $files;
-  }
-
-  /**
-   * Retrieve the zip engine itself.
-   *
-   * In some cases it may be necessary to directly access the underlying
-   * ZipArchive object for implementation-specific logic. This is for advanced
-   * use only as it is not shared by other implementations of ArchiveInterface.
-   *
-   * @return
-   *   The ZipArchive object used by this object.
-   */
-  public function getArchive() {
-    return $this->zip;
-  }
-}
diff --git a/modules/system/system.base-rtl.css b/modules/system/system.base-rtl.css
deleted file mode 100644
index 075cafe..0000000
--- a/modules/system/system.base-rtl.css
+++ /dev/null
@@ -1,58 +0,0 @@
-
-/**
- * @file
- * Generic theme-independent base styles.
- */
-
-/**
- * Autocomplete.
- */
-/* Animated throbber */
-html.js input.form-autocomplete {
-  background-position: 0% 2px;
-}
-html.js input.throbbing {
-  background-position: 0% -18px;
-}
-
-/**
- * Progress bar.
- */
-.progress .percentage {
-  float: left;
-}
-.progress-disabled {
-  float: right;
-}
-.ajax-progress {
-  float: right;
-}
-.ajax-progress .throbber {
-  float: right;
-}
-
-/**
- * TableDrag behavior.
- */
-.draggable a.tabledrag-handle {
-  float: right;
-  margin-right: -1em;
-  margin-left: 0;
-}
-a.tabledrag-handle .handle {
-  margin: -0.4em 0.5em;
-  padding: 0.42em 0.5em;
-}
-div.indentation {
-  float: right;
-  margin: -0.4em -0.4em -0.4em 0.2em;
-  padding: 0.42em 0.6em 0.42em 0;
-}
-div.tree-child,
-div.tree-child-last {
-  background-position: -65px center;
-}
-.tabledrag-toggle-weight-wrapper {
-  text-align: left;
-}
-
diff --git a/modules/system/system.base.css b/modules/system/system.base.css
deleted file mode 100644
index 412b18a..0000000
--- a/modules/system/system.base.css
+++ /dev/null
@@ -1,270 +0,0 @@
-
-/**
- * @file
- * Generic theme-independent base styles.
- */
-
-/**
- * Autocomplete.
- *
- * @see autocomplete.js
- */
-/* Suggestion list */
-#autocomplete {
-  border: 1px solid;
-  overflow: hidden;
-  position: absolute;
-  z-index: 100;
-}
-#autocomplete ul {
-  list-style: none;
-  list-style-image: none;
-  margin: 0;
-  padding: 0;
-}
-#autocomplete li {
-  background: #fff;
-  color: #000;
-  cursor: default;
-  white-space: pre;
-  zoom: 1; /* IE7 */
-}
-/* Animated throbber */
-html.js input.form-autocomplete {
-  background-image: url(../../misc/throbber.gif);
-  background-position: 100% 2px; /* LTR */
-  background-repeat: no-repeat;
-}
-html.js input.throbbing {
-  background-position: 100% -18px; /* LTR */
-}
-
-/**
- * Collapsible fieldsets.
- *
- * @see collapse.js
- */
-html.js fieldset.collapsed {
-  border-bottom-width: 0;
-  border-left-width: 0;
-  border-right-width: 0;
-  height: 1em;
-}
-html.js fieldset.collapsed .fieldset-wrapper {
-  display: none;
-}
-fieldset.collapsible {
-  position: relative;
-}
-fieldset.collapsible .fieldset-legend {
-  display: block;
-}
-
-/**
- * Resizable textareas.
- *
- * @see textarea.js
- */
-.form-textarea-wrapper textarea {
-  display: block;
-  margin: 0;
-  width: 100%;
-  -moz-box-sizing: border-box;
-  -webkit-box-sizing: border-box;
-  box-sizing: border-box;
-}
-.resizable-textarea .grippie {
-  background: #eee url(../../misc/grippie.png) no-repeat center 2px;
-  border: 1px solid #ddd;
-  border-top-width: 0;
-  cursor: s-resize;
-  height: 9px;
-  overflow: hidden;
-}
-
-/**
- * TableDrag behavior.
- *
- * @see tabledrag.js
- */
-body.drag {
-  cursor: move;
-}
-.draggable a.tabledrag-handle {
-  cursor: move;
-  float: left; /* LTR */
-  height: 1.7em;
-  margin-left: -1em; /* LTR */
-  overflow: hidden;
-  text-decoration: none;
-}
-a.tabledrag-handle:hover {
-  text-decoration: none;
-}
-a.tabledrag-handle .handle {
-  background: url(../../misc/draggable.png) no-repeat 6px 9px;
-  height: 13px;
-  margin: -0.4em 0.5em; /* LTR */
-  padding: 0.42em 0.5em; /* LTR */
-  width: 13px;
-}
-a.tabledrag-handle-hover .handle {
-  background-position: 6px -11px;
-}
-div.indentation {
-  float: left; /* LTR */
-  height: 1.7em;
-  margin: -0.4em 0.2em -0.4em -0.4em; /* LTR */
-  padding: 0.42em 0 0.42em 0.6em; /* LTR */
-  width: 20px;
-}
-div.tree-child {
-  background: url(../../misc/tree.png) no-repeat 11px center; /* LTR */
-}
-div.tree-child-last {
-  background: url(../../misc/tree-bottom.png) no-repeat 11px center; /* LTR */
-}
-div.tree-child-horizontal {
-  background: url(../../misc/tree.png) no-repeat -11px center;
-}
-.tabledrag-toggle-weight-wrapper {
-  text-align: right; /* LTR */
-}
-
-/**
- * TableHeader behavior.
- *
- * @see tableheader.js
- */
-table.sticky-header {
-  background-color: #fff;
-  margin-top: 0;
-}
-
-/**
- * Progress behavior.
- *
- * @see progress.js
- */
-/* Bar */
-.progress .bar {
-  background-color: #fff;
-  border: 1px solid;
-}
-.progress .filled {
-  background-color: #000;
-  height: 1.5em;
-  width: 5px;
-}
-.progress .percentage {
-  float: right; /* LTR */
-}
-/* Throbber */
-.ajax-progress {
-  display: inline-block;
-}
-.ajax-progress .throbber {
-  background: transparent url(../../misc/throbber.gif) no-repeat 0px -18px;
-  float: left; /* LTR */
-  height: 15px;
-  margin: 2px;
-  width: 15px;
-}
-.ajax-progress .message {
-  padding-left: 20px;
-}
-tr .ajax-progress .throbber {
-  margin: 0 2px;
-}
-.ajax-progress-bar {
-  width: 16em;
-}
-
-/**
- * Inline items.
- */
-.container-inline div,
-.container-inline label {
-  display: inline;
-}
-/* Fieldset contents always need to be rendered as block. */
-.container-inline .fieldset-wrapper {
-  display: block;
-}
-
-/**
- * Prevent text wrapping.
- */
-.nowrap {
-  white-space: nowrap;
-}
-
-/**
- * For anything you want to hide on page load when JS is enabled, so
- * that you can use the JS to control visibility and avoid flicker.
- */
-html.js .js-hide {
-  display: none;
-}
-
-/**
- * Hide elements from all users.
- *
- * Used for elements which should not be immediately displayed to any user. An
- * example would be a collapsible fieldset that will be expanded with a click
- * from a user. The effect of this class can be toggled with the jQuery show()
- * and hide() functions.
- */
-.element-hidden {
-  display: none;
-}
-
-/**
- * Hide elements visually, but keep them available for screen-readers.
- *
- * Used for information required for screen-reader users to understand and use
- * the site where visual display is undesirable. Information provided in this
- * manner should be kept concise, to avoid unnecessary burden on the user.
- * "!important" is used to prevent unintentional overrides.
- */
-.element-invisible {
-  position: absolute !important;
-  clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
-  clip: rect(1px, 1px, 1px, 1px);
-  overflow: hidden;
-  height: 1px;
-}
-
-/**
- * The .element-focusable class extends the .element-invisible class to allow
- * the element to be focusable when navigated to via the keyboard.
- */
-.element-invisible.element-focusable:active,
-.element-invisible.element-focusable:focus {
-  position: static !important;
-  clip: auto;
-  overflow: visible;
-  height: auto;
-}
-
-/**
- * Markup free clearing.
- *
- * @see http://perishablepress.com/press/2009/12/06/new-clearfix-hack
- */
-.clearfix:after {
-  content: ".";
-  display: block;
-  height: 0;
-  clear: both;
-  visibility: hidden;
-}
-/* IE6 */
-* html .clearfix {
-  height: 1%;
-}
-/* IE7 */
-*:first-child + html .clearfix {
-  min-height: 1%;
-}
-
diff --git a/modules/system/system.cron.js b/modules/system/system.cron.js
deleted file mode 100644
index af17dab..0000000
--- a/modules/system/system.cron.js
+++ /dev/null
@@ -1,19 +0,0 @@
-(function ($) {
-
-/**
- * Checks to see if the cron should be automatically run.
- */
-Drupal.behaviors.cronCheck = {
-  attach: function(context, settings) {
-    if (settings.cronCheck || false) {
-      $('body').once('cron-check', function() {
-        // Only execute the cron check if its the right time.
-        if (Math.round(new Date().getTime() / 1000.0) > settings.cronCheck) {
-          $.get(settings.basePath + 'system/run-cron-check');
-        }
-      });
-    }
-  }
-};
-
-})(jQuery);
diff --git a/modules/system/system.info b/modules/system/system.info
deleted file mode 100644
index 28abf66..0000000
--- a/modules/system/system.info
+++ /dev/null
@@ -1,13 +0,0 @@
-name = System
-description = Handles general site configuration for administrators.
-package = Core
-version = VERSION
-core = 7.x
-files[] = system.archiver.inc
-files[] = system.mail.inc
-files[] = system.queue.inc
-files[] = system.tar.inc
-files[] = system.updater.inc
-files[] = system.test
-required = TRUE
-configure = admin/config/system
diff --git a/modules/system/system.js b/modules/system/system.js
deleted file mode 100644
index 910fb5d..0000000
--- a/modules/system/system.js
+++ /dev/null
@@ -1,140 +0,0 @@
-(function ($) {
-
-/**
- * Show/hide the 'Email site administrator when updates are available' checkbox
- * on the install page.
- */
-Drupal.hideEmailAdministratorCheckbox = function () {
-  // Make sure the secondary box is shown / hidden as necessary on page load.
-  if ($('#edit-update-status-module-1').is(':checked')) {
-    $('.form-item-update-status-module-2').show();
-  }
-  else {
-    $('.form-item-update-status-module-2').hide();
-  }
-
-  // Toggle the display as necessary when the checkbox is clicked.
-  $('#edit-update-status-module-1').change( function () {
-    $('.form-item-update-status-module-2').toggle();
-  });
-};
-
-/**
- * Internal function to check using Ajax if clean URLs can be enabled on the
- * settings page.
- *
- * This function is not used to verify whether or not clean URLs
- * are currently enabled.
- */
-Drupal.behaviors.cleanURLsSettingsCheck = {
-  attach: function (context, settings) {
-    // This behavior attaches by ID, so is only valid once on a page.
-    // Also skip if we are on an install page, as Drupal.cleanURLsInstallCheck will handle
-    // the processing.
-    if (!($('#edit-clean-url').length) || $('#edit-clean-url.install').once('clean-url').length) {
-      return;
-    }
-    var url = settings.basePath + 'admin/config/search/clean-urls/check';
-    $.ajax({
-      url: location.protocol + '//' + location.host + url,
-      dataType: 'json',
-      success: function () {
-        // Check was successful. Redirect using a "clean URL". This will force the form that allows enabling clean URLs.
-        location = settings.basePath +"admin/config/search/clean-urls";
-      }
-    });
-  }
-};
-
-/**
- * Internal function to check using Ajax if clean URLs can be enabled on the
- * install page.
- *
- * This function is not used to verify whether or not clean URLs
- * are currently enabled.
- */
-Drupal.cleanURLsInstallCheck = function () {
-  var url = location.protocol + '//' + location.host + Drupal.settings.basePath + 'admin/config/search/clean-urls/check';
-  // Submit a synchronous request to avoid database errors associated with
-  // concurrent requests during install.
-  $.ajax({
-    async: false,
-    url: url,
-    dataType: 'json',
-    success: function () {
-      // Check was successful.
-      $('#edit-clean-url').attr('value', 1);
-    }
-  });
-};
-
-/**
- * When a field is filled out, apply its value to other fields that will likely
- * use the same value. In the installer this is used to populate the
- * administrator e-mail address with the same value as the site e-mail address.
- */
-Drupal.behaviors.copyFieldValue = {
-  attach: function (context, settings) {
-    for (var sourceId in settings.copyFieldValue) {
-      $('#' + sourceId, context).once('copy-field-values').bind('blur', function () {
-        // Get the list of target fields.
-        var targetIds = settings.copyFieldValue[sourceId];
-        // Add the behavior to update target fields on blur of the primary field.
-        for (var delta in targetIds) {
-          var targetField = $('#' + targetIds[delta]);
-          if (targetField.val() == '') {
-            targetField.val(this.value);
-          }
-        }
-      });
-    }
-  }
-};
-
-/**
- * Show/hide custom format sections on the regional settings page.
- */
-Drupal.behaviors.dateTime = {
-  attach: function (context, settings) {
-    for (var fieldName in settings.dateTime) {
-      if (settings.dateTime.hasOwnProperty(fieldName)) {
-        (function (fieldSettings, fieldName) {
-          var source = '#edit-' + fieldName;
-          var suffix = source + '-suffix';
-
-          // Attach keyup handler to custom format inputs.
-          $('input' + source, context).once('date-time').keyup(function () {
-            var input = $(this);
-            var url = fieldSettings.lookup + (/\?q=/.test(fieldSettings.lookup) ? '&format=' : '?format=') + encodeURIComponent(input.val());
-            $.getJSON(url, function (data) {
-              $(suffix).empty().append(' ' + fieldSettings.text + ': <em>' + data + '</em>');
-            });
-          });
-        })(settings.dateTime[fieldName], fieldName);
-      }
-    }
-  }
-};
-
- /**
- * Show/hide settings for page caching depending on whether page caching is
- * enabled or not.
- */
-Drupal.behaviors.pageCache = {
-  attach: function (context, settings) {
-    $('#edit-cache-0', context).change(function () {
-      $('#page-compression-wrapper').hide();
-      $('#cache-error').hide();
-    });
-    $('#edit-cache-1', context).change(function () {
-      $('#page-compression-wrapper').show();
-      $('#cache-error').hide();
-    });
-    $('#edit-cache-2', context).change(function () {
-      $('#page-compression-wrapper').show();
-      $('#cache-error').show();
-    });
-  }
-};
-
-})(jQuery);
diff --git a/modules/system/system.maintenance.css b/modules/system/system.maintenance.css
deleted file mode 100644
index 5543c2d..0000000
--- a/modules/system/system.maintenance.css
+++ /dev/null
@@ -1,55 +0,0 @@
-
-/**
- * Update styles
- */
-#update-results {
-  margin-top: 3em;
-  padding: 0.25em;
-  border: 1px solid #ccc;
-  background: #eee;
-  font-size: smaller;
-}
-#update-results h2 {
-  margin-top: 0.25em;
-}
-#update-results h4 {
-  margin-bottom: 0.25em;
-}
-#update-results li.none {
-  color: #888;
-  font-style: italic;
-}
-#update-results li.failure strong {
-  color: #b63300;
-}
-
-/**
- * Authorize.php styles
- */
-.connection-settings-update-filetransfer-default-wrapper {
-  float: left;
-}
-#edit-submit-connection {
-  clear: both;
-}
-.filetransfer {
-  display: none;
-  clear: both;
-}
-#edit-connection-settings-change-connection-type {
-  margin: 2.6em 0.5em 0em 1em;
-}
-
-/**
- * Installation task list
- */
-ol.task-list li.active {
-  font-weight: bold;
-}
-
-/**
- * Installation clean URLs
- */
-#clean-url.install {
-  display: none;
-}
diff --git a/modules/system/system.menus-rtl.css b/modules/system/system.menus-rtl.css
deleted file mode 100644
index be85245..0000000
--- a/modules/system/system.menus-rtl.css
+++ /dev/null
@@ -1,37 +0,0 @@
-
-/**
- * @file
- * RTL styles for menus and navigation markup.
- */
-
-ul.menu {
-  text-align:right;
-}
-ul.menu li {
-  margin: 0 0.5em 0 0;
-}
-ul li.collapsed {
-  list-style-image: url(../../misc/menu-collapsed-rtl.png);
-}
-li.expanded,
-li.collapsed,
-li.leaf {
-  padding: 0.2em 0 0 0.5em;
-}
-
-/**
- * Markup generated by theme_menu_local_tasks().
- */
-ul.primary {
-  padding: 0 1em 0 0;
-}
-ul.primary li a {
-  margin-right: 5px;
-  margin-left: 0.5em;
-}
-ul.secondary li {
-  border-left: 1px solid #ccc;
-  border-right: none;
-  display: inline;
-  padding: 0 1em;
-}
diff --git a/modules/system/system.menus.css b/modules/system/system.menus.css
deleted file mode 100644
index 514b029..0000000
--- a/modules/system/system.menus.css
+++ /dev/null
@@ -1,116 +0,0 @@
-
-/**
- * @file
- * Styles for menus and navigation markup.
- */
-
-/**
- * Markup generated by theme_menu_tree().
- */
-ul.menu {
-  border: none;
-  list-style: none;
-  text-align: left; /* LTR */
-}
-ul.menu li {
-  margin: 0 0 0 0.5em; /* LTR */
-}
-ul li.expanded {
-  list-style-image: url(../../misc/menu-expanded.png);
-  list-style-type: circle;
-}
-ul li.collapsed {
-  list-style-image: url(../../misc/menu-collapsed.png); /* LTR */
-  list-style-type: disc;
-}
-ul li.leaf {
-  list-style-image: url(../../misc/menu-leaf.png);
-  list-style-type: square;
-}
-li.expanded,
-li.collapsed,
-li.leaf {
-  padding: 0.2em 0.5em 0 0; /* LTR */
-  margin: 0;
-}
-li a.active {
-  color: #000;
-}
-td.menu-disabled {
-  background: #ccc;
-}
-
-/**
- * Markup generated by theme_links().
- */
-ul.inline,
-ul.links.inline {
-  display: inline;
-  padding-left: 0;
-}
-ul.inline li {
-  display: inline;
-  list-style-type: none;
-  padding: 0 0.5em;
-}
-
-/**
- * Markup generated by theme_breadcrumb().
- */
-.breadcrumb {
-  padding-bottom: 0.5em;
-}
-
-/**
- * Markup generated by theme_menu_local_tasks().
- */
-ul.primary {
-  border-bottom: 1px solid #bbb;
-  border-collapse: collapse;
-  height: auto;
-  line-height: normal;
-  list-style: none;
-  margin: 5px;
-  padding: 0 0 0 1em; /* LTR */
-  white-space: nowrap;
-}
-ul.primary li {
-  display: inline;
-}
-ul.primary li a {
-  background-color: #ddd;
-  border-color: #bbb;
-  border-style: solid solid none solid;
-  border-width: 1px;
-  height: auto;
-  margin-right: 0.5em; /* LTR */
-  padding: 0 1em;
-  text-decoration: none;
-}
-ul.primary li.active a {
-  background-color: #fff;
-  border: 1px solid #bbb;
-  border-bottom: 1px solid #fff;
-}
-ul.primary li a:hover {
-  background-color: #eee;
-  border-color: #ccc;
-  border-bottom-color: #eee;
-}
-ul.secondary {
-  border-bottom: 1px solid #bbb;
-  padding: 0.5em 1em;
-  margin: 5px;
-}
-ul.secondary li {
-  border-right: 1px solid #ccc; /* LTR */
-  display: inline;
-  padding: 0 1em;
-}
-ul.secondary a {
-  padding: 0;
-  text-decoration: none;
-}
-ul.secondary a.active {
-  border-bottom: 4px solid #999;
-}
diff --git a/modules/system/system.messages-rtl.css b/modules/system/system.messages-rtl.css
deleted file mode 100644
index 445417b..0000000
--- a/modules/system/system.messages-rtl.css
+++ /dev/null
@@ -1,13 +0,0 @@
-
-/**
- * @file
- * RTL Styles for system messages.
- */
-
-div.messages {
-  background-position: 99% 8px;
-  padding: 10px 50px 10px 10px;
-}
-div.messages ul {
-  margin: 0 1em 0 0;
-}
diff --git a/modules/system/system.messages.css b/modules/system/system.messages.css
deleted file mode 100644
index ffd4e8e..0000000
--- a/modules/system/system.messages.css
+++ /dev/null
@@ -1,63 +0,0 @@
-
-/**
- * @file
- * Styles for system messages.
- */
-
-div.messages {
-  background-position: 8px 8px; /* LTR */
-  background-repeat: no-repeat;
-  border: 1px solid;
-  margin: 6px 0;
-  padding: 10px 10px 10px 50px; /* LTR */
-}
-
-div.status {
-  background-image: url(../../misc/message-24-ok.png);
-  border-color: #be7;
-}
-div.status,
-.ok {
-  color: #234600;
-}
-div.status,
-table tr.ok {
-  background-color: #f8fff0;
-}
-
-div.warning {
-  background-image: url(../../misc/message-24-warning.png);
-  border-color: #ed5;
-}
-div.warning,
-.warning {
-  color: #840;
-}
-div.warning,
-table tr.warning {
-  background-color: #fffce5;
-}
-
-div.error {
-  background-image: url(../../misc/message-24-error.png);
-  border-color: #ed541d;
-}
-div.error,
-.error {
-  color: #8c2e0b;
-}
-div.error,
-table tr.error {
-  background-color: #fef5f1;
-}
-div.error p.error {
-  color: #333;
-}
-
-div.messages ul {
-  margin: 0 0 0 1em; /* LTR */
-  padding: 0;
-}
-div.messages ul li {
-  list-style-image: none;
-}
diff --git a/modules/system/system.queue.inc b/modules/system/system.queue.inc
deleted file mode 100644
index 901c4d6..0000000
--- a/modules/system/system.queue.inc
+++ /dev/null
@@ -1,370 +0,0 @@
-<?php
-
-/**
- * @file
- * Queue functionality.
- */
-
-/**
- * @defgroup queue Queue operations
- * @{
- * Queue items to allow later processing.
- *
- * The queue system allows placing items in a queue and processing them later.
- * The system tries to ensure that only one consumer can process an item.
- *
- * Before a queue can be used it needs to be created by
- * DrupalQueueInterface::createQueue().
- *
- * Items can be added to the queue by passing an arbitrary data object to
- * DrupalQueueInterface::createItem().
- *
- * To process an item, call DrupalQueueInterface::claimItem() and specify how
- * long you want to have a lease for working on that item. When finished
- * processing, the item needs to be deleted by calling
- * DrupalQueueInterface::deleteItem(). If the consumer dies, the item will be
- * made available again by the DrupalQueueInterface implementation once the
- * lease expires. Another consumer will then be able to receive it when calling
- * DrupalQueueInterface::claimItem(). Due to this, the processing code should
- * be aware that an item might be handed over for processing more than once.
- *
- * The $item object used by the DrupalQueueInterface can contain arbitrary
- * metadata depending on the implementation. Systems using the interface should
- * only rely on the data property which will contain the information passed to
- * DrupalQueueInterface::createItem(). The full queue item returned by
- * DrupalQueueInterface::claimItem() needs to be passed to
- * DrupalQueueInterface::deleteItem() once processing is completed.
- *
- * There are two kinds of queue backends available: reliable, which preserves
- * the order of messages and guarantees that every item will be executed at
- * least once. The non-reliable kind only does a best effort to preserve order
- * in messages and to execute them at least once but there is a small chance
- * that some items get lost. For example, some distributed back-ends like
- * Amazon SQS will be managing jobs for a large set of producers and consumers
- * where a strict FIFO ordering will likely not be preserved. Another example
- * would be an in-memory queue backend which might lose items if it crashes.
- * However, such a backend would be able to deal with significantly more writes
- * than a reliable queue and for many tasks this is more important. See
- * aggregator_cron() for an example of how to effectively utilize a
- * non-reliable queue. Another example is doing Twitter statistics -- the small
- * possibility of losing a few items is insignificant next to power of the
- * queue being able to keep up with writes. As described in the processing
- * section, regardless of the queue being reliable or not, the processing code
- * should be aware that an item might be handed over for processing more than
- * once (because the processing code might time out before it finishes).
- */
-
-/**
- * Factory class for interacting with queues.
- */
-class DrupalQueue {
-  /**
-   * Returns the queue object for a given name.
-   *
-   * The following variables can be set by variable_set or $conf overrides:
-   * - queue_class_$name: the class to be used for the queue $name.
-   * - queue_default_class: the class to use when queue_class_$name is not
-   *   defined. Defaults to SystemQueue, a reliable backend using SQL.
-   * - queue_default_reliable_class: the class to use when queue_class_$name is
-   *   not defined and the queue_default_class is not reliable. Defaults to
-   *   SystemQueue.
-   *
-   * @param $name
-   *   Arbitrary string. The name of the queue to work with.
-   * @param $reliable
-   *   TRUE if the ordering of items and guaranteeing every item executes at
-   *   least once is important, FALSE if scalability is the main concern.
-   *
-   * @return
-   *   The queue object for a given name.
-   */
-  public static function get($name, $reliable = FALSE) {
-    static $queues;
-    if (!isset($queues[$name])) {
-      $class = variable_get('queue_class_' . $name, NULL);
-      if (!$class) {
-        $class = variable_get('queue_default_class', 'SystemQueue');
-      }
-      $object = new $class($name);
-      if ($reliable && !$object instanceof DrupalReliableQueueInterface) {
-        $class = variable_get('queue_default_reliable_class', 'SystemQueue');
-        $object = new $class($name);
-      }
-      $queues[$name] = $object;
-    }
-    return $queues[$name];
-  }
-}
-
-interface DrupalQueueInterface {
-
-  /**
-   * Add a queue item and store it directly to the queue.
-   *
-   * @param $data
-   *   Arbitrary data to be associated with the new task in the queue.
-   * @return
-   *   TRUE if the item was successfully created and was (best effort) added
-   *   to the queue, otherwise FALSE. We don't guarantee the item was
-   *   committed to disk etc, but as far as we know, the item is now in the
-   *   queue.
-   */
-  public function createItem($data);
-
-  /**
-   * Retrieve the number of items in the queue.
-   *
-   * This is intended to provide a "best guess" count of the number of items in
-   * the queue. Depending on the implementation and the setup, the accuracy of
-   * the results of this function may vary.
-   *
-   * e.g. On a busy system with a large number of consumers and items, the
-   * result might only be valid for a fraction of a second and not provide an
-   * accurate representation.
-   *
-   * @return
-   *   An integer estimate of the number of items in the queue.
-   */
-  public function numberOfItems();
-
-  /**
-   * Claim an item in the queue for processing.
-   *
-   * @param $lease_time
-   *   How long the processing is expected to take in seconds, defaults to an
-   *   hour. After this lease expires, the item will be reset and another
-   *   consumer can claim the item. For idempotent tasks (which can be run
-   *   multiple times without side effects), shorter lease times would result
-   *   in lower latency in case a consumer fails. For tasks that should not be
-   *   run more than once (non-idempotent), a larger lease time will make it
-   *   more rare for a given task to run multiple times in cases of failure,
-   *   at the cost of higher latency.
-   * @return
-   *   On success we return an item object. If the queue is unable to claim an
-   *   item it returns false. This implies a best effort to retrieve an item
-   *   and either the queue is empty or there is some other non-recoverable
-   *   problem.
-   */
-  public function claimItem($lease_time = 3600);
-
-  /**
-   * Delete a finished item from the queue.
-   *
-   * @param $item
-   *   The item returned by DrupalQueueInterface::claimItem().
-   */
-  public function deleteItem($item);
-
-  /**
-   * Release an item that the worker could not process, so another
-   * worker can come in and process it before the timeout expires.
-   *
-   * @param $item
-   * @return boolean
-   */
-  public function releaseItem($item);
-
-  /**
-   * Create a queue.
-   *
-   * Called during installation and should be used to perform any necessary
-   * initialization operations. This should not be confused with the
-   * constructor for these objects, which is called every time an object is
-   * instantiated to operate on a queue. This operation is only needed the
-   * first time a given queue is going to be initialized (for example, to make
-   * a new database table or directory to hold tasks for the queue -- it
-   * depends on the queue implementation if this is necessary at all).
-   */
-  public function createQueue();
-
-  /**
-   * Delete a queue and every item in the queue.
-   */
-  public function deleteQueue();
-}
-
-/**
- * Reliable queue interface.
- *
- * Classes implementing this interface preserve the order of messages and
- * guarantee that every item will be executed at least once.
- */
-interface DrupalReliableQueueInterface extends DrupalQueueInterface {
-}
-
-/**
- * Default queue implementation.
- */
-class SystemQueue implements DrupalReliableQueueInterface {
-  /**
-   * The name of the queue this instance is working with.
-   *
-   * @var string
-   */
-  protected $name;
-
-  public function __construct($name) {
-    $this->name = $name;
-  }
-
-  public function createItem($data) {
-    // During a Drupal 6.x to 7.x update, drupal_get_schema() does not contain
-    // the queue table yet, so we cannot rely on drupal_write_record().
-    $query = db_insert('queue')
-      ->fields(array(
-        'name' => $this->name,
-        'data' => serialize($data),
-        // We cannot rely on REQUEST_TIME because many items might be created
-        // by a single request which takes longer than 1 second.
-        'created' => time(),
-      ));
-    return (bool) $query->execute();
-  }
-
-  public function numberOfItems() {
-    return db_query('SELECT COUNT(item_id) FROM {queue} WHERE name = :name', array(':name' => $this->name))->fetchField();
-  }
-
-  public function claimItem($lease_time = 30) {
-    // Claim an item by updating its expire fields. If claim is not successful
-    // another thread may have claimed the item in the meantime. Therefore loop
-    // until an item is successfully claimed or we are reasonably sure there
-    // are no unclaimed items left.
-    while (TRUE) {
-      $item = db_query_range('SELECT data, item_id FROM {queue} q WHERE expire = 0 AND name = :name ORDER BY created ASC', 0, 1, array(':name' => $this->name))->fetchObject();
-      if ($item) {
-        // Try to update the item. Only one thread can succeed in UPDATEing the
-        // same row. We cannot rely on REQUEST_TIME because items might be
-        // claimed by a single consumer which runs longer than 1 second. If we
-        // continue to use REQUEST_TIME instead of the current time(), we steal
-        // time from the lease, and will tend to reset items before the lease
-        // should really expire.
-        $update = db_update('queue')
-          ->fields(array(
-            'expire' => time() + $lease_time,
-          ))
-          ->condition('item_id', $item->item_id)
-          ->condition('expire', 0);
-        // If there are affected rows, this update succeeded.
-        if ($update->execute()) {
-          $item->data = unserialize($item->data);
-          return $item;
-        }
-      }
-      else {
-        // No items currently available to claim.
-        return FALSE;
-      }
-    }
-  }
-
-  public function releaseItem($item) {
-    $update = db_update('queue')
-      ->fields(array(
-        'expire' => 0,
-      ))
-      ->condition('item_id', $item->item_id);
-      return $update->execute();
-  }
-
-  public function deleteItem($item) {
-    db_delete('queue')
-      ->condition('item_id', $item->item_id)
-      ->execute();
-  }
-
-  public function createQueue() {
-    // All tasks are stored in a single database table (which is created when
-    // Drupal is first installed) so there is nothing we need to do to create
-    // a new queue.
-  }
-
-  public function deleteQueue() {
-    db_delete('queue')
-      ->condition('name', $this->name)
-      ->execute();
-  }
-}
-
-/**
- * Static queue implementation.
- *
- * This allows "undelayed" variants of processes relying on the Queue
- * interface. The queue data resides in memory. It should only be used for
- * items that will be queued and dequeued within a given page request.
- */
-class MemoryQueue implements DrupalQueueInterface {
-  /**
-   * The queue data.
-   *
-   * @var array
-   */
-  protected $queue;
-
-  /**
-   * Counter for item ids.
-   *
-   * @var int
-   */
-  protected $id_sequence;
-
-  /**
-   * Start working with a queue.
-   *
-   * @param $name
-   *   Arbitrary string. The name of the queue to work with.
-   */
-  public function __construct($name) {
-    $this->queue = array();
-    $this->id_sequence = 0;
-  }
-
-  public function createItem($data) {
-    $item = new stdClass();
-    $item->item_id = $this->id_sequence++;
-    $item->data = $data;
-    $item->created = time();
-    $item->expire = 0;
-    $this->queue[$item->item_id] = $item;
-  }
-
-  public function numberOfItems() {
-    return count($this->queue);
-  }
-
-  public function claimItem($lease_time = 30) {
-    foreach ($this->queue as $key => $item) {
-      if ($item->expire == 0) {
-        $item->expire = time() + $lease_time;
-        $this->queue[$key] = $item;
-        return $item;
-      }
-    }
-    return FALSE;
-  }
-
-  public function deleteItem($item) {
-    unset($this->queue[$item->item_id]);
-  }
-
-  public function releaseItem($item) {
-    if (isset($this->queue[$item->item_id]) && $this->queue[$item->item_id]->expire != 0) {
-      $this->queue[$item->item_id]->expire = 0;
-      return TRUE;
-    }
-    return FALSE;
-  }
-
-  public function createQueue() {
-    // Nothing needed here.
-  }
-
-  public function deleteQueue() {
-    $this->queue = array();
-    $this->id_sequence = 0;
-  }
-}
-
-/**
- * @} End of "defgroup queue".
- */
diff --git a/modules/system/system.tar.inc b/modules/system/system.tar.inc
deleted file mode 100644
index 32bf7f0..0000000
--- a/modules/system/system.tar.inc
+++ /dev/null
@@ -1,1892 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * File::CSV
- *
- * PHP versions 4 and 5
- *
- * Copyright (c) 1997-2008,
- * Vincent Blavet <vincent@phpconcept.net>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- *     * Redistributions of source code must retain the above copyright notice,
- *       this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *
- * @category    File_Formats
- * @package     Archive_Tar
- * @author      Vincent Blavet <vincent@phpconcept.net>
- * @copyright   1997-2008 The Authors
- * @license     http://www.opensource.org/licenses/bsd-license.php New BSD License
- * @version     CVS: Id: Tar.php,v 1.43 2008/10/30 17:58:42 dufuz Exp
- * @link        http://pear.php.net/package/Archive_Tar
- */
-
-//require_once 'PEAR.php';
-//
-//
-define ('ARCHIVE_TAR_ATT_SEPARATOR', 90001);
-define ('ARCHIVE_TAR_END_BLOCK', pack("a512", ''));
-
-/**
-* Creates a (compressed) Tar archive
-*
-* @author   Vincent Blavet <vincent@phpconcept.net>
-* @version  Revision: 1.43
-* @license  http://www.opensource.org/licenses/bsd-license.php New BSD License
-* @package  Archive_Tar
-*/
-class Archive_Tar // extends PEAR
-{
-    /**
-    * @var string Name of the Tar
-    */
-    var $_tarname='';
-
-    /**
-    * @var boolean if true, the Tar file will be gzipped
-    */
-    var $_compress=false;
-
-    /**
-    * @var string Type of compression : 'none', 'gz' or 'bz2'
-    */
-    var $_compress_type='none';
-
-    /**
-    * @var string Explode separator
-    */
-    var $_separator=' ';
-
-    /**
-    * @var file descriptor
-    */
-    var $_file=0;
-
-    /**
-    * @var string Local Tar name of a remote Tar (http:// or ftp://)
-    */
-    var $_temp_tarname='';
-
-    // {{{ constructor
-    /**
-    * Archive_Tar Class constructor. This flavour of the constructor only
-    * declare a new Archive_Tar object, identifying it by the name of the
-    * tar file.
-    * If the compress argument is set the tar will be read or created as a
-    * gzip or bz2 compressed TAR file.
-    *
-    * @param    string  $p_tarname  The name of the tar archive to create
-    * @param    string  $p_compress can be null, 'gz' or 'bz2'. This
-    *                   parameter indicates if gzip or bz2 compression
-    *                   is required.  For compatibility reason the
-    *                   boolean value 'true' means 'gz'.
-    * @access public
-    */
-//    function Archive_Tar($p_tarname, $p_compress = null)
-    function __construct($p_tarname, $p_compress = null)
-    {
-//        $this->PEAR();
-        $this->_compress = false;
-        $this->_compress_type = 'none';
-        if (($p_compress === null) || ($p_compress == '')) {
-            if (@file_exists($p_tarname)) {
-                if ($fp = @fopen($p_tarname, "rb")) {
-                    // look for gzip magic cookie
-                    $data = fread($fp, 2);
-                    fclose($fp);
-                    if ($data == "\37\213") {
-                        $this->_compress = true;
-                        $this->_compress_type = 'gz';
-                    // No sure it's enought for a magic code ....
-                    } elseif ($data == "BZ") {
-                        $this->_compress = true;
-                        $this->_compress_type = 'bz2';
-                    }
-                }
-            } else {
-                // probably a remote file or some file accessible
-                // through a stream interface
-                if (substr($p_tarname, -2) == 'gz') {
-                    $this->_compress = true;
-                    $this->_compress_type = 'gz';
-                } elseif ((substr($p_tarname, -3) == 'bz2') ||
-                          (substr($p_tarname, -2) == 'bz')) {
-                    $this->_compress = true;
-                    $this->_compress_type = 'bz2';
-                }
-            }
-        } else {
-            if (($p_compress === true) || ($p_compress == 'gz')) {
-                $this->_compress = true;
-                $this->_compress_type = 'gz';
-            } else if ($p_compress == 'bz2') {
-                $this->_compress = true;
-                $this->_compress_type = 'bz2';
-            } else {
-                die("Unsupported compression type '$p_compress'\n".
-                    "Supported types are 'gz' and 'bz2'.\n");
-                return false;
-            }
-        }
-        $this->_tarname = $p_tarname;
-        if ($this->_compress) { // assert zlib or bz2 extension support
-            if ($this->_compress_type == 'gz')
-                $extname = 'zlib';
-            else if ($this->_compress_type == 'bz2')
-                $extname = 'bz2';
-
-            if (!extension_loaded($extname)) {
-//                PEAR::loadExtension($extname);
-                $this->loadExtension($extname);
-            }
-            if (!extension_loaded($extname)) {
-                die("The extension '$extname' couldn't be found.\n".
-                    "Please make sure your version of PHP was built ".
-                    "with '$extname' support.\n");
-                return false;
-            }
-        }
-    }
-    // }}}
-
-    /**
-    * OS independent PHP extension load. Remember to take care
-    * on the correct extension name for case sensitive OSes.
-    * The function is the copy of PEAR::loadExtension().
-    *
-    * @param string $ext The extension name
-    * @return bool Success or not on the dl() call
-    */
-    function loadExtension($ext)
-    {
-        if (!extension_loaded($ext)) {
-            // if either returns true dl() will produce a FATAL error, stop that
-            if ((ini_get('enable_dl') != 1) || (ini_get('safe_mode') == 1)) {
-                return false;
-            }
-
-            if (OS_WINDOWS) {
-                $suffix = '.dll';
-            } elseif (PHP_OS == 'HP-UX') {
-                $suffix = '.sl';
-            } elseif (PHP_OS == 'AIX') {
-                $suffix = '.a';
-            } elseif (PHP_OS == 'OSX') {
-                $suffix = '.bundle';
-            } else {
-                $suffix = '.so';
-            }
-
-            return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix);
-        }
-
-        return true;
-    }
-
-
-    // {{{ destructor
-//    function _Archive_Tar()
-    function __destruct()
-    {
-        $this->_close();
-        // ----- Look for a local copy to delete
-        if ($this->_temp_tarname != '')
-            @drupal_unlink($this->_temp_tarname);
-//        $this->_PEAR();
-    }
-    // }}}
-
-    // {{{ create()
-    /**
-    * This method creates the archive file and add the files / directories
-    * that are listed in $p_filelist.
-    * If a file with the same name exist and is writable, it is replaced
-    * by the new tar.
-    * The method return false and a PEAR error text.
-    * The $p_filelist parameter can be an array of string, each string
-    * representing a filename or a directory name with their path if
-    * needed. It can also be a single string with names separated by a
-    * single blank.
-    * For each directory added in the archive, the files and
-    * sub-directories are also added.
-    * See also createModify() method for more details.
-    *
-    * @param array  $p_filelist An array of filenames and directory names, or a
-	*                           single string with names separated by a single
-	*                           blank space.
-    * @return                   true on success, false on error.
-    * @see createModify()
-    * @access public
-    */
-    function create($p_filelist)
-    {
-        return $this->createModify($p_filelist, '', '');
-    }
-    // }}}
-
-    // {{{ add()
-    /**
-    * This method add the files / directories that are listed in $p_filelist in
-    * the archive. If the archive does not exist it is created.
-    * The method return false and a PEAR error text.
-    * The files and directories listed are only added at the end of the archive,
-    * even if a file with the same name is already archived.
-    * See also createModify() method for more details.
-    *
-    * @param array  $p_filelist An array of filenames and directory names, or a
-	*                           single string with names separated by a single
-	*                           blank space.
-    * @return                   true on success, false on error.
-    * @see createModify()
-    * @access public
-    */
-    function add($p_filelist)
-    {
-        return $this->addModify($p_filelist, '', '');
-    }
-    // }}}
-
-    // {{{ extract()
-    function extract($p_path='')
-    {
-        return $this->extractModify($p_path, '');
-    }
-    // }}}
-
-    // {{{ listContent()
-    function listContent()
-    {
-        $v_list_detail = array();
-
-        if ($this->_openRead()) {
-            if (!$this->_extractList('', $v_list_detail, "list", '', '')) {
-                unset($v_list_detail);
-                $v_list_detail = 0;
-            }
-            $this->_close();
-        }
-
-        return $v_list_detail;
-    }
-    // }}}
-
-    // {{{ createModify()
-    /**
-    * This method creates the archive file and add the files / directories
-    * that are listed in $p_filelist.
-    * If the file already exists and is writable, it is replaced by the
-    * new tar. It is a create and not an add. If the file exists and is
-    * read-only or is a directory it is not replaced. The method return
-    * false and a PEAR error text.
-    * The $p_filelist parameter can be an array of string, each string
-    * representing a filename or a directory name with their path if
-    * needed. It can also be a single string with names separated by a
-    * single blank.
-    * The path indicated in $p_remove_dir will be removed from the
-    * memorized path of each file / directory listed when this path
-    * exists. By default nothing is removed (empty path '')
-    * The path indicated in $p_add_dir will be added at the beginning of
-    * the memorized path of each file / directory listed. However it can
-    * be set to empty ''. The adding of a path is done after the removing
-    * of path.
-    * The path add/remove ability enables the user to prepare an archive
-    * for extraction in a different path than the origin files are.
-    * See also addModify() method for file adding properties.
-    *
-    * @param array  $p_filelist     An array of filenames and directory names,
-	*                               or a single string with names separated by
-	*                               a single blank space.
-    * @param string $p_add_dir      A string which contains a path to be added
-	*                               to the memorized path of each element in
-	*                               the list.
-    * @param string $p_remove_dir   A string which contains a path to be
-	*                               removed from the memorized path of each
-	*                               element in the list, when relevant.
-    * @return boolean               true on success, false on error.
-    * @access public
-    * @see addModify()
-    */
-    function createModify($p_filelist, $p_add_dir, $p_remove_dir='')
-    {
-        $v_result = true;
-
-        if (!$this->_openWrite())
-            return false;
-
-        if ($p_filelist != '') {
-            if (is_array($p_filelist))
-                $v_list = $p_filelist;
-            elseif (is_string($p_filelist))
-                $v_list = explode($this->_separator, $p_filelist);
-            else {
-                $this->_cleanFile();
-                $this->_error('Invalid file list');
-                return false;
-            }
-
-            $v_result = $this->_addList($v_list, $p_add_dir, $p_remove_dir);
-        }
-
-        if ($v_result) {
-            $this->_writeFooter();
-            $this->_close();
-        } else
-            $this->_cleanFile();
-
-        return $v_result;
-    }
-    // }}}
-
-    // {{{ addModify()
-    /**
-    * This method add the files / directories listed in $p_filelist at the
-    * end of the existing archive. If the archive does not yet exists it
-    * is created.
-    * The $p_filelist parameter can be an array of string, each string
-    * representing a filename or a directory name with their path if
-    * needed. It can also be a single string with names separated by a
-    * single blank.
-    * The path indicated in $p_remove_dir will be removed from the
-    * memorized path of each file / directory listed when this path
-    * exists. By default nothing is removed (empty path '')
-    * The path indicated in $p_add_dir will be added at the beginning of
-    * the memorized path of each file / directory listed. However it can
-    * be set to empty ''. The adding of a path is done after the removing
-    * of path.
-    * The path add/remove ability enables the user to prepare an archive
-    * for extraction in a different path than the origin files are.
-    * If a file/dir is already in the archive it will only be added at the
-    * end of the archive. There is no update of the existing archived
-    * file/dir. However while extracting the archive, the last file will
-    * replace the first one. This results in a none optimization of the
-    * archive size.
-    * If a file/dir does not exist the file/dir is ignored. However an
-    * error text is send to PEAR error.
-    * If a file/dir is not readable the file/dir is ignored. However an
-    * error text is send to PEAR error.
-    *
-    * @param array      $p_filelist     An array of filenames and directory
-	*                                   names, or a single string with names
-	*                                   separated by a single blank space.
-    * @param string     $p_add_dir      A string which contains a path to be
-	*                                   added to the memorized path of each
-	*                                   element in the list.
-    * @param string     $p_remove_dir   A string which contains a path to be
-	*                                   removed from the memorized path of
-	*                                   each element in the list, when
-    *                                   relevant.
-    * @return                           true on success, false on error.
-    * @access public
-    */
-    function addModify($p_filelist, $p_add_dir, $p_remove_dir='')
-    {
-        $v_result = true;
-
-        if (!$this->_isArchive())
-            $v_result = $this->createModify($p_filelist, $p_add_dir,
-			                                $p_remove_dir);
-        else {
-            if (is_array($p_filelist))
-                $v_list = $p_filelist;
-            elseif (is_string($p_filelist))
-                $v_list = explode($this->_separator, $p_filelist);
-            else {
-                $this->_error('Invalid file list');
-                return false;
-            }
-
-            $v_result = $this->_append($v_list, $p_add_dir, $p_remove_dir);
-        }
-
-        return $v_result;
-    }
-    // }}}
-
-    // {{{ addString()
-    /**
-    * This method add a single string as a file at the
-    * end of the existing archive. If the archive does not yet exists it
-    * is created.
-    *
-    * @param string     $p_filename     A string which contains the full
-	*                                   filename path that will be associated
-	*                                   with the string.
-    * @param string     $p_string       The content of the file added in
-	*                                   the archive.
-    * @return                           true on success, false on error.
-    * @access public
-    */
-    function addString($p_filename, $p_string)
-    {
-        $v_result = true;
-
-        if (!$this->_isArchive()) {
-            if (!$this->_openWrite()) {
-                return false;
-            }
-            $this->_close();
-        }
-
-        if (!$this->_openAppend())
-            return false;
-
-        // Need to check the get back to the temporary file ? ....
-        $v_result = $this->_addString($p_filename, $p_string);
-
-        $this->_writeFooter();
-
-        $this->_close();
-
-        return $v_result;
-    }
-    // }}}
-
-    // {{{ extractModify()
-    /**
-    * This method extract all the content of the archive in the directory
-    * indicated by $p_path. When relevant the memorized path of the
-    * files/dir can be modified by removing the $p_remove_path path at the
-    * beginning of the file/dir path.
-    * While extracting a file, if the directory path does not exists it is
-    * created.
-    * While extracting a file, if the file already exists it is replaced
-    * without looking for last modification date.
-    * While extracting a file, if the file already exists and is write
-    * protected, the extraction is aborted.
-    * While extracting a file, if a directory with the same name already
-    * exists, the extraction is aborted.
-    * While extracting a directory, if a file with the same name already
-    * exists, the extraction is aborted.
-    * While extracting a file/directory if the destination directory exist
-    * and is write protected, or does not exist but can not be created,
-    * the extraction is aborted.
-    * If after extraction an extracted file does not show the correct
-    * stored file size, the extraction is aborted.
-    * When the extraction is aborted, a PEAR error text is set and false
-    * is returned. However the result can be a partial extraction that may
-    * need to be manually cleaned.
-    *
-    * @param string $p_path         The path of the directory where the
-	*                               files/dir need to by extracted.
-    * @param string $p_remove_path  Part of the memorized path that can be
-	*                               removed if present at the beginning of
-	*                               the file/dir path.
-    * @return boolean               true on success, false on error.
-    * @access public
-    * @see extractList()
-    */
-    function extractModify($p_path, $p_remove_path)
-    {
-        $v_result = true;
-        $v_list_detail = array();
-
-        if ($v_result = $this->_openRead()) {
-            $v_result = $this->_extractList($p_path, $v_list_detail,
-			                                "complete", 0, $p_remove_path);
-            $this->_close();
-        }
-
-        return $v_result;
-    }
-    // }}}
-
-    // {{{ extractInString()
-    /**
-    * This method extract from the archive one file identified by $p_filename.
-    * The return value is a string with the file content, or NULL on error.
-    * @param string $p_filename     The path of the file to extract in a string.
-    * @return                       a string with the file content or NULL.
-    * @access public
-    */
-    function extractInString($p_filename)
-    {
-        if ($this->_openRead()) {
-            $v_result = $this->_extractInString($p_filename);
-            $this->_close();
-        } else {
-            $v_result = NULL;
-        }
-
-        return $v_result;
-    }
-    // }}}
-
-    // {{{ extractList()
-    /**
-    * This method extract from the archive only the files indicated in the
-    * $p_filelist. These files are extracted in the current directory or
-    * in the directory indicated by the optional $p_path parameter.
-    * If indicated the $p_remove_path can be used in the same way as it is
-    * used in extractModify() method.
-    * @param array  $p_filelist     An array of filenames and directory names,
-	*                               or a single string with names separated
-	*                               by a single blank space.
-    * @param string $p_path         The path of the directory where the
-	*                               files/dir need to by extracted.
-    * @param string $p_remove_path  Part of the memorized path that can be
-	*                               removed if present at the beginning of
-	*                               the file/dir path.
-    * @return                       true on success, false on error.
-    * @access public
-    * @see extractModify()
-    */
-    function extractList($p_filelist, $p_path='', $p_remove_path='')
-    {
-        $v_result = true;
-        $v_list_detail = array();
-
-        if (is_array($p_filelist))
-            $v_list = $p_filelist;
-        elseif (is_string($p_filelist))
-            $v_list = explode($this->_separator, $p_filelist);
-        else {
-            $this->_error('Invalid string list');
-            return false;
-        }
-
-        if ($v_result = $this->_openRead()) {
-            $v_result = $this->_extractList($p_path, $v_list_detail, "partial",
-			                                $v_list, $p_remove_path);
-            $this->_close();
-        }
-
-        return $v_result;
-    }
-    // }}}
-
-    // {{{ setAttribute()
-    /**
-    * This method set specific attributes of the archive. It uses a variable
-    * list of parameters, in the format attribute code + attribute values :
-    * $arch->setAttribute(ARCHIVE_TAR_ATT_SEPARATOR, ',');
-    * @param mixed $argv            variable list of attributes and values
-    * @return                       true on success, false on error.
-    * @access public
-    */
-    function setAttribute()
-    {
-        $v_result = true;
-
-        // ----- Get the number of variable list of arguments
-        if (($v_size = func_num_args()) == 0) {
-            return true;
-        }
-
-        // ----- Get the arguments
-        $v_att_list = &func_get_args();
-
-        // ----- Read the attributes
-        $i=0;
-        while ($i<$v_size) {
-
-            // ----- Look for next option
-            switch ($v_att_list[$i]) {
-                // ----- Look for options that request a string value
-                case ARCHIVE_TAR_ATT_SEPARATOR :
-                    // ----- Check the number of parameters
-                    if (($i+1) >= $v_size) {
-                        $this->_error('Invalid number of parameters for '
-						              .'attribute ARCHIVE_TAR_ATT_SEPARATOR');
-                        return false;
-                    }
-
-                    // ----- Get the value
-                    $this->_separator = $v_att_list[$i+1];
-                    $i++;
-                break;
-
-                default :
-                    $this->_error('Unknow attribute code '.$v_att_list[$i].'');
-                    return false;
-            }
-
-            // ----- Next attribute
-            $i++;
-        }
-
-        return $v_result;
-    }
-    // }}}
-
-    // {{{ _error()
-    function _error($p_message)
-    {
-        // ----- To be completed
-//        $this->raiseError($p_message);
-        throw new Exception($p_message);
-    }
-    // }}}
-
-    // {{{ _warning()
-    function _warning($p_message)
-    {
-        // ----- To be completed
-//        $this->raiseError($p_message);
-        throw new Exception($p_message);
-    }
-    // }}}
-
-    // {{{ _isArchive()
-    function _isArchive($p_filename=NULL)
-    {
-        if ($p_filename == NULL) {
-            $p_filename = $this->_tarname;
-        }
-        clearstatcache();
-        return @is_file($p_filename) && !@is_link($p_filename);
-    }
-    // }}}
-
-    // {{{ _openWrite()
-    function _openWrite()
-    {
-        if ($this->_compress_type == 'gz')
-            $this->_file = @gzopen($this->_tarname, "wb9");
-        else if ($this->_compress_type == 'bz2')
-            $this->_file = @bzopen($this->_tarname, "w");
-        else if ($this->_compress_type == 'none')
-            $this->_file = @fopen($this->_tarname, "wb");
-        else
-            $this->_error('Unknown or missing compression type ('
-			              .$this->_compress_type.')');
-
-        if ($this->_file == 0) {
-            $this->_error('Unable to open in write mode \''
-			              .$this->_tarname.'\'');
-            return false;
-        }
-
-        return true;
-    }
-    // }}}
-
-    // {{{ _openRead()
-    function _openRead()
-    {
-        if (strtolower(substr($this->_tarname, 0, 7)) == 'http://') {
-
-          // ----- Look if a local copy need to be done
-          if ($this->_temp_tarname == '') {
-              $this->_temp_tarname = uniqid('tar').'.tmp';
-              if (!$v_file_from = @fopen($this->_tarname, 'rb')) {
-                $this->_error('Unable to open in read mode \''
-				              .$this->_tarname.'\'');
-                $this->_temp_tarname = '';
-                return false;
-              }
-              if (!$v_file_to = @fopen($this->_temp_tarname, 'wb')) {
-                $this->_error('Unable to open in write mode \''
-				              .$this->_temp_tarname.'\'');
-                $this->_temp_tarname = '';
-                return false;
-              }
-              while ($v_data = @fread($v_file_from, 1024))
-                  @fwrite($v_file_to, $v_data);
-              @fclose($v_file_from);
-              @fclose($v_file_to);
-          }
-
-          // ----- File to open if the local copy
-          $v_filename = $this->_temp_tarname;
-
-        } else
-          // ----- File to open if the normal Tar file
-          $v_filename = $this->_tarname;
-
-        if ($this->_compress_type == 'gz')
-            $this->_file = @gzopen($v_filename, "rb");
-        else if ($this->_compress_type == 'bz2')
-            $this->_file = @bzopen($v_filename, "r");
-        else if ($this->_compress_type == 'none')
-            $this->_file = @fopen($v_filename, "rb");
-        else
-            $this->_error('Unknown or missing compression type ('
-			              .$this->_compress_type.')');
-
-        if ($this->_file == 0) {
-            $this->_error('Unable to open in read mode \''.$v_filename.'\'');
-            return false;
-        }
-
-        return true;
-    }
-    // }}}
-
-    // {{{ _openReadWrite()
-    function _openReadWrite()
-    {
-        if ($this->_compress_type == 'gz')
-            $this->_file = @gzopen($this->_tarname, "r+b");
-        else if ($this->_compress_type == 'bz2') {
-            $this->_error('Unable to open bz2 in read/write mode \''
-			              .$this->_tarname.'\' (limitation of bz2 extension)');
-            return false;
-        } else if ($this->_compress_type == 'none')
-            $this->_file = @fopen($this->_tarname, "r+b");
-        else
-            $this->_error('Unknown or missing compression type ('
-			              .$this->_compress_type.')');
-
-        if ($this->_file == 0) {
-            $this->_error('Unable to open in read/write mode \''
-			              .$this->_tarname.'\'');
-            return false;
-        }
-
-        return true;
-    }
-    // }}}
-
-    // {{{ _close()
-    function _close()
-    {
-        //if (isset($this->_file)) {
-        if (is_resource($this->_file)) {
-            if ($this->_compress_type == 'gz')
-                @gzclose($this->_file);
-            else if ($this->_compress_type == 'bz2')
-                @bzclose($this->_file);
-            else if ($this->_compress_type == 'none')
-                @fclose($this->_file);
-            else
-                $this->_error('Unknown or missing compression type ('
-				              .$this->_compress_type.')');
-
-            $this->_file = 0;
-        }
-
-        // ----- Look if a local copy need to be erase
-        // Note that it might be interesting to keep the url for a time : ToDo
-        if ($this->_temp_tarname != '') {
-            @drupal_unlink($this->_temp_tarname);
-            $this->_temp_tarname = '';
-        }
-
-        return true;
-    }
-    // }}}
-
-    // {{{ _cleanFile()
-    function _cleanFile()
-    {
-        $this->_close();
-
-        // ----- Look for a local copy
-        if ($this->_temp_tarname != '') {
-            // ----- Remove the local copy but not the remote tarname
-            @drupal_unlink($this->_temp_tarname);
-            $this->_temp_tarname = '';
-        } else {
-            // ----- Remove the local tarname file
-            @drupal_unlink($this->_tarname);
-        }
-        $this->_tarname = '';
-
-        return true;
-    }
-    // }}}
-
-    // {{{ _writeBlock()
-    function _writeBlock($p_binary_data, $p_len=null)
-    {
-      if (is_resource($this->_file)) {
-          if ($p_len === null) {
-              if ($this->_compress_type == 'gz')
-                  @gzputs($this->_file, $p_binary_data);
-              else if ($this->_compress_type == 'bz2')
-                  @bzwrite($this->_file, $p_binary_data);
-              else if ($this->_compress_type == 'none')
-                  @fputs($this->_file, $p_binary_data);
-              else
-                  $this->_error('Unknown or missing compression type ('
-				                .$this->_compress_type.')');
-          } else {
-              if ($this->_compress_type == 'gz')
-                  @gzputs($this->_file, $p_binary_data, $p_len);
-              else if ($this->_compress_type == 'bz2')
-                  @bzwrite($this->_file, $p_binary_data, $p_len);
-              else if ($this->_compress_type == 'none')
-                  @fputs($this->_file, $p_binary_data, $p_len);
-              else
-                  $this->_error('Unknown or missing compression type ('
-				                .$this->_compress_type.')');
-
-          }
-      }
-      return true;
-    }
-    // }}}
-
-    // {{{ _readBlock()
-    function _readBlock()
-    {
-      $v_block = null;
-      if (is_resource($this->_file)) {
-          if ($this->_compress_type == 'gz')
-              $v_block = @gzread($this->_file, 512);
-          else if ($this->_compress_type == 'bz2')
-              $v_block = @bzread($this->_file, 512);
-          else if ($this->_compress_type == 'none')
-              $v_block = @fread($this->_file, 512);
-          else
-              $this->_error('Unknown or missing compression type ('
-			                .$this->_compress_type.')');
-      }
-      return $v_block;
-    }
-    // }}}
-
-    // {{{ _jumpBlock()
-    function _jumpBlock($p_len=null)
-    {
-      if (is_resource($this->_file)) {
-          if ($p_len === null)
-              $p_len = 1;
-
-          if ($this->_compress_type == 'gz') {
-              @gzseek($this->_file, gztell($this->_file)+($p_len*512));
-          }
-          else if ($this->_compress_type == 'bz2') {
-              // ----- Replace missing bztell() and bzseek()
-              for ($i=0; $i<$p_len; $i++)
-                  $this->_readBlock();
-          } else if ($this->_compress_type == 'none')
-              @fseek($this->_file, ftell($this->_file)+($p_len*512));
-          else
-              $this->_error('Unknown or missing compression type ('
-			                .$this->_compress_type.')');
-
-      }
-      return true;
-    }
-    // }}}
-
-    // {{{ _writeFooter()
-    function _writeFooter()
-    {
-      if (is_resource($this->_file)) {
-          // ----- Write the last 0 filled block for end of archive
-          $v_binary_data = pack('a1024', '');
-          $this->_writeBlock($v_binary_data);
-      }
-      return true;
-    }
-    // }}}
-
-    // {{{ _addList()
-    function _addList($p_list, $p_add_dir, $p_remove_dir)
-    {
-      $v_result=true;
-      $v_header = array();
-
-      // ----- Remove potential windows directory separator
-      $p_add_dir = $this->_translateWinPath($p_add_dir);
-      $p_remove_dir = $this->_translateWinPath($p_remove_dir, false);
-
-      if (!$this->_file) {
-          $this->_error('Invalid file descriptor');
-          return false;
-      }
-
-      if (sizeof($p_list) == 0)
-          return true;
-
-      foreach ($p_list as $v_filename) {
-          if (!$v_result) {
-              break;
-          }
-
-        // ----- Skip the current tar name
-        if ($v_filename == $this->_tarname)
-            continue;
-
-        if ($v_filename == '')
-            continue;
-
-        if (!file_exists($v_filename)) {
-            $this->_warning("File '$v_filename' does not exist");
-            continue;
-        }
-
-        // ----- Add the file or directory header
-        if (!$this->_addFile($v_filename, $v_header, $p_add_dir, $p_remove_dir))
-            return false;
-
-        if (@is_dir($v_filename) && !@is_link($v_filename)) {
-            if (!($p_hdir = opendir($v_filename))) {
-                $this->_warning("Directory '$v_filename' can not be read");
-                continue;
-            }
-            while (false !== ($p_hitem = readdir($p_hdir))) {
-                if (($p_hitem != '.') && ($p_hitem != '..')) {
-                    if ($v_filename != ".")
-                        $p_temp_list[0] = $v_filename.'/'.$p_hitem;
-                    else
-                        $p_temp_list[0] = $p_hitem;
-
-                    $v_result = $this->_addList($p_temp_list,
-					                            $p_add_dir,
-												$p_remove_dir);
-                }
-            }
-
-            unset($p_temp_list);
-            unset($p_hdir);
-            unset($p_hitem);
-        }
-      }
-
-      return $v_result;
-    }
-    // }}}
-
-    // {{{ _addFile()
-    function _addFile($p_filename, &$p_header, $p_add_dir, $p_remove_dir)
-    {
-      if (!$this->_file) {
-          $this->_error('Invalid file descriptor');
-          return false;
-      }
-
-      if ($p_filename == '') {
-          $this->_error('Invalid file name');
-          return false;
-      }
-
-      // ----- Calculate the stored filename
-      $p_filename = $this->_translateWinPath($p_filename, false);;
-      $v_stored_filename = $p_filename;
-      if (strcmp($p_filename, $p_remove_dir) == 0) {
-          return true;
-      }
-      if ($p_remove_dir != '') {
-          if (substr($p_remove_dir, -1) != '/')
-              $p_remove_dir .= '/';
-
-          if (substr($p_filename, 0, strlen($p_remove_dir)) == $p_remove_dir)
-              $v_stored_filename = substr($p_filename, strlen($p_remove_dir));
-      }
-      $v_stored_filename = $this->_translateWinPath($v_stored_filename);
-      if ($p_add_dir != '') {
-          if (substr($p_add_dir, -1) == '/')
-              $v_stored_filename = $p_add_dir.$v_stored_filename;
-          else
-              $v_stored_filename = $p_add_dir.'/'.$v_stored_filename;
-      }
-
-      $v_stored_filename = $this->_pathReduction($v_stored_filename);
-
-      if ($this->_isArchive($p_filename)) {
-          if (($v_file = @fopen($p_filename, "rb")) == 0) {
-              $this->_warning("Unable to open file '".$p_filename
-			                  ."' in binary read mode");
-              return true;
-          }
-
-          if (!$this->_writeHeader($p_filename, $v_stored_filename))
-              return false;
-
-          while (($v_buffer = fread($v_file, 512)) != '') {
-              $v_binary_data = pack("a512", "$v_buffer");
-              $this->_writeBlock($v_binary_data);
-          }
-
-          fclose($v_file);
-
-      } else {
-          // ----- Only header for dir
-          if (!$this->_writeHeader($p_filename, $v_stored_filename))
-              return false;
-      }
-
-      return true;
-    }
-    // }}}
-
-    // {{{ _addString()
-    function _addString($p_filename, $p_string)
-    {
-      if (!$this->_file) {
-          $this->_error('Invalid file descriptor');
-          return false;
-      }
-
-      if ($p_filename == '') {
-          $this->_error('Invalid file name');
-          return false;
-      }
-
-      // ----- Calculate the stored filename
-      $p_filename = $this->_translateWinPath($p_filename, false);;
-
-      if (!$this->_writeHeaderBlock($p_filename, strlen($p_string),
-	                                  time(), 384, "", 0, 0))
-          return false;
-
-      $i=0;
-      while (($v_buffer = substr($p_string, (($i++)*512), 512)) != '') {
-          $v_binary_data = pack("a512", $v_buffer);
-          $this->_writeBlock($v_binary_data);
-      }
-
-      return true;
-    }
-    // }}}
-
-    // {{{ _writeHeader()
-    function _writeHeader($p_filename, $p_stored_filename)
-    {
-        if ($p_stored_filename == '')
-            $p_stored_filename = $p_filename;
-        $v_reduce_filename = $this->_pathReduction($p_stored_filename);
-
-        if (strlen($v_reduce_filename) > 99) {
-          if (!$this->_writeLongHeader($v_reduce_filename))
-            return false;
-        }
-
-        $v_info = lstat($p_filename);
-        $v_uid = sprintf("%6s ", DecOct($v_info[4]));
-        $v_gid = sprintf("%6s ", DecOct($v_info[5]));
-        $v_perms = sprintf("%6s ", DecOct($v_info['mode']));
-
-        $v_mtime = sprintf("%11s", DecOct($v_info['mode']));
-
-        $v_linkname = '';
-
-        if (@is_link($p_filename)) {
-          $v_typeflag = '2';
-          $v_linkname = readlink($p_filename);
-          $v_size = sprintf("%11s ", DecOct(0));
-        } elseif (@is_dir($p_filename)) {
-          $v_typeflag = "5";
-          $v_size = sprintf("%11s ", DecOct(0));
-        } else {
-          $v_typeflag = '';
-          clearstatcache();
-          $v_size = sprintf("%11s ", DecOct($v_info['size']));
-        }
-
-        $v_magic = '';
-
-        $v_version = '';
-
-        $v_uname = '';
-
-        $v_gname = '';
-
-        $v_devmajor = '';
-
-        $v_devminor = '';
-
-        $v_prefix = '';
-
-        $v_binary_data_first = pack("a100a8a8a8a12A12",
-		                            $v_reduce_filename, $v_perms, $v_uid,
-									$v_gid, $v_size, $v_mtime);
-        $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12",
-		                           $v_typeflag, $v_linkname, $v_magic,
-								   $v_version, $v_uname, $v_gname,
-								   $v_devmajor, $v_devminor, $v_prefix, '');
-
-        // ----- Calculate the checksum
-        $v_checksum = 0;
-        // ..... First part of the header
-        for ($i=0; $i<148; $i++)
-            $v_checksum += ord(substr($v_binary_data_first,$i,1));
-        // ..... Ignore the checksum value and replace it by ' ' (space)
-        for ($i=148; $i<156; $i++)
-            $v_checksum += ord(' ');
-        // ..... Last part of the header
-        for ($i=156, $j=0; $i<512; $i++, $j++)
-            $v_checksum += ord(substr($v_binary_data_last,$j,1));
-
-        // ----- Write the first 148 bytes of the header in the archive
-        $this->_writeBlock($v_binary_data_first, 148);
-
-        // ----- Write the calculated checksum
-        $v_checksum = sprintf("%6s ", DecOct($v_checksum));
-        $v_binary_data = pack("a8", $v_checksum);
-        $this->_writeBlock($v_binary_data, 8);
-
-        // ----- Write the last 356 bytes of the header in the archive
-        $this->_writeBlock($v_binary_data_last, 356);
-
-        return true;
-    }
-    // }}}
-
-    // {{{ _writeHeaderBlock()
-    function _writeHeaderBlock($p_filename, $p_size, $p_mtime=0, $p_perms=0,
-	                           $p_type='', $p_uid=0, $p_gid=0)
-    {
-        $p_filename = $this->_pathReduction($p_filename);
-
-        if (strlen($p_filename) > 99) {
-          if (!$this->_writeLongHeader($p_filename))
-            return false;
-        }
-
-        if ($p_type == "5") {
-          $v_size = sprintf("%11s ", DecOct(0));
-        } else {
-          $v_size = sprintf("%11s ", DecOct($p_size));
-        }
-
-        $v_uid = sprintf("%6s ", DecOct($p_uid));
-        $v_gid = sprintf("%6s ", DecOct($p_gid));
-        $v_perms = sprintf("%6s ", DecOct($p_perms));
-
-        $v_mtime = sprintf("%11s", DecOct($p_mtime));
-
-        $v_linkname = '';
-
-        $v_magic = '';
-
-        $v_version = '';
-
-        $v_uname = '';
-
-        $v_gname = '';
-
-        $v_devmajor = '';
-
-        $v_devminor = '';
-
-        $v_prefix = '';
-
-        $v_binary_data_first = pack("a100a8a8a8a12A12",
-		                            $p_filename, $v_perms, $v_uid, $v_gid,
-									$v_size, $v_mtime);
-        $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12",
-		                           $p_type, $v_linkname, $v_magic,
-								   $v_version, $v_uname, $v_gname,
-								   $v_devmajor, $v_devminor, $v_prefix, '');
-
-        // ----- Calculate the checksum
-        $v_checksum = 0;
-        // ..... First part of the header
-        for ($i=0; $i<148; $i++)
-            $v_checksum += ord(substr($v_binary_data_first,$i,1));
-        // ..... Ignore the checksum value and replace it by ' ' (space)
-        for ($i=148; $i<156; $i++)
-            $v_checksum += ord(' ');
-        // ..... Last part of the header
-        for ($i=156, $j=0; $i<512; $i++, $j++)
-            $v_checksum += ord(substr($v_binary_data_last,$j,1));
-
-        // ----- Write the first 148 bytes of the header in the archive
-        $this->_writeBlock($v_binary_data_first, 148);
-
-        // ----- Write the calculated checksum
-        $v_checksum = sprintf("%6s ", DecOct($v_checksum));
-        $v_binary_data = pack("a8", $v_checksum);
-        $this->_writeBlock($v_binary_data, 8);
-
-        // ----- Write the last 356 bytes of the header in the archive
-        $this->_writeBlock($v_binary_data_last, 356);
-
-        return true;
-    }
-    // }}}
-
-    // {{{ _writeLongHeader()
-    function _writeLongHeader($p_filename)
-    {
-        $v_size = sprintf("%11s ", DecOct(strlen($p_filename)));
-
-        $v_typeflag = 'L';
-
-        $v_linkname = '';
-
-        $v_magic = '';
-
-        $v_version = '';
-
-        $v_uname = '';
-
-        $v_gname = '';
-
-        $v_devmajor = '';
-
-        $v_devminor = '';
-
-        $v_prefix = '';
-
-        $v_binary_data_first = pack("a100a8a8a8a12A12",
-		                            '././@LongLink', 0, 0, 0, $v_size, 0);
-        $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12",
-		                           $v_typeflag, $v_linkname, $v_magic,
-								   $v_version, $v_uname, $v_gname,
-								   $v_devmajor, $v_devminor, $v_prefix, '');
-
-        // ----- Calculate the checksum
-        $v_checksum = 0;
-        // ..... First part of the header
-        for ($i=0; $i<148; $i++)
-            $v_checksum += ord(substr($v_binary_data_first,$i,1));
-        // ..... Ignore the checksum value and replace it by ' ' (space)
-        for ($i=148; $i<156; $i++)
-            $v_checksum += ord(' ');
-        // ..... Last part of the header
-        for ($i=156, $j=0; $i<512; $i++, $j++)
-            $v_checksum += ord(substr($v_binary_data_last,$j,1));
-
-        // ----- Write the first 148 bytes of the header in the archive
-        $this->_writeBlock($v_binary_data_first, 148);
-
-        // ----- Write the calculated checksum
-        $v_checksum = sprintf("%6s ", DecOct($v_checksum));
-        $v_binary_data = pack("a8", $v_checksum);
-        $this->_writeBlock($v_binary_data, 8);
-
-        // ----- Write the last 356 bytes of the header in the archive
-        $this->_writeBlock($v_binary_data_last, 356);
-
-        // ----- Write the filename as content of the block
-        $i=0;
-        while (($v_buffer = substr($p_filename, (($i++)*512), 512)) != '') {
-            $v_binary_data = pack("a512", "$v_buffer");
-            $this->_writeBlock($v_binary_data);
-        }
-
-        return true;
-    }
-    // }}}
-
-    // {{{ _readHeader()
-    function _readHeader($v_binary_data, &$v_header)
-    {
-        if (strlen($v_binary_data)==0) {
-            $v_header['filename'] = '';
-            return true;
-        }
-
-        if (strlen($v_binary_data) != 512) {
-            $v_header['filename'] = '';
-            $this->_error('Invalid block size : '.strlen($v_binary_data));
-            return false;
-        }
-
-        if (!is_array($v_header)) {
-            $v_header = array();
-        }
-        // ----- Calculate the checksum
-        $v_checksum = 0;
-        // ..... First part of the header
-        for ($i=0; $i<148; $i++)
-            $v_checksum+=ord(substr($v_binary_data,$i,1));
-        // ..... Ignore the checksum value and replace it by ' ' (space)
-        for ($i=148; $i<156; $i++)
-            $v_checksum += ord(' ');
-        // ..... Last part of the header
-        for ($i=156; $i<512; $i++)
-           $v_checksum+=ord(substr($v_binary_data,$i,1));
-
-        $v_data = unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/"
-		                 ."a8checksum/a1typeflag/a100link/a6magic/a2version/"
-						 ."a32uname/a32gname/a8devmajor/a8devminor",
-						 $v_binary_data);
-
-        // ----- Extract the checksum
-        $v_header['checksum'] = OctDec(trim($v_data['checksum']));
-        if ($v_header['checksum'] != $v_checksum) {
-            $v_header['filename'] = '';
-
-            // ----- Look for last block (empty block)
-            if (($v_checksum == 256) && ($v_header['checksum'] == 0))
-                return true;
-
-            $this->_error('Invalid checksum for file "'.$v_data['filename']
-			              .'" : '.$v_checksum.' calculated, '
-						  .$v_header['checksum'].' expected');
-            return false;
-        }
-
-        // ----- Extract the properties
-        $v_header['filename'] = trim($v_data['filename']);
-        if ($this->_maliciousFilename($v_header['filename'])) {
-            $this->_error('Malicious .tar detected, file "' . $v_header['filename'] .
-                '" will not install in desired directory tree');
-            return false;
-        }
-        $v_header['mode'] = OctDec(trim($v_data['mode']));
-        $v_header['uid'] = OctDec(trim($v_data['uid']));
-        $v_header['gid'] = OctDec(trim($v_data['gid']));
-        $v_header['size'] = OctDec(trim($v_data['size']));
-        $v_header['mtime'] = OctDec(trim($v_data['mtime']));
-        if (($v_header['typeflag'] = $v_data['typeflag']) == "5") {
-          $v_header['size'] = 0;
-        }
-        $v_header['link'] = trim($v_data['link']);
-        /* ----- All these fields are removed form the header because
-		they do not carry interesting info
-        $v_header[magic] = trim($v_data[magic]);
-        $v_header[version] = trim($v_data[version]);
-        $v_header[uname] = trim($v_data[uname]);
-        $v_header[gname] = trim($v_data[gname]);
-        $v_header[devmajor] = trim($v_data[devmajor]);
-        $v_header[devminor] = trim($v_data[devminor]);
-        */
-
-        return true;
-    }
-    // }}}
-
-    // {{{ _maliciousFilename()
-    /**
-     * Detect and report a malicious file name
-     *
-     * @param string $file
-     * @return bool
-     * @access private
-     */
-    function _maliciousFilename($file)
-    {
-        if (strpos($file, '/../') !== false) {
-            return true;
-        }
-        if (strpos($file, '../') === 0) {
-            return true;
-        }
-        return false;
-    }
-    // }}}
-
-    // {{{ _readLongHeader()
-    function _readLongHeader(&$v_header)
-    {
-      $v_filename = '';
-      $n = floor($v_header['size']/512);
-      for ($i=0; $i<$n; $i++) {
-        $v_content = $this->_readBlock();
-        $v_filename .= $v_content;
-      }
-      if (($v_header['size'] % 512) != 0) {
-        $v_content = $this->_readBlock();
-        $v_filename .= $v_content;
-      }
-
-      // ----- Read the next header
-      $v_binary_data = $this->_readBlock();
-
-      if (!$this->_readHeader($v_binary_data, $v_header))
-        return false;
-
-      $v_filename = trim($v_filename);
-      $v_header['filename'] = $v_filename;
-        if ($this->_maliciousFilename($v_filename)) {
-            $this->_error('Malicious .tar detected, file "' . $v_filename .
-                '" will not install in desired directory tree');
-            return false;
-      }
-
-      return true;
-    }
-    // }}}
-
-    // {{{ _extractInString()
-    /**
-    * This method extract from the archive one file identified by $p_filename.
-    * The return value is a string with the file content, or NULL on error.
-    * @param string $p_filename     The path of the file to extract in a string.
-    * @return                       a string with the file content or NULL.
-    * @access private
-    */
-    function _extractInString($p_filename)
-    {
-        $v_result_str = "";
-
-        While (strlen($v_binary_data = $this->_readBlock()) != 0)
-        {
-          if (!$this->_readHeader($v_binary_data, $v_header))
-            return NULL;
-
-          if ($v_header['filename'] == '')
-            continue;
-
-          // ----- Look for long filename
-          if ($v_header['typeflag'] == 'L') {
-            if (!$this->_readLongHeader($v_header))
-              return NULL;
-          }
-
-          if ($v_header['filename'] == $p_filename) {
-              if ($v_header['typeflag'] == "5") {
-                  $this->_error('Unable to extract in string a directory '
-				                .'entry {'.$v_header['filename'].'}');
-                  return NULL;
-              } else {
-                  $n = floor($v_header['size']/512);
-                  for ($i=0; $i<$n; $i++) {
-                      $v_result_str .= $this->_readBlock();
-                  }
-                  if (($v_header['size'] % 512) != 0) {
-                      $v_content = $this->_readBlock();
-                      $v_result_str .= substr($v_content, 0,
-					                          ($v_header['size'] % 512));
-                  }
-                  return $v_result_str;
-              }
-          } else {
-              $this->_jumpBlock(ceil(($v_header['size']/512)));
-          }
-        }
-
-        return NULL;
-    }
-    // }}}
-
-    // {{{ _extractList()
-    function _extractList($p_path, &$p_list_detail, $p_mode,
-	                      $p_file_list, $p_remove_path)
-    {
-    $v_result=true;
-    $v_nb = 0;
-    $v_extract_all = true;
-    $v_listing = false;
-
-    $p_path = $this->_translateWinPath($p_path, false);
-    if ($p_path == '' || (substr($p_path, 0, 1) != '/'
-	    && substr($p_path, 0, 3) != "../" && !strpos($p_path, ':'))) {
-      $p_path = "./".$p_path;
-    }
-    $p_remove_path = $this->_translateWinPath($p_remove_path);
-
-    // ----- Look for path to remove format (should end by /)
-    if (($p_remove_path != '') && (substr($p_remove_path, -1) != '/'))
-      $p_remove_path .= '/';
-    $p_remove_path_size = strlen($p_remove_path);
-
-    switch ($p_mode) {
-      case "complete" :
-        $v_extract_all = TRUE;
-        $v_listing = FALSE;
-      break;
-      case "partial" :
-          $v_extract_all = FALSE;
-          $v_listing = FALSE;
-      break;
-      case "list" :
-          $v_extract_all = FALSE;
-          $v_listing = TRUE;
-      break;
-      default :
-        $this->_error('Invalid extract mode ('.$p_mode.')');
-        return false;
-    }
-
-    clearstatcache();
-
-    while (strlen($v_binary_data = $this->_readBlock()) != 0)
-    {
-      $v_extract_file = FALSE;
-      $v_extraction_stopped = 0;
-
-      if (!$this->_readHeader($v_binary_data, $v_header))
-        return false;
-
-      if ($v_header['filename'] == '') {
-        continue;
-      }
-
-      // ----- Look for long filename
-      if ($v_header['typeflag'] == 'L') {
-        if (!$this->_readLongHeader($v_header))
-          return false;
-      }
-
-      if ((!$v_extract_all) && (is_array($p_file_list))) {
-        // ----- By default no unzip if the file is not found
-        $v_extract_file = false;
-
-        for ($i=0; $i<sizeof($p_file_list); $i++) {
-          // ----- Look if it is a directory
-          if (substr($p_file_list[$i], -1) == '/') {
-            // ----- Look if the directory is in the filename path
-            if ((strlen($v_header['filename']) > strlen($p_file_list[$i]))
-			    && (substr($v_header['filename'], 0, strlen($p_file_list[$i]))
-				    == $p_file_list[$i])) {
-              $v_extract_file = TRUE;
-              break;
-            }
-          }
-
-          // ----- It is a file, so compare the file names
-          elseif ($p_file_list[$i] == $v_header['filename']) {
-            $v_extract_file = TRUE;
-            break;
-          }
-        }
-      } else {
-        $v_extract_file = TRUE;
-      }
-
-      // ----- Look if this file need to be extracted
-      if (($v_extract_file) && (!$v_listing))
-      {
-        if (($p_remove_path != '')
-            && (substr($v_header['filename'], 0, $p_remove_path_size)
-			    == $p_remove_path))
-          $v_header['filename'] = substr($v_header['filename'],
-		                                 $p_remove_path_size);
-        if (($p_path != './') && ($p_path != '/')) {
-          while (substr($p_path, -1) == '/')
-            $p_path = substr($p_path, 0, strlen($p_path)-1);
-
-          if (substr($v_header['filename'], 0, 1) == '/')
-              $v_header['filename'] = $p_path.$v_header['filename'];
-          else
-            $v_header['filename'] = $p_path.'/'.$v_header['filename'];
-        }
-        if (file_exists($v_header['filename'])) {
-          if (   (@is_dir($v_header['filename']))
-		      && ($v_header['typeflag'] == '')) {
-            $this->_error('File '.$v_header['filename']
-			              .' already exists as a directory');
-            return false;
-          }
-          if (   ($this->_isArchive($v_header['filename']))
-		      && ($v_header['typeflag'] == "5")) {
-            $this->_error('Directory '.$v_header['filename']
-			              .' already exists as a file');
-            return false;
-          }
-          if (!is_writeable($v_header['filename'])) {
-            $this->_error('File '.$v_header['filename']
-			              .' already exists and is write protected');
-            return false;
-          }
-          if (filemtime($v_header['filename']) > $v_header['mtime']) {
-            // To be completed : An error or silent no replace ?
-          }
-        }
-
-        // ----- Check the directory availability and create it if necessary
-        elseif (($v_result
-		         = $this->_dirCheck(($v_header['typeflag'] == "5"
-				                    ?$v_header['filename']
-									:dirname($v_header['filename'])))) != 1) {
-            $this->_error('Unable to create path for '.$v_header['filename']);
-            return false;
-        }
-
-        if ($v_extract_file) {
-          if ($v_header['typeflag'] == "5") {
-            if (!@file_exists($v_header['filename'])) {
-                // Drupal integration.
-                // Changed the code to use drupal_mkdir() instead of mkdir().
-                if (!@drupal_mkdir($v_header['filename'], 0777)) {
-                    $this->_error('Unable to create directory {'
-					              .$v_header['filename'].'}');
-                    return false;
-                }
-            }
-          } elseif ($v_header['typeflag'] == "2") {
-              if (@file_exists($v_header['filename'])) {
-                  @drupal_unlink($v_header['filename']);
-              }
-              if (!@symlink($v_header['link'], $v_header['filename'])) {
-                  $this->_error('Unable to extract symbolic link {'
-                                .$v_header['filename'].'}');
-                  return false;
-              }
-          } else {
-              if (($v_dest_file = @fopen($v_header['filename'], "wb")) == 0) {
-                  $this->_error('Error while opening {'.$v_header['filename']
-				                .'} in write binary mode');
-                  return false;
-              } else {
-                  $n = floor($v_header['size']/512);
-                  for ($i=0; $i<$n; $i++) {
-                      $v_content = $this->_readBlock();
-                      fwrite($v_dest_file, $v_content, 512);
-                  }
-            if (($v_header['size'] % 512) != 0) {
-              $v_content = $this->_readBlock();
-              fwrite($v_dest_file, $v_content, ($v_header['size'] % 512));
-            }
-
-            @fclose($v_dest_file);
-
-            // ----- Change the file mode, mtime
-            @touch($v_header['filename'], $v_header['mtime']);
-            if ($v_header['mode'] & 0111) {
-                // make file executable, obey umask
-                $mode = fileperms($v_header['filename']) | (~umask() & 0111);
-                @chmod($v_header['filename'], $mode);
-            }
-          }
-
-          // ----- Check the file size
-          clearstatcache();
-          if (filesize($v_header['filename']) != $v_header['size']) {
-              $this->_error('Extracted file '.$v_header['filename']
-			                .' does not have the correct file size \''
-							.filesize($v_header['filename'])
-							.'\' ('.$v_header['size']
-							.' expected). Archive may be corrupted.');
-              return false;
-          }
-          }
-        } else {
-          $this->_jumpBlock(ceil(($v_header['size']/512)));
-        }
-      } else {
-          $this->_jumpBlock(ceil(($v_header['size']/512)));
-      }
-
-      /* TBC : Seems to be unused ...
-      if ($this->_compress)
-        $v_end_of_file = @gzeof($this->_file);
-      else
-        $v_end_of_file = @feof($this->_file);
-        */
-
-      if ($v_listing || $v_extract_file || $v_extraction_stopped) {
-        // ----- Log extracted files
-        if (($v_file_dir = dirname($v_header['filename']))
-		    == $v_header['filename'])
-          $v_file_dir = '';
-        if ((substr($v_header['filename'], 0, 1) == '/') && ($v_file_dir == ''))
-          $v_file_dir = '/';
-
-        $p_list_detail[$v_nb++] = $v_header;
-        if (is_array($p_file_list) && (count($p_list_detail) == count($p_file_list))) {
-            return true;
-        }
-      }
-    }
-
-        return true;
-    }
-    // }}}
-
-    // {{{ _openAppend()
-    function _openAppend()
-    {
-        if (filesize($this->_tarname) == 0)
-          return $this->_openWrite();
-
-        if ($this->_compress) {
-            $this->_close();
-
-            if (!@rename($this->_tarname, $this->_tarname.".tmp")) {
-                $this->_error('Error while renaming \''.$this->_tarname
-				              .'\' to temporary file \''.$this->_tarname
-							  .'.tmp\'');
-                return false;
-            }
-
-            if ($this->_compress_type == 'gz')
-                $v_temp_tar = @gzopen($this->_tarname.".tmp", "rb");
-            elseif ($this->_compress_type == 'bz2')
-                $v_temp_tar = @bzopen($this->_tarname.".tmp", "r");
-
-            if ($v_temp_tar == 0) {
-                $this->_error('Unable to open file \''.$this->_tarname
-				              .'.tmp\' in binary read mode');
-                @rename($this->_tarname.".tmp", $this->_tarname);
-                return false;
-            }
-
-            if (!$this->_openWrite()) {
-                @rename($this->_tarname.".tmp", $this->_tarname);
-                return false;
-            }
-
-            if ($this->_compress_type == 'gz') {
-                while (!@gzeof($v_temp_tar)) {
-                    $v_buffer = @gzread($v_temp_tar, 512);
-                    if ($v_buffer == ARCHIVE_TAR_END_BLOCK) {
-                        // do not copy end blocks, we will re-make them
-                        // after appending
-                        continue;
-                    }
-                    $v_binary_data = pack("a512", $v_buffer);
-                    $this->_writeBlock($v_binary_data);
-                }
-
-                @gzclose($v_temp_tar);
-            }
-            elseif ($this->_compress_type == 'bz2') {
-                while (strlen($v_buffer = @bzread($v_temp_tar, 512)) > 0) {
-                    if ($v_buffer == ARCHIVE_TAR_END_BLOCK) {
-                        continue;
-                    }
-                    $v_binary_data = pack("a512", $v_buffer);
-                    $this->_writeBlock($v_binary_data);
-                }
-
-                @bzclose($v_temp_tar);
-            }
-
-            if (!@drupal_unlink($this->_tarname.".tmp")) {
-                $this->_error('Error while deleting temporary file \''
-				              .$this->_tarname.'.tmp\'');
-            }
-
-        } else {
-            // ----- For not compressed tar, just add files before the last
-			//       one or two 512 bytes block
-            if (!$this->_openReadWrite())
-               return false;
-
-            clearstatcache();
-            $v_size = filesize($this->_tarname);
-
-            // We might have zero, one or two end blocks.
-            // The standard is two, but we should try to handle
-            // other cases.
-            fseek($this->_file, $v_size - 1024);
-            if (fread($this->_file, 512) == ARCHIVE_TAR_END_BLOCK) {
-                fseek($this->_file, $v_size - 1024);
-            }
-            elseif (fread($this->_file, 512) == ARCHIVE_TAR_END_BLOCK) {
-                fseek($this->_file, $v_size - 512);
-            }
-        }
-
-        return true;
-    }
-    // }}}
-
-    // {{{ _append()
-    function _append($p_filelist, $p_add_dir='', $p_remove_dir='')
-    {
-        if (!$this->_openAppend())
-            return false;
-
-        if ($this->_addList($p_filelist, $p_add_dir, $p_remove_dir))
-           $this->_writeFooter();
-
-        $this->_close();
-
-        return true;
-    }
-    // }}}
-
-    // {{{ _dirCheck()
-
-    /**
-     * Check if a directory exists and create it (including parent
-     * dirs) if not.
-     *
-     * @param string $p_dir directory to check
-     *
-     * @return bool TRUE if the directory exists or was created
-     */
-    function _dirCheck($p_dir)
-    {
-        clearstatcache();
-        if ((@is_dir($p_dir)) || ($p_dir == ''))
-            return true;
-
-        $p_parent_dir = dirname($p_dir);
-
-        if (($p_parent_dir != $p_dir) &&
-            ($p_parent_dir != '') &&
-            (!$this->_dirCheck($p_parent_dir)))
-             return false;
-
-        // Drupal integration.
-        // Changed the code to use drupal_mkdir() instead of mkdir().
-        if (!@drupal_mkdir($p_dir, 0777)) {
-            $this->_error("Unable to create directory '$p_dir'");
-            return false;
-        }
-
-        return true;
-    }
-
-    // }}}
-
-    // {{{ _pathReduction()
-
-    /**
-     * Compress path by changing for example "/dir/foo/../bar" to "/dir/bar",
-     * rand emove double slashes.
-     *
-     * @param string $p_dir path to reduce
-     *
-     * @return string reduced path
-     *
-     * @access private
-     *
-     */
-    function _pathReduction($p_dir)
-    {
-        $v_result = '';
-
-        // ----- Look for not empty path
-        if ($p_dir != '') {
-            // ----- Explode path by directory names
-            $v_list = explode('/', $p_dir);
-
-            // ----- Study directories from last to first
-            for ($i=sizeof($v_list)-1; $i>=0; $i--) {
-                // ----- Look for current path
-                if ($v_list[$i] == ".") {
-                    // ----- Ignore this directory
-                    // Should be the first $i=0, but no check is done
-                }
-                else if ($v_list[$i] == "..") {
-                    // ----- Ignore it and ignore the $i-1
-                    $i--;
-                }
-                else if (   ($v_list[$i] == '')
-				         && ($i!=(sizeof($v_list)-1))
-						 && ($i!=0)) {
-                    // ----- Ignore only the double '//' in path,
-                    // but not the first and last /
-                } else {
-                    $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?'/'
-					            .$v_result:'');
-                }
-            }
-        }
-        $v_result = strtr($v_result, '\\', '/');
-        return $v_result;
-    }
-
-    // }}}
-
-    // {{{ _translateWinPath()
-    function _translateWinPath($p_path, $p_remove_disk_letter=true)
-    {
-      if (defined('OS_WINDOWS') && OS_WINDOWS) {
-          // ----- Look for potential disk letter
-          if (   ($p_remove_disk_letter)
-		      && (($v_position = strpos($p_path, ':')) != false)) {
-              $p_path = substr($p_path, $v_position+1);
-          }
-          // ----- Change potential windows directory separator
-          if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0,1) == '\\')) {
-              $p_path = strtr($p_path, '\\', '/');
-          }
-      }
-      return $p_path;
-    }
-    // }}}
-
-}
-?>
diff --git a/modules/system/system.theme-rtl.css b/modules/system/system.theme-rtl.css
deleted file mode 100644
index 0cd7fa6..0000000
--- a/modules/system/system.theme-rtl.css
+++ /dev/null
@@ -1,53 +0,0 @@
-
-/**
- * @file
- * RTL styles for common markup.
- */
-
-/**
- * HTML elements.
- */
-th {
-  text-align: right;
-  padding-left: 1em;
-  padding-right: 0;
-}
-
-/**
- * Markup generated by theme_item_list().
- */
-.item-list ul li {
-  margin: 0 1.5em 0.25em 0;
-}
-
-/**
- * Markup generated by theme_more_link().
- */
-.more-link {
-  text-align: left;
-}
-
-/**
- * Markup generated by theme_more_help_link().
- */
-.more-help-link {
-  text-align: left;
-}
-.more-help-link a {
-  background-position: 100% 50%;
-  padding: 1px 20px 1px 0;
-}
-
-/**
- * Collapsible fieldsets.
- */
-html.js fieldset.collapsible .fieldset-legend {
-  background-position: 98% 75%;
-  padding-left: 0;
-  padding-right: 15px;
-}
-html.js fieldset.collapsed .fieldset-legend {
-  background-image: url(../../misc/menu-collapsed-rtl.png);
-  background-position: 98% 50%;
-}
-
diff --git a/modules/system/system.theme.css b/modules/system/system.theme.css
deleted file mode 100644
index 73cebee..0000000
--- a/modules/system/system.theme.css
+++ /dev/null
@@ -1,239 +0,0 @@
-
-/**
- * @file
- * Basic styling for common markup.
- */
-
-/**
- * HTML elements.
- */
-fieldset {
-  margin-bottom: 1em;
-  padding: 0.5em;
-}
-form {
-  margin: 0;
-  padding: 0;
-}
-hr {
-  border: 1px solid gray;
-  height: 1px;
-}
-img {
-  border: 0;
-}
-table {
-  border-collapse: collapse;
-}
-th {
-  border-bottom: 3px solid #ccc;
-  padding-right: 1em; /* LTR */
-  text-align: left; /* LTR */
-}
-tbody {
-  border-top: 1px solid #ccc;
-}
-tr.even,
-tr.odd {
-  background-color: #eee;
-  border-bottom: 1px solid #ccc;
-  padding: 0.1em 0.6em;
-}
-
-/**
- * Markup generated by theme_tablesort_indicator().
- */
-th.active img {
-  display: inline;
-}
-td.active {
-  background-color: #ddd;
-}
-
-/**
- * Markup generated by theme_item_list().
- */
-.item-list .title {
-  font-weight: bold;
-}
-.item-list ul {
-  margin: 0 0 0.75em 0;
-  padding: 0;
-}
-.item-list ul li {
-  margin: 0 0 0.25em 1.5em; /* LTR */
-  padding: 0;
-}
-
-/**
- * Markup generated by Form API.
- */
-.form-item,
-.form-actions {
-  margin-top: 1em;
-  margin-bottom: 1em;
-}
-tr.odd .form-item,
-tr.even .form-item {
-  margin-top: 0;
-  margin-bottom: 0;
-  white-space: nowrap;
-}
-.form-item .description {
-  font-size: 0.85em;
-}
-label {
-  display: block;
-  font-weight: bold;
-}
-label.option {
-  display: inline;
-  font-weight: normal;
-}
-.form-checkboxes .form-item,
-.form-radios .form-item {
-  margin-top: 0.4em;
-  margin-bottom: 0.4em;
-}
-.form-type-radio .description,
-.form-type-checkbox .description {
-  margin-left: 2.4em;
-}
-input.form-checkbox,
-input.form-radio {
-  vertical-align: middle;
-}
-.marker,
-.form-required {
-  color: #f00;
-}
-.form-item input.error,
-.form-item textarea.error,
-.form-item select.error {
-  border: 2px solid red;
-}
-
-/**
- * Inline items.
- */
-.container-inline .form-actions,
-.container-inline.form-actions {
-  margin-top: 0;
-  margin-bottom: 0;
-}
-
-/**
- * Markup generated by theme_more_link().
- */
-.more-link {
-  text-align: right; /* LTR */
-}
-
-/**
- * Markup generated by theme_more_help_link().
- */
-.more-help-link {
-  text-align: right; /* LTR */
-}
-.more-help-link a {
-  background: url(../../misc/help.png) 0 50% no-repeat; /* LTR */
-  padding: 1px 0 1px 20px; /* LTR */
-}
-
-/**
- * Markup generated by theme_pager().
- */
-.item-list .pager {
-  clear: both;
-  text-align: center;
-}
-.item-list .pager li {
-  background-image: none;
-  display: inline;
-  list-style-type: none;
-  padding: 0.5em;
-}
-.pager-current {
-  font-weight: bold;
-}
-
-/**
- * Autocomplete.
- *
- * @see autocomplete.js
- */
-/* Suggestion list */
-#autocomplete li.selected {
-  background: #0072b9;
-  color: #fff;
-}
-
-/**
- * Collapsible fieldsets.
- *
- * @see collapse.js
- */
-html.js fieldset.collapsible .fieldset-legend {
-  background: url(../../misc/menu-expanded.png) 5px 65% no-repeat; /* LTR */
-  padding-left: 15px; /* LTR */
-}
-html.js fieldset.collapsed .fieldset-legend {
-  background-image: url(../../misc/menu-collapsed.png); /* LTR */
-  background-position: 5px 50%; /* LTR */
-}
-.fieldset-legend span.summary {
-  color: #999;
-  font-size: 0.9em;
-  margin-left: 0.5em;
-}
-
-/**
- * TableDrag behavior.
- *
- * @see tabledrag.js
- */
-tr.drag {
-  background-color: #fffff0;
-}
-tr.drag-previous {
-  background-color: #ffd;
-}
-.tabledrag-toggle-weight {
-  font-size: 0.9em;
-}
-body div.tabledrag-changed-warning {
-  margin-bottom: 0.5em;
-}
-
-/**
- * TableSelect behavior.
- *
- * @see tableselect.js
-*/
-tr.selected td {
-  background: #ffc;
-}
-td.checkbox,
-th.checkbox {
-  text-align: center;
-}
-
-/**
- * Progress bar.
- *
- * @see progress.js
- */
-.progress {
-  font-weight: bold;
-}
-.progress .bar {
-  background: #ccc;
-  border-color: #666;
-  margin: 0 0.2em;
-  -moz-border-radius: 3px;
-  -webkit-border-radius: 3px;
-  border-radius: 3px;
-}
-.progress .filled {
-  background: #0072b9 url(../../misc/progress.gif);
-}
diff --git a/modules/system/system.tokens.inc b/modules/system/system.tokens.inc
deleted file mode 100644
index b612d10..0000000
--- a/modules/system/system.tokens.inc
+++ /dev/null
@@ -1,269 +0,0 @@
-<?php
-
-/**
- * @file
- * Builds placeholder replacement tokens system-wide data.
- *
- * This file handles tokens for the global 'site' token type, as well as
- * 'date' and 'file' tokens.
- */
-
-/**
- * Implements hook_token_info().
- */
-function system_token_info() {
-  $types['site'] = array(
-    'name' => t("Site information"),
-    'description' => t("Tokens for site-wide settings and other global information."),
-  );
-  $types['date'] = array(
-    'name' => t("Dates"),
-    'description' => t("Tokens related to times and dates."),
-  );
-  $types['file'] = array(
-    'name' => t("Files"),
-    'description' => t("Tokens related to uploaded files."),
-    'needs-data' => 'file',
-  );
-
-  // Site-wide global tokens.
-  $site['name'] = array(
-    'name' => t("Name"),
-    'description' => t("The name of the site."),
-  );
-  $site['slogan'] = array(
-    'name' => t("Slogan"),
-    'description' => t("The slogan of the site."),
-  );
-  $site['mail'] = array(
-    'name' => t("Email"),
-    'description' => t("The administrative email address for the site."),
-  );
-  $site['url'] = array(
-    'name' => t("URL"),
-    'description' => t("The URL of the site's front page."),
-  );
-  $site['url-brief'] = array(
-    'name' => t("URL (brief)"),
-    'description' => t("The URL of the site's front page without the protocol."),
-  );
-  $site['login-url'] = array(
-    'name' => t("Login page"),
-    'description' => t("The URL of the site's login page."),
-  );
-
-  // Date related tokens.
-  $date['short'] = array(
-    'name' => t("Short format"),
-    'description' => t("A date in 'short' format. (%date)", array('%date' => format_date(REQUEST_TIME, 'short'))),
-  );
-  $date['medium'] = array(
-    'name' => t("Medium format"),
-    'description' => t("A date in 'medium' format. (%date)", array('%date' => format_date(REQUEST_TIME, 'medium'))),
-  );
-  $date['long'] = array(
-    'name' => t("Long format"),
-    'description' => t("A date in 'long' format. (%date)", array('%date' => format_date(REQUEST_TIME, 'long'))),
-  );
-  $date['custom'] = array(
-    'name' => t("Custom format"),
-    'description' => t("A date in a custom format. See !php-date for details.", array('!php-date' => l(t('the PHP documentation'), 'http://php.net/manual/en/function.date.php'))),
-  );
-  $date['since'] = array(
-    'name' => t("Time-since"),
-    'description' => t("A date in 'time-since' format. (%date)", array('%date' => format_interval(REQUEST_TIME - 360, 2))),
-  );
-  $date['raw'] = array(
-    'name' => t("Raw timestamp"),
-    'description' => t("A date in UNIX timestamp format (%date)", array('%date' => REQUEST_TIME)),
-  );
-
-
-  // File related tokens.
-  $file['fid'] = array(
-    'name' => t("File ID"),
-    'description' => t("The unique ID of the uploaded file."),
-  );
-  $file['name'] = array(
-    'name' => t("File name"),
-    'description' => t("The name of the file on disk."),
-  );
-  $file['path'] = array(
-    'name' => t("Path"),
-    'description' => t("The location of the file relative to Drupal root."),
-  );
-  $file['mime'] = array(
-    'name' => t("MIME type"),
-    'description' => t("The MIME type of the file."),
-  );
-  $file['size'] = array(
-    'name' => t("File size"),
-    'description' => t("The size of the file."),
-  );
-  $file['url'] = array(
-    'name' => t("URL"),
-    'description' => t("The web-accessible URL for the file."),
-  );
-  $file['timestamp'] = array(
-    'name' => t("Timestamp"),
-    'description' => t("The date the file was most recently changed."),
-    'type' => 'date',
-  );
-  $file['owner'] = array(
-    'name' => t("Owner"),
-    'description' => t("The user who originally uploaded the file."),
-    'type' => 'user',
-  );
-
-  return array(
-    'types' => $types,
-    'tokens' => array(
-      'site' => $site,
-      'date' => $date,
-      'file' => $file,
-    ),
-  );
-}
-
-/**
- * Implements hook_tokens().
- */
-function system_tokens($type, $tokens, array $data = array(), array $options = array()) {
-  $url_options = array('absolute' => TRUE);
-  if (isset($options['language'])) {
-    $url_options['language'] = $options['language'];
-    $language_code = $options['language']->language;
-  }
-  else {
-    $language_code = NULL;
-  }
-  $sanitize = !empty($options['sanitize']);
-
-  $replacements = array();
-
-  if ($type == 'site') {
-    foreach ($tokens as $name => $original) {
-      switch ($name) {
-        case 'name':
-          $site_name = variable_get('site_name', 'Drupal');
-          $replacements[$original] = $sanitize ? check_plain($site_name) : $site_name;
-          break;
-
-        case 'slogan':
-          $slogan = variable_get('site_slogan', '');
-          $replacements[$original] = $sanitize ? check_plain($slogan) : $slogan;
-          break;
-
-        case 'mail':
-          $replacements[$original] = variable_get('site_mail', '');
-          break;
-
-        case 'url':
-          $replacements[$original] = url('<front>', $url_options);
-          break;
-
-        case 'url-brief':
-          $replacements[$original] = preg_replace(array('!^https?://!', '!/$!'), '', url('<front>', $url_options));
-          break;
-
-        case 'login-url':
-          $replacements[$original] = url('user', $url_options);
-          break;
-      }
-    }
-  }
-
-  elseif ($type == 'date') {
-    if (empty($data['date'])) {
-      $date = REQUEST_TIME;
-    }
-    else {
-      $date = $data['date'];
-    }
-
-    foreach ($tokens as $name => $original) {
-      switch ($name) {
-        case 'short':
-          $replacements[$original] = format_date($date, 'short', '', NULL, $language_code);
-          break;
-
-        case 'medium':
-          $replacements[$original] = format_date($date, 'medium', '', NULL, $language_code);
-          break;
-
-        case 'long':
-          $replacements[$original] = format_date($date, 'long', '', NULL, $language_code);
-          break;
-
-        case 'since':
-          $replacements[$original] = format_interval((REQUEST_TIME - $date), 2, $language_code);
-          break;
-
-        case 'raw':
-          $replacements[$original] = $sanitize ? check_plain($date) : $date;
-          break;
-      }
-    }
-
-    if ($created_tokens = token_find_with_prefix($tokens, 'custom')) {
-      foreach ($created_tokens as $name => $original) {
-        $replacements[$original] = format_date($date, 'custom', $name, NULL, $language_code);
-      }
-    }
-  }
-
-  elseif ($type == 'file' && !empty($data['file'])) {
-    $file = $data['file'];
-
-    foreach ($tokens as $name => $original) {
-      switch ($name) {
-        // Basic keys and values.
-        case 'fid':
-          $replacements[$original] = $file->fid;
-          break;
-
-        // Essential file data
-        case 'name':
-          $replacements[$original] = $sanitize ? check_plain($file->filename) : $file->filename;
-          break;
-
-        case 'path':
-          $replacements[$original] = $sanitize ? check_plain($file->uri) : $file->uri;
-          break;
-
-        case 'mime':
-          $replacements[$original] = $sanitize ? check_plain($file->filemime) : $file->filemime;
-          break;
-
-        case 'size':
-          $replacements[$original] = format_size($file->filesize);
-          break;
-
-        case 'url':
-          $replacements[$original] = $sanitize ? check_plain(file_create_url($file->uri)) : file_create_url($file->uri);
-          break;
-
-        // These tokens are default variations on the chained tokens handled below.
-        case 'timestamp':
-          $replacements[$original] = format_date($file->timestamp, 'medium', '', NULL, $language_code);
-          break;
-
-        case 'owner':
-          $account = user_load($file->uid);
-          $name = format_username($account);
-          $replacements[$original] = $sanitize ? check_plain($name) : $name;
-          break;
-      }
-    }
-
-    if ($date_tokens = token_find_with_prefix($tokens, 'timestamp')) {
-      $replacements += token_generate('date', $date_tokens, array('date' => $file->timestamp), $options);
-    }
-
-    if (($owner_tokens = token_find_with_prefix($tokens, 'owner')) && $account = user_load($file->uid)) {
-      $replacements += token_generate('user', $owner_tokens, array('user' => $account), $options);
-    }
-  }
-
-  return $replacements;
-}
diff --git a/modules/system/system.updater.inc b/modules/system/system.updater.inc
deleted file mode 100644
index a14d788..0000000
--- a/modules/system/system.updater.inc
+++ /dev/null
@@ -1,150 +0,0 @@
-<?php
-
-/**
- * @file
- * Subclasses of the Updater class to update Drupal core knows how to update.
- * At this time, only modules and themes are supported.
- */
-
-/**
- * Class for updating modules using FileTransfer classes via authorize.php.
- */
-class ModuleUpdater extends Updater implements DrupalUpdaterInterface {
-
-  /**
-   * Return the directory where a module should be installed.
-   *
-   * If the module is already installed, drupal_get_path() will return
-   * a valid path and we should install it there (although we need to use an
-   * absolute path, so we prepend DRUPAL_ROOT). If we're installing a new
-   * module, we always want it to go into sites/all/modules, since that's
-   * where all the documentation recommends users install their modules, and
-   * there's no way that can conflict on a multi-site installation, since
-   * the Update manager won't let you install a new module if it's already
-   * found on your system, and if there was a copy in sites/all, we'd see it.
-   */
-  public function getInstallDirectory() {
-    if ($relative_path = drupal_get_path('module', $this->name)) {
-      $relative_path = dirname($relative_path);
-    }
-    else {
-      $relative_path = 'sites/all/modules';
-    }
-    return DRUPAL_ROOT . '/' . $relative_path;
-  }
-
-  public function isInstalled() {
-    return (bool) drupal_get_path('module', $this->name);
-  }
-
-  public static function canUpdateDirectory($directory) {
-    if (file_scan_directory($directory, '/.*\.module$/')) {
-      return TRUE;
-    }
-    return FALSE;
-  }
-
-  public static function canUpdate($project_name) {
-    return (bool) drupal_get_path('module', $project_name);
-  }
-
-  /**
-   * Return available database schema updates one a new version is installed.
-   */
-  public function getSchemaUpdates() {
-    require_once DRUPAL_ROOT . '/includes/install.inc';
-    require_once DRUPAL_ROOT . '/includes/update.inc';
-
-    if (_update_get_project_type($project) != 'module') {
-      return array();
-    }
-    module_load_include('install', $project);
-
-    if (!$updates = drupal_get_schema_versions($project)) {
-      return array();
-    }
-    $updates_to_run = array();
-    $modules_with_updates = update_get_update_list();
-    if ($updates = $modules_with_updates[$project]) {
-      if ($updates['start']) {
-        return $updates['pending'];
-      }
-    }
-    return array();
-  }
-
-  /**
-   * Returns a list of post install actions.
-   */
-  public function postInstallTasks() {
-    return array(
-      l(t('Install another module'), 'admin/modules/install'),
-      l(t('Enable newly added modules'), 'admin/modules'),
-      l(t('Administration pages'), 'admin'),
-    );
-  }
-
-  public function postUpdateTasks() {
-    // We don't want to check for DB updates here, we do that once for all
-    // updated modules on the landing page.
-  }
-
-}
-
-/**
- * Class for updating themes using FileTransfer classes via authorize.php.
- */
-class ThemeUpdater extends Updater implements DrupalUpdaterInterface {
-
-  /**
-   * Return the directory where a theme should be installed.
-   *
-   * If the theme is already installed, drupal_get_path() will return
-   * a valid path and we should install it there (although we need to use an
-   * absolute path, so we prepend DRUPAL_ROOT). If we're installing a new
-   * theme, we always want it to go into sites/all/themes, since that's
-   * where all the documentation recommends users install their themes, and
-   * there's no way that can conflict on a multi-site installation, since
-   * the Update manager won't let you install a new theme if it's already
-   * found on your system, and if there was a copy in sites/all, we'd see it.
-   */
-  public function getInstallDirectory() {
-    if ($relative_path = drupal_get_path('theme', $this->name)) {
-      $relative_path = dirname($relative_path);
-    }
-    else {
-      $relative_path = 'sites/all/themes';
-    }
-    return DRUPAL_ROOT . '/' . $relative_path;
-  }
-
-  public function isInstalled() {
-    return (bool) drupal_get_path('theme', $this->name);
-  }
-
-  static function canUpdateDirectory($directory) {
-    // This is a lousy test, but don't know how else to confirm it is a theme.
-    if (file_scan_directory($directory, '/.*\.module$/')) {
-      return FALSE;
-    }
-    return TRUE;
-  }
-
-  public static function canUpdate($project_name) {
-    return (bool) drupal_get_path('theme', $project_name);
-  }
-
-  public function postInstall() {
-    // Update the system table.
-    clearstatcache();
-    system_rebuild_theme_data();
-
-  }
-
-  public function postInstallTasks() {
-    return array(
-      l(t('Enable newly added themes'), 'admin/appearance'),
-      l(t('Administration pages'), 'admin'),
-    );
-  }
-}
diff --git a/modules/system/theme.api.php b/modules/system/theme.api.php
deleted file mode 100644
index 56e9ba1..0000000
--- a/modules/system/theme.api.php
+++ /dev/null
@@ -1,240 +0,0 @@
-<?php
-
-/**
- * @defgroup themeable Default theme implementations
- * @{
- * Functions and templates for the user interface to be implemented by themes.
- *
- * Drupal's presentation layer is a pluggable system known as the theme
- * layer. Each theme can take control over most of Drupal's output, and
- * has complete control over the CSS.
- *
- * Inside Drupal, the theme layer is utilized by the use of the theme()
- * function, which is passed the name of a component (the theme hook)
- * and an array of variables. For example,
- * theme('table', array('header' => $header, 'rows' => $rows));
- * Additionally, the theme() function can take an array of theme
- * hooks, which can be used to provide 'fallback' implementations to
- * allow for more specific control of output. For example, the function:
- * theme(array('table__foo', 'table'), $variables) would look to see if
- * 'table__foo' is registered anywhere; if it is not, it would 'fall back'
- * to the generic 'table' implementation. This can be used to attach specific
- * theme functions to named objects, allowing the themer more control over
- * specific types of output.
- *
- * As of Drupal 6, every theme hook is required to be registered by the
- * module that owns it, so that Drupal can tell what to do with it and
- * to make it simple for themes to identify and override the behavior
- * for these calls.
- *
- * The theme hooks are registered via hook_theme(), which returns an
- * array of arrays with information about the hook. It describes the
- * arguments the function or template will need, and provides
- * defaults for the template in case they are not filled in. If the default
- * implementation is a function, by convention it is named theme_HOOK().
- *
- * Each module should provide a default implementation for theme_hooks that
- * it registers. This implementation may be either a function or a template;
- * if it is a function it must be specified via hook_theme(). By convention,
- * default implementations of theme hooks are named theme_HOOK. Default
- * template implementations are stored in the module directory.
- *
- * Drupal's default template renderer is a simple PHP parsing engine that
- * includes the template and stores the output. Drupal's theme engines
- * can provide alternate template engines, such as XTemplate, Smarty and
- * PHPTal. The most common template engine is PHPTemplate (included with
- * Drupal and implemented in phptemplate.engine, which uses Drupal's default
- * template renderer.
- *
- * In order to create theme-specific implementations of these hooks, themes can
- * implement their own version of theme hooks, either as functions or templates.
- * These implementations will be used instead of the default implementation. If
- * using a pure .theme without an engine, the .theme is required to implement
- * its own version of hook_theme() to tell Drupal what it is implementing;
- * themes utilizing an engine will have their well-named theming functions
- * automatically registered for them. While this can vary based upon the theme
- * engine, the standard set by phptemplate is that theme functions should be
- * named THEMENAME_HOOK. For example, for Drupal's default theme (Bartik) to
- * implement the 'table' hook, the phptemplate.engine would find
- * bartik_table().
- *
- * The theme system is described and defined in theme.inc.
- *
- * @see theme()
- * @see hook_theme()
- * @see hooks
- * @see callbacks
- *
- * @} End of "defgroup themeable".
- */
-
-/**
- * Allow themes to alter the theme-specific settings form.
- *
- * With this hook, themes can alter the theme-specific settings form in any way
- * allowable by Drupal's Form API, such as adding form elements, changing
- * default values and removing form elements. See the Form API documentation on
- * api.drupal.org for detailed information.
- *
- * Note that the base theme's form alterations will be run before any sub-theme
- * alterations.
- *
- * @param $form
- *   Nested array of form elements that comprise the form.
- * @param $form_state
- *   A keyed array containing the current state of the form.
- */
-function hook_form_system_theme_settings_alter(&$form, &$form_state) {
-  // Add a checkbox to toggle the breadcrumb trail.
-  $form['toggle_breadcrumb'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Display the breadcrumb'),
-    '#default_value' => theme_get_setting('toggle_breadcrumb'),
-    '#description'   => t('Show a trail of links from the homepage to the current page.'),
-  );
-}
-
-/**
- * Preprocess theme variables for templates.
- *
- * This hook allows modules to preprocess theme variables for theme templates.
- * It is called for all theme hooks implemented as templates, but not for theme
- * hooks implemented as functions. hook_preprocess_HOOK() can be used to
- * preprocess variables for a specific theme hook, whether implemented as a
- * template or function.
- *
- * For more detailed information, see theme().
- *
- * @param $variables
- *   The variables array (modify in place).
- * @param $hook
- *   The name of the theme hook.
- */
-function hook_preprocess(&$variables, $hook) {
- static $hooks;
-
-  // Add contextual links to the variables, if the user has permission.
-
-  if (!user_access('access contextual links')) {
-    return;
-  }
-
-  if (!isset($hooks)) {
-    $hooks = theme_get_registry();
-  }
-
-  // Determine the primary theme function argument.
-  if (isset($hooks[$hook]['variables'])) {
-    $keys = array_keys($hooks[$hook]['variables']);
-    $key = $keys[0];
-  }
-  else {
-    $key = $hooks[$hook]['render element'];
-  }
-
-  if (isset($variables[$key])) {
-    $element = $variables[$key];
-  }
-
-  if (isset($element) && is_array($element) && !empty($element['#contextual_links'])) {
-    $variables['title_suffix']['contextual_links'] = contextual_links_view($element);
-    if (!empty($variables['title_suffix']['contextual_links'])) {
-      $variables['classes_array'][] = 'contextual-links-region';
-    }
-  }
-}
-
-/**
- * Preprocess theme variables for a specific theme hook.
- *
- * This hook allows modules to preprocess theme variables for a specific theme
- * hook. It should only be used if a module needs to override or add to the
- * theme preprocessing for a theme hook it didn't define.
- *
- * For more detailed information, see theme().
- *
- * @param $variables
- *   The variables array (modify in place).
- */
-function hook_preprocess_HOOK(&$variables) {
-  // This example is from rdf_preprocess_image(). It adds an RDF attribute
-  // to the image hook's variables.
-  $variables['attributes']['typeof'] = array('foaf:Image');
-}
-
-/**
- * Process theme variables for templates.
- *
- * This hook allows modules to process theme variables for theme templates. It
- * is called for all theme hooks implemented as templates, but not for theme
- * hooks implemented as functions. hook_process_HOOK() can be used to process
- * variables for a specific theme hook, whether implemented as a template or
- * function.
- *
- * For more detailed information, see theme().
- *
- * @param $variables
- *   The variables array (modify in place).
- * @param $hook
- *   The name of the theme hook.
- */
-function hook_process(&$variables, $hook) {
-  // Wraps variables in RDF wrappers.
-  if (!empty($variables['rdf_template_variable_attributes_array'])) {
-    foreach ($variables['rdf_template_variable_attributes_array'] as $variable_name => $attributes) {
-      $context = array(
-        'hook' => $hook,
-        'variable_name' => $variable_name,
-        'variables' => $variables,
-      );
-      $variables[$variable_name] = theme('rdf_template_variable_wrapper', array('content' => $variables[$variable_name], 'attributes' => $attributes, 'context' => $context));
-    }
-  }
-}
-
-/**
- * Process theme variables for a specific theme hook.
- *
- * This hook allows modules to process theme variables for a specific theme
- * hook. It should only be used if a module needs to override or add to the
- * theme processing for a theme hook it didn't define.
- *
- * For more detailed information, see theme().
- *
- * @param $variables
- *   The variables array (modify in place).
- */
-function hook_process_HOOK(&$variables) {
-  // @todo There are no use-cases in Drupal core for this hook. Find one from a
-  //   contributed module, or come up with a good example. Coming up with a good
-  //   example might be tough, since the intent is for nearly everything to be
-  //   achievable via preprocess functions, and for process functions to only be
-  //   used when requiring the later execution time.
-}
-
-/**
- * Respond to themes being enabled.
- *
- * @param array $theme_list
- *   Array containing the names of the themes being enabled.
- *
- * @see theme_enable()
- */
-function hook_themes_enabled($theme_list) {
-  foreach ($theme_list as $theme) {
-    block_theme_initialize($theme);
-  }
-}
-
-/**
- * Respond to themes being disabled.
- *
- * @param array $theme_list
- *   Array containing the names of the themes being disabled.
- *
- * @see theme_disable()
- */
-function hook_themes_disabled($theme_list) {
- // Clear all update module caches.
-  _update_cache_clear();
-}
diff --git a/modules/taxonomy/taxonomy-term.tpl.php b/modules/taxonomy/taxonomy-term.tpl.php
deleted file mode 100644
index a225c3a..0000000
--- a/modules/taxonomy/taxonomy-term.tpl.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to display a term.
- *
- * Available variables:
- * - $name: (deprecated) The unsanitized name of the term. Use $term_name
- *   instead.
- * - $content: An array of items for the content of the term (fields and
- *   description). Use render($content) to print them all, or print a subset
- *   such as render($content['field_example']). Use
- *   hide($content['field_example']) to temporarily suppress the printing of a
- *   given element.
- * - $term_url: Direct URL of the current term.
- * - $term_name: Name of the current term.
- * - $classes: String of classes that can be used to style contextually through
- *   CSS. It can be manipulated through the variable $classes_array from
- *   preprocess functions. The default values can be one or more of the following:
- *   - taxonomy-term: The current template type, i.e., "theming hook".
- *   - vocabulary-[vocabulary-name]: The vocabulary to which the term belongs to.
- *     For example, if the term is a "Tag" it would result in "vocabulary-tag".
- *
- * Other variables:
- * - $term: Full term object. Contains data that may not be safe.
- * - $view_mode: View mode, e.g. 'full', 'teaser'...
- * - $page: Flag for the full page state.
- * - $classes_array: Array of html class attribute values. It is flattened
- *   into a string within the variable $classes.
- * - $zebra: Outputs either "even" or "odd". Useful for zebra striping in
- *   teaser listings.
- * - $id: Position of the term. Increments each time it's output.
- * - $is_front: Flags true when presented in the front page.
- * - $logged_in: Flags true when the current user is a logged-in member.
- * - $is_admin: Flags true when the current user is an administrator.
- *
- * @see template_preprocess()
- * @see template_preprocess_taxonomy_term()
- * @see template_process()
- *
- * @ingroup themeable
- */
-?>
-<div id="taxonomy-term-<?php print $term->tid; ?>" class="<?php print $classes; ?>">
-
-  <?php if (!$page): ?>
-    <h2><a href="<?php print $term_url; ?>"><?php print $term_name; ?></a></h2>
-  <?php endif; ?>
-
-  <div class="content">
-    <?php print render($content); ?>
-  </div>
-
-</div>
diff --git a/modules/taxonomy/taxonomy.admin.inc b/modules/taxonomy/taxonomy.admin.inc
deleted file mode 100644
index 828fde0..0000000
--- a/modules/taxonomy/taxonomy.admin.inc
+++ /dev/null
@@ -1,984 +0,0 @@
-<?php
-
-/**
- * @file
- * Administrative page callbacks for the taxonomy module.
- */
-
-/**
- * Form builder to list and manage vocabularies.
- *
- * @ingroup forms
- * @see taxonomy_overview_vocabularies_submit()
- * @see theme_taxonomy_overview_vocabularies()
- */
-function taxonomy_overview_vocabularies($form) {
-  $vocabularies = taxonomy_get_vocabularies();
-  $form['#tree'] = TRUE;
-  foreach ($vocabularies as $vocabulary) {
-    $form[$vocabulary->vid]['#vocabulary'] = $vocabulary;
-    $form[$vocabulary->vid]['name'] = array('#markup' => check_plain($vocabulary->name));
-    $form[$vocabulary->vid]['weight'] = array(
-      '#type' => 'weight',
-      '#title' => t('Weight for @title', array('@title' => $vocabulary->name)),
-      '#title_display' => 'invisible',
-      '#delta' => 10,
-      '#default_value' => $vocabulary->weight,
-    );
-    $form[$vocabulary->vid]['edit'] = array('#type' => 'link', '#title' => t('edit vocabulary'), '#href' => "admin/structure/taxonomy/$vocabulary->machine_name/edit");
-    $form[$vocabulary->vid]['list'] = array('#type' => 'link', '#title' => t('list terms'), '#href' => "admin/structure/taxonomy/$vocabulary->machine_name");
-    $form[$vocabulary->vid]['add'] = array('#type' => 'link', '#title' => t('add terms'), '#href' => "admin/structure/taxonomy/$vocabulary->machine_name/add");
-  }
-
-  // Only make this form include a submit button and weight if more than one
-  // vocabulary exists.
-  if (count($vocabularies) > 1) {
-    $form['actions'] = array('#type' => 'actions');
-    $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save'));
-  }
-  elseif (isset($vocabulary)) {
-    unset($form[$vocabulary->vid]['weight']);
-  }
-  return $form;
-}
-
-/**
- * Submit handler for vocabularies overview. Updates changed vocabulary weights.
- *
- * @see taxonomy_overview_vocabularies()
- */
-function taxonomy_overview_vocabularies_submit($form, &$form_state) {
-  foreach ($form_state['values'] as $vid => $vocabulary) {
-    if (is_numeric($vid) && $form[$vid]['#vocabulary']->weight != $form_state['values'][$vid]['weight']) {
-      $form[$vid]['#vocabulary']->weight = $form_state['values'][$vid]['weight'];
-      taxonomy_vocabulary_save($form[$vid]['#vocabulary']);
-    }
-  }
-  drupal_set_message(t('The configuration options have been saved.'));
-}
-
-/**
- * Returns HTML for the vocabulary overview form as a sortable list of vocabularies.
- *
- * @param $variables
- *   An associative array containing:
- *   - form: A render element representing the form.
- *
- * @see taxonomy_overview_vocabularies()
- * @ingroup themeable
- */
-function theme_taxonomy_overview_vocabularies($variables) {
-  $form = $variables['form'];
-
-  $rows = array();
-
-  foreach (element_children($form) as $key) {
-    if (isset($form[$key]['name'])) {
-      $vocabulary = &$form[$key];
-
-      $row = array();
-      $row[] = drupal_render($vocabulary['name']);
-      if (isset($vocabulary['weight'])) {
-        $vocabulary['weight']['#attributes']['class'] = array('vocabulary-weight');
-        $row[] = drupal_render($vocabulary['weight']);
-      }
-      $row[] = drupal_render($vocabulary['edit']);
-      $row[] = drupal_render($vocabulary['list']);
-      $row[] = drupal_render($vocabulary['add']);
-      $rows[] = array('data' => $row, 'class' => array('draggable'));
-    }
-  }
-
-  $header = array(t('Vocabulary name'));
-  if (isset($form['actions'])) {
-    $header[] = t('Weight');
-    drupal_add_tabledrag('taxonomy', 'order', 'sibling', 'vocabulary-weight');
-  }
-  $header[] = array('data' => t('Operations'), 'colspan' => '3');
-  return theme('table', array('header' => $header, 'rows' => $rows, 'empty' => t('No vocabularies available. <a href="@link">Add vocabulary</a>.', array('@link' => url('admin/structure/taxonomy/add'))), 'attributes' => array('id' => 'taxonomy'))) . drupal_render_children($form);
-}
-
-/**
- * Form builder for the vocabulary editing form.
- *
- * @ingroup forms
- * @see taxonomy_form_vocabulary_submit()
- * @see taxonomy_form_vocabulary_validate()
- */
-function taxonomy_form_vocabulary($form, &$form_state, $edit = array()) {
-  // During initial form build, add the entity to the form state for use
-  // during form building and processing. During a rebuild, use what is in the
-  // form state.
-  if (!isset($form_state['vocabulary'])) {
-    $vocabulary = is_object($edit) ? $edit : (object) $edit;
-    $defaults = array(
-      'name' => '',
-      'machine_name' => '',
-      'description' => '',
-      'hierarchy' => 0,
-      'weight' => 0,
-    );
-    foreach ($defaults as $key => $value) {
-      if (!isset($vocabulary->$key)) {
-        $vocabulary->$key = $value;
-      }
-    }
-    $form_state['vocabulary'] = $vocabulary;
-  }
-  else {
-    $vocabulary = $form_state['vocabulary'];
-  }
-
-  // @todo Legacy support. Modules are encouraged to access the entity using
-  //   $form_state. Remove in Drupal 8.
-  $form['#vocabulary'] = $form_state['vocabulary'];
-
-  // Check whether we need a deletion confirmation form.
-  if (isset($form_state['confirm_delete']) && isset($form_state['values']['vid'])) {
-    return taxonomy_vocabulary_confirm_delete($form, $form_state, $form_state['values']['vid']);
-  }
-  $form['name'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Name'),
-    '#default_value' => $vocabulary->name,
-    '#maxlength' => 255,
-    '#required' => TRUE,
-  );
-  $form['machine_name'] = array(
-    '#type' => 'machine_name',
-    '#default_value' => $vocabulary->machine_name,
-    '#maxlength' => 255,
-    '#machine_name' => array(
-      'exists' => 'taxonomy_vocabulary_machine_name_load',
-    ),
-  );
-  $form['old_machine_name'] = array(
-    '#type' => 'value',
-    '#value' => $vocabulary->machine_name,
-  );
-  $form['description'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Description'),
-    '#default_value' => $vocabulary->description,
-  );
-  // Set the hierarchy to "multiple parents" by default. This simplifies the
-  // vocabulary form and standardizes the term form.
-  $form['hierarchy'] = array(
-    '#type' => 'value',
-    '#value' => '0',
-  );
-
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save'));
-  if (isset($vocabulary->vid)) {
-    $form['actions']['delete'] = array('#type' => 'submit', '#value' => t('Delete'));
-    $form['vid'] = array('#type' => 'value', '#value' => $vocabulary->vid);
-    $form['module'] = array('#type' => 'value', '#value' => $vocabulary->module);
-  }
-  $form['#validate'][] = 'taxonomy_form_vocabulary_validate';
-
-  return $form;
-}
-
-/**
- * Form validation handler for taxonomy_form_vocabulary().
- *
- * Makes sure that the machine name of the vocabulary is not in the
- * disallowed list (names that conflict with menu items, such as 'list'
- * and 'add').
- *
- * @see taxonomy_form_vocabulary()
- * @see taxonomy_form_vocabulary_submit()
- */
-function taxonomy_form_vocabulary_validate($form, &$form_state) {
-  // During the deletion there is no 'machine_name' key
-  if (isset($form_state['values']['machine_name'])) {
-    // Do not allow machine names to conflict with taxonomy path arguments.
-    $machine_name = $form_state['values']['machine_name'];
-    $disallowed = array('add', 'list');
-    if (in_array($machine_name, $disallowed)) {
-      form_set_error('machine_name', t('The machine-readable name cannot be "add" or "list".'));
-    }
-  }
-}
-
-/**
- * Form submission handler for taxonomy_form_vocabulary().
- *
- * @see taxonomy_form_vocabulary()
- * @see taxonomy_form_vocabulary_validate()
- */
-function taxonomy_form_vocabulary_submit($form, &$form_state) {
-  if ($form_state['triggering_element']['#value'] == t('Delete')) {
-    // Rebuild the form to confirm vocabulary deletion.
-    $form_state['rebuild'] = TRUE;
-    $form_state['confirm_delete'] = TRUE;
-    return;
-  }
-
-  $vocabulary = $form_state['vocabulary'];
-  entity_form_submit_build_entity('taxonomy_vocabulary', $vocabulary, $form, $form_state);
-
-  switch (taxonomy_vocabulary_save($vocabulary)) {
-    case SAVED_NEW:
-      drupal_set_message(t('Created new vocabulary %name.', array('%name' => $vocabulary->name)));
-      watchdog('taxonomy', 'Created new vocabulary %name.', array('%name' => $vocabulary->name), WATCHDOG_NOTICE, l(t('edit'), 'admin/structure/taxonomy/' . $vocabulary->machine_name . '/edit'));
-      break;
-
-    case SAVED_UPDATED:
-      drupal_set_message(t('Updated vocabulary %name.', array('%name' => $vocabulary->name)));
-      watchdog('taxonomy', 'Updated vocabulary %name.', array('%name' => $vocabulary->name), WATCHDOG_NOTICE, l(t('edit'), 'admin/structure/taxonomy/' . $vocabulary->machine_name . '/edit'));
-      break;
-  }
-
-  $form_state['values']['vid'] = $vocabulary->vid;
-  $form_state['vid'] = $vocabulary->vid;
-  $form_state['redirect'] = 'admin/structure/taxonomy';
-}
-
-/**
- * Form builder for the taxonomy terms overview.
- *
- * Display a tree of all the terms in a vocabulary, with options to edit
- * each one. The form is made drag and drop by the theme function.
- *
- * @ingroup forms
- * @see taxonomy_overview_terms_submit()
- * @see theme_taxonomy_overview_terms()
- */
-function taxonomy_overview_terms($form, &$form_state, $vocabulary) {
-  global $pager_page_array, $pager_total, $pager_total_items;
-
-  // Check for confirmation forms.
-  if (isset($form_state['confirm_reset_alphabetical'])) {
-    return taxonomy_vocabulary_confirm_reset_alphabetical($form, $form_state, $vocabulary->vid);
-  }
-
-  $form['#vocabulary'] = $vocabulary;
-  $form['#tree'] = TRUE;
-  $form['#parent_fields'] = FALSE;
-
-  $page            = isset($_GET['page']) ? $_GET['page'] : 0;
-  $page_increment  = variable_get('taxonomy_terms_per_page_admin', 100);  // Number of terms per page.
-  $page_entries    = 0;   // Elements shown on this page.
-  $before_entries  = 0;   // Elements at the root level before this page.
-  $after_entries   = 0;   // Elements at the root level after this page.
-  $root_entries    = 0;   // Elements at the root level on this page.
-
-  // Terms from previous and next pages are shown if the term tree would have
-  // been cut in the middle. Keep track of how many extra terms we show on each
-  // page of terms.
-  $back_step    = NULL;
-  $forward_step = 0;
-
-  // An array of the terms to be displayed on this page.
-  $current_page = array();
-
-  $delta = 0;
-  $term_deltas = array();
-  $tree = taxonomy_get_tree($vocabulary->vid);
-  $term = current($tree);
-  do {
-    // In case this tree is completely empty.
-    if (empty($term)) {
-      break;
-    }
-    $delta++;
-    // Count entries before the current page.
-    if ($page && ($page * $page_increment) > $before_entries && !isset($back_step)) {
-      $before_entries++;
-      continue;
-    }
-    // Count entries after the current page.
-    elseif ($page_entries > $page_increment && isset($complete_tree)) {
-      $after_entries++;
-      continue;
-    }
-
-    // Do not let a term start the page that is not at the root.
-    if (isset($term->depth) && ($term->depth > 0) && !isset($back_step)) {
-      $back_step = 0;
-      while ($pterm = prev($tree)) {
-        $before_entries--;
-        $back_step++;
-        if ($pterm->depth == 0) {
-          prev($tree);
-          continue 2; // Jump back to the start of the root level parent.
-       }
-      }
-    }
-    $back_step = isset($back_step) ? $back_step : 0;
-
-    // Continue rendering the tree until we reach the a new root item.
-    if ($page_entries >= $page_increment + $back_step + 1 && $term->depth == 0 && $root_entries > 1) {
-      $complete_tree = TRUE;
-      // This new item at the root level is the first item on the next page.
-      $after_entries++;
-      continue;
-    }
-    if ($page_entries >= $page_increment + $back_step) {
-      $forward_step++;
-    }
-
-    // Finally, if we've gotten down this far, we're rendering a term on this page.
-    $page_entries++;
-    $term_deltas[$term->tid] = isset($term_deltas[$term->tid]) ? $term_deltas[$term->tid] + 1 : 0;
-    $key = 'tid:' . $term->tid . ':' . $term_deltas[$term->tid];
-
-    // Keep track of the first term displayed on this page.
-    if ($page_entries == 1) {
-      $form['#first_tid'] = $term->tid;
-    }
-    // Keep a variable to make sure at least 2 root elements are displayed.
-    if ($term->parents[0] == 0) {
-      $root_entries++;
-    }
-    $current_page[$key] = $term;
-  } while ($term = next($tree));
-
-  // Because we didn't use a pager query, set the necessary pager variables.
-  $total_entries = $before_entries + $page_entries + $after_entries;
-  $pager_total_items[0] = $total_entries;
-  $pager_page_array[0] = $page;
-  $pager_total[0] = ceil($total_entries / $page_increment);
-
-  // If this form was already submitted once, it's probably hit a validation
-  // error. Ensure the form is rebuilt in the same order as the user submitted.
-  if (!empty($form_state['input'])) {
-    $order = array_flip(array_keys($form_state['input'])); // Get the $_POST order.
-    $current_page = array_merge($order, $current_page); // Update our form with the new order.
-    foreach ($current_page as $key => $term) {
-      // Verify this is a term for the current page and set at the current depth.
-      if (is_array($form_state['input'][$key]) && is_numeric($form_state['input'][$key]['tid'])) {
-        $current_page[$key]->depth = $form_state['input'][$key]['depth'];
-      }
-      else {
-        unset($current_page[$key]);
-      }
-    }
-  }
-
-  // Build the actual form.
-  foreach ($current_page as $key => $term) {
-    // Save the term for the current page so we don't have to load it a second time.
-    $form[$key]['#term'] = (array) $term;
-    if (isset($term->parents)) {
-      $form[$key]['#term']['parent'] = $term->parent = $term->parents[0];
-      unset($form[$key]['#term']['parents'], $term->parents);
-    }
-
-    $form[$key]['view'] = array('#type' => 'link', '#title' => $term->name, '#href' => "taxonomy/term/$term->tid");
-    if ($vocabulary->hierarchy < 2 && count($tree) > 1) {
-      $form['#parent_fields'] = TRUE;
-      $form[$key]['tid'] = array(
-        '#type' => 'hidden',
-        '#value' => $term->tid
-      );
-      $form[$key]['parent'] = array(
-        '#type' => 'hidden',
-        // Yes, default_value on a hidden. It needs to be changeable by the javascript.
-        '#default_value' => $term->parent,
-      );
-      $form[$key]['depth'] = array(
-        '#type' => 'hidden',
-        // Same as above, the depth is modified by javascript, so it's a default_value.
-        '#default_value' => $term->depth,
-      );
-      $form[$key]['weight'] = array(
-        '#type' => 'weight',
-        '#delta' => $delta,
-        '#title_display' => 'invisible',
-        '#title' => t('Weight for added term'),
-        '#default_value' => $term->weight,
-      );
-    }
-    $form[$key]['edit'] = array('#type' => 'link', '#title' => t('edit'), '#href' => 'taxonomy/term/' . $term->tid . '/edit', '#options' => array('query' => drupal_get_destination()));
-  }
-
-  $form['#total_entries'] = $total_entries;
-  $form['#page_increment'] = $page_increment;
-  $form['#page_entries'] = $page_entries;
-  $form['#back_step'] = $back_step;
-  $form['#forward_step'] = $forward_step;
-  $form['#empty_text'] = t('No terms available. <a href="@link">Add term</a>.', array('@link' => url('admin/structure/taxonomy/' . $vocabulary->machine_name . '/add')));
-
-  if ($vocabulary->hierarchy < 2 && count($tree) > 1) {
-    $form['actions'] = array('#type' => 'actions', '#tree' => FALSE);
-    $form['actions']['submit'] = array(
-      '#type' => 'submit',
-      '#value' => t('Save')
-    );
-    $form['actions']['reset_alphabetical'] = array(
-      '#type' => 'submit',
-      '#value' => t('Reset to alphabetical')
-    );
-    $form_state['redirect'] = array($_GET['q'], (isset($_GET['page']) ? array('query' => array('page' => $_GET['page'])) : array()));
-  }
-
-  return $form;
-}
-
-/**
- * Submit handler for terms overview form.
- *
- * Rather than using a textfield or weight field, this form depends entirely
- * upon the order of form elements on the page to determine new weights.
- *
- * Because there might be hundreds or thousands of taxonomy terms that need to
- * be ordered, terms are weighted from 0 to the number of terms in the
- * vocabulary, rather than the standard -10 to 10 scale. Numbers are sorted
- * lowest to highest, but are not necessarily sequential. Numbers may be skipped
- * when a term has children so that reordering is minimal when a child is
- * added or removed from a term.
- *
- * @see taxonomy_overview_terms()
- */
-function taxonomy_overview_terms_submit($form, &$form_state) {
-  if ($form_state['triggering_element']['#value'] == t('Reset to alphabetical')) {
-    // Execute the reset action.
-    if ($form_state['values']['reset_alphabetical'] === TRUE) {
-      return taxonomy_vocabulary_confirm_reset_alphabetical_submit($form, $form_state);
-    }
-    // Rebuild the form to confirm the reset action.
-    $form_state['rebuild'] = TRUE;
-    $form_state['confirm_reset_alphabetical'] = TRUE;
-    return;
-  }
-
-  // Sort term order based on weight.
-  uasort($form_state['values'], 'drupal_sort_weight');
-
-  $vocabulary = $form['#vocabulary'];
-  $hierarchy = 0; // Update the current hierarchy type as we go.
-
-  $changed_terms = array();
-  $tree = taxonomy_get_tree($vocabulary->vid);
-
-  if (empty($tree)) {
-    return;
-  }
-
-  // Build a list of all terms that need to be updated on previous pages.
-  $weight = 0;
-  $term = (array) $tree[0];
-  while ($term['tid'] != $form['#first_tid']) {
-    if ($term['parents'][0] == 0 && $term['weight'] != $weight) {
-      $term['parent'] = $term['parents'][0];
-      $term['weight'] = $weight;
-      $changed_terms[$term['tid']] = $term;
-    }
-    $weight++;
-    $hierarchy = $term['parents'][0] != 0 ? 1 : $hierarchy;
-    $term = (array) $tree[$weight];
-  }
-
-  // Renumber the current page weights and assign any new parents.
-  $level_weights = array();
-  foreach ($form_state['values'] as $tid => $values) {
-    if (isset($form[$tid]['#term'])) {
-      $term = $form[$tid]['#term'];
-      // Give terms at the root level a weight in sequence with terms on previous pages.
-      if ($values['parent'] == 0 && $term['weight'] != $weight) {
-        $term['weight'] = $weight;
-        $changed_terms[$term['tid']] = $term;
-      }
-      // Terms not at the root level can safely start from 0 because they're all on this page.
-      elseif ($values['parent'] > 0) {
-        $level_weights[$values['parent']] = isset($level_weights[$values['parent']]) ? $level_weights[$values['parent']] + 1 : 0;
-        if ($level_weights[$values['parent']] != $term['weight']) {
-          $term['weight'] = $level_weights[$values['parent']];
-          $changed_terms[$term['tid']] = $term;
-        }
-      }
-      // Update any changed parents.
-      if ($values['parent'] != $term['parent']) {
-        $term['parent'] = $values['parent'];
-        $changed_terms[$term['tid']] = $term;
-      }
-      $hierarchy = $term['parent'] != 0 ? 1 : $hierarchy;
-      $weight++;
-    }
-  }
-
-  // Build a list of all terms that need to be updated on following pages.
-  for ($weight; $weight < count($tree); $weight++) {
-    $term = (array) $tree[$weight];
-    if ($term['parents'][0] == 0 && $term['weight'] != $weight) {
-      $term['parent'] = $term['parents'][0];
-      $term['weight'] = $weight;
-      $changed_terms[$term['tid']] = $term;
-    }
-    $hierarchy = $term['parents'][0] != 0 ? 1 : $hierarchy;
-  }
-
-  // Save all updated terms.
-  foreach ($changed_terms as $changed) {
-    $term = (object) $changed;
-    // Update term_hierachy and term_data directly since we don't have a
-    // fully populated term object to save.
-    db_update('taxonomy_term_hierarchy')
-      ->fields(array('parent' => $term->parent))
-      ->condition('tid', $term->tid, '=')
-      ->execute();
-
-    db_update('taxonomy_term_data')
-      ->fields(array('weight' => $term->weight))
-      ->condition('tid', $term->tid, '=')
-      ->execute();
-  }
-
-  // Update the vocabulary hierarchy to flat or single hierarchy.
-  if ($vocabulary->hierarchy != $hierarchy) {
-    $vocabulary->hierarchy = $hierarchy;
-    taxonomy_vocabulary_save($vocabulary);
-  }
-  drupal_set_message(t('The configuration options have been saved.'));
-}
-
-/**
- * Returns HTML for a terms overview form as a sortable list of terms.
- *
- * @param $variables
- *   An associative array containing:
- *   - form: A render element representing the form.
- *
- * @see taxonomy_overview_terms()
- * @ingroup themeable
- */
-function theme_taxonomy_overview_terms($variables) {
-  $form = $variables['form'];
-
-  $page_increment  = $form['#page_increment'];
-  $page_entries    = $form['#page_entries'];
-  $back_step     = $form['#back_step'];
-  $forward_step  = $form['#forward_step'];
-
-  // Add drag and drop if parent fields are present in the form.
-  if ($form['#parent_fields']) {
-    drupal_add_tabledrag('taxonomy', 'match', 'parent', 'term-parent', 'term-parent', 'term-id', FALSE);
-    drupal_add_tabledrag('taxonomy', 'depth', 'group', 'term-depth', NULL, NULL, FALSE);
-    drupal_add_js(drupal_get_path('module', 'taxonomy') . '/taxonomy.js');
-    drupal_add_js(array('taxonomy' => array('backStep' => $back_step, 'forwardStep' => $forward_step)), 'setting');
-    drupal_add_css(drupal_get_path('module', 'taxonomy') . '/taxonomy.css');
-  }
-  drupal_add_tabledrag('taxonomy', 'order', 'sibling', 'term-weight');
-
-  $errors = form_get_errors() != FALSE ? form_get_errors() : array();
-  $rows = array();
-  foreach (element_children($form) as $key) {
-    if (isset($form[$key]['#term'])) {
-      $term = &$form[$key];
-
-      $row = array();
-      $row[] = (isset($term['#term']['depth']) && $term['#term']['depth'] > 0 ? theme('indentation', array('size' => $term['#term']['depth'])) : ''). drupal_render($term['view']);
-      if ($form['#parent_fields']) {
-        $term['tid']['#attributes']['class'] = array('term-id');
-        $term['parent']['#attributes']['class'] = array('term-parent');
-        $term['depth']['#attributes']['class'] = array('term-depth');
-        $row[0] .= drupal_render($term['parent']) . drupal_render($term['tid']) . drupal_render($term['depth']);
-      }
-      $term['weight']['#attributes']['class'] = array('term-weight');
-      $row[] = drupal_render($term['weight']);
-      $row[] = drupal_render($term['edit']);
-      $row = array('data' => $row);
-      $rows[$key] = $row;
-    }
-  }
-
-  // Add necessary classes to rows.
-  $row_position = 0;
-  foreach ($rows as $key => $row) {
-    $rows[$key]['class'] = array();
-    if (isset($form['#parent_fields'])) {
-      $rows[$key]['class'][] = 'draggable';
-    }
-
-    // Add classes that mark which terms belong to previous and next pages.
-    if ($row_position < $back_step || $row_position >= $page_entries - $forward_step) {
-      $rows[$key]['class'][] = 'taxonomy-term-preview';
-    }
-
-    if ($row_position !== 0 && $row_position !== count($rows) - 1) {
-      if ($row_position == $back_step - 1 || $row_position == $page_entries - $forward_step - 1) {
-        $rows[$key]['class'][] = 'taxonomy-term-divider-top';
-      }
-      elseif ($row_position == $back_step || $row_position == $page_entries - $forward_step) {
-        $rows[$key]['class'][] = 'taxonomy-term-divider-bottom';
-      }
-    }
-
-    // Add an error class if this row contains a form error.
-    foreach ($errors as $error_key => $error) {
-      if (strpos($error_key, $key) === 0) {
-        $rows[$key]['class'][] = 'error';
-      }
-    }
-    $row_position++;
-  }
-
-  if (empty($rows)) {
-    $rows[] = array(array('data' => $form['#empty_text'], 'colspan' => '3'));
-  }
-
-  $header = array(t('Name'), t('Weight'), t('Operations'));
-  $output = theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('id' => 'taxonomy')));
-  $output .= drupal_render_children($form);
-  $output .= theme('pager');
-
-  return $output;
-}
-
-/**
- * Form function for the term edit form.
- *
- * @ingroup forms
- * @see taxonomy_form_term_submit()
- */
-function taxonomy_form_term($form, &$form_state, $edit = array(), $vocabulary = NULL) {
-  // During initial form build, add the term entity to the form state for use
-  // during form building and processing. During a rebuild, use what is in the
-  // form state.
-  if (!isset($form_state['term'])) {
-    $term = is_object($edit) ? $edit : (object) $edit;
-    if (!isset($vocabulary) && isset($term->vid)) {
-      $vocabulary = taxonomy_vocabulary_load($term->vid);
-    }
-    $defaults = array(
-      'name' => '',
-      'description' => '',
-      'format' => NULL,
-      'vocabulary_machine_name' => isset($vocabulary) ? $vocabulary->machine_name : NULL,
-      'tid' => NULL,
-      'weight' => 0,
-    );
-    foreach ($defaults as $key => $value) {
-      if (!isset($term->$key)) {
-        $term->$key = $value;
-      }
-    }
-    $form_state['term'] = $term;
-  }
-  else {
-    $term = $form_state['term'];
-    if (!isset($vocabulary) && isset($term->vid)) {
-      $vocabulary = taxonomy_vocabulary_load($term->vid);
-    }
-  }
-
-  $parent = array_keys(taxonomy_get_parents($term->tid));
-  $form['#term'] = (array) $term;
-  $form['#term']['parent'] = $parent;
-  $form['#vocabulary'] = $vocabulary;
-
-  // Check for confirmation forms.
-  if (isset($form_state['confirm_delete'])) {
-    return array_merge($form, taxonomy_term_confirm_delete($form, $form_state, $term->tid));
-  }
-
-  $form['name'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Name'),
-    '#default_value' => $term->name,
-    '#maxlength' => 255,
-    '#required' => TRUE,
-    '#weight' => -5,
-  );
-  $form['description'] = array(
-    '#type' => 'text_format',
-    '#title' => t('Description'),
-    '#default_value' => $term->description,
-    '#format' => $term->format,
-    '#weight' => 0,
-  );
-
-  $form['vocabulary_machine_name'] = array(
-    '#type' => 'value',
-    '#value' => isset($term->vocabulary_machine_name) ? $term->vocabulary_machine_name : $vocabulary->name,
-  );
-
-  $langcode = entity_language('taxonomy_term', $term);
-  field_attach_form('taxonomy_term', $term, $form, $form_state, $langcode);
-
-  $form['relations'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Relations'),
-    '#collapsible' => TRUE,
-    '#collapsed' => $vocabulary->hierarchy < 2,
-    '#weight' => 10,
-  );
-
-  // taxonomy_get_tree and taxonomy_get_parents may contain large numbers of
-  // items so we check for taxonomy_override_selector before loading the
-  // full vocabulary. Contrib modules can then intercept before
-  // hook_form_alter to provide scalable alternatives.
-  if (!variable_get('taxonomy_override_selector', FALSE)) {
-    $parent = array_keys(taxonomy_get_parents($term->tid));
-    $children = taxonomy_get_tree($vocabulary->vid, $term->tid);
-
-    // A term can't be the child of itself, nor of its children.
-    foreach ($children as $child) {
-      $exclude[] = $child->tid;
-    }
-    $exclude[] = $term->tid;
-
-    $tree = taxonomy_get_tree($vocabulary->vid);
-    $options = array('<' . t('root') . '>');
-    if (empty($parent)) {
-      $parent = array(0);
-    }
-    foreach ($tree as $item) {
-      if (!in_array($item->tid, $exclude)) {
-        $options[$item->tid] = str_repeat('-', $item->depth) . $item->name;
-      }
-    }
-    $form['relations']['parent'] = array(
-      '#type' => 'select',
-      '#title' => t('Parent terms'),
-      '#options' => $options,
-      '#default_value' => $parent,
-      '#multiple' => TRUE,
-    );
-
-  }
-  $form['relations']['weight'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Weight'),
-    '#size' => 6,
-    '#default_value' => $term->weight,
-    '#description' => t('Terms are displayed in ascending order by weight.'),
-    '#required' => TRUE,
-  );
-  $form['vid'] = array(
-    '#type' => 'value',
-    '#value' => $vocabulary->vid,
-  );
-  $form['tid'] = array(
-    '#type' => 'value',
-    '#value' => $term->tid,
-  );
-
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Save'),
-    '#weight' => 5,
-  );
-
-  if ($term->tid) {
-    $form['actions']['delete'] = array(
-      '#type' => 'submit',
-      '#value' => t('Delete'),
-      '#access' => user_access("delete terms in $vocabulary->vid") || user_access('administer taxonomy'),
-      '#weight' => 10,
-    );
-  }
-  else {
-    $form_state['redirect'] = $_GET['q'];
-  }
-
-  return $form;
-}
-
-/**
- * Validation handler for the term form.
- *
- * @see taxonomy_form_term()
- */
-function taxonomy_form_term_validate($form, &$form_state) {
-  entity_form_field_validate('taxonomy_term', $form, $form_state);
-
-  // Ensure numeric values.
-  if (isset($form_state['values']['weight']) && !is_numeric($form_state['values']['weight'])) {
-    form_set_error('weight', t('Weight value must be numeric.'));
-  }
-}
-
-/**
- * Submit handler to insert or update a term.
- *
- * @see taxonomy_form_term()
- */
-function taxonomy_form_term_submit($form, &$form_state) {
-  if ($form_state['triggering_element']['#value'] == t('Delete')) {
-    // Execute the term deletion.
-    if ($form_state['values']['delete'] === TRUE) {
-      return taxonomy_term_confirm_delete_submit($form, $form_state);
-    }
-    // Rebuild the form to confirm term deletion.
-    $form_state['rebuild'] = TRUE;
-    $form_state['confirm_delete'] = TRUE;
-    return;
-  }
-
-  $term = taxonomy_form_term_submit_build_taxonomy_term($form, $form_state);
-
-  $status = taxonomy_term_save($term);
-  switch ($status) {
-    case SAVED_NEW:
-      drupal_set_message(t('Created new term %term.', array('%term' => $term->name)));
-      watchdog('taxonomy', 'Created new term %term.', array('%term' => $term->name), WATCHDOG_NOTICE, l(t('edit'), 'taxonomy/term/' . $term->tid . '/edit'));
-      break;
-    case SAVED_UPDATED:
-      drupal_set_message(t('Updated term %term.', array('%term' => $term->name)));
-      watchdog('taxonomy', 'Updated term %term.', array('%term' => $term->name), WATCHDOG_NOTICE, l(t('edit'), 'taxonomy/term/' . $term->tid . '/edit'));
-      // Clear the page and block caches to avoid stale data.
-      cache_clear_all();
-      break;
-  }
-
-  $current_parent_count = count($form_state['values']['parent']);
-  $previous_parent_count = count($form['#term']['parent']);
-  // Root doesn't count if it's the only parent.
-  if ($current_parent_count == 1 && isset($form_state['values']['parent'][0])) {
-    $current_parent_count = 0;
-    $form_state['values']['parent'] = array();
-  }
-
-  // If the number of parents has been reduced to one or none, do a check on the
-  // parents of every term in the vocabulary value.
-  if ($current_parent_count < $previous_parent_count && $current_parent_count < 2) {
-    taxonomy_check_vocabulary_hierarchy($form['#vocabulary'], $form_state['values']);
-  }
-  // If we've increased the number of parents and this is a single or flat
-  // hierarchy, update the vocabulary immediately.
-  elseif ($current_parent_count > $previous_parent_count && $form['#vocabulary']->hierarchy < 2) {
-    $form['#vocabulary']->hierarchy = $current_parent_count == 1 ? 1 : 2;
-    taxonomy_vocabulary_save($form['#vocabulary']);
-  }
-
-  $form_state['values']['tid'] = $term->tid;
-  $form_state['tid'] = $term->tid;
-}
-
-/**
- * Updates the form state's term entity by processing this submission's values.
- */
-function taxonomy_form_term_submit_build_taxonomy_term($form, &$form_state) {
-  $term = $form_state['term'];
-  entity_form_submit_build_entity('taxonomy_term', $term, $form, $form_state);
-
-  // Convert text_format field into values expected by taxonomy_term_save().
-  $description = $form_state['values']['description'];
-  $term->description = $description['value'];
-  $term->format = $description['format'];
-  return $term;
-}
-
-/**
- * Form builder for the term delete form.
- *
- * @ingroup forms
- * @see taxonomy_term_confirm_delete_submit()
- */
-function taxonomy_term_confirm_delete($form, &$form_state, $tid) {
-  $term = taxonomy_term_load($tid);
-
-  // Always provide entity id in the same form key as in the entity edit form.
-  $form['tid'] = array('#type' => 'value', '#value' => $tid);
-
-  $form['#term'] = $term;
-  $form['type'] = array('#type' => 'value', '#value' => 'term');
-  $form['name'] = array('#type' => 'value', '#value' => $term->name);
-  $form['vocabulary_machine_name'] = array('#type' => 'value', '#value' => $term->vocabulary_machine_name);
-  $form['delete'] = array('#type' => 'value', '#value' => TRUE);
-  return confirm_form($form,
-    t('Are you sure you want to delete the term %title?',
-    array('%title' => $term->name)),
-    'admin/structure/taxonomy',
-    t('Deleting a term will delete all its children if there are any. This action cannot be undone.'),
-    t('Delete'),
-    t('Cancel'));
-}
-
-/**
- * Submit handler to delete a term after confirmation.
- *
- * @see taxonomy_term_confirm_delete()
- */
-function taxonomy_term_confirm_delete_submit($form, &$form_state) {
-  taxonomy_term_delete($form_state['values']['tid']);
-  taxonomy_check_vocabulary_hierarchy($form['#vocabulary'], $form_state['values']);
-  drupal_set_message(t('Deleted term %name.', array('%name' => $form_state['values']['name'])));
-  watchdog('taxonomy', 'Deleted term %name.', array('%name' => $form_state['values']['name']), WATCHDOG_NOTICE);
-  $form_state['redirect'] = 'admin/structure/taxonomy';
-  cache_clear_all();
-  return;
-}
-
-/**
- * Form builder for the vocabulary delete confirmation form.
- *
- * @ingroup forms
- * @see taxonomy_vocabulary_confirm_delete_submit()
- */
-function taxonomy_vocabulary_confirm_delete($form, &$form_state, $vid) {
-  $vocabulary = taxonomy_vocabulary_load($vid);
-
-  // Always provide entity id in the same form key as in the entity edit form.
-  $form['vid'] = array('#type' => 'value', '#value' => $vid);
-
-  $form['#vocabulary'] = $vocabulary;
-  $form['#id'] = 'taxonomy_vocabulary_confirm_delete';
-  $form['type'] = array('#type' => 'value', '#value' => 'vocabulary');
-  $form['name'] = array('#type' => 'value', '#value' => $vocabulary->name);
-  $form['#submit'] = array('taxonomy_vocabulary_confirm_delete_submit');
-  return confirm_form($form,
-    t('Are you sure you want to delete the vocabulary %title?',
-    array('%title' => $vocabulary->name)),
-    'admin/structure/taxonomy',
-    t('Deleting a vocabulary will delete all the terms in it. This action cannot be undone.'),
-    t('Delete'),
-    t('Cancel'));
-}
-
-/**
- * Submit handler to delete a vocabulary after confirmation.
- *
- * @see taxonomy_vocabulary_confirm_delete()
- */
-function taxonomy_vocabulary_confirm_delete_submit($form, &$form_state) {
-  $status = taxonomy_vocabulary_delete($form_state['values']['vid']);
-  drupal_set_message(t('Deleted vocabulary %name.', array('%name' => $form_state['values']['name'])));
-  watchdog('taxonomy', 'Deleted vocabulary %name.', array('%name' => $form_state['values']['name']), WATCHDOG_NOTICE);
-  $form_state['redirect'] = 'admin/structure/taxonomy';
-  cache_clear_all();
-  return;
-}
-
-/**
- * Form builder to confirm resetting a vocabulary to alphabetical order.
- *
- * @ingroup forms
- * @see taxonomy_vocabulary_confirm_reset_alphabetical_submit()
- */
-function taxonomy_vocabulary_confirm_reset_alphabetical($form, &$form_state, $vid) {
-  $vocabulary = taxonomy_vocabulary_load($vid);
-
-  $form['type'] = array('#type' => 'value', '#value' => 'vocabulary');
-  $form['vid'] = array('#type' => 'value', '#value' => $vid);
-  $form['machine_name'] = array('#type' => 'value', '#value' => $vocabulary->machine_name);
-  $form['name'] = array('#type' => 'value', '#value' => $vocabulary->name);
-  $form['reset_alphabetical'] = array('#type' => 'value', '#value' => TRUE);
-  return confirm_form($form,
-                  t('Are you sure you want to reset the vocabulary %title to alphabetical order?',
-                  array('%title' => $vocabulary->name)),
-                  'admin/structure/taxonomy/' . $vocabulary->machine_name,
-                  t('Resetting a vocabulary will discard all custom ordering and sort items alphabetically.'),
-                  t('Reset to alphabetical'),
-                  t('Cancel'));
-}
-
-/**
- * Submit handler to reset a vocabulary to alphabetical order after confirmation.
- *
- * @see taxonomy_vocabulary_confirm_reset_alphabetical()
- */
-function taxonomy_vocabulary_confirm_reset_alphabetical_submit($form, &$form_state) {
-  db_update('taxonomy_term_data')
-    ->fields(array('weight' => 0))
-    ->condition('vid', $form_state['values']['vid'])
-    ->execute();
-  drupal_set_message(t('Reset vocabulary %name to alphabetical order.', array('%name' => $form_state['values']['name'])));
-  watchdog('taxonomy', 'Reset vocabulary %name to alphabetical order.', array('%name' => $form_state['values']['name']), WATCHDOG_NOTICE);
-  $form_state['redirect'] = 'admin/structure/taxonomy/' . $form_state['values']['machine_name'];
-}
diff --git a/modules/taxonomy/taxonomy.api.php b/modules/taxonomy/taxonomy.api.php
deleted file mode 100644
index b9c23db..0000000
--- a/modules/taxonomy/taxonomy.api.php
+++ /dev/null
@@ -1,231 +0,0 @@
-<?php
-
-/**
- * @file
- * Hooks provided by the Taxonomy module.
- */
-
-/**
- * @addtogroup hooks
- * @{
- */
-
-/**
- * Act on taxonomy vocabularies when loaded.
- *
- * Modules implementing this hook can act on the vocabulary objects before they
- * are returned by taxonomy_vocabulary_load_multiple().
- *
- * @param $vocabulary
- *   An array of taxonomy vocabulary objects.
- */
-function hook_taxonomy_vocabulary_load($vocabularies) {
-  $result = db_select('mytable', 'm')
-    ->fields('m', array('vid', 'foo'))
-    ->condition('m.vid', array_keys($vocabularies), 'IN')
-    ->execute();
-  foreach ($result as $record) {
-    $vocabularies[$record->vid]->foo = $record->foo;
-  }
-}
-
-/**
- * Act on taxonomy vocabularies before they are saved.
- *
- * Modules implementing this hook can act on the vocabulary object before it is
- * inserted or updated.
- *
- * @param $vocabulary
- *   A taxonomy vocabulary object.
- */
-function hook_taxonomy_vocabulary_presave($vocabulary) {
-  $vocabulary->foo = 'bar';
-}
-
-/**
- * Act on taxonomy vocabularies when inserted.
- *
- * Modules implementing this hook can act on the vocabulary object when saved
- * to the database.
- *
- * @param $vocabulary
- *   A taxonomy vocabulary object.
- */
-function hook_taxonomy_vocabulary_insert($vocabulary) {
-  if ($vocabulary->machine_name == 'my_vocabulary') {
-    $vocabulary->weight = 100;
-  }
-}
-
-/**
- * Act on taxonomy vocabularies when updated.
- *
- * Modules implementing this hook can act on the vocabulary object when updated.
- *
- * @param $vocabulary
- *   A taxonomy vocabulary object.
- */
-function hook_taxonomy_vocabulary_update($vocabulary) {
-  db_update('mytable')
-    ->fields(array('foo' => $vocabulary->foo))
-    ->condition('vid', $vocabulary->vid)
-    ->execute();
-}
-
-/**
- * Respond to the deletion of taxonomy vocabularies.
- *
- * Modules implementing this hook can respond to the deletion of taxonomy
- * vocabularies from the database.
- *
- * @param $vocabulary
- *   A taxonomy vocabulary object.
- */
-function hook_taxonomy_vocabulary_delete($vocabulary) {
-  db_delete('mytable')
-    ->condition('vid', $vocabulary->vid)
-    ->execute();
-}
-
-/**
- * Act on taxonomy terms when loaded.
- *
- * Modules implementing this hook can act on the term objects returned by
- * taxonomy_term_load_multiple().
- *
- * For performance reasons, information to be added to term objects should be
- * loaded in a single query for all terms where possible.
- *
- * Since terms are stored and retrieved from cache during a page request, avoid
- * altering properties provided by the {taxonomy_term_data} table, since this
- * may affect the way results are loaded from cache in subsequent calls.
- *
- * @param $terms
- *   An array of term objects, indexed by tid.
- */
-function hook_taxonomy_term_load($terms) {
-  $result = db_select('mytable', 'm')
-    ->fields('m', array('tid', 'foo'))
-    ->condition('m.tid', array_keys($terms), 'IN')
-    ->execute();
-  foreach ($result as $record) {
-    $terms[$record->tid]->foo = $record->foo;
-  }
-}
-
-/**
- * Act on taxonomy terms before they are saved.
- *
- * Modules implementing this hook can act on the term object before it is
- * inserted or updated.
- *
- * @param $term
- *   A term object.
- */
-function hook_taxonomy_term_presave($term) {
-  $term->foo = 'bar';
-}
-
-/**
- * Act on taxonomy terms when inserted.
- *
- * Modules implementing this hook can act on the term object when saved to
- * the database.
- *
- * @param $term
- *   A taxonomy term object.
- */
-function hook_taxonomy_term_insert($term) {
-  db_insert('mytable')
-    ->fields(array(
-      'tid' => $term->tid,
-      'foo' => $term->foo,
-    ))
-    ->execute();
-}
-
-/**
- * Act on taxonomy terms when updated.
- *
- * Modules implementing this hook can act on the term object when updated.
- *
- * @param $term
- *   A taxonomy term object.
- */
-function hook_taxonomy_term_update($term) {
-  db_update('mytable')
-    ->fields(array('foo' => $term->foo))
-    ->condition('tid', $term->tid)
-    ->execute();
-}
-
-/**
- * Respond to the deletion of taxonomy terms.
- *
- * Modules implementing this hook can respond to the deletion of taxonomy
- * terms from the database.
- *
- * @param $term
- *   A taxonomy term object.
- */
-function hook_taxonomy_term_delete($term) {
-  db_delete('mytable')
-    ->condition('tid', $term->tid)
-    ->execute();
-}
-
-/**
- * Act on a taxonomy term that is being assembled before rendering.
- *
- * The module may add elements to $term->content prior to rendering. The
- * structure of $term->content is a renderable array as expected by
- * drupal_render().
- *
- * @param $term
- *   The term that is being assembled for rendering.
- * @param $view_mode
- *   The $view_mode parameter from taxonomy_term_view().
- * @param $langcode
- *   The language code used for rendering.
- *
- * @see hook_entity_view()
- */
-function hook_taxonomy_term_view($term, $view_mode, $langcode) {
-  $term->content['my_additional_field'] = array(
-    '#markup' => $additional_field,
-    '#weight' => 10,
-    '#theme' => 'mymodule_my_additional_field',
-  );
-}
-
-/**
- * Alter the results of taxonomy_term_view().
- *
- * This hook is called after the content has been assembled in a structured
- * array and may be used for doing processing which requires that the complete
- * taxonomy term content structure has been built.
- *
- * If the module wishes to act on the rendered HTML of the term rather than the
- * structured content array, it may use this hook to add a #post_render
- * callback. Alternatively, it could also implement
- * hook_preprocess_taxonomy_term(). See drupal_render() and theme()
- * documentation respectively for details.
- *
- * @param $build
- *   A renderable array representing the node content.
- *
- * @see hook_entity_view_alter()
- */
-function hook_taxonomy_term_view_alter(&$build) {
-  if ($build['#view_mode'] == 'full' && isset($build['an_additional_field'])) {
-    // Change its weight.
-    $build['an_additional_field']['#weight'] = -10;
-  }
-
-  // Add a #post_render callback to act on the rendered HTML of the term.
-  $build['#post_render'][] = 'my_module_node_post_render';
-}
-
-/**
- * @} End of "addtogroup hooks".
- */
diff --git a/modules/taxonomy/taxonomy.css b/modules/taxonomy/taxonomy.css
deleted file mode 100644
index 36cd641..0000000
--- a/modules/taxonomy/taxonomy.css
+++ /dev/null
@@ -1,13 +0,0 @@
-
-tr.taxonomy-term-preview {
-  background-color: #EEE;
-}
-tr.taxonomy-term-divider-top {
-  border-bottom: none;
-}
-tr.taxonomy-term-divider-bottom {
-  border-top: 1px dotted #CCC;
-}
-.taxonomy-term-description {
-  margin: 5px 0 20px;
-}
diff --git a/modules/taxonomy/taxonomy.info b/modules/taxonomy/taxonomy.info
deleted file mode 100644
index 44d4ebc..0000000
--- a/modules/taxonomy/taxonomy.info
+++ /dev/null
@@ -1,9 +0,0 @@
-name = Taxonomy
-description = Enables the categorization of content.
-package = Core
-version = VERSION
-core = 7.x
-dependencies[] = options
-files[] = taxonomy.module
-files[] = taxonomy.test
-configure = admin/structure/taxonomy
diff --git a/modules/taxonomy/taxonomy.js b/modules/taxonomy/taxonomy.js
deleted file mode 100644
index 1a0c790..0000000
--- a/modules/taxonomy/taxonomy.js
+++ /dev/null
@@ -1,40 +0,0 @@
-(function ($) {
-
-/**
- * Move a block in the blocks table from one region to another via select list.
- *
- * This behavior is dependent on the tableDrag behavior, since it uses the
- * objects initialized in that behavior to update the row.
- */
-Drupal.behaviors.termDrag = {
-  attach: function (context, settings) {
-    var table = $('#taxonomy', context);
-    var tableDrag = Drupal.tableDrag.taxonomy; // Get the blocks tableDrag object.
-    var rows = $('tr', table).length;
-
-    // When a row is swapped, keep previous and next page classes set.
-    tableDrag.row.prototype.onSwap = function (swappedRow) {
-      $('tr.taxonomy-term-preview', table).removeClass('taxonomy-term-preview');
-      $('tr.taxonomy-term-divider-top', table).removeClass('taxonomy-term-divider-top');
-      $('tr.taxonomy-term-divider-bottom', table).removeClass('taxonomy-term-divider-bottom');
-
-      if (settings.taxonomy.backStep) {
-        for (var n = 0; n < settings.taxonomy.backStep; n++) {
-          $(table[0].tBodies[0].rows[n]).addClass('taxonomy-term-preview');
-        }
-        $(table[0].tBodies[0].rows[settings.taxonomy.backStep - 1]).addClass('taxonomy-term-divider-top');
-        $(table[0].tBodies[0].rows[settings.taxonomy.backStep]).addClass('taxonomy-term-divider-bottom');
-      }
-
-      if (settings.taxonomy.forwardStep) {
-        for (var n = rows - settings.taxonomy.forwardStep - 1; n < rows - 1; n++) {
-          $(table[0].tBodies[0].rows[n]).addClass('taxonomy-term-preview');
-        }
-        $(table[0].tBodies[0].rows[rows - settings.taxonomy.forwardStep - 2]).addClass('taxonomy-term-divider-top');
-        $(table[0].tBodies[0].rows[rows - settings.taxonomy.forwardStep - 1]).addClass('taxonomy-term-divider-bottom');
-      }
-    };
-  }
-};
-
-})(jQuery);
diff --git a/modules/taxonomy/taxonomy.pages.inc b/modules/taxonomy/taxonomy.pages.inc
deleted file mode 100644
index 975ff12..0000000
--- a/modules/taxonomy/taxonomy.pages.inc
+++ /dev/null
@@ -1,181 +0,0 @@
-<?php
-
-/**
- * @file
- * Page callbacks for the taxonomy module.
- */
-
-/**
- * Menu callback; displays all nodes associated with a term.
- *
- * @param $term
- *   The taxonomy term.
- * @return
- *   The page content.
- */
-function taxonomy_term_page($term) {
-  // If there is a menu link to this term, the link becomes the last part of
-  // the active trail, and the link name becomes the page title. Thus, we must
-  // explicitly set the page title to be the term title.
-  drupal_set_title($term->name);
-
-  // Build breadcrumb based on the hierarchy of the term.
-  $current = (object) array(
-    'tid' => $term->tid,
-  );
-  // @todo This overrides any other possible breadcrumb and is a pure hard-coded
-  //   presumption. Make this behavior configurable per vocabulary or term.
-  $breadcrumb = array();
-  while ($parents = taxonomy_get_parents($current->tid)) {
-    $current = array_shift($parents);
-    $breadcrumb[] = l($current->name, 'taxonomy/term/' . $current->tid);
-  }
-  $breadcrumb[] = l(t('Home'), NULL);
-  $breadcrumb = array_reverse($breadcrumb);
-  drupal_set_breadcrumb($breadcrumb);
-  drupal_add_feed('taxonomy/term/' . $term->tid . '/feed', 'RSS - ' . $term->name);
-
-  // Set the term path as the canonical URL to prevent duplicate content.
-  $uri = entity_uri('taxonomy_term', $term);
-  drupal_add_html_head_link(array('rel' => 'canonical', 'href' => url($uri['path'], $uri['options'])), TRUE);
-  // Set the non-aliased path as a default shortlink.
-  drupal_add_html_head_link(array('rel' => 'shortlink', 'href' => url($uri['path'], array_merge($uri['options'], array('alias' => TRUE)))), TRUE);
-
-  // Normally we would call taxonomy_term_show() here, but for backwards
-  // compatibility in Drupal 7 we do not want to do that (it produces different
-  // data structures and HTML markup than what Drupal 7 released with). Calling
-  // taxonomy_term_view() directly provides essentially the same thing, but
-  // allows us to wrap the rendered term in our desired array structure.
-  $build['term_heading'] = array(
-    '#prefix' => '<div class="term-listing-heading">',
-    '#suffix' => '</div>',
-    'term' => taxonomy_term_view($term, 'full'),
-  );
-
-  if ($nids = taxonomy_select_nodes($term->tid, TRUE, variable_get('default_nodes_main', 10))) {
-    $nodes = node_load_multiple($nids);
-    $build += node_view_multiple($nodes);
-    $build['pager'] = array(
-      '#theme' => 'pager',
-      '#weight' => 5,
-    );
-  }
-  else {
-    $build['no_content'] = array(
-      '#prefix' => '<p>',
-      '#markup' => t('There is currently no content classified with this term.'),
-      '#suffix' => '</p>',
-    );
-  }
-  return $build;
-}
-
-/**
- * Generate the content feed for a taxonomy term.
- *
- * @param $term
- *   The taxonomy term.
- */
-function taxonomy_term_feed($term) {
-  $channel['link'] = url('taxonomy/term/' . $term->tid, array('absolute' => TRUE));
-  $channel['title'] = variable_get('site_name', 'Drupal') . ' - ' . $term->name;
-  // Only display the description if we have a single term, to avoid clutter and confusion.
-  // HTML will be removed from feed description.
-  $channel['description'] = check_markup($term->description, $term->format, '', TRUE);
-  $nids = taxonomy_select_nodes($term->tid, FALSE, variable_get('feed_default_items', 10));
-
-  node_feed($nids, $channel);
-}
-
-/**
- * Page callback: Outputs JSON for taxonomy autocomplete suggestions.
- *
- * Path: taxonomy/autocomplete
- *
- * This callback outputs term name suggestions in response to Ajax requests
- * made by the taxonomy autocomplete widget for taxonomy term reference
- * fields. The output is a JSON object of plain-text term suggestions, keyed by
- * the user-entered value with the completed term name appended.  Term names
- * containing commas are wrapped in quotes.
- *
- * For example, suppose the user has entered the string 'red fish, blue' in the
- * field, and there are two taxonomy terms, 'blue fish' and 'blue moon'. The
- * JSON output would have the following structure:
- * @code
- *   {
- *     "red fish, blue fish": "blue fish",
- *     "red fish, blue moon": "blue moon",
- *   };
- * @endcode
- *
- * @param $field_name
- *   The name of the term reference field.
- * @param $tags_typed
- *   (optional) A comma-separated list of term names entered in the
- *   autocomplete form element. Only the last term is used for autocompletion.
- *   Defaults to '' (an empty string).
- *
- * @see taxonomy_menu()
- * @see taxonomy_field_widget_info()
- */
-function taxonomy_autocomplete($field_name = '', $tags_typed = '') {
-  // If the request has a '/' in the search text, then the menu system will have
-  // split it into multiple arguments, recover the intended $tags_typed.
-  $args = func_get_args();
-  // Shift off the $field_name argument.
-  array_shift($args);
-  $tags_typed = implode('/', $args);
-
-  // Make sure the field exists and is a taxonomy field.
-  if (!($field = field_info_field($field_name)) || $field['type'] !== 'taxonomy_term_reference') {
-    // Error string. The JavaScript handler will realize this is not JSON and
-    // will display it as debugging information.
-    print t('Taxonomy field @field_name not found.', array('@field_name' => $field_name));
-    exit;
-  }
-
-  // The user enters a comma-separated list of tags. We only autocomplete the last tag.
-  $tags_typed = drupal_explode_tags($tags_typed);
-  $tag_last = drupal_strtolower(array_pop($tags_typed));
-
-  $term_matches = array();
-  if ($tag_last != '') {
-
-    // Part of the criteria for the query come from the field's own settings.
-    $vids = array();
-    $vocabularies = taxonomy_vocabulary_get_names();
-    foreach ($field['settings']['allowed_values'] as $tree) {
-      $vids[] = $vocabularies[$tree['vocabulary']]->vid;
-    }
-
-    $query = db_select('taxonomy_term_data', 't');
-    $query->addTag('translatable');
-    $query->addTag('term_access');
-
-    // Do not select already entered terms.
-    if (!empty($tags_typed)) {
-      $query->condition('t.name', $tags_typed, 'NOT IN');
-    }
-    // Select rows that match by term name.
-    $tags_return = $query
-      ->fields('t', array('tid', 'name'))
-      ->condition('t.vid', $vids)
-      ->condition('t.name', '%' . db_like($tag_last) . '%', 'LIKE')
-      ->range(0, 10)
-      ->execute()
-      ->fetchAllKeyed();
-
-    $prefix = count($tags_typed) ? drupal_implode_tags($tags_typed) . ', ' : '';
-
-    foreach ($tags_return as $tid => $name) {
-      $n = $name;
-      // Term names containing commas or quotes must be wrapped in quotes.
-      if (strpos($name, ',') !== FALSE || strpos($name, '"') !== FALSE) {
-        $n = '"' . str_replace('"', '""', $name) . '"';
-      }
-      $term_matches[$prefix . $n] = check_plain($name);
-    }
-  }
-
-  drupal_json_output($term_matches);
-}
diff --git a/modules/taxonomy/taxonomy.tokens.inc b/modules/taxonomy/taxonomy.tokens.inc
deleted file mode 100644
index f8ae457..0000000
--- a/modules/taxonomy/taxonomy.tokens.inc
+++ /dev/null
@@ -1,189 +0,0 @@
-<?php
-
-/**
- * @file
- * Builds placeholder replacement tokens for taxonomy terms and vocabularies.
- */
-
-/**
- * Implements hook_token_info().
- */
-function taxonomy_token_info() {
-  $types['term'] = array(
-    'name' => t("Taxonomy terms"),
-    'description' => t("Tokens related to taxonomy terms."),
-    'needs-data' => 'term',
-  );
-  $types['vocabulary'] = array(
-    'name' => t("Vocabularies"),
-    'description' => t("Tokens related to taxonomy vocabularies."),
-    'needs-data' => 'vocabulary',
-  );
-
-  // Taxonomy term related variables.
-  $term['tid'] = array(
-    'name' => t("Term ID"),
-    'description' => t("The unique ID of the taxonomy term."),
-  );
-  $term['name'] = array(
-    'name' => t("Name"),
-    'description' => t("The name of the taxonomy term."),
-  );
-  $term['description'] = array(
-    'name' => t("Description"),
-    'description' => t("The optional description of the taxonomy term."),
-  );
-  $term['node-count'] = array(
-    'name' => t("Node count"),
-    'description' => t("The number of nodes tagged with the taxonomy term."),
-  );
-  $term['url'] = array(
-    'name' => t("URL"),
-    'description' => t("The URL of the taxonomy term."),
-  );
-
-  // Taxonomy vocabulary related variables.
-  $vocabulary['vid'] = array(
-    'name' => t("Vocabulary ID"),
-    'description' => t("The unique ID of the taxonomy vocabulary."),
-  );
-  $vocabulary['name'] = array(
-    'name' => t("Name"),
-    'description' => t("The name of the taxonomy vocabulary."),
-  );
-  $vocabulary['description'] = array(
-    'name' => t("Description"),
-    'description' => t("The optional description of the taxonomy vocabulary."),
-  );
-  $vocabulary['node-count'] = array(
-    'name' => t("Node count"),
-    'description' => t("The number of nodes tagged with terms belonging to the taxonomy vocabulary."),
-  );
-  $vocabulary['term-count'] = array(
-    'name' => t("Term count"),
-    'description' => t("The number of terms belonging to the taxonomy vocabulary."),
-  );
-
-  // Chained tokens for taxonomies
-  $term['vocabulary'] = array(
-    'name' => t("Vocabulary"),
-    'description' => t("The vocabulary the taxonomy term belongs to."),
-    'type' => 'vocabulary',
-  );
-  $term['parent'] = array(
-    'name' => t("Parent term"),
-    'description' => t("The parent term of the taxonomy term, if one exists."),
-    'type' => 'term',
-  );
-
-  return array(
-    'types' => $types,
-    'tokens' => array(
-      'term' => $term,
-      'vocabulary' => $vocabulary,
-    ),
-  );
-}
-
-/**
- * Implements hook_tokens().
- */
-function taxonomy_tokens($type, $tokens, array $data = array(), array $options = array()) {
-  $replacements = array();
-  $sanitize = !empty($options['sanitize']);
-
-  if ($type == 'term' && !empty($data['term'])) {
-    $term = $data['term'];
-
-    foreach ($tokens as $name => $original) {
-      switch ($name) {
-        case 'tid':
-          $replacements[$original] = $term->tid;
-          break;
-
-        case 'name':
-          $replacements[$original] = $sanitize ? check_plain($term->name) : $term->name;
-          break;
-
-        case 'description':
-          $replacements[$original] = $sanitize ? check_markup($term->description, $term->format, '', TRUE) : $term->description;
-          break;
-
-        case 'url':
-          $uri = entity_uri('taxonomy_term', $term);
-          $replacements[$original] = url($uri['path'], array_merge($uri['options'], array('absolute' => TRUE)));
-          break;
-
-        case 'node-count':
-          $query = db_select('taxonomy_index');
-          $query->condition('tid', $term->tid);
-          $query->addTag('term_node_count');
-          $count = $query->countQuery()->execute()->fetchField();
-          $replacements[$original] = $count;
-          break;
-
-        case 'vocabulary':
-          $vocabulary = taxonomy_vocabulary_load($term->vid);
-          $replacements[$original] = check_plain($vocabulary->name);
-          break;
-
-        case 'parent':
-          if ($parents = taxonomy_get_parents($term->tid)) {
-            $parent = array_pop($parents);
-            $replacements[$original] = check_plain($parent->name);
-          }
-          break;
-      }
-    }
-
-    if ($vocabulary_tokens = token_find_with_prefix($tokens, 'vocabulary')) {
-      $vocabulary = taxonomy_vocabulary_load($term->vid);
-      $replacements += token_generate('vocabulary', $vocabulary_tokens, array('vocabulary' => $vocabulary), $options);
-    }
-
-    if (($vocabulary_tokens = token_find_with_prefix($tokens, 'parent')) && $parents = taxonomy_get_parents($term->tid)) {
-      $parent = array_pop($parents);
-      $replacements += token_generate('term', $vocabulary_tokens, array('term' => $parent), $options);
-    }
-  }
-
-  elseif ($type == 'vocabulary' && !empty($data['vocabulary'])) {
-    $vocabulary = $data['vocabulary'];
-
-    foreach ($tokens as $name => $original) {
-      switch ($name) {
-        case 'vid':
-          $replacements[$original] = $vocabulary->vid;
-          break;
-
-        case 'name':
-          $replacements[$original] = $sanitize ? check_plain($vocabulary->name) : $vocabulary->name;
-          break;
-
-        case 'description':
-          $replacements[$original] = $sanitize ? filter_xss($vocabulary->description) : $vocabulary->description;
-          break;
-
-        case 'term-count':
-          $query = db_select('taxonomy_term_data');
-          $query->condition('vid', $vocabulary->vid);
-          $query->addTag('vocabulary_term_count');
-          $count = $query->countQuery()->execute()->fetchField();
-          $replacements[$original] = $count;
-          break;
-
-        case 'node-count':
-          $query = db_select('taxonomy_index', 'ti');
-          $query->addExpression('COUNT(DISTINCT ti.nid)');
-          $query->leftJoin('taxonomy_term_data', 'td', 'ti.tid = td.tid');
-          $query->condition('td.vid', $vocabulary->vid);
-          $query->addTag('vocabulary_node_count');
-          $count = $query->execute()->fetchField();
-          $replacements[$original] = $count;
-          break;
-      }
-    }
-  }
-
-  return $replacements;
-}
diff --git a/modules/toolbar/toolbar-rtl.css b/modules/toolbar/toolbar-rtl.css
deleted file mode 100644
index acbc98f..0000000
--- a/modules/toolbar/toolbar-rtl.css
+++ /dev/null
@@ -1,41 +0,0 @@
-
-#toolbar,
-#toolbar * {
-  text-align: right;
-}
-#toolbar ul li {
-  float: right;
-}
-#toolbar ul li a {
-  display: inline-block;
-  float: none;
-  zoom: 1;
-}
-#toolbar div.toolbar-menu {
-  padding: 5px 50px 5px 50px;
-}
-#toolbar-user {
-  float: left;
-}
-#toolbar ul#toolbar-user li {
-  float: none;
-  display: inline;
-}
-#toolbar-menu {
-  float: none;
-}
-#toolbar-home {
-  float: right;
-}
-#toolbar ul li.home a {
-  position: absolute;
-  right: 10px;
-}
-#toolbar div.toolbar-menu a.toggle {
-  left: 10px;
-  right: auto;
-}
-* html #toolbar {
-  left: 0;
-  padding-left: 0;
-}
diff --git a/modules/toolbar/toolbar.css b/modules/toolbar/toolbar.css
deleted file mode 100644
index cbf3c14..0000000
--- a/modules/toolbar/toolbar.css
+++ /dev/null
@@ -1,150 +0,0 @@
-
-body.toolbar {
-  padding-top: 2.2em;
-}
-body.toolbar-drawer {
-  padding-top: 5.3em;
-}
-
-/**
- * Aggressive resets so we can achieve a consistent look in hostile CSS
- * environments.
- */
-#toolbar,
-#toolbar * {
-  border: 0;
-  font-size: 100%;
-  line-height: inherit;
-  list-style: none;
-  margin: 0;
-  outline: 0;
-  padding: 0;
-  text-align: left; /* LTR */
-  vertical-align: baseline;
-}
-
-/**
- * Base styles.
- *
- * We use a keyword for the toolbar font size to make it display consistently
- * across different themes, while still allowing browsers to resize the text.
- */
-#toolbar {
-  background: #666;
-  color: #ccc;
-  font: normal small "Lucida Grande", Verdana, sans-serif;
-  left: 0;
-  margin: 0 -20px;
-  padding: 0 20px;
-  position: fixed;
-  right: 0;
-  top: 0;
-  -moz-box-shadow: 0 3px 20px #000;
-  -webkit-box-shadow: 0 3px 20px #000;
-  box-shadow: 0 3px 20px #000;
-  filter: progid:DXImageTransform.Microsoft.Shadow(color=#000000, direction='180', strength='10');
-  -ms-filter: "progid:DXImageTransform.Microsoft.Shadow(color=#000000, direction='180', strength='10')";
-  z-index: 600;
-}
-#toolbar div.collapsed {
-  display: none;
-  visibility: hidden;
-}
-#toolbar a {
-  color: #fff;
-  font-size: .846em;
-  text-decoration: none;
-}
-#toolbar ul li,
-#toolbar ul li a {
-  float: left; /* LTR */
-}
-
-/**
- * Administration menu.
- */
-#toolbar div.toolbar-menu {
-  background: #000;
-  line-height: 20px;
-  padding: 5px 50px 5px 10px; /* LTR */
-  position: relative;
-}
-#toolbar-home a span {
-  background: url(toolbar.png) no-repeat 0 -45px;
-  display: block;
-  height: 14px;
-  margin: 3px 0px;
-  text-indent: -9999px;
-  vertical-align: text-bottom;
-  width: 11px;
-}
-#toolbar-user {
-  float: right; /* LTR */
-}
-#toolbar-menu {
-  float: left; /* LTR */
-}
-#toolbar div.toolbar-menu a.toggle {
-  background: url(toolbar.png) 0 -20px no-repeat;
-  bottom: 0;
-  cursor: pointer;
-  height: 25px;
-  overflow: hidden;
-  position: absolute;
-  right: 10px; /* LTR */
-  text-indent: -9999px;
-  width: 25px;
-}
-#toolbar div.toolbar-menu a.toggle:focus,
-#toolbar div.toolbar-menu a.toggle:hover {
-  background-position:  -50px -20px;
-}
-#toolbar div.toolbar-menu a.toggle-active {
-  background-position:  -25px -20px;
-}
-#toolbar div.toolbar-menu a.toggle-active.toggle:focus,
-#toolbar div.toolbar-menu a.toggle-active.toggle:hover {
-  background-position:  -75px -20px;
-}
-#toolbar div.toolbar-menu ul li a {
-  padding: 0 10px;
-  -moz-border-radius: 10px;
-  -webkit-border-radius: 10px;
-  border-radius: 10px;
-}
-#toolbar div.toolbar-menu ul li a:focus,
-#toolbar div.toolbar-menu ul li a:hover,
-#toolbar div.toolbar-menu ul li a:active,
-#toolbar div.toolbar-menu ul li a.active:focus {
-  background: #444;
-}
-#toolbar div.toolbar-menu ul li a.active:hover,
-#toolbar div.toolbar-menu ul li a.active:active,
-#toolbar div.toolbar-menu ul li a.active,
-#toolbar div.toolbar-menu ul li.active-trail a {
-  background: url(toolbar.png) 0 0 repeat-x;
-  text-shadow: #333 0 1px 0;
-}
-
-/**
- * Collapsed drawer of additional toolbar content.
- */
-#toolbar div.toolbar-drawer {
-  position: relative;
-  padding: 0 10px;
-}
-
-/**
- * IE 6 Fix.
- *
- * IE 6 shows elements with position:fixed as position:static so we replace
- * it with position:absolute; toolbar needs its z-index to stay above overlay.
- */
-* html #toolbar {
-  left: -20px;
-  margin: 0;
-  padding-right: 0;
-  position: absolute;
-  right: 0;
-  width: 100%;
-}
diff --git a/modules/toolbar/toolbar.info b/modules/toolbar/toolbar.info
deleted file mode 100644
index 2c5abbb..0000000
--- a/modules/toolbar/toolbar.info
+++ /dev/null
@@ -1,5 +0,0 @@
-name = Toolbar
-description = Provides a toolbar that shows the top-level administration menu items and links from other modules.
-core = 7.x
-package = Core
-version = VERSION
diff --git a/modules/toolbar/toolbar.js b/modules/toolbar/toolbar.js
deleted file mode 100644
index d50f205..0000000
--- a/modules/toolbar/toolbar.js
+++ /dev/null
@@ -1,111 +0,0 @@
-(function ($) {
-
-Drupal.toolbar = Drupal.toolbar || {};
-
-/**
- * Attach toggling behavior and notify the overlay of the toolbar.
- */
-Drupal.behaviors.toolbar = {
-  attach: function(context) {
-
-    // Set the initial state of the toolbar.
-    $('#toolbar', context).once('toolbar', Drupal.toolbar.init);
-
-    // Toggling toolbar drawer.
-    $('#toolbar a.toggle', context).once('toolbar-toggle').click(function(e) {
-      Drupal.toolbar.toggle();
-      // Allow resize event handlers to recalculate sizes/positions.
-      $(window).triggerHandler('resize');
-      return false;
-    });
-  }
-};
-
-/**
- * Retrieve last saved cookie settings and set up the initial toolbar state.
- */
-Drupal.toolbar.init = function() {
-  // Retrieve the collapsed status from a stored cookie.
-  var collapsed = $.cookie('Drupal.toolbar.collapsed');
-
-  // Expand or collapse the toolbar based on the cookie value.
-  if (collapsed == 1) {
-    Drupal.toolbar.collapse();
-  }
-  else {
-    Drupal.toolbar.expand();
-  }
-};
-
-/**
- * Collapse the toolbar.
- */
-Drupal.toolbar.collapse = function() {
-  var toggle_text = Drupal.t('Show shortcuts');
-  $('#toolbar div.toolbar-drawer').addClass('collapsed');
-  $('#toolbar a.toggle')
-    .removeClass('toggle-active')
-    .attr('title',  toggle_text)
-    .html(toggle_text);
-  $('body').removeClass('toolbar-drawer').css('paddingTop', Drupal.toolbar.height());
-  $.cookie(
-    'Drupal.toolbar.collapsed',
-    1,
-    {
-      path: Drupal.settings.basePath,
-      // The cookie should "never" expire.
-      expires: 36500
-    }
-  );
-};
-
-/**
- * Expand the toolbar.
- */
-Drupal.toolbar.expand = function() {
-  var toggle_text = Drupal.t('Hide shortcuts');
-  $('#toolbar div.toolbar-drawer').removeClass('collapsed');
-  $('#toolbar a.toggle')
-    .addClass('toggle-active')
-    .attr('title',  toggle_text)
-    .html(toggle_text);
-  $('body').addClass('toolbar-drawer').css('paddingTop', Drupal.toolbar.height());
-  $.cookie(
-    'Drupal.toolbar.collapsed',
-    0,
-    {
-      path: Drupal.settings.basePath,
-      // The cookie should "never" expire.
-      expires: 36500
-    }
-  );
-};
-
-/**
- * Toggle the toolbar.
- */
-Drupal.toolbar.toggle = function() {
-  if ($('#toolbar div.toolbar-drawer').hasClass('collapsed')) {
-    Drupal.toolbar.expand();
-  }
-  else {
-    Drupal.toolbar.collapse();
-  }
-};
-
-Drupal.toolbar.height = function() {
-  var $toolbar = $('#toolbar');
-  var height = $toolbar.outerHeight();
-  // In modern browsers (including IE9), when box-shadow is defined, use the
-  // normal height.
-  var cssBoxShadowValue = $toolbar.css('box-shadow');
-  var boxShadow = (typeof cssBoxShadowValue !== 'undefined' && cssBoxShadowValue !== 'none');
-  // In IE8 and below, we use the shadow filter to apply box-shadow styles to
-  // the toolbar. It adds some extra height that we need to remove.
-  if (!boxShadow && /DXImageTransform\.Microsoft\.Shadow/.test($toolbar.css('filter'))) {
-    height -= $toolbar[0].filters.item("DXImageTransform.Microsoft.Shadow").strength;
-  }
-  return height;
-};
-
-})(jQuery);
diff --git a/modules/toolbar/toolbar.module b/modules/toolbar/toolbar.module
deleted file mode 100644
index 6d1b581..0000000
--- a/modules/toolbar/toolbar.module
+++ /dev/null
@@ -1,363 +0,0 @@
-<?php
-
-/**
- * @file
- * Administration toolbar for quick access to top level administration items.
- */
-
-/**
- * Implements hook_help().
- */
-function toolbar_help($path, $arg) {
-  switch ($path) {
-    case 'admin/help#toolbar':
-      $output = '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Toolbar module displays links to top-level administration menu items and links from other modules at the top of the screen. For more information, see the online handbook entry for <a href="@toolbar">Toolbar module</a>.', array('@toolbar' => 'http://drupal.org/documentation/modules/toolbar/')) . '</p>';
-      $output .= '<h3>' . t('Uses') . '</h3>';
-      $output .= '<dl>';
-      $output .= '<dt>' . t('Displaying administrative links') . '</dt>';
-      $output .= '<dd>' . t('The Toolbar module displays a bar containing top-level administrative links across the top of the screen. Below that, the Toolbar module has a <em>drawer</em> section where it displays links provided by other modules, such as the core <a href="@shortcuts-help">Shortcut module</a>. The drawer can be hidden/shown by using the show/hide shortcuts link at the end of the toolbar.', array('@shortcuts-help' => url('admin/help/shortcut'))) . '</dd>';
-      $output .= '</dl>';
-      return $output;
-  }
-}
-
-/**
- * Implements hook_permission().
- */
-function toolbar_permission() {
-  return array(
-    'access toolbar' => array(
-      'title' => t('Use the administration toolbar'),
-    ),
-  );
-}
-
-/**
- * Implements hook_theme().
- */
-function toolbar_theme($existing, $type, $theme, $path) {
-  $items['toolbar'] = array(
-    'render element' => 'toolbar',
-    'template' => 'toolbar',
-    'path' => drupal_get_path('module', 'toolbar'),
-  );
-  $items['toolbar_toggle'] = array(
-    'variables' => array(
-      'collapsed' => NULL,
-      'attributes' => array(),
-    ),
-  );
-  return $items;
-}
-
-/**
- * Implements hook_menu().
- */
-function toolbar_menu() {
-  $items['toolbar/toggle'] = array(
-    'title' => 'Toggle drawer visibility',
-    'type' => MENU_CALLBACK,
-    'page callback' => 'toolbar_toggle_page',
-    'access arguments' => array('access toolbar'),
-  );
-  return $items;
-}
-
-/**
- * Menu callback; toggles the visibility of the toolbar drawer.
- */
-function toolbar_toggle_page() {
-  global $base_path;
-  // Toggle the value in the cookie.
-  setcookie('Drupal.toolbar.collapsed', !_toolbar_is_collapsed(), NULL, $base_path);
-  // Redirect the user from where he used the toggle element.
-  drupal_goto();
-}
-
-/**
- * Formats an element used to toggle the toolbar drawer's visibility.
- *
- * @param $variables
- *   An associative array containing:
- *   - collapsed: A boolean value representing the toolbar drawer's visibility.
- *   - attributes: An associative array of HTML attributes.
- *
- * @return
- *   An HTML string representing the element for toggling.
- *
- * @ingroup themable
- */
-function theme_toolbar_toggle($variables) {
-  if ($variables['collapsed']) {
-    $toggle_text = t('Show shortcuts');
-  }
-  else {
-    $toggle_text = t('Hide shortcuts');
-    $variables['attributes']['class'][] = 'toggle-active';
-  }
-  return l($toggle_text, 'toolbar/toggle', array('query' => drupal_get_destination(), 'attributes' => array('title' => $toggle_text) + $variables['attributes']));
-}
-
-/**
- * Determines the current state of the toolbar drawer's visibility.
- *
- * @return
- *   TRUE when drawer is collapsed, FALSE when it is expanded.
- */
-function _toolbar_is_collapsed() {
-  // PHP converts dots into underscores in cookie names to avoid problems with
-  // its parser, so we use a converted cookie name.
-  return isset($_COOKIE['Drupal_toolbar_collapsed']) ? $_COOKIE['Drupal_toolbar_collapsed'] : 0;
-}
-
-/**
- * Implements hook_page_build().
- *
- * Add admin toolbar to the page_top region automatically.
- */
-function toolbar_page_build(&$page) {
-  $page['page_top']['toolbar'] = array(
-    '#pre_render' => array('toolbar_pre_render'),
-    '#access' => user_access('access toolbar'),
-    'toolbar_drawer' => array(),
-  );
-}
-
-/**
- * Prerender function for the toolbar.
- *
- * Since building the toolbar takes some time, it is done just prior to
- * rendering to ensure that it is built only if it will be displayed.
- */
-function toolbar_pre_render($toolbar) {
-  $toolbar = array_merge($toolbar, toolbar_view());
-  return $toolbar;
-}
-
-/**
- * Implements hook_preprocess_html().
- *
- * Add some page classes, so global page theming can adjust to the toolbar.
- */
-function toolbar_preprocess_html(&$vars) {
-  if (isset($vars['page']['page_top']['toolbar']) && user_access('access toolbar')) {
-    $vars['classes_array'][] = 'toolbar';
-    if (!_toolbar_is_collapsed()) {
-      $vars['classes_array'][] = 'toolbar-drawer';
-    }
-  }
-}
-
-/**
- * Implements hook_preprocess_toolbar().
- *
- * Adding the 'overlay-displace-top' class to the toolbar pushes the overlay
- * down, so it appears below the toolbar.
- */
-function toolbar_preprocess_toolbar(&$variables) {
-  $variables['classes_array'][] = "overlay-displace-top";
-}
-
-/**
- * Implements hook_system_info_alter().
- *
- * Indicate that the 'page_top' region (in which the toolbar will be displayed)
- * is an overlay supplemental region that should be refreshed whenever its
- * content is updated.
- *
- * This information is provided for any module that might need to use it, not
- * just the core Overlay module.
- */
-function toolbar_system_info_alter(&$info, $file, $type) {
-  if ($type == 'theme') {
-    $info['overlay_supplemental_regions'][] = 'page_top';
-  }
-}
-
-/**
- * Builds the admin menu as a structured array ready for drupal_render().
- *
- * @return
- *   Array of links and settings relating to the admin menu.
- */
-function toolbar_view() {
-  global $user;
-
-  $module_path = drupal_get_path('module', 'toolbar');
-  $build = array(
-    '#theme' => 'toolbar',
-    '#attached'=> array(
-      'js' => array(
-        $module_path . '/toolbar.js',
-        array(
-          'data' => array('tableHeaderOffset' => 'Drupal.toolbar.height'),
-          'type' => 'setting'
-        ),
-      ),
-      'css' => array(
-        $module_path . '/toolbar.css',
-      ),
-      'library' => array(array('system', 'jquery.cookie')),
-    ),
-  );
-
-  // Retrieve the admin menu from the database.
-  $links = toolbar_menu_navigation_links(toolbar_get_menu_tree());
-  $build['toolbar_menu'] = array(
-    '#theme' => 'links__toolbar_menu',
-    '#links' => $links,
-    '#attributes' => array('id' => 'toolbar-menu'),
-    '#heading' => array('text' => t('Administrative toolbar'), 'level' => 'h2', 'class' => 'element-invisible'),
-  );
-
-  // Add logout & user account links or login link.
-  if ($user->uid) {
-    $links = array(
-      'account' => array(
-        'title' => t('Hello <strong>@username</strong>', array('@username' => format_username($user))),
-        'href' => 'user',
-        'html' => TRUE,
-        'attributes' => array('title' => t('User account')),
-      ),
-      'logout' => array(
-        'title' => t('Log out'),
-        'href' => 'user/logout',
-      ),
-    );
-  }
-  else {
-     $links = array(
-      'login' => array(
-        'title' => t('Log in'),
-        'href' => 'user',
-      ),
-    );
-  }
-  $build['toolbar_user'] = array(
-    '#theme' => 'links__toolbar_user',
-    '#links' => $links,
-    '#attributes' => array('id' => 'toolbar-user'),
-  );
-
-  // Add a "home" link.
-  $link = array(
-    'home' => array(
-      'title' => '<span class="home-link">Home</span>',
-      'href' => '<front>',
-      'html' => TRUE,
-      'attributes' => array('title' => t('Home')),
-    ),
-  );
-  $build['toolbar_home'] = array(
-    '#theme' => 'links',
-    '#links' => $link,
-    '#attributes' => array('id' => 'toolbar-home'),
-  );
-
-  // Add an anchor to be able to toggle the visibility of the drawer.
-  $build['toolbar_toggle'] = array(
-    '#theme' => 'toolbar_toggle',
-    '#collapsed' => _toolbar_is_collapsed(),
-    '#attributes' => array('class' => array('toggle')),
-  );
-
-  // Prepare the drawer links CSS classes.
-  $toolbar_drawer_classes = array(
-    'toolbar-drawer',
-    'clearfix',
-  );
-  if(_toolbar_is_collapsed()) {
-    $toolbar_drawer_classes[] = 'collapsed';
-  }
-  $build['toolbar_drawer_classes'] = implode(' ', $toolbar_drawer_classes);
-
-  return $build;
-}
-
-/**
- * Gets only the top level items below the 'admin' path.
- *
- * @return
- *   An array containing a menu tree of top level items below the 'admin' path.
- */
-function toolbar_get_menu_tree() {
-  $tree = array();
-  $admin_link = db_query('SELECT * FROM {menu_links} WHERE menu_name = :menu_name AND module = :module AND link_path = :path', array(':menu_name' => 'management', ':module' => 'system', ':path' => 'admin'))->fetchAssoc();
-  if ($admin_link) {
-    $tree = menu_build_tree('management', array(
-      'expanded' => array($admin_link['mlid']),
-      'min_depth' => $admin_link['depth'] + 1,
-      'max_depth' => $admin_link['depth'] + 1,
-    ));
-  }
-
-  return $tree;
-}
-
-/**
- * Generates a links array from a menu tree array.
- *
- * Based on menu_navigation_links(). Adds path based IDs and icon placeholders
- * to the links.
- *
- * @return
- *   An array of links as defined above.
- */
-function toolbar_menu_navigation_links($tree) {
-  $links = array();
-  foreach ($tree as $item) {
-    if (!$item['link']['hidden'] && $item['link']['access']) {
-      // Make sure we have a path specific ID in place, so we can attach icons
-      // and behaviors to the items.
-      $id = str_replace(array('/', '<', '>'), array('-', '', ''), $item['link']['href']);
-
-      $link = $item['link']['localized_options'];
-      $link['href'] = $item['link']['href'];
-      // Add icon placeholder.
-      $link['title'] = '<span class="icon"></span>' . check_plain($item['link']['title']);
-      // Add admin link ID.
-      $link['attributes'] = array('id' => 'toolbar-link-' . $id);
-      if (!empty($item['link']['description'])) {
-        $link['title'] .= ' <span class="element-invisible">(' . $item['link']['description'] . ')</span>';
-        $link['attributes']['title'] = $item['link']['description'];
-      }
-      $link['html'] = TRUE;
-
-      $class = ' path-' . $id;
-      if (toolbar_in_active_trail($item['link']['href'])) {
-        $class .= ' active-trail';
-      }
-      $links['menu-' . $item['link']['mlid'] . $class] = $link;
-    }
-  }
-  return $links;
-}
-
-/**
- * Checks whether an item is in the active trail.
- *
- * Useful when using a menu generated by menu_tree_all_data() which does
- * not set the 'in_active_trail' flag on items.
- *
- * @return
- *   TRUE when path is in the active trail, FALSE if not.
- *
- * @todo
- *   Look at migrating to a menu system level function.
- */
-function toolbar_in_active_trail($path) {
-  $active_paths = &drupal_static(__FUNCTION__);
-
-  // Gather active paths.
-  if (!isset($active_paths)) {
-    $active_paths = array();
-    $trail = menu_get_active_trail();
-    foreach ($trail as $item) {
-      if (!empty($item['href'])) {
-        $active_paths[] = $item['href'];
-      }
-    }
-  }
-  return in_array($path, $active_paths);
-}
diff --git a/modules/toolbar/toolbar.png b/modules/toolbar/toolbar.png
deleted file mode 100644
index f2c7f35..0000000
Binary files a/modules/toolbar/toolbar.png and /dev/null differ
diff --git a/modules/toolbar/toolbar.tpl.php b/modules/toolbar/toolbar.tpl.php
deleted file mode 100644
index e852129..0000000
--- a/modules/toolbar/toolbar.tpl.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-/**
- * @file
- * Default template for admin toolbar.
- *
- * Available variables:
- * - $classes: String of classes that can be used to style contextually through
- *   CSS. It can be manipulated through the variable $classes_array from
- *   preprocess functions. The default value has the following:
- *   - toolbar: The current template type, i.e., "theming hook".
- * - $toolbar['toolbar_user']: User account / logout links.
- * - $toolbar['toolbar_menu']: Top level management menu links.
- * - $toolbar['toolbar_drawer']: A place for extended toolbar content.
- *
- * Other variables:
- * - $classes_array: Array of html class attribute values. It is flattened
- *   into a string within the variable $classes.
- *
- * @see template_preprocess()
- * @see template_preprocess_toolbar()
- *
- * @ingroup themeable
- */
-?>
-<div id="toolbar" class="<?php print $classes; ?> clearfix">
-  <div class="toolbar-menu clearfix">
-    <?php print render($toolbar['toolbar_home']); ?>
-    <?php print render($toolbar['toolbar_user']); ?>
-    <?php print render($toolbar['toolbar_menu']); ?>
-    <?php if ($toolbar['toolbar_drawer']):?>
-      <?php print render($toolbar['toolbar_toggle']); ?>
-    <?php endif; ?>
-  </div>
-
-  <div class="<?php echo $toolbar['toolbar_drawer_classes']; ?>">
-    <?php print render($toolbar['toolbar_drawer']); ?>
-  </div>
-</div>
diff --git a/modules/tracker/tracker.css b/modules/tracker/tracker.css
deleted file mode 100644
index d3531c4..0000000
--- a/modules/tracker/tracker.css
+++ /dev/null
@@ -1,7 +0,0 @@
-
-.page-tracker td.replies {
-  text-align: center;
-}
-.page-tracker table {
-  width: 100%;
-}
diff --git a/modules/tracker/tracker.info b/modules/tracker/tracker.info
deleted file mode 100644
index 1d7c65b..0000000
--- a/modules/tracker/tracker.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Tracker
-description = Enables tracking of recent content for users.
-dependencies[] = comment
-package = Core
-version = VERSION
-core = 7.x
-files[] = tracker.test
diff --git a/modules/tracker/tracker.install b/modules/tracker/tracker.install
deleted file mode 100644
index 9967b9d..0000000
--- a/modules/tracker/tracker.install
+++ /dev/null
@@ -1,225 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update, and uninstall functions for tracker.module.
- */
-
-/**
- * Implements hook_uninstall().
- */
-function tracker_uninstall() {
-  variable_del('tracker_index_nid');
-  variable_del('tracker_batch_size');
-}
-
-/**
- * Implements hook_enable().
- */
-function tracker_enable() {
-  $max_nid = db_query('SELECT MAX(nid) FROM {node}')->fetchField();
-  if ($max_nid != 0) {
-    variable_set('tracker_index_nid', $max_nid);
-    // To avoid timing out while attempting to do a complete indexing, we
-    // simply call our cron job to remove stale records and begin the process.
-    tracker_cron();
-  }
-}
-
-/**
- * Implements hook_schema().
- */
-function tracker_schema() {
-  $schema['tracker_node'] = array(
-    'description' => 'Tracks when nodes were last changed or commented on.',
-    'fields' => array(
-      'nid' => array(
-        'description' => 'The {node}.nid this record tracks.',
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-      'published' => array(
-        'description' => 'Boolean indicating whether the node is published.',
-        'type' => 'int',
-        'not null' => FALSE,
-        'default' => 0,
-        'size' => 'tiny',
-      ),
-      'changed' => array(
-        'description' => 'The Unix timestamp when the node was most recently saved or commented on.',
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-    ),
-    'indexes' => array(
-      'tracker' => array('published', 'changed'),
-    ),
-    'primary key' => array('nid'),
-    'foreign keys' => array(
-      'tracked_node' => array(
-        'table' => 'node',
-        'columns' => array('nid' => 'nid'),
-      ),
-    ),
-  );
-
-  $schema['tracker_user'] = array(
-    'description' => 'Tracks when nodes were last changed or commented on, for each user that authored the node or one of its comments.',
-    'fields' => array(
-      'nid' => array(
-        'description' => 'The {node}.nid this record tracks.',
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-      'uid' => array(
-        'description' => 'The {users}.uid of the node author or commenter.',
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-      'published' => array(
-        'description' => 'Boolean indicating whether the node is published.',
-        'type' => 'int',
-        'not null' => FALSE,
-        'default' => 0,
-        'size' => 'tiny',
-      ),
-      'changed' => array(
-        'description' => 'The Unix timestamp when the node was most recently saved or commented on.',
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-    ),
-    'indexes' => array(
-      'tracker' => array('uid', 'published', 'changed'),
-    ),
-    'primary key' => array('nid', 'uid'),
-    'foreign keys' => array(
-      'tracked_node' => array(
-        'table' => 'node',
-        'columns' => array('nid' => 'nid'),
-      ),
-      'tracked_user' => array(
-        'table' => 'users',
-        'columns' => array('uid' => 'uid'),
-      ),
-    ),
-  );
-
-  return $schema;
-}
-
-/**
- * @addtogroup updates-6.x-to-7.x
- * @{
- */
-
-/**
- * Create new tracker_node and tracker_user tables.
- */
-function tracker_update_7000() {
-  $schema['tracker_node'] = array(
-    'description' => 'Tracks when nodes were last changed or commented on',
-    'fields' => array(
-      'nid' => array(
-        'description' => 'The {node}.nid this record tracks.',
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-      'published' => array(
-        'description' => 'Boolean indicating whether the node is published.',
-        'type' => 'int',
-        'not null' => FALSE,
-        'default' => 0,
-        'size' => 'tiny',
-      ),
-      'changed' => array(
-        'description' => 'The Unix timestamp when the node was most recently saved or commented on.',
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-    ),
-    'indexes' => array(
-      'tracker' => array('published', 'changed'),
-    ),
-    'primary key' => array('nid'),
-    'foreign keys' => array(
-      'tracked_node' => array(
-        'table' => 'node',
-        'columns' => array('nid' => 'nid'),
-      ),
-    ),
-  );
-
-  $schema['tracker_user'] = array(
-    'description' => 'Tracks when nodes were last changed or commented on, for each user that authored the node or one of its comments.',
-    'fields' => array(
-      'nid' => array(
-        'description' => 'The {node}.nid this record tracks.',
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-      'uid' => array(
-        'description' => 'The {users}.uid of the node author or commenter.',
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-      'published' => array(
-        'description' => 'Boolean indicating whether the node is published.',
-        'type' => 'int',
-        'not null' => FALSE,
-        'default' => 0,
-        'size' => 'tiny',
-      ),
-      'changed' => array(
-        'description' => 'The Unix timestamp when the node was most recently saved or commented on.',
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-      ),
-    ),
-    'indexes' => array(
-      'tracker' => array('uid', 'published', 'changed'),
-    ),
-    'primary key' => array('nid', 'uid'),
-    'foreign keys' => array(
-      'tracked_node' => array(
-        'table' => 'node',
-        'columns' => array('nid' => 'nid'),
-      ),
-      'tracked_user' => array(
-        'table' => 'users',
-        'columns' => array('uid' => 'uid'),
-      ),
-    ),
-  );
-
-  foreach ($schema as $name => $table) {
-    db_create_table($name, $table);
-  }
-
-  $max_nid = db_query('SELECT MAX(nid) FROM {node}')->fetchField();
-  if ($max_nid != 0) {
-    variable_set('tracker_index_nid', $max_nid);
-  }
-}
-
-/**
- * @} End of "addtogroup updates-6.x-to-7.x".
- */
diff --git a/modules/tracker/tracker.module b/modules/tracker/tracker.module
deleted file mode 100644
index 8694222..0000000
--- a/modules/tracker/tracker.module
+++ /dev/null
@@ -1,380 +0,0 @@
-<?php
-
-/**
- * @file
- * Tracks recent content posted by a user or users.
- */
-
-/**
- * Implements hook_help().
- */
-function tracker_help($path, $arg) {
-  switch ($path) {
-    case 'admin/help#tracker':
-      $output = '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Tracker module displays the most recently added and updated content on your site, and allows you to follow new content created by each user. This module has no configuration options. For more information, see the online handbook entry for <a href="@tracker">Tracker module</a>.', array('@tracker' => 'http://drupal.org/documentation/modules/tracker/')) . '</p>';
-      $output .= '<h3>' . t('Uses') . '</h3>';
-      $output .= '<dl>';
-      $output .= '<dt>' . t('Navigation') . '</dt>';
-      $output .= '<dd>' . t('The Tracker module adds a new menu item to the Navigation menu, called <em>Recent content</em>. You can configure menu items via the <a href="@menus">Menus administration page</a>.', array('@menus' => url('admin/structure/menu'))) . '</dd>';
-      $output .= '<dt>' . t('Tracking new and updated site content') . '</dt>';
-      $output .= '<dd>' . t("The <a href='@recent'>Recent content</a> page shows new and updated content in reverse chronological order, listing the content type, title, author's name, number of comments, and time of last update. Content is considered updated when changes occur in the text, or when new comments are added. The <em>My recent content</em> tab limits the list to the currently logged-in user.", array('@recent' => url('tracker'))) . '</dd>';
-      $output .= '<dt>' . t('Tracking user-specific content') . '</dt>';
-      $output .= '<dd>' . t("To follow a specific user's new and updated content, select the <em>Track</em> tab from the user's profile page.") . '</dd>';
-      $output .= '</dl>';
-      return $output;
-  }
-}
-
-/**
- * Implements hook_menu().
- */
-function tracker_menu() {
-  $items['tracker'] = array(
-    'title' => 'Recent content',
-    'page callback' => 'tracker_page',
-    'access arguments' => array('access content'),
-    'weight' => 1,
-    'file' => 'tracker.pages.inc',
-  );
-  $items['tracker/all'] = array(
-    'title' => 'All recent content',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-  );
-  $items['tracker/%user_uid_optional'] = array(
-    'title' => 'My recent content',
-    'page callback' => 'tracker_page',
-    'access callback' => '_tracker_myrecent_access',
-    'access arguments' => array(1),
-    'page arguments' => array(1),
-    'type' => MENU_LOCAL_TASK,
-    'file' => 'tracker.pages.inc',
-  );
-
-  $items['user/%user/track'] = array(
-    'title' => 'Track',
-    'page callback' => 'tracker_page',
-    'page arguments' => array(1, TRUE),
-    'access callback' => '_tracker_user_access',
-    'access arguments' => array(1),
-    'type' => MENU_LOCAL_TASK,
-    'file' => 'tracker.pages.inc',
-  );
-  $items['user/%user/track/content'] = array(
-    'title' => 'Track content',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-  );
-
-  return $items;
-}
-
-/**
- * Implements hook_cron().
- *
- * Updates tracking information for any items still to be tracked. The variable
- * 'tracker_index_nid' is set to ((the last node ID that was indexed) - 1) and
- * used to select the nodes to be processed. If there are no remaining nodes to
- * process, 'tracker_index_nid' will be 0.
- */
-function tracker_cron() {
-  $max_nid = variable_get('tracker_index_nid', 0);
-  $batch_size = variable_get('tracker_batch_size', 1000);
-  if ($max_nid > 0) {
-    $last_nid = FALSE;
-    $result = db_query_range('SELECT nid, uid, status FROM {node} WHERE nid <= :max_nid ORDER BY nid DESC', 0, $batch_size, array(':max_nid' => $max_nid), array('target' => 'slave'));
-
-    $count = 0;
-
-    foreach ($result as $row) {
-      // Calculate the changed timestamp for this node.
-      $changed = _tracker_calculate_changed($row->nid);
-
-      // Remove existing data for this node.
-      db_delete('tracker_node')
-        ->condition('nid', $row->nid)
-        ->execute();
-      db_delete('tracker_user')
-        ->condition('nid', $row->nid)
-        ->execute();
-
-      // Insert the node-level data.
-      db_insert('tracker_node')
-        ->fields(array(
-          'nid' => $row->nid,
-          'published' => $row->status,
-          'changed' => $changed,
-        ))
-        ->execute();
-
-      // Insert the user-level data for the node's author.
-      db_insert('tracker_user')
-        ->fields(array(
-          'nid' => $row->nid,
-          'published' => $row->status,
-          'changed' => $changed,
-          'uid' => $row->uid,
-        ))
-        ->execute();
-
-      $query = db_select('comment', 'c', array('target' => 'slave'));
-      // Force PostgreSQL to do an implicit cast by adding 0.
-      $query->addExpression('0 + :changed', 'changed', array(':changed' => $changed));
-      $query->addField('c', 'status', 'published');
-      $query
-        ->distinct()
-        ->fields('c', array('uid', 'nid'))
-        ->condition('c.nid', $row->nid)
-        ->condition('c.uid', $row->uid, '<>')
-        ->condition('c.status', COMMENT_PUBLISHED);
-
-      // Insert the user-level data for the commenters (except if a commenter
-      // is the node's author).
-      db_insert('tracker_user')
-        ->from($query)
-        ->execute();
-
-      // Note that we have indexed at least one node.
-      $last_nid = $row->nid;
-
-      $count++;
-    }
-
-    if ($last_nid !== FALSE) {
-      // Prepare a starting point for the next run.
-      variable_set('tracker_index_nid', $last_nid - 1);
-
-      watchdog('tracker', 'Indexed %count content items for tracking.', array('%count' => $count));
-    }
-    else {
-      // If all nodes have been indexed, set to zero to skip future cron runs.
-      variable_set('tracker_index_nid', 0);
-    }
-  }
-}
-
-/**
- * Access callback for tracker/%user_uid_optional.
- */
-function _tracker_myrecent_access($account) {
-  // This path is only allowed for authenticated users looking at their own content.
-  return $account->uid && ($GLOBALS['user']->uid == $account->uid) && user_access('access content');
-}
-
-/**
- * Access callback for user/%user/track.
- */
-function _tracker_user_access($account) {
-  return user_view_access($account) && user_access('access content');
-}
-
-/**
- * Implements hook_node_insert().
- *
- * Adds new tracking information for this node since it's new.
- */
-function tracker_node_insert($node, $arg = 0) {
-  _tracker_add($node->nid, $node->uid, $node->changed);
-}
-
-/**
- * Implements hook_node_update().
- *
- * Adds tracking information for this node since it's been updated.
- */
-function tracker_node_update($node, $arg = 0) {
-  _tracker_add($node->nid, $node->uid, $node->changed);
-}
-
-/**
- * Implements hook_node_delete().
- *
- * Deletes tracking information for a node.
- */
-function tracker_node_delete($node, $arg = 0) {
-  db_delete('tracker_node')
-    ->condition('nid', $node->nid)
-    ->execute();
-  db_delete('tracker_user')
-    ->condition('nid', $node->nid)
-    ->execute();
-}
-
-/**
- * Implements hook_comment_update().
- *
- * Comment module doesn't call hook_comment_unpublish() when saving individual
- * comments so we need to check for those here.
- */
-function tracker_comment_update($comment) {
-  // comment_save() calls hook_comment_publish() for all published comments
-  // so we need to handle all other values here.
-  if ($comment->status != COMMENT_PUBLISHED) {
-    _tracker_remove($comment->nid, $comment->uid, $comment->changed);
-  }
-}
-
-/**
- * Implements hook_comment_publish().
- *
- * This actually handles the insert and update of published nodes since
- * comment_save() calls hook_comment_publish() for all published comments.
- */
-function tracker_comment_publish($comment) {
-  _tracker_add($comment->nid, $comment->uid, $comment->changed);
-}
-
-/**
- * Implements hook_comment_unpublish().
- */
-function tracker_comment_unpublish($comment) {
-  _tracker_remove($comment->nid, $comment->uid, $comment->changed);
-}
-
-/**
- * Implements hook_comment_delete().
- */
-function tracker_comment_delete($comment) {
-  _tracker_remove($comment->nid, $comment->uid, $comment->changed);
-}
-
-/**
- * Updates indexing tables when a node is added, updated, or commented on.
- *
- * @param $nid
- *   A node ID.
- * @param $uid
- *   The node or comment author.
- * @param $changed
- *   The node updated timestamp or comment timestamp.
- */
-function _tracker_add($nid, $uid, $changed) {
-  $node = db_query('SELECT nid, status, uid, changed FROM {node} WHERE nid = :nid', array(':nid' => $nid))->fetchObject();
-
-  // Adding a comment can only increase the changed timestamp, so our
-  // calculation here is simple.
-  $changed = max($node->changed, $changed);
-
-  // Update the node-level data.
-  db_merge('tracker_node')
-    ->key(array('nid' => $nid))
-    ->fields(array(
-      'changed' => $changed,
-      'published' => $node->status,
-    ))
-    ->execute();
-
-  // Create or update the user-level data.
-  db_merge('tracker_user')
-    ->key(array(
-      'nid' => $nid,
-      'uid' => $uid,
-    ))
-    ->fields(array(
-      'changed' => $changed,
-      'published' => $node->status,
-    ))
-    ->execute();
-}
-
-/**
- * Determines the max timestamp between $node->changed and the last comment.
- *
- * @param $nid
- *   A node ID.
- *
- * @return
- *  The $node->changed timestamp, or most recent comment timestamp, whichever
- *  is the greatest.
- */
-function _tracker_calculate_changed($nid) {
-  $changed = db_query('SELECT changed FROM {node} WHERE nid = :nid', array(':nid' => $nid), array('target' => 'slave'))->fetchField();
-  $latest_comment = db_query_range('SELECT cid, changed FROM {comment} WHERE nid = :nid AND status = :status ORDER BY changed DESC', 0, 1, array(
-    ':nid' => $nid,
-    ':status' => COMMENT_PUBLISHED,
-  ), array('target' => 'slave'))->fetchObject();
-  if ($latest_comment && $latest_comment->changed > $changed) {
-    $changed = $latest_comment->changed;
-  }
-  return $changed;
-}
-
-/**
- * Cleans up indexed data when nodes or comments are removed.
- *
- * @param $nid
- *  The node ID.
- * @param $uid
- *   The author of the node or comment.
- * @param $changed
- *   The last changed timestamp of the node.
- */
-function _tracker_remove($nid, $uid = NULL, $changed = NULL) {
-  $node = db_query('SELECT nid, status, uid, changed FROM {node} WHERE nid = :nid', array(':nid' => $nid))->fetchObject();
-
-  // The user only keeps his or her subscription if both of the following are true:
-  //   (1) The node exists.
-  //   (2) The user is either the node author or has commented on the node.
-  $keep_subscription = FALSE;
-
-  if ($node) {
-    // Self-authorship is one reason to keep the user's subscription.
-    $keep_subscription = ($node->uid == $uid);
-
-    // Comments are a second reason to keep the user's subscription.
-    if (!$keep_subscription) {
-      // Check if the user has commented at least once on the given nid.
-      $keep_subscription = db_query_range('SELECT COUNT(*) FROM {comment} WHERE nid = :nid AND uid = :uid AND status = :status', 0, 1, array(
-        ':nid' => $nid,
-        ':uid' => $uid,
-        ':status' => COMMENT_PUBLISHED,
-      ))->fetchField();
-    }
-
-    // If we haven't found a reason to keep the user's subscription, delete it.
-    if (!$keep_subscription) {
-      db_delete('tracker_user')
-        ->condition('nid', $nid)
-        ->condition('uid', $uid)
-        ->execute();
-    }
-
-    // Now we need to update the (possibly) changed timestamps for other users
-    // and the node itself.
-    // We only need to do this if the removed item has a timestamp that equals
-    // or exceeds the listed changed timestamp for the node.
-    $tracker_node = db_query('SELECT nid, changed FROM {tracker_node} WHERE nid = :nid', array(':nid' => $nid))->fetchObject();
-    if ($tracker_node && $changed >= $tracker_node->changed) {
-      // If we're here, the item being removed is *possibly* the item that
-      // established the node's changed timestamp.
-
-      // We just have to recalculate things from scratch.
-      $changed = _tracker_calculate_changed($nid);
-
-      // And then we push the out the new changed timestamp to our denormalized
-      // tables.
-      db_update('tracker_node')
-        ->fields(array(
-          'changed' => $changed,
-          'published' => $node->status,
-        ))
-        ->condition('nid', $nid)
-        ->execute();
-      db_update('tracker_node')
-        ->fields(array(
-          'changed' => $changed,
-          'published' => $node->status,
-        ))
-        ->condition('nid', $nid)
-        ->execute();
-    }
-  }
-  else {
-    // If the node doesn't exist, remove everything.
-    db_delete('tracker_node')
-      ->condition('nid', $nid)
-      ->execute();
-    db_delete('tracker_user')
-      ->condition('nid', $nid)
-      ->execute();
-  }
-}
diff --git a/modules/tracker/tracker.test b/modules/tracker/tracker.test
deleted file mode 100644
index 66ebb84..0000000
--- a/modules/tracker/tracker.test
+++ /dev/null
@@ -1,268 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for tracker.module.
- */
-
-/**
- * Defines a base class for testing tracker.module.
- */
-class TrackerTest extends DrupalWebTestCase {
-
-  /**
-   * The main user for testing.
-   *
-   * @var object
-   */
-  protected $user;
-
-  /**
-   * A second user that will 'create' comments and nodes.
-   *
-   * @var object
-   */
-  protected $other_user;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Tracker',
-      'description' => 'Create and delete nodes and check for their display in the tracker listings.',
-      'group' => 'Tracker'
-    );
-  }
-
-  function setUp() {
-    parent::setUp('comment', 'tracker');
-
-    $permissions = array('access comments', 'create page content', 'post comments', 'skip comment approval');
-    $this->user = $this->drupalCreateUser($permissions);
-    $this->other_user = $this->drupalCreateUser($permissions);
-
-    // Make node preview optional.
-    variable_set('comment_preview_page', 0);
-  }
-
-  /**
-   * Tests for the presence of nodes on the global tracker listing.
-   */
-  function testTrackerAll() {
-    $this->drupalLogin($this->user);
-
-    $unpublished = $this->drupalCreateNode(array(
-      'title' => $this->randomName(8),
-      'status' => 0,
-    ));
-    $published = $this->drupalCreateNode(array(
-      'title' => $this->randomName(8),
-      'status' => 1,
-    ));
-
-    $this->drupalGet('tracker');
-    $this->assertNoText($unpublished->title, 'Unpublished node do not show up in the tracker listing.');
-    $this->assertText($published->title, 'Published node show up in the tracker listing.');
-    $this->assertLink(t('My recent content'), 0, 'User tab shows up on the global tracker page.');
-
-    // Delete a node and ensure it no longer appears on the tracker.
-    node_delete($published->nid);
-    $this->drupalGet('tracker');
-    $this->assertNoText($published->title, 'Deleted node do not show up in the tracker listing.');
-  }
-
-  /**
-   * Tests for the presence of nodes on a user's tracker listing.
-   */
-  function testTrackerUser() {
-    $this->drupalLogin($this->user);
-
-    $unpublished = $this->drupalCreateNode(array(
-      'title' => $this->randomName(8),
-      'uid' => $this->user->uid,
-      'status' => 0,
-    ));
-    $my_published = $this->drupalCreateNode(array(
-      'title' => $this->randomName(8),
-      'uid' => $this->user->uid,
-      'status' => 1,
-    ));
-    $other_published_no_comment = $this->drupalCreateNode(array(
-      'title' => $this->randomName(8),
-      'uid' => $this->other_user->uid,
-      'status' => 1,
-    ));
-    $other_published_my_comment = $this->drupalCreateNode(array(
-      'title' => $this->randomName(8),
-      'uid' => $this->other_user->uid,
-      'status' => 1,
-    ));
-    $comment = array(
-      'subject' => $this->randomName(),
-      'comment_body[' . LANGUAGE_NONE . '][0][value]' => $this->randomName(20),
-    );
-    $this->drupalPost('comment/reply/' . $other_published_my_comment->nid, $comment, t('Save'));
-
-    $this->drupalGet('user/' . $this->user->uid . '/track');
-    $this->assertNoText($unpublished->title, "Unpublished nodes do not show up in the users's tracker listing.");
-    $this->assertText($my_published->title, "Published nodes show up in the user's tracker listing.");
-    $this->assertNoText($other_published_no_comment->title, "Other user's nodes do not show up in the user's tracker listing.");
-    $this->assertText($other_published_my_comment->title, "Nodes that the user has commented on appear in the user's tracker listing.");
-
-    // Verify that unpublished comments are removed from the tracker.
-    $admin_user = $this->drupalCreateUser(array('administer comments', 'access user profiles'));
-    $this->drupalLogin($admin_user);
-    $this->drupalPost('comment/1/edit', array('status' => COMMENT_NOT_PUBLISHED), t('Save'));
-    $this->drupalGet('user/' . $this->user->uid . '/track');
-    $this->assertNoText($other_published_my_comment->title, 'Unpublished comments are not counted on the tracker listing.');
-  }
-
-  /**
-   * Tests for the presence of the "new" flag for nodes.
-   */
-  function testTrackerNewNodes() {
-    $this->drupalLogin($this->user);
-
-    $edit = array(
-      'title' => $this->randomName(8),
-    );
-
-    $node = $this->drupalCreateNode($edit);
-    $title = $edit['title'];
-    $this->drupalGet('tracker');
-    $this->assertPattern('/' . $title . '.*new/', 'New nodes are flagged as such in the tracker listing.');
-
-    $this->drupalGet('node/' . $node->nid);
-    $this->drupalGet('tracker');
-    $this->assertNoPattern('/' . $title . '.*new/', 'Visited nodes are not flagged as new.');
-
-    $this->drupalLogin($this->other_user);
-    $this->drupalGet('tracker');
-    $this->assertPattern('/' . $title . '.*new/', 'For another user, new nodes are flagged as such in the tracker listing.');
-
-    $this->drupalGet('node/' . $node->nid);
-    $this->drupalGet('tracker');
-    $this->assertNoPattern('/' . $title . '.*new/', 'For another user, visited nodes are not flagged as new.');
-  }
-
-  /**
-   * Tests for comment counters on the tracker listing.
-   */
-  function testTrackerNewComments() {
-    $this->drupalLogin($this->user);
-
-    $node = $this->drupalCreateNode(array(
-      'comment' => 2,
-      'title' => array(LANGUAGE_NONE => array(array('value' => $this->randomName(8)))),
-    ));
-
-    // Add a comment to the page.
-    $comment = array(
-      'subject' => $this->randomName(),
-      'comment_body[' . LANGUAGE_NONE . '][0][value]' => $this->randomName(20),
-    );
-    // The new comment is automatically viewed by the current user.
-    $this->drupalPost('comment/reply/' . $node->nid, $comment, t('Save'));
-
-    $this->drupalLogin($this->other_user);
-    $this->drupalGet('tracker');
-    $this->assertText('1 new', 'New comments are counted on the tracker listing pages.');
-    $this->drupalGet('node/' . $node->nid);
-
-    // Add another comment as other_user.
-    $comment = array(
-      'subject' => $this->randomName(),
-      'comment_body[' . LANGUAGE_NONE . '][0][value]' => $this->randomName(20),
-    );
-    // If the comment is posted in the same second as the last one then Drupal
-    // can't tell the difference, so we wait one second here.
-    sleep(1);
-    $this->drupalPost('comment/reply/' . $node->nid, $comment, t('Save'));
-
-    $this->drupalLogin($this->user);
-    $this->drupalGet('tracker');
-    $this->assertText('1 new', 'New comments are counted on the tracker listing pages.');
-  }
-
-  /**
-   * Tests that existing nodes are indexed by cron.
-   */
-  function testTrackerCronIndexing() {
-    $this->drupalLogin($this->user);
-
-    // Create 3 nodes.
-    $edits = array();
-    $nodes = array();
-    for ($i = 1; $i <= 3; $i++) {
-      $edits[$i] = array(
-        'comment' => 2,
-        'title' => $this->randomName(),
-      );
-      $nodes[$i] = $this->drupalCreateNode($edits[$i]);
-    }
-
-    // Add a comment to the last node as other user.
-    $this->drupalLogin($this->other_user);
-    $comment = array(
-      'subject' => $this->randomName(),
-      'comment_body[' . LANGUAGE_NONE . '][0][value]' => $this->randomName(20),
-    );
-    $this->drupalPost('comment/reply/' . $nodes[3]->nid, $comment, t('Save'));
-
-    // Start indexing backwards from node 3.
-    variable_set('tracker_index_nid', 3);
-
-    // Clear the current tracker tables and rebuild them.
-    db_delete('tracker_node')
-      ->execute();
-    db_delete('tracker_user')
-      ->execute();
-    tracker_cron();
-
-    $this->drupalLogin($this->user);
-
-    // Fetch the user's tracker.
-    $this->drupalGet('tracker/' . $this->user->uid);
-
-    // Assert that all node titles are displayed.
-    foreach ($nodes as $i => $node) {
-      $this->assertText($node->title, format_string('Node @i is displayed on the tracker listing pages.', array('@i' => $i)));
-    }
-    $this->assertText('1 new', 'New comment is counted on the tracker listing pages.');
-    $this->assertText('updated', 'Node is listed as updated');
-
-    // Fetch the site-wide tracker.
-    $this->drupalGet('tracker');
-
-    // Assert that all node titles are displayed.
-    foreach ($nodes as $i => $node) {
-      $this->assertText($node->title, format_string('Node @i is displayed on the tracker listing pages.', array('@i' => $i)));
-    }
-    $this->assertText('1 new', 'New comment is counted on the tracker listing pages.');
-  }
-
-  /**
-   * Tests that publish/unpublish works at admin/content/node.
-   */
-  function testTrackerAdminUnpublish() {
-    $admin_user = $this->drupalCreateUser(array('access content overview', 'administer nodes', 'bypass node access'));
-    $this->drupalLogin($admin_user);
-
-    $node = $this->drupalCreateNode(array(
-      'comment' => 2,
-      'title' => $this->randomName(),
-    ));
-
-    // Assert that the node is displayed.
-    $this->drupalGet('tracker');
-    $this->assertText($node->title, 'Node is displayed on the tracker listing pages.');
-
-    // Unpublish the node and ensure that it's no longer displayed.
-    $edit = array(
-      'operation' => 'unpublish',
-      'nodes[' . $node->nid . ']' => $node->nid,
-    );
-    $this->drupalPost('admin/content', $edit, t('Update'));
-
-    $this->drupalGet('tracker');
-    $this->assertText(t('No content available.'), 'Node is displayed on the tracker listing pages.');
-  }
-}
diff --git a/modules/translation/tests/translation_test.info b/modules/translation/tests/translation_test.info
deleted file mode 100644
index ee1d7ec..0000000
--- a/modules/translation/tests/translation_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Content Translation Test"
-description = "Support module for the content translation tests."
-core = 7.x
-package = Testing
-version = VERSION
-hidden = TRUE
diff --git a/modules/translation/tests/translation_test.module b/modules/translation/tests/translation_test.module
deleted file mode 100644
index e3bb4b5..0000000
--- a/modules/translation/tests/translation_test.module
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-
-/**
- * @file
- * Mock module for content translation tests.
- */
-
-/**
- * Implements hook_node_insert().
- */
-function translation_test_node_insert($node) {
-  drupal_write_record('node', $node, 'nid');
-}
diff --git a/modules/translation/translation.info b/modules/translation/translation.info
deleted file mode 100644
index 6c652a1..0000000
--- a/modules/translation/translation.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Content translation
-description = Allows content to be translated into different languages.
-dependencies[] = locale
-package = Core
-version = VERSION
-core = 7.x
-files[] = translation.test
diff --git a/modules/translation/translation.module b/modules/translation/translation.module
deleted file mode 100644
index 3312357..0000000
--- a/modules/translation/translation.module
+++ /dev/null
@@ -1,551 +0,0 @@
-<?php
-
-/**
- * @file
- * Manages content translations.
- *
- * Translations are managed in sets of posts, which represent the same
- * information in different languages. Only content types for which the
- * administrator has explicitly enabled translations could have translations
- * associated. Translations are managed in sets with exactly one source post
- * per set. The source post is used to translate to different languages, so if
- * the source post is significantly updated, the editor can decide to mark all
- * translations outdated.
- *
- * The node table stores the values used by this module:
- * - tnid: Integer for the translation set ID, which equals the node ID of the
- *   source post.
- * - translate: Integer flag, either indicating that the translation is up to
- *   date (0) or needs to be updated (1).
- */
-
-/**
- * Identifies a content type which has translation support enabled.
- */
-define('TRANSLATION_ENABLED', 2);
-
-/**
- * Implements hook_help().
- */
-function translation_help($path, $arg) {
-  switch ($path) {
-    case 'admin/help#translation':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Content translation module allows content to be translated into different languages. Working with the <a href="@locale">Locale module</a> (which manages enabled languages and provides translation for the site interface), the Content translation module is key to creating and maintaining translated site content. For more information, see the online handbook entry for <a href="@translation">Content translation module</a>.', array('@locale' => url('admin/help/locale'), '@translation' => 'http://drupal.org/documentation/modules/translation/')) . '</p>';
-      $output .= '<h3>' . t('Uses') . '</h3>';
-      $output .= '<dl>';
-      $output .= '<dt>' . t('Configuring content types for translation') . '</dt>';
-      $output .= '<dd>' . t('To configure a particular content type for translation, visit the <a href="@content-types">Content types</a> page, and click the <em>edit</em> link for the content type. In the <em>Publishing options</em> section, select <em>Enabled, with translation</em> under <em>Multilingual support</em>.', array('@content-types' => url('admin/structure/types'))) . '</dd>';
-      $output .= '<dt>' . t('Assigning a language to content') . '</dt>';
-      $output .= '<dd>' . t('Use the <em>Language</em> drop down to select the appropriate language when creating or editing content.') . '</dd>';
-      $output .= '<dt>' . t('Translating content') . '</dt>';
-      $output .= '<dd>' . t('Users with the <em>translate content</em> permission can translate content, if the content type has been configured to allow translations. To translate content, select the <em>Translation</em> tab when viewing the content, select the language for which you wish to provide content, and then enter the content.') . '</dd>';
-      $output .= '<dt>' . t('Maintaining translations') . '</dt>';
-      $output .= '<dd>' . t('If editing content in one language requires that translated versions also be updated to reflect the change, use the <em>Flag translations as outdated</em> check box to mark the translations as outdated and in need of revision. Individual translations may also be marked for revision by selecting the <em>This translation needs to be updated</em> check box on the translation editing form.') . '</dd>';
-      $output .= '</dl>';
-      return $output;
-    case 'node/%/translate':
-      $output = '<p>' . t('Translations of a piece of content are managed with translation sets. Each translation set has one source post and any number of translations in any of the <a href="!languages">enabled languages</a>. All translations are tracked to be up to date or outdated based on whether the source post was modified significantly.', array('!languages' => url('admin/config/regional/language'))) . '</p>';
-      return $output;
-  }
-}
-
-/**
- * Implements hook_menu().
- */
-function translation_menu() {
-  $items = array();
-  $items['node/%node/translate'] = array(
-    'title' => 'Translate',
-    'page callback' => 'translation_node_overview',
-    'page arguments' => array(1),
-    'access callback' => '_translation_tab_access',
-    'access arguments' => array(1),
-    'type' => MENU_LOCAL_TASK,
-    'weight' => 2,
-    'file' => 'translation.pages.inc',
-  );
-  return $items;
-}
-
-/**
- * Access callback: Checks that the user has permission to 'translate content'.
- *
- * Only displays the translation tab for nodes that are not language-neutral
- * of types that have translation enabled.
- *
- * @param $node
- *   A node object.
- *
- * @return
- *   TRUE if the translation tab should be displayed, FALSE otherwise.
- *
- * @see translation_menu()
- */
-function _translation_tab_access($node) {
-  if (entity_language('node', $node) != LANGUAGE_NONE && translation_supported_type($node->type) && node_access('view', $node)) {
-    return user_access('translate content');
-  }
-  return FALSE;
-}
-
-/**
- * Implements hook_admin_paths().
- */
-function translation_admin_paths() {
-  if (variable_get('node_admin_theme')) {
-    $paths = array(
-      'node/*/translate' => TRUE,
-    );
-    return $paths;
-  }
-}
-
-/**
- * Implements hook_permission().
- */
-function translation_permission() {
-  return array(
-    'translate content' => array(
-      'title' => t('Translate content'),
-    ),
-  );
-}
-
-/**
- * Implements hook_form_FORM_ID_alter() for node_type_form().
- */
-function translation_form_node_type_form_alter(&$form, &$form_state) {
-  // Add translation option to content type form.
-  $form['workflow']['language_content_type']['#options'][TRANSLATION_ENABLED] = t('Enabled, with translation');
-  // Description based on text from locale.module.
-  $form['workflow']['language_content_type']['#description'] = t('Enable multilingual support for this content type. If enabled, a language selection field will be added to the editing form, allowing you to select from one of the <a href="!languages">enabled languages</a>. You can also turn on translation for this content type, which lets you have content translated to any of the installed languages. If disabled, new posts are saved with the default language. Existing content will not be affected by changing this option.', array('!languages' => url('admin/config/regional/language')));
-}
-
-/**
- * Implements hook_form_BASE_FORM_ID_alter() for node_form().
- *
- * Alters language fields on node edit forms when a translation is about to be
- * created.
- *
- * @see node_form()
- */
-function translation_form_node_form_alter(&$form, &$form_state) {
-  if (translation_supported_type($form['#node']->type)) {
-    $node = $form['#node'];
-    $languages = language_list('enabled');
-    $disabled_languages = isset($languages[0]) ? $languages[0] : FALSE;
-    $translator_widget = $disabled_languages && user_access('translate content');
-    $groups = array(t('Disabled'), t('Enabled'));
-    // Allow translators to enter content in disabled languages. Translators
-    // might need to distinguish between enabled and disabled languages, hence
-    // we divide them in two option groups.
-    if ($translator_widget) {
-      $options = array($groups[1] => array(LANGUAGE_NONE => t('Language neutral')));
-      $language_list = locale_language_list('name', TRUE);
-      foreach (array(1, 0) as $status) {
-        $group = $groups[$status];
-        foreach ($languages[$status] as $langcode => $language) {
-          $options[$group][$langcode] = $language_list[$langcode];
-        }
-      }
-      $form['language']['#options'] = $options;
-    }
-    if (!empty($node->translation_source)) {
-      // We are creating a translation. Add values and lock language field.
-      $form['translation_source'] = array('#type' => 'value', '#value' => $node->translation_source);
-      $form['language']['#disabled'] = TRUE;
-    }
-    elseif (!empty($node->nid) && !empty($node->tnid)) {
-      // Disable languages for existing translations, so it is not possible to switch this
-      // node to some language which is already in the translation set. Also remove the
-      // language neutral option.
-      unset($form['language']['#options'][LANGUAGE_NONE]);
-      foreach (translation_node_get_translations($node->tnid) as $langcode => $translation) {
-        if ($translation->nid != $node->nid) {
-          if ($translator_widget) {
-            $group = $groups[(int)!isset($disabled_languages[$langcode])];
-            unset($form['language']['#options'][$group][$langcode]);
-          }
-          else {
-            unset($form['language']['#options'][$langcode]);
-          }
-        }
-      }
-      // Add translation values and workflow options.
-      $form['tnid'] = array('#type' => 'value', '#value' => $node->tnid);
-      $form['translation'] = array(
-        '#type' => 'fieldset',
-        '#title' => t('Translation settings'),
-        '#access' => user_access('translate content'),
-        '#collapsible' => TRUE,
-        '#collapsed' => !$node->translate,
-        '#tree' => TRUE,
-        '#weight' => 30,
-      );
-      if ($node->tnid == $node->nid) {
-        // This is the source node of the translation
-        $form['translation']['retranslate'] = array(
-          '#type' => 'checkbox',
-          '#title' => t('Flag translations as outdated'),
-          '#default_value' => 0,
-          '#description' => t('If you made a significant change, which means translations should be updated, you can flag all translations of this post as outdated. This will not change any other property of those posts, like whether they are published or not.'),
-        );
-        $form['translation']['status'] = array('#type' => 'value', '#value' => 0);
-      }
-      else {
-        $form['translation']['status'] = array(
-          '#type' => 'checkbox',
-          '#title' => t('This translation needs to be updated'),
-          '#default_value' => $node->translate,
-          '#description' => t('When this option is checked, this translation needs to be updated because the source post has changed. Uncheck when the translation is up to date again.'),
-        );
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_node_view().
- *
- * Displays translation links with language names if this node is part of a
- * translation set. If no language provider is enabled, "fall back" to simple
- * links built through the result of translation_node_get_translations().
- */
-function translation_node_view($node, $view_mode) {
-  // If the site has no translations or is not multilingual we have no content
-  // translation links to display.
-  if (isset($node->tnid) && drupal_multilingual() && $translations = translation_node_get_translations($node->tnid)) {
-    $languages = language_list('enabled');
-    $languages = $languages[1];
-
-    // There might be a language provider enabled defining custom language
-    // switch links which need to be taken into account while generating the
-    // content translation links. As custom language switch links are available
-    // only for configurable language types and interface language is the only
-    // configurable language type in core, we use it as default. Contributed
-    // modules can change this behavior by setting the system variable below.
-    $type = variable_get('translation_language_type', LANGUAGE_TYPE_INTERFACE);
-    $custom_links = language_negotiation_get_switch_links($type, "node/$node->nid");
-    $links = array();
-
-    foreach ($translations as $langcode => $translation) {
-      // Do not show links to the same node, to unpublished translations or to
-      // translations in disabled languages.
-      if ($translation->status && isset($languages[$langcode]) && $langcode != entity_language('node', $node)) {
-        $language = $languages[$langcode];
-        $key = "translation_$langcode";
-
-        if (isset($custom_links->links[$langcode])) {
-          $links[$key] = $custom_links->links[$langcode];
-        }
-        else {
-          $links[$key] = array(
-            'href' => "node/{$translation->nid}",
-            'title' => $language->native,
-            'language' => $language,
-          );
-        }
-
-        // Custom switch links are more generic than content translation links,
-        // hence we override existing attributes with the ones below.
-        $links[$key] += array('attributes' => array());
-        $attributes = array(
-          'title' => $translation->title,
-          'class' => array('translation-link'),
-        );
-        $links[$key]['attributes'] = $attributes + $links[$key]['attributes'];
-      }
-    }
-
-    $node->content['links']['translation'] = array(
-      '#theme' => 'links__node__translation',
-      '#links' => $links,
-      '#attributes' => array('class' => array('links', 'inline')),
-    );
-  }
-}
-
-/**
- * Implements hook_node_prepare().
- */
-function translation_node_prepare($node) {
-  // Only act if we are dealing with a content type supporting translations.
-  if (translation_supported_type($node->type) &&
-    // And it's a new node.
-    empty($node->nid) &&
-    // And the user has permission to translate content.
-    user_access('translate content') &&
-    // And the $_GET variables are set properly.
-    isset($_GET['translation']) &&
-    isset($_GET['target']) &&
-    is_numeric($_GET['translation'])) {
-
-    $source_node = node_load($_GET['translation']);
-    if (empty($source_node) || !node_access('view', $source_node)) {
-      // Source node not found or no access to view. We should not check
-      // for edit access, since the translator might not have permissions
-      // to edit the source node but should still be able to translate.
-      return;
-    }
-
-    $language_list = language_list();
-    $langcode = $_GET['target'];
-    if (!isset($language_list[$langcode]) || ($source_node->language == $langcode)) {
-      // If not supported language, or same language as source node, break.
-      return;
-    }
-
-    // Ensure we don't have an existing translation in this language.
-    if (!empty($source_node->tnid)) {
-      $translations = translation_node_get_translations($source_node->tnid);
-      if (isset($translations[$langcode])) {
-        drupal_set_message(t('A translation of %title in %language already exists, a new %type will be created instead of a translation.', array('%title' => $source_node->title, '%language' => $language_list[$langcode]->name, '%type' => $node->type)), 'error');
-        return;
-      }
-    }
-
-    // Populate fields based on source node.
-    $node->language = $langcode;
-    $node->translation_source = $source_node;
-    $node->title = $source_node->title;
-
-    // Add field translations and let other modules module add custom translated
-    // fields.
-    field_attach_prepare_translation('node', $node, $langcode, $source_node, $source_node->language);
-  }
-}
-
-/**
- * Implements hook_node_insert().
- */
-function translation_node_insert($node) {
-  // Only act if we are dealing with a content type supporting translations.
-  if (translation_supported_type($node->type)) {
-    if (!empty($node->translation_source)) {
-      if ($node->translation_source->tnid) {
-        // Add node to existing translation set.
-        $tnid = $node->translation_source->tnid;
-      }
-      else {
-        // Create new translation set, using nid from the source node.
-        $tnid = $node->translation_source->nid;
-        db_update('node')
-          ->fields(array(
-            'tnid' => $tnid,
-            'translate' => 0,
-          ))
-          ->condition('nid', $node->translation_source->nid)
-          ->execute();
-      }
-      db_update('node')
-        ->fields(array(
-          'tnid' => $tnid,
-          'translate' => 0,
-        ))
-        ->condition('nid', $node->nid)
-        ->execute();
-      // Save tnid to avoid loss in case of resave.
-      $node->tnid = $tnid;
-    }
-  }
-}
-
-/**
- * Implements hook_node_update().
- */
-function translation_node_update($node) {
-  // Only act if we are dealing with a content type supporting translations.
-  if (translation_supported_type($node->type)) {
-    $langcode = entity_language('node', $node);
-    if (isset($node->translation) && $node->translation && !empty($langcode) && $node->tnid) {
-      // Update translation information.
-      db_update('node')
-        ->fields(array(
-          'tnid' => $node->tnid,
-          'translate' => $node->translation['status'],
-        ))
-        ->condition('nid', $node->nid)
-        ->execute();
-      if (!empty($node->translation['retranslate'])) {
-        // This is the source node, asking to mark all translations outdated.
-        db_update('node')
-          ->fields(array('translate' => 1))
-          ->condition('nid', $node->nid, '<>')
-          ->condition('tnid', $node->tnid)
-          ->execute();
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_node_validate().
- *
- * Ensures that duplicate translations can't be created for the same source.
- */
-function translation_node_validate($node, $form) {
-  // Only act on translatable nodes with a tnid or translation_source.
-  if (translation_supported_type($node->type) && (!empty($node->tnid) || !empty($form['#node']->translation_source->nid))) {
-    $tnid = !empty($node->tnid) ? $node->tnid : $form['#node']->translation_source->nid;
-    $translations = translation_node_get_translations($tnid);
-    $langcode = entity_language('node', $node);
-    if (isset($translations[$langcode]) && $translations[$langcode]->nid != $node->nid ) {
-      form_set_error('language', t('There is already a translation in this language.'));
-    }
-  }
-}
-
-/**
- * Implements hook_node_delete().
- */
-function translation_node_delete($node) {
-  // Only act if we are dealing with a content type supporting translations.
-  if (translation_supported_type($node->type)) {
-    translation_remove_from_set($node);
-  }
-}
-
-/**
- * Removes a node from its translation set and updates accordingly.
- *
- * @param $node
- *   A node object.
- */
-function translation_remove_from_set($node) {
-  if (isset($node->tnid)) {
-    $query = db_update('node')
-      ->fields(array(
-        'tnid' => 0,
-        'translate' => 0,
-      ));
-    if (db_query('SELECT COUNT(*) FROM {node} WHERE tnid = :tnid', array(':tnid' => $node->tnid))->fetchField() == 1) {
-      // There is only one node left in the set: remove the set altogether.
-      $query
-        ->condition('tnid', $node->tnid)
-        ->execute();
-    }
-    else {
-      $query
-        ->condition('nid', $node->nid)
-        ->execute();
-
-      // If the node being removed was the source of the translation set,
-      // we pick a new source - preferably one that is up to date.
-      if ($node->tnid == $node->nid) {
-        $new_tnid = db_query('SELECT nid FROM {node} WHERE tnid = :tnid ORDER BY translate ASC, nid ASC', array(':tnid' => $node->tnid))->fetchField();
-        db_update('node')
-          ->fields(array('tnid' => $new_tnid))
-          ->condition('tnid', $node->tnid)
-          ->execute();
-      }
-    }
-  }
-}
-
-/**
- * Gets all nodes in a given translation set.
- *
- * @param $tnid
- *   The translation source nid of the translation set, the identifier of the
- *   node used to derive all translations in the set.
- *
- * @return
- *   Array of partial node objects (nid, title, language) representing all
- *   nodes in the translation set, in effect all translations of node $tnid,
- *   including node $tnid itself. Because these are partial nodes, you need to
- *   node_load() the full node, if you need more properties. The array is
- *   indexed by language code.
- */
-function translation_node_get_translations($tnid) {
-  if (is_numeric($tnid) && $tnid) {
-    $translations = &drupal_static(__FUNCTION__, array());
-
-    if (!isset($translations[$tnid])) {
-      $translations[$tnid] = array();
-      $result = db_select('node', 'n')
-        ->fields('n', array('nid', 'type', 'uid', 'status', 'title', 'language'))
-        ->condition('n.tnid', $tnid)
-        ->addTag('node_access')
-        ->execute();
-
-      foreach ($result as $node) {
-        $langcode = entity_language('node', $node);
-        $translations[$tnid][$langcode] = $node;
-      }
-    }
-    return $translations[$tnid];
-  }
-}
-
-/**
- * Returns whether the given content type has support for translations.
- *
- * @return
- *   TRUE if translation is supported, and FALSE if not.
- */
-function translation_supported_type($type) {
-  return variable_get('language_content_type_' . $type, 0) == TRANSLATION_ENABLED;
-}
-
-/**
- * Returns the paths of all translations of a node, based on its Drupal path.
- *
- * @param $path
- *   A Drupal path, for example node/432.
- *
- * @return
- *   An array of paths of translations of the node accessible to the current
- *   user, keyed with language codes.
- */
-function translation_path_get_translations($path) {
-  $paths = array();
-  // Check for a node related path, and for its translations.
-  if ((preg_match("!^node/(\d+)(/.+|)$!", $path, $matches)) && ($node = node_load((int) $matches[1])) && !empty($node->tnid)) {
-    foreach (translation_node_get_translations($node->tnid) as $language => $translation_node) {
-      $paths[$language] = 'node/' . $translation_node->nid . $matches[2];
-    }
-  }
-  return $paths;
-}
-
-/**
- * Implements hook_language_switch_links_alter().
- *
- * Replaces links with pointers to translated versions of the content.
- */
-function translation_language_switch_links_alter(array &$links, $type, $path) {
-  $language_type = variable_get('translation_language_type', LANGUAGE_TYPE_INTERFACE);
-
-  if ($type == $language_type && preg_match("!^node/(\d+)(/.+|)!", $path, $matches)) {
-    $node = node_load((int) $matches[1]);
-
-    if (empty($node->tnid)) {
-      // If the node cannot be found nothing needs to be done. If it does not
-      // have translations it might be a language neutral node, in which case we
-      // must leave the language switch links unaltered. This is true also for
-      // nodes not having translation support enabled.
-      if (empty($node) || entity_language('node', $node) == LANGUAGE_NONE || !translation_supported_type($node->type)) {
-        return;
-      }
-      $langcode = entity_language('node', $node);
-      $translations = array($langcode => $node);
-    }
-    else {
-      $translations = translation_node_get_translations($node->tnid);
-    }
-
-    foreach ($links as $langcode => $link) {
-      if (isset($translations[$langcode]) && $translations[$langcode]->status) {
-        // Translation in a different node.
-        $links[$langcode]['href'] = 'node/' . $translations[$langcode]->nid . $matches[2];
-      }
-      else {
-        // No translation in this language, or no permission to view.
-        unset($links[$langcode]['href']);
-        $links[$langcode]['attributes']['class'][] = 'locale-untranslated';
-      }
-    }
-  }
-}
diff --git a/modules/translation/translation.pages.inc b/modules/translation/translation.pages.inc
deleted file mode 100644
index 110fea6..0000000
--- a/modules/translation/translation.pages.inc
+++ /dev/null
@@ -1,82 +0,0 @@
-<?php
-
-/**
- * @file
- * User page callbacks for the Translation module.
- */
-
-/**
- * Page callback: Displays a list of a node's translations.
- *
- * @param $node
- *   A node object.
- *
- * @return
- *   A render array for a page containing a list of content.
- *
- * @see translation_menu()
- */
-function translation_node_overview($node) {
-  include_once DRUPAL_ROOT . '/includes/language.inc';
-
-  if ($node->tnid) {
-    // Already part of a set, grab that set.
-    $tnid = $node->tnid;
-    $translations = translation_node_get_translations($node->tnid);
-  }
-  else {
-    // We have no translation source nid, this could be a new set, emulate that.
-    $tnid = $node->nid;
-    $translations = array(entity_language('node', $node) => $node);
-  }
-
-  $type = variable_get('translation_language_type', LANGUAGE_TYPE_INTERFACE);
-  $header = array(t('Language'), t('Title'), t('Status'), t('Operations'));
-
-  foreach (language_list() as $langcode => $language) {
-    $options = array();
-    $language_name = $language->name;
-    if (isset($translations[$langcode])) {
-      // Existing translation in the translation set: display status.
-      // We load the full node to check whether the user can edit it.
-      $translation_node = node_load($translations[$langcode]->nid);
-      $path = 'node/' . $translation_node->nid;
-      $links = language_negotiation_get_switch_links($type, $path);
-      $title = empty($links->links[$langcode]['href']) ? l($translation_node->title, $path) : l($translation_node->title, $links->links[$langcode]['href'], $links->links[$langcode]);
-      if (node_access('update', $translation_node)) {
-        $text = t('edit');
-        $path = 'node/' . $translation_node->nid . '/edit';
-        $links = language_negotiation_get_switch_links($type, $path);
-        $options[] = empty($links->links[$langcode]['href']) ? l($text, $path) : l($text, $links->links[$langcode]['href'], $links->links[$langcode]);
-      }
-      $status = $translation_node->status ? t('Published') : t('Not published');
-      $status .= $translation_node->translate ? ' - <span class="marker">' . t('outdated') . '</span>' : '';
-      if ($translation_node->nid == $tnid) {
-        $language_name = t('<strong>@language_name</strong> (source)', array('@language_name' => $language_name));
-      }
-    }
-    else {
-      // No such translation in the set yet: help user to create it.
-      $title = t('n/a');
-      if (node_access('create', $node)) {
-        $text = t('add translation');
-        $path = 'node/add/' . str_replace('_', '-', $node->type);
-        $links = language_negotiation_get_switch_links($type, $path);
-        $query = array('query' => array('translation' => $node->nid, 'target' => $langcode));
-        $options[] = empty($links->links[$langcode]['href']) ? l($text, $path, $query) : l($text, $links->links[$langcode]['href'], array_merge_recursive($links->links[$langcode], $query));
-      }
-      $status = t('Not translated');
-    }
-    $rows[] = array($language_name, $title, $status, implode(" | ", $options));
-  }
-
-  drupal_set_title(t('Translations of %title', array('%title' => $node->title)), PASS_THROUGH);
-
-  $build['translation_node_overview'] = array(
-    '#theme' => 'table',
-    '#header' => $header,
-    '#rows' => $rows,
-  );
-
-  return $build;
-}
diff --git a/modules/translation/translation.test b/modules/translation/translation.test
deleted file mode 100644
index 4d272f3..0000000
--- a/modules/translation/translation.test
+++ /dev/null
@@ -1,492 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for the Translation module.
- */
-
-/**
- * Functional tests for the Translation module.
- */
-class TranslationTestCase extends DrupalWebTestCase {
-  protected $book;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Translation functionality',
-      'description' => 'Create a basic page with translation, modify the page outdating translation, and update translation.',
-      'group' => 'Translation'
-    );
-  }
-
-  function setUp() {
-    parent::setUp('locale', 'translation', 'translation_test');
-
-    // Setup users.
-    $this->admin_user = $this->drupalCreateUser(array('bypass node access', 'administer nodes', 'administer languages', 'administer content types', 'administer blocks', 'access administration pages', 'translate content'));
-    $this->translator = $this->drupalCreateUser(array('create page content', 'edit own page content', 'translate content'));
-
-    $this->drupalLogin($this->admin_user);
-
-    // Add languages.
-    $this->addLanguage('en');
-    $this->addLanguage('es');
-    $this->addLanguage('it');
-
-    // Disable Italian to test the translation behavior with disabled languages.
-    $edit = array('enabled[it]' => FALSE);
-    $this->drupalPost('admin/config/regional/language', $edit, t('Save configuration'));
-
-    // Set "Basic page" content type to use multilingual support with
-    // translation.
-    $this->drupalGet('admin/structure/types/manage/page');
-    $edit = array();
-    $edit['language_content_type'] = 2;
-    $this->drupalPost('admin/structure/types/manage/page', $edit, t('Save content type'));
-    $this->assertRaw(t('The content type %type has been updated.', array('%type' => 'Basic page')), 'Basic page content type has been updated.');
-
-    // Enable the language switcher block.
-    $language_type = LANGUAGE_TYPE_INTERFACE;
-    $edit = array("blocks[locale_$language_type][region]" => 'sidebar_first');
-    $this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
-
-    // Enable URL language detection and selection to make the language switcher
-    // block appear.
-    $edit = array('language[enabled][locale-url]' => TRUE);
-    $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
-    $this->assertRaw(t('Language negotiation configuration saved.'), 'URL language detection enabled.');
-    $this->resetCaches();
-
-    $this->drupalLogin($this->translator);
-  }
-
-  /**
-   * Creates, modifies, and updates a basic page with a translation.
-   */
-  function testContentTranslation() {
-    // Create Basic page in English.
-    $node_title = $this->randomName();
-    $node_body =  $this->randomName();
-    $node = $this->createPage($node_title, $node_body, 'en');
-
-    // Unpublish the original node to check that this has no impact on the
-    // translation overview page, publish it again afterwards.
-    $this->drupalLogin($this->admin_user);
-    $this->drupalPost('node/' . $node->nid . '/edit', array('status' => FALSE), t('Save'));
-    $this->drupalGet('node/' . $node->nid . '/translate');
-    $this->drupalPost('node/' . $node->nid . '/edit', array('status' => NODE_PUBLISHED), t('Save'));
-    $this->drupalLogin($this->translator);
-
-    // Check that the "add translation" link uses a localized path.
-    $languages = language_list();
-    $this->drupalGet('node/' . $node->nid . '/translate');
-    $this->assertLinkByHref($languages['es']->prefix . '/node/add/' . str_replace('_', '-', $node->type), 0, format_string('The "add translation" link for %language points to the localized path of the target language.', array('%language' => $languages['es']->name)));
-
-    // Submit translation in Spanish.
-    $node_translation_title = $this->randomName();
-    $node_translation_body = $this->randomName();
-    $node_translation = $this->createTranslation($node, $node_translation_title, $node_translation_body, 'es');
-
-    // Check that the "edit translation" and "view node" links use localized
-    // paths.
-    $this->drupalGet('node/' . $node->nid . '/translate');
-    $this->assertLinkByHref($languages['es']->prefix . '/node/' . $node_translation->nid . '/edit', 0, format_string('The "edit" link for the translation in %language points to the localized path of the translation language.', array('%language' => $languages['es']->name)));
-    $this->assertLinkByHref($languages['es']->prefix . '/node/' . $node_translation->nid, 0, format_string('The "view" link for the translation in %language points to the localized path of the translation language.', array('%language' => $languages['es']->name)));
-
-    // Attempt to submit a duplicate translation by visiting the node/add page
-    // with identical query string.
-    $this->drupalGet('node/add/page', array('query' => array('translation' => $node->nid, 'target' => 'es')));
-    $this->assertRaw(t('A translation of %title in %language already exists', array('%title' => $node_title, '%language' => $languages['es']->name)), 'Message regarding attempted duplicate translation is displayed.');
-
-    // Attempt a resubmission of the form - this emulates using the back button
-    // to return to the page then resubmitting the form without a refresh.
-    $edit = array();
-    $langcode = LANGUAGE_NONE;
-    $edit["title"] = $this->randomName();
-    $edit["body[$langcode][0][value]"] = $this->randomName();
-    $this->drupalPost('node/add/page', $edit, t('Save'), array('query' => array('translation' => $node->nid, 'language' => 'es')));
-    $duplicate = $this->drupalGetNodeByTitle($edit["title"]);
-    $this->assertEqual($duplicate->tnid, 0, 'The node does not have a tnid.');
-
-    // Update original and mark translation as outdated.
-    $node_body = $this->randomName();
-    $node->body[LANGUAGE_NONE][0]['value'] = $node_body;
-    $edit = array();
-    $edit["body[$langcode][0][value]"] = $node_body;
-    $edit['translation[retranslate]'] = TRUE;
-    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
-    $this->assertRaw(t('Basic page %title has been updated.', array('%title' => $node_title)), 'Original node updated.');
-
-    // Check to make sure that interface shows translation as outdated.
-    $this->drupalGet('node/' . $node->nid . '/translate');
-    $this->assertRaw('<span class="marker">' . t('outdated') . '</span>', 'Translation marked as outdated.');
-
-    // Update translation and mark as updated.
-    $edit = array();
-    $edit["body[$langcode][0][value]"] = $this->randomName();
-    $edit['translation[status]'] = FALSE;
-    $this->drupalPost('node/' . $node_translation->nid . '/edit', $edit, t('Save'));
-    $this->assertRaw(t('Basic page %title has been updated.', array('%title' => $node_translation_title)), 'Translated node updated.');
-
-    // Confirm that disabled languages are an option for translators when
-    // creating nodes.
-    $this->drupalGet('node/add/page');
-    $this->assertFieldByXPath('//select[@name="language"]//option', 'it', 'Italian (disabled) is available in language selection.');
-    $translation_it = $this->createTranslation($node, $this->randomName(), $this->randomName(), 'it');
-    $this->assertRaw($translation_it->body[LANGUAGE_NONE][0]['value'], 'Content created in Italian (disabled).');
-
-    // Confirm that language neutral is an option for translators when there are
-    // disabled languages.
-    $this->drupalGet('node/add/page');
-    $this->assertFieldByXPath('//select[@name="language"]//option', LANGUAGE_NONE, 'Language neutral is available in language selection with disabled languages.');
-    $node2 = $this->createPage($this->randomName(), $this->randomName(), LANGUAGE_NONE);
-    $this->assertRaw($node2->body[LANGUAGE_NONE][0]['value'], 'Language neutral content created with disabled languages available.');
-
-    // Leave just one language enabled and check that the translation overview
-    // page is still accessible.
-    $this->drupalLogin($this->admin_user);
-    $edit = array('enabled[es]' => FALSE);
-    $this->drupalPost('admin/config/regional/language', $edit, t('Save configuration'));
-    $this->drupalLogin($this->translator);
-    $this->drupalGet('node/' . $node->nid . '/translate');
-    $this->assertRaw(t('Translations of %title', array('%title' => $node->title)), 'Translation overview page available with only one language enabled.');
-  }
-
-  /**
-   * Checks that the language switch links behave properly.
-   */
-  function testLanguageSwitchLinks() {
-    // Create a Basic page in English and its translations in Spanish and
-    // Italian.
-    $node = $this->createPage($this->randomName(), $this->randomName(), 'en');
-    $translation_es = $this->createTranslation($node, $this->randomName(), $this->randomName(), 'es');
-    $translation_it = $this->createTranslation($node, $this->randomName(), $this->randomName(), 'it');
-
-    // Check that language switch links are correctly shown only for enabled
-    // languages.
-    $this->assertLanguageSwitchLinks($node, $translation_es);
-    $this->assertLanguageSwitchLinks($translation_es, $node);
-    $this->assertLanguageSwitchLinks($node, $translation_it, FALSE);
-
-    // Check that links to the displayed translation appear only in the language
-    // switcher block.
-    $this->assertLanguageSwitchLinks($node, $node, FALSE, 'node');
-    $this->assertLanguageSwitchLinks($node, $node, TRUE, 'block-locale');
-
-    // Unpublish the Spanish translation to check that the related language
-    // switch link is not shown.
-    $this->drupalLogin($this->admin_user);
-    $edit = array('status' => FALSE);
-    $this->drupalPost("node/$translation_es->nid/edit", $edit, t('Save'));
-    $this->drupalLogin($this->translator);
-    $this->assertLanguageSwitchLinks($node, $translation_es, FALSE);
-
-    // Check that content translation links are shown even when no language
-    // negotiation is configured.
-    $this->drupalLogin($this->admin_user);
-    $edit = array('language[enabled][locale-url]' => FALSE);
-    $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
-    $this->resetCaches();
-    $edit = array('status' => TRUE);
-    $this->drupalPost("node/$translation_es->nid/edit", $edit, t('Save'));
-    $this->drupalLogin($this->translator);
-    $this->assertLanguageSwitchLinks($node, $translation_es, TRUE, 'node');
-  }
-
-  /**
-   * Tests that the language switcher block alterations work as intended.
-   */
-  function testLanguageSwitcherBlockIntegration() {
-    // Enable Italian to have three items in the language switcher block.
-    $this->drupalLogin($this->admin_user);
-    $edit = array('enabled[it]' => TRUE);
-    $this->drupalPost('admin/config/regional/language', $edit, t('Save configuration'));
-    $this->drupalLogin($this->translator);
-
-    // Create a Basic page in English.
-    $type = 'block-locale';
-    $node = $this->createPage($this->randomName(), $this->randomName(), 'en');
-    $this->assertLanguageSwitchLinks($node, $node, TRUE, $type);
-    $this->assertLanguageSwitchLinks($node, $this->emptyNode('es'), TRUE, $type);
-    $this->assertLanguageSwitchLinks($node, $this->emptyNode('it'), TRUE, $type);
-
-    // Create the Spanish translation.
-    $translation_es = $this->createTranslation($node, $this->randomName(), $this->randomName(), 'es');
-    $this->assertLanguageSwitchLinks($node, $node, TRUE, $type);
-    $this->assertLanguageSwitchLinks($node, $translation_es, TRUE, $type);
-    $this->assertLanguageSwitchLinks($node, $this->emptyNode('it'), TRUE, $type);
-
-    // Create the Italian translation.
-    $translation_it = $this->createTranslation($node, $this->randomName(), $this->randomName(), 'it');
-    $this->assertLanguageSwitchLinks($node, $node, TRUE, $type);
-    $this->assertLanguageSwitchLinks($node, $translation_es, TRUE, $type);
-    $this->assertLanguageSwitchLinks($node, $translation_it, TRUE, $type);
-
-    // Create a language neutral node and check that the language switcher is
-    // left untouched.
-    $node2 = $this->createPage($this->randomName(), $this->randomName(), LANGUAGE_NONE);
-    $node2_en = (object) array('nid' => $node2->nid, 'language' => 'en');
-    $node2_es = (object) array('nid' => $node2->nid, 'language' => 'es');
-    $node2_it = (object) array('nid' => $node2->nid, 'language' => 'it');
-    $this->assertLanguageSwitchLinks($node2_en, $node2_en, TRUE, $type);
-    $this->assertLanguageSwitchLinks($node2_en, $node2_es, TRUE, $type);
-    $this->assertLanguageSwitchLinks($node2_en, $node2_it, TRUE, $type);
-
-    // Disable translation support to check that the language switcher is left
-    // untouched only for new nodes.
-    $this->drupalLogin($this->admin_user);
-    $edit = array('language_content_type' => 0);
-    $this->drupalPost('admin/structure/types/manage/page', $edit, t('Save content type'));
-    $this->drupalLogin($this->translator);
-
-    // Existing translations trigger alterations even if translation support is
-    // disabled.
-    $this->assertLanguageSwitchLinks($node, $node, TRUE, $type);
-    $this->assertLanguageSwitchLinks($node, $translation_es, TRUE, $type);
-    $this->assertLanguageSwitchLinks($node, $translation_it, TRUE, $type);
-
-    // Check that new nodes with a language assigned do not trigger language
-    // switcher alterations when translation support is disabled.
-    $node = $this->createPage($this->randomName(), $this->randomName());
-    $node_es = (object) array('nid' => $node->nid, 'language' => 'es');
-    $node_it = (object) array('nid' => $node->nid, 'language' => 'it');
-    $this->assertLanguageSwitchLinks($node, $node, TRUE, $type);
-    $this->assertLanguageSwitchLinks($node, $node_es, TRUE, $type);
-    $this->assertLanguageSwitchLinks($node, $node_it, TRUE, $type);
-  }
-
-  /**
-   * Resets static caches to make the test code match the client-side behavior.
-   */
-  function resetCaches() {
-    drupal_static_reset('locale_url_outbound_alter');
-  }
-
-  /**
-   * Returns an empty node data structure.
-   *
-   * @param $langcode
-   *   The language code.
-   *
-   * @return
-   *   An empty node data structure.
-   */
-  function emptyNode($langcode) {
-    return (object) array('nid' => NULL, 'language' => $langcode);
-  }
-
-  /**
-   * Installs the specified language, or enables it if it is already installed.
-   *
-   * @param $language_code
-   *   The language code to check.
-   */
-  function addLanguage($language_code) {
-    // Check to make sure that language has not already been installed.
-    $this->drupalGet('admin/config/regional/language');
-
-    if (strpos($this->drupalGetContent(), 'enabled[' . $language_code . ']') === FALSE) {
-      // Doesn't have language installed so add it.
-      $edit = array();
-      $edit['langcode'] = $language_code;
-      $this->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));
-
-      // Make sure we are not using a stale list.
-      drupal_static_reset('language_list');
-      $languages = language_list('language');
-      $this->assertTrue(array_key_exists($language_code, $languages), 'Language was installed successfully.');
-
-      if (array_key_exists($language_code, $languages)) {
-        $this->assertRaw(t('The language %language has been created and can now be used. More information is available on the <a href="@locale-help">help screen</a>.', array('%language' => $languages[$language_code]->name, '@locale-help' => url('admin/help/locale'))), 'Language has been created.');
-      }
-    }
-    elseif ($this->xpath('//input[@type="checkbox" and @name=:name and @checked="checked"]', array(':name' => 'enabled[' . $language_code . ']'))) {
-      // It's installed and enabled. No need to do anything.
-      $this->assertTrue(true, 'Language [' . $language_code . '] already installed and enabled.');
-    }
-    else {
-      // It's installed but not enabled. Enable it.
-      $this->assertTrue(true, 'Language [' . $language_code . '] already installed.');
-      $this->drupalPost(NULL, array('enabled[' . $language_code . ']' => TRUE), t('Save configuration'));
-      $this->assertRaw(t('Configuration saved.'), 'Language successfully enabled.');
-    }
-  }
-
-  /**
-   * Creates a "Basic page" in the specified language.
-   *
-   * @param $title
-   *   The title of a basic page in the specified language.
-   * @param $body
-   *   The body of a basic page in the specified language.
-   * @param $language
-   *   (optional) Language code.
-   *
-   * @return
-   *   A node object.
-   */
-  function createPage($title, $body, $language = NULL) {
-    $edit = array();
-    $langcode = LANGUAGE_NONE;
-    $edit["title"] = $title;
-    $edit["body[$langcode][0][value]"] = $body;
-    if (!empty($language)) {
-      $edit['language'] = $language;
-    }
-    $this->drupalPost('node/add/page', $edit, t('Save'));
-    $this->assertRaw(t('Basic page %title has been created.', array('%title' => $title)), 'Basic page created.');
-
-    // Check to make sure the node was created.
-    $node = $this->drupalGetNodeByTitle($title);
-    $this->assertTrue($node, 'Node found in database.');
-
-    return $node;
-  }
-
-  /**
-   * Creates a translation for a basic page in the specified language.
-   *
-   * @param $node
-   *   The basic page to create the translation for.
-   * @param $title
-   *   The title of a basic page in the specified language.
-   * @param $body
-   *   The body of a basic page in the specified language.
-   * @param $language
-   *   Language code.
-   *
-   * @return
-   *   Translation object.
-   */
-  function createTranslation($node, $title, $body, $language) {
-    $this->drupalGet('node/add/page', array('query' => array('translation' => $node->nid, 'target' => $language)));
-
-    $langcode = LANGUAGE_NONE;
-    $body_key = "body[$langcode][0][value]";
-    $this->assertFieldByXPath('//input[@id="edit-title"]', $node->title, "Original title value correctly populated.");
-    $this->assertFieldByXPath("//textarea[@name='$body_key']", $node->body[LANGUAGE_NONE][0]['value'], "Original body value correctly populated.");
-
-    $edit = array();
-    $edit["title"] = $title;
-    $edit[$body_key] = $body;
-    $this->drupalPost(NULL, $edit, t('Save'));
-    $this->assertRaw(t('Basic page %title has been created.', array('%title' => $title)), 'Translation created.');
-
-    // Check to make sure that translation was successful.
-    $translation = $this->drupalGetNodeByTitle($title);
-    $this->assertTrue($translation, 'Node found in database.');
-    $this->assertTrue($translation->tnid == $node->nid, 'Translation set id correctly stored.');
-
-    return $translation;
-  }
-
-  /**
-   * Asserts an element identified by the given XPath has the given content.
-   *
-   * @param $xpath
-   *   The XPath used to find the element.
-   * @param array $arguments
-   *   An array of arguments with keys in the form ':name' matching the
-   *   placeholders in the query. The values may be either strings or numeric
-   *   values.
-   * @param $value
-   *   The text content of the matched element to assert.
-   * @param $message
-   *   The message to display.
-   * @param $group
-   *   The group this message belongs to.
-   *
-   * @return
-   *   TRUE on pass, FALSE on fail.
-   */
-  function assertContentByXPath($xpath, array $arguments = array(), $value = NULL, $message = '', $group = 'Other') {
-    $found = $this->findContentByXPath($xpath, $arguments, $value);
-    return $this->assertTrue($found, $message, $group);
-  }
-
-  /**
-   * Tests whether the specified language switch links are found.
-   *
-   * @param $node
-   *   The node to display.
-   * @param $translation
-   *   The translation whose link has to be checked.
-   * @param $find
-   *   TRUE if the link must be present in the node page.
-   * @param $types
-   *   The page areas to be checked.
-   *
-   * @return
-   *   TRUE if the language switch links are found, FALSE if not.
-   */
-  function assertLanguageSwitchLinks($node, $translation, $find = TRUE, $types = NULL) {
-    if (empty($types)) {
-      $types = array('node', 'block-locale');
-    }
-    elseif (is_string($types)) {
-      $types = array($types);
-    }
-
-    $result = TRUE;
-    $languages = language_list();
-    $page_language = $languages[entity_language('node', $node)];
-    $translation_language = $languages[$translation->language];
-    $url = url("node/$translation->nid", array('language' => $translation_language));
-
-    $this->drupalGet("node/$node->nid", array('language' => $page_language));
-
-    foreach ($types as $type) {
-      $args = array('%translation_language' => $translation_language->native, '%page_language' => $page_language->native, '%type' => $type);
-      if ($find) {
-        $message = format_string('[%page_language] Language switch item found for %translation_language language in the %type page area.', $args);
-      }
-      else {
-        $message = format_string('[%page_language] Language switch item not found for %translation_language language in the %type page area.', $args);
-      }
-
-      if (!empty($translation->nid)) {
-        $xpath = '//div[contains(@class, :type)]//a[@href=:url]';
-      }
-      else {
-        $xpath = '//div[contains(@class, :type)]//span[contains(@class, "locale-untranslated")]';
-      }
-
-      $found = $this->findContentByXPath($xpath, array(':type' => $type, ':url' => $url), $translation_language->native);
-      $result = $this->assertTrue($found == $find, $message) && $result;
-    }
-
-    return $result;
-  }
-
-  /**
-   * Searches for elements matching the given xpath and value.
-   *
-   * @param $xpath
-   *   The XPath used to find the element.
-   * @param array $arguments
-   *   An array of arguments with keys in the form ':name' matching the
-   *   placeholders in the query. The values may be either strings or numeric
-   *   values.
-   * @param $value
-   *   The text content of the matched element to assert.
-   *
-   * @return
-   *   TRUE if found, otherwise FALSE.
-   */
-  function findContentByXPath($xpath, array $arguments = array(), $value = NULL) {
-    $elements = $this->xpath($xpath, $arguments);
-
-    $found = TRUE;
-    if ($value && $elements) {
-      $found = FALSE;
-      foreach ($elements as $element) {
-        if ((string) $element == $value) {
-          $found = TRUE;
-          break;
-        }
-      }
-    }
-
-    return $elements && $found;
-  }
-}
diff --git a/modules/trigger/tests/trigger_test.info b/modules/trigger/tests/trigger_test.info
deleted file mode 100644
index bd94331..0000000
--- a/modules/trigger/tests/trigger_test.info
+++ /dev/null
@@ -1,5 +0,0 @@
-name = "Trigger Test"
-description = "Support module for Trigger tests."
-package = Testing
-core = 7.x
-hidden = TRUE
diff --git a/modules/trigger/tests/trigger_test.module b/modules/trigger/tests/trigger_test.module
deleted file mode 100644
index 72fe352..0000000
--- a/modules/trigger/tests/trigger_test.module
+++ /dev/null
@@ -1,136 +0,0 @@
-<?php
-
-/**
- * @file
- * Mock module to aid in testing trigger.module.
- */
-
-/**
- * Implements hook_action_info().
- */
-function trigger_test_action_info() {
-  // Register an action that can be assigned to the trigger "cron".
-  return array(
-    'trigger_test_system_cron_action' => array(
-      'type' => 'system',
-      'label' => t('Cron test action'),
-      'configurable' => FALSE,
-      'triggers' => array('cron'),
-    ),
-    'trigger_test_system_cron_conf_action' => array(
-      'type' => 'system',
-      'label' => t('Cron test configurable action'),
-      'configurable' => TRUE,
-      'triggers' => array('cron'),
-    ),
-    'trigger_test_generic_action' => array(
-      'type' => 'system',
-      'label' => t('Generic test action'),
-      'configurable' => FALSE,
-      'triggers' => array(
-        'taxonomy_term_insert',
-        'taxonomy_term_update',
-        'taxonomy_delete',
-        'comment_insert',
-        'comment_update',
-        'comment_delete',
-        'user_insert',
-        'user_update',
-        'user_delete',
-        'user_login',
-        'user_logout',
-        'user_view',
-      ),
-    ),
-    'trigger_test_generic_any_action' => array(
-      'type' => 'system',
-      'label' => t('Generic test action for any trigger'),
-      'configurable' => FALSE,
-      'triggers' => array('any'),
-    ),
-  );
-}
-
-/**
- * Implements hook_trigger_info().
- */
-function trigger_test_trigger_info() {
-  // Register triggers that this module provides. The first is an additional
-  // node trigger and the second is our own, which should create a new tab
-  // on the trigger assignment page. The last tests long trigger names.
-  return array(
-    'node' => array(
-      'node_triggertest' => array(
-        'label' => t('A test trigger is fired'),
-      ),
-    ),
-    'trigger_test' => array(
-      'trigger_test_triggertest' => array(
-        'label' => t('Another test trigger is fired'),
-      ),
-      'trigger_test_we_sweat_it_out_in_the_streets_of_a_runaway_american_dream' => array(
-        'label' => t('A test trigger with a name over 64 characters'),
-      ),
-    ),
-  );
-}
-
-/**
- * Action fired during the "cron run" trigger test.
- */
-function trigger_test_system_cron_action() {
-  // Indicate successful execution by setting a persistent variable.
-  variable_set('trigger_test_system_cron_action', TRUE);
-}
-
-/**
- * Implement a configurable Drupal action.
- */
-function trigger_test_system_cron_conf_action($object, $context) {
-  // Indicate successful execution by incrementing a persistent variable.
-  $value = variable_get('trigger_test_system_cron_conf_action', 0) + 1;
-  variable_set('trigger_test_system_cron_conf_action', $value);
-}
-
-/**
- * Form for configurable test action.
- */
-function trigger_test_system_cron_conf_action_form($context) {
-  if (!isset($context['subject'])) {
-    $context['subject'] = '';
-  }
-  $form['subject'] = array(
-    '#type' => 'textfield',
-    '#default_value' => $context['subject'],
-  );
-  return $form;
-}
-
-/**
- * Form submission handler for configurable test action.
- */
-function trigger_test_system_cron_conf_action_submit($form, $form_state) {
-  $form_values = $form_state['values'];
-  // Process the HTML form to store configuration. The keyed array that
-  // we return will be serialized to the database.
-  $params = array(
-    'subject' => $form_values['subject'],
-  );
-  return $params;
-}
-
-/**
- * Action fired during the "taxonomy", "comment", and "user" trigger tests.
- */
-function trigger_test_generic_action($context) {
-  // Indicate successful execution by setting a persistent variable.
-  variable_set('trigger_test_generic_action', TRUE);
-}
-
-/**
- * Action fired during the additional trigger tests.
- */
-function trigger_test_generic_any_action($context) {
-  // Indicate successful execution by setting a persistent variable.
-  variable_set('trigger_test_generic_any_action', variable_get('trigger_test_generic_any_action', 0) + 1);
-}
diff --git a/modules/trigger/trigger.admin.inc b/modules/trigger/trigger.admin.inc
deleted file mode 100644
index 5b607c8..0000000
--- a/modules/trigger/trigger.admin.inc
+++ /dev/null
@@ -1,319 +0,0 @@
-<?php
-
-/**
- * @file
- * Admin page callbacks for the trigger module.
- */
-
-/**
- * Builds a form that allows users to assign actions to triggers.
- *
- * @param $module_to_display
- *   Which tab of triggers to display. E.g., 'node' for all node-related
- *   triggers.
- *
- * @return
- *   HTML form.
- *
- * @see trigger_menu()
- */
-function trigger_assign($module_to_display = NULL) {
-  // If no type is specified we default to node actions, since they
-  // are the most common.
-  if (!isset($module_to_display)) {
-    drupal_goto('admin/structure/trigger/node');
-  }
-
-  $build = array();
-  $trigger_info = module_invoke_all('trigger_info');
-  drupal_alter('trigger_info', $trigger_info);
-  foreach ($trigger_info as $module => $hooks) {
-    if ($module == $module_to_display) {
-      foreach ($hooks as $hook => $description) {
-        $form_id = 'trigger_' . $hook . '_assign_form';
-        $build[$form_id] = drupal_get_form($form_id, $module, $hook, $description['label']);
-      }
-    }
-  }
-  return $build;
-}
-
-/**
- * Form constructor for confirmation page for removal of an assigned action.
- *
- * @param $module
- *   The tab of triggers the user will be directed to after successful
- *   removal of the action, or if the confirmation form is cancelled.
- * @param $hook
- *   The name of the trigger hook, e.g., 'node_insert'.
- * @param $aid
- *   The action ID.
- *
- * @see trigger_unassign_submit()
- * @ingroup forms
- */
-function trigger_unassign($form, $form_state, $module, $hook = NULL, $aid = NULL) {
-  if (!isset($hook, $aid)) {
-    drupal_goto('admin/structure/trigger');
-  }
-
-  $form['hook'] = array(
-    '#type' => 'value',
-    '#value' => $hook,
-  );
-  $form['module'] = array(
-    '#type' => 'value',
-    '#value' => $module,
-  );
-  $form['aid'] = array(
-    '#type' => 'value',
-    '#value' => $aid,
-  );
-
-  $action = actions_function_lookup($aid);
-  $actions = actions_get_all_actions();
-
-  $destination = 'admin/structure/trigger/' . $module;
-
-  return confirm_form($form,
-    t('Are you sure you want to unassign the action %title?', array('%title' => $actions[$action]['label'])),
-    $destination,
-    t('You can assign it again later if you wish.'),
-    t('Unassign'), t('Cancel')
-  );
-}
-
-/**
- * Form submission handler for trigger_unassign().
- */
-function trigger_unassign_submit($form, &$form_state) {
-  if ($form_state['values']['confirm'] == 1) {
-    $aid = actions_function_lookup($form_state['values']['aid']);
-    db_delete('trigger_assignments')
-      ->condition('hook', $form_state['values']['hook'])
-      ->condition('aid', $aid)
-      ->execute();
-    drupal_static_reset('trigger_get_assigned_actions');
-    $actions = actions_get_all_actions();
-    watchdog('actions', 'Action %action has been unassigned.',  array('%action' => $actions[$aid]['label']));
-    drupal_set_message(t('Action %action has been unassigned.', array('%action' => $actions[$aid]['label'])));
-    $form_state['redirect'] = 'admin/structure/trigger/' . $form_state['values']['module'];
-  }
-  else {
-    drupal_goto('admin/structure/trigger');
-  }
-}
-
-/**
- * Returns the form for assigning an action to a trigger.
- *
- * @param $module
- *   The name of the trigger group, e.g., 'node'.
- * @param $hook
- *   The name of the trigger hook, e.g., 'node_insert'.
- * @param $label
- *   A plain English description of what this trigger does.
- *
- * @see trigger_assign_form_validate()
- * @see trigger_assign_form_submit()
- * @ingroup forms
- */
-function trigger_assign_form($form, $form_state, $module, $hook, $label) {
-  $form['module'] = array(
-    '#type' => 'hidden',
-    '#value' => $module,
-  );
-  $form['hook'] = array(
-    '#type' => 'hidden',
-    '#value' => $hook,
-  );
-  // All of these forms use the same validate and submit functions.
-  $form['#validate'][] = 'trigger_assign_form_validate';
-  $form['#submit'][] = 'trigger_assign_form_submit';
-
-  $options = array();
-  $functions = array();
-  // Restrict the options list to actions that declare support for this hook.
-  foreach (actions_list() as $func => $metadata) {
-    if (isset($metadata['triggers']) && array_intersect(array($hook, 'any'), $metadata['triggers'])) {
-      $functions[] = $func;
-    }
-  }
-  foreach (actions_actions_map(actions_get_all_actions()) as $aid => $action) {
-    if (in_array($action['callback'], $functions)) {
-      $options[$action['type']][$aid] = $action['label'];
-    }
-  }
-
-  $form[$hook] = array(
-    '#type' => 'fieldset',
-    // !description is correct, since these labels are passed through t() in
-    // hook_trigger_info().
-    '#title' => t('Trigger: !description', array('!description' => $label)),
-    '#theme' => 'trigger_display',
-  );
-
-  // Retrieve actions that are already assigned to this hook combination.
-  $actions = trigger_get_assigned_actions($hook);
-  $form[$hook]['assigned']['#type'] = 'value';
-  $form[$hook]['assigned']['#value'] = array();
-  foreach ($actions as $aid => $info) {
-    // If action is defined unassign it, otherwise offer to delete all orphaned
-    // actions.
-    $hash = drupal_hash_base64($aid, TRUE);
-    if (actions_function_lookup($hash)) {
-      $form[$hook]['assigned']['#value'][$aid] = array(
-        'label' => $info['label'],
-        'link' => l(t('unassign'), "admin/structure/trigger/unassign/$module/$hook/$hash"),
-      );
-    }
-    else {
-      // Link to system_actions_remove_orphans() to do the clean up.
-      $form[$hook]['assigned']['#value'][$aid] = array(
-        'label' => $info['label'],
-        'link' => l(t('Remove orphaned actions'), "admin/config/system/actions/orphan"),
-      );
-    }
-  }
-
-  $form[$hook]['parent'] = array(
-    '#type' => 'container',
-    '#attributes' => array('class' => array('container-inline')),
-  );
-  // List possible actions that may be assigned.
-  if (count($options) != 0) {
-    $form[$hook]['parent']['aid'] = array(
-      '#type' => 'select',
-      '#title' => t('List of trigger actions when !description', array('!description' => $label)),
-      '#title_display' => 'invisible',
-      '#options' => $options,
-      '#empty_option' => t('Choose an action'),
-    );
-    $form[$hook]['parent']['submit'] = array(
-      '#type' => 'submit',
-      '#value' => t('Assign')
-    );
-  }
-  else {
-    $form[$hook]['none'] = array(
-      '#markup' => t('No actions available for this trigger. <a href="@link">Add action</a>.', array('@link' => url('admin/config/system/actions/manage')))
-    );
-  }
-  return $form;
-}
-
-/**
- * Form validation handler for trigger_assign_form().
- *
- * Makes sure that the user is not re-assigning an action to an event.
- *
- * @see trigger_assign_form_submit()
- */
-function trigger_assign_form_validate($form, $form_state) {
-  $form_values = $form_state['values'];
-  if (!empty($form_values['aid'])) {
-    $aid = actions_function_lookup($form_values['aid']);
-    $aid_exists = db_query("SELECT aid FROM {trigger_assignments} WHERE hook = :hook AND aid = :aid", array(
-      ':hook' => $form_values['hook'],
-      ':aid' => $aid,
-    ))->fetchField();
-    if ($aid_exists) {
-      form_set_error($form_values['hook'], t('The action you chose is already assigned to that trigger.'));
-    }
-  }
-}
-
-/**
- * Form submission handler for trigger_assign_form().
- *
- * @see trigger_assign_form_validate()
- */
-function trigger_assign_form_submit($form, &$form_state) {
-  if (!empty($form_state['values']['aid'])) {
-    $aid = actions_function_lookup($form_state['values']['aid']);
-    $weight = db_query("SELECT MAX(weight) FROM {trigger_assignments} WHERE hook = :hook", array(':hook' => $form_state['values']['hook']))->fetchField();
-
-    // Insert the new action.
-    db_insert('trigger_assignments')
-      ->fields(array(
-        'hook' => $form_state['values']['hook'],
-        'aid' => $aid,
-        'weight' => $weight + 1,
-      ))
-      ->execute();
-
-    // If we are not configuring an action for a "presave" hook and this action
-    // changes an object property, then we need to save the object, so the
-    // property change will persist.
-    $actions = actions_list();
-    if (strpos($form_state['values']['hook'], 'presave') === FALSE && isset($actions[$aid]['behavior']) && in_array('changes_property', $actions[$aid]['behavior'])) {
-      // Determine the corresponding save action name for this action.
-      $save_action = strtok($aid, '_') . '_save_action';
-      // If no corresponding save action exists, we need to bail out.
-      if (!isset($actions[$save_action])) {
-        throw new Exception(t('Missing/undefined save action (%save_aid) for %aid action.', array('%save_aid' => $aid, '%aid' => $aid)));
-      }
-      // Delete previous save action if it exists, and re-add it using a higher
-      // weight.
-      $save_action_assigned = db_query("SELECT aid FROM {trigger_assignments} WHERE hook = :hook AND aid = :aid", array(':hook' => $form_state['values']['hook'], ':aid' => $save_action))->fetchField();
-
-      if ($save_action_assigned) {
-        db_delete('trigger_assignments')
-          ->condition('hook', $form_state['values']['hook'])
-          ->condition('aid', $save_action)
-          ->execute();
-      }
-      db_insert('trigger_assignments')
-        ->fields(array(
-          'hook' => $form_state['values']['hook'],
-          'aid' => $save_action,
-          'weight' => $weight + 2,
-        ))
-        ->execute();
-
-      // If no save action existed before, inform the user about it.
-      if (!$save_action_assigned) {
-        drupal_set_message(t('The %label action has been appended, which is required to save the property change.', array('%label' => $actions[$save_action]['label'])));
-      }
-      // Otherwise, just inform about the new weight.
-      else {
-        drupal_set_message(t('The %label action was moved to save the property change.', array('%label' => $actions[$save_action]['label'])));
-      }
-    }
-  }
-  drupal_static_reset('trigger_get_assigned_actions');
-}
-
-/**
- * Returns HTML for the form showing actions assigned to a trigger.
- *
- * @param $variables
- *   An associative array containing:
- *   - element: The fieldset including all assigned actions.
- *
- * @ingroup themeable
- */
-function theme_trigger_display($variables) {
-  $element = $variables['element'];
-
-  $header = array();
-  $rows = array();
-  if (isset($element['assigned']) && count($element['assigned']['#value'])) {
-    $header = array(array('data' => t('Name')), array('data' => t('Operation')));
-    $rows = array();
-    foreach ($element['assigned']['#value'] as $aid => $info) {
-      $rows[] = array(
-        check_plain($info['label']),
-        $info['link']
-      );
-    }
-  }
-
-  if (count($rows)) {
-    $output = theme('table', array('header' => $header, 'rows' => $rows)) . drupal_render_children($element);
-  }
-  else {
-    $output = drupal_render_children($element);
-  }
-  return $output;
-}
diff --git a/modules/trigger/trigger.api.php b/modules/trigger/trigger.api.php
deleted file mode 100644
index 839c1d4..0000000
--- a/modules/trigger/trigger.api.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-
-/**
- * @file
- * Hooks provided by the Trigger module.
- */
-
-/**
- * @addtogroup hooks
- * @{
- */
-
-/**
- * Declare triggers (events) for users to assign actions to.
- *
- * This hook is used by the trigger module to create a list of triggers (events)
- * that users can assign actions to. Your module is responsible for detecting
- * that the events have occurred, calling trigger_get_assigned_actions() to find
- * out which actions the user has associated with your trigger, and then calling
- * actions_do() to fire off the actions.
- *
- * @return
- *   A nested associative array.
- *   - The outermost key is the name of the module that is defining the triggers.
- *     This will be used to create a local task (tab) in the trigger module's
- *     user interface. A contrib module may supply a trigger for a core module by
- *     giving the core module's name as the key. For example, you could use the
- *     'node' key to add a node-related trigger.
- *     - Within each module, each individual trigger is keyed by a hook name
- *       describing the particular trigger (this is not visible to the user, but
- *       can be used by your module for identification).
- *       - Each trigger is described by an associative array. Currently, the only
- *         key-value pair is 'label', which contains a translated human-readable
- *         description of the triggering event.
- *   For example, the trigger set for the 'node' module has 'node' as the
- *   outermost key and defines triggers for 'node_insert', 'node_update',
- *   'node_delete' etc. that fire when a node is saved, updated, etc.
- *
- * @see hook_action_info()
- * @see hook_trigger_info_alter()
- */
-function hook_trigger_info() {
-  return array(
-    'node' => array(
-      'node_presave' => array(
-        'label' => t('When either saving new content or updating existing content'),
-      ),
-      'node_insert' => array(
-        'label' => t('After saving new content'),
-      ),
-      'node_update' => array(
-        'label' => t('After saving updated content'),
-      ),
-      'node_delete' => array(
-        'label' => t('After deleting content'),
-      ),
-      'node_view' => array(
-        'label' => t('When content is viewed by an authenticated user'),
-      ),
-    ),
-  );
-}
-
-/**
- * Alter triggers declared by hook_trigger_info().
- *
- * @param $triggers
- *   Array of trigger information returned by hook_trigger_info()
- *   implementations. Modify this array in place. See hook_trigger_info()
- *   for information on what this might contain.
- */
-function hook_trigger_info_alter(&$triggers) {
-  $triggers['node']['node_insert']['label'] = t('When content is saved');
-}
-
-/**
- * @} End of "addtogroup hooks".
- */
diff --git a/modules/trigger/trigger.info b/modules/trigger/trigger.info
deleted file mode 100644
index 76102a2..0000000
--- a/modules/trigger/trigger.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Trigger
-description = Enables actions to be fired on certain system events, such as when new content is created.
-package = Core
-version = VERSION
-core = 7.x
-files[] = trigger.test
-configure = admin/structure/trigger
diff --git a/modules/trigger/trigger.install b/modules/trigger/trigger.install
deleted file mode 100644
index 779cd2a..0000000
--- a/modules/trigger/trigger.install
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the trigger module.
- */
-
-/**
- * Implements hook_schema().
- */
-function trigger_schema() {
-  // The total index length (hook and aid) must be less than 333. Since the aid
-  // field is 255 characters, the hook field can have a maximum length of 78.
-  $schema['trigger_assignments'] = array(
-    'description' => 'Maps trigger to hook and operation assignments from trigger.module.',
-    'fields' => array(
-      'hook' => array(
-        'type' => 'varchar',
-        'length' => 78,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Primary Key: The name of the internal Drupal hook; for example, node_insert.',
-      ),
-      'aid' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => "Primary Key: Action's {actions}.aid.",
-      ),
-      'weight' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The weight of the trigger assignment in relation to other triggers.',
-      ),
-    ),
-    'primary key' => array('hook', 'aid'),
-    'foreign keys' => array(
-      'action' => array(
-        'table' => 'actions',
-        'columns' => array('aid' => 'aid'),
-      ),
-    ),
-  );
-  return $schema;
-}
-
-/**
- * Implements hook_install().
- */
-function trigger_install() {
-  // Do initial synchronization of actions in code and the database.
-  actions_synchronize();
-}
-
-/**
- * Alter the "hook" field and drop the "op field" of {trigger_assignments}.
- *
- * Increase the length of the "hook" field to 78 characters and adds operation
- * names to the hook names, and drops the "op" field.
- */
-function trigger_update_7000() {
-  db_drop_primary_key('trigger_assignments');
-  db_change_field('trigger_assignments', 'hook', 'hook', array('type' => 'varchar', 'length' => 78, 'not null' => TRUE, 'default' => '', 'description' => 'Primary Key: The name of the internal Drupal hook; for example, node_insert.'));
-
-  $result = db_query("SELECT hook, op, aid FROM {trigger_assignments} WHERE op <> ''");
-
-  foreach ($result as $record) {
-    db_update('trigger_assignments')
-      ->fields(array('hook' => $record->hook . '_' . $record->op))
-      ->condition('hook', $record->hook)
-      ->condition('op', $record->op)
-      ->condition('aid', $record->aid)
-      ->execute();
-  }
-  db_drop_field('trigger_assignments', 'op');
-
-  db_add_primary_key('trigger_assignments', array('hook', 'aid'));
-}
-
-/**
- * @addtogroup updates-7.x-extra
- * @{
- */
-
-/**
- * Increase the length of the "hook" field to 78 characters.
- *
- * This is a separate function for those who ran an older version of
- * trigger_update_7000() that did not do this.
- */
-function trigger_update_7001() {
-  db_drop_primary_key('trigger_assignments');
-  db_change_field('trigger_assignments', 'hook', 'hook', array('type' => 'varchar', 'length' => 78, 'not null' => TRUE, 'default' => '', 'description' => 'Primary Key: The name of the internal Drupal hook; for example, node_insert.', ), array('primary key' => array('hook', 'aid')));
-}
-
-/**
- * Renames nodeapi to node.
- */
-function trigger_update_7002() {
-  $result = db_query("SELECT hook, aid FROM {trigger_assignments}");
-
-  foreach($result as $record) {
-    $new_hook = str_replace('nodeapi', 'node', $record->hook);
-    db_update('trigger_assignments')
-      ->fields(array('hook' => $new_hook))
-      ->condition('hook', $record->hook)
-      ->condition('aid', $record->aid)
-      ->execute();
-  }
-}
-
-/**
- * @} End of "addtogroup updates-7.x-extra".
- */
diff --git a/modules/trigger/trigger.module b/modules/trigger/trigger.module
deleted file mode 100644
index aeb1211..0000000
--- a/modules/trigger/trigger.module
+++ /dev/null
@@ -1,671 +0,0 @@
-<?php
-
-/**
- * @file
- * Enables functions to be stored and executed at a later time.
- */
-
-/**
- * Implements hook_help().
- */
-function trigger_help($path, $arg) {
-  // Generate help text for admin/structure/trigger/(module) tabs.
-  $matches = array();
-  if (preg_match('|^admin/structure/trigger/(.*)$|', $path, $matches)) {
-    $explanation = '<p>' . t('Triggers are events on your site, such as new content being added or a user logging in. The Trigger module associates these triggers with actions (functional tasks), such as unpublishing content containing certain keywords or e-mailing an administrator. The <a href="@url">Actions settings page</a> contains a list of existing actions and provides the ability to create and configure advanced actions (actions requiring configuration, such as an e-mail address or a list of banned words).', array('@url' => url('admin/config/system/actions'))) . '</p>';
-
-    $module = $matches[1];
-    $trigger_info = _trigger_tab_information();
-    if (!empty($trigger_info[$module])) {
-      $explanation .= '<p>' . t('There is a tab on this page for each module that defines triggers. On this tab you can assign actions to run when triggers from the <a href="@module-help">@module-name module</a> happen.', array('@module-help' => url('admin/help/' . $module), '@module-name' => $trigger_info[$module])) . '</p>';
-    }
-
-    return $explanation;
-  }
-
-  if ($path == 'admin/help#trigger') {
-    $output = '';
-    $output .= '<h3>' . t('About') . '</h3>';
-    $output .= '<p>' . t('The Trigger module provides the ability to cause <em>actions</em> to run when certain <em>triggers</em> take place on your site. Triggers are events, such as new content being added to your site or a user logging in, and actions are tasks, such as unpublishing content or e-mailing an administrator. For more information, see the online handbook entry for <a href="@trigger">Trigger module</a>.', array('@trigger' => 'http://drupal.org/documentation/modules/trigger/')) . '</p>';
-    $output .= '<h3>' . t('Uses') . '</h3>';
-    $output .= '<dl>';
-    $output .= '<dt>' . t('Configuring triggers and actions') . '</dt>';
-    $output .= '<dd>' . t('The combination of actions and triggers can perform many useful tasks, such as e-mailing an administrator if a user account is deleted, or automatically unpublishing comments that contain certain words. To set up a trigger/action combination, first visit the <a href="@actions-page">Actions configuration page</a>, where you can either verify that the action you want is already listed, or create a new <em>advanced</em> action. You will need to set up an advanced action if there are configuration options in your trigger/action combination, such as specifying an e-mail address or a list of banned words. After configuring or verifying your action, visit the <a href="@triggers-page">Triggers configuration page</a> and choose the appropriate tab (Comment, Taxonomy, etc.), where you can assign the action to run when the trigger event occurs.', array('@triggers-page' => url('admin/structure/trigger'), '@actions-page' => url('admin/config/system/actions'))) . '</dd>';
-    $output .= '</dl>';
-    return $output;
-  }
-}
-
-/**
- * Implements hook_menu().
- */
-function trigger_menu() {
-  $items['admin/structure/trigger'] = array(
-    'title' => 'Triggers',
-    'description' => 'Configure when to execute actions.',
-    'page callback' => 'trigger_assign',
-    'access arguments' => array('administer actions'),
-    'file' => 'trigger.admin.inc',
-  );
-
-  $trigger_info = _trigger_tab_information();
-  foreach ($trigger_info as $module => $module_name) {
-    $items["admin/structure/trigger/$module"] = array(
-      'title' => $module_name,
-      'page callback' => 'trigger_assign',
-      'page arguments' => array($module),
-      'access arguments' => array('administer actions'),
-      'type' => MENU_LOCAL_TASK,
-      'file' => 'trigger.admin.inc',
-    );
-  }
-
-  $items['admin/structure/trigger/unassign'] = array(
-    'title' => 'Unassign',
-    'description' => 'Unassign an action from a trigger.',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('trigger_unassign'),
-    // Only accessible if there are any actions that can be unassigned.
-    'access callback' => 'trigger_menu_unassign_access',
-    // Only output in the breadcrumb, not in menu trees.
-    'type' => MENU_VISIBLE_IN_BREADCRUMB,
-    'file' => 'trigger.admin.inc',
-  );
-
-  return $items;
-}
-
-/**
- * Access callback: Determines if triggers can be unassigned.
- *
- * @return bool
- *   TRUE if there are triggers that the user can unassign, FALSE otherwise.
- *
- * @see trigger_menu()
- */
-function trigger_menu_unassign_access() {
-  if (!user_access('administer actions')) {
-    return FALSE;
-  }
-  $count = db_select('trigger_assignments')
-    ->countQuery()
-    ->execute()
-    ->fetchField();
-  return $count > 0;
-}
-
-/**
- * Implements hook_trigger_info().
- *
- * Defines all the triggers that this module implements triggers for.
- */
-function trigger_trigger_info() {
-   return array(
-     'node' => array(
-       'node_presave' => array(
-         'label' => t('When either saving new content or updating existing content'),
-       ),
-       'node_insert' => array(
-         'label' => t('After saving new content'),
-       ),
-       'node_update' => array(
-         'label' => t('After saving updated content'),
-       ),
-       'node_delete' => array(
-         'label' => t('After deleting content'),
-       ),
-       'node_view' => array(
-         'label' => t('When content is viewed by an authenticated user'),
-       ),
-     ),
-     'comment' => array(
-       'comment_presave' => array(
-         'label' => t('When either saving a new comment or updating an existing comment'),
-       ),
-       'comment_insert' => array(
-         'label' => t('After saving a new comment'),
-       ),
-       'comment_update' => array(
-         'label' => t('After saving an updated comment'),
-       ),
-       'comment_delete' => array(
-         'label' => t('After deleting a comment'),
-       ),
-       'comment_view' => array(
-         'label' => t('When a comment is being viewed by an authenticated user'),
-       ),
-     ),
-     'taxonomy' => array(
-       'taxonomy_term_insert' => array(
-         'label' => t('After saving a new term to the database'),
-       ),
-       'taxonomy_term_update' => array(
-         'label' => t('After saving an updated term to the database'),
-       ),
-       'taxonomy_term_delete' => array(
-         'label' => t('After deleting a term'),
-       ),
-     ),
-     'system' => array(
-       'cron' => array(
-         'label' => t('When cron runs'),
-       ),
-     ),
-     'user' => array(
-       'user_insert' => array(
-         'label' => t('After creating a new user account'),
-       ),
-       'user_update' => array(
-         'label' => t('After updating a user account'),
-       ),
-       'user_delete' => array(
-         'label' => t('After a user has been deleted'),
-       ),
-       'user_login' => array(
-         'label' => t('After a user has logged in'),
-       ),
-       'user_logout' => array(
-         'label' => t('After a user has logged out'),
-       ),
-       'user_view' => array(
-         'label' => t("When a user's profile is being viewed"),
-       ),
-     ),
-   );
- }
-
-/**
- * Gets the action IDs of actions to be executed for a hook.
- *
- * @param $hook
- *   The name of the hook being fired.
- *
- * @return
- *   An array whose keys are action IDs that the user has associated with
- *   this trigger, and whose values are arrays containing the action type and
- *   label.
- */
-function trigger_get_assigned_actions($hook) {
-  $actions = &drupal_static(__FUNCTION__, array());
-  if (!isset($actions[$hook])) {
-    $actions[$hook] = db_query("SELECT ta.aid, a.type, a.label FROM {trigger_assignments} ta LEFT JOIN {actions} a ON ta.aid = a.aid WHERE ta.hook = :hook ORDER BY ta.weight", array(
-      ':hook' => $hook,
-    ))->fetchAllAssoc('aid', PDO::FETCH_ASSOC);
-  }
-  return $actions[$hook];
-}
-
-/**
- * Implements hook_theme().
- */
-function trigger_theme() {
-  return array(
-    'trigger_display' => array(
-      'render element' => 'element',
-      'file' => 'trigger.admin.inc',
-    ),
-  );
-}
-
-/**
- * Implements hook_forms().
- *
- * We re-use code by using the same assignment form definition for each hook.
- */
-function trigger_forms() {
-  $trigger_info = _trigger_get_all_info();
-  $forms = array();
-  foreach ($trigger_info as $module => $hooks) {
-    foreach ($hooks as $hook => $description) {
-      $forms['trigger_' . $hook . '_assign_form'] = array('callback' => 'trigger_assign_form');
-    }
-  }
-
-  return $forms;
-}
-
-/**
- * Loads associated objects for node triggers.
- *
- * When an action is called in a context that does not match its type, the
- * object that the action expects must be retrieved. For example, when an action
- * that works on users is called during a node hook implementation, the user
- * object is not available since the node hook call doesn't pass it. So here we
- * load the object the action expects.
- *
- * @param $type
- *   The type of action that is about to be called.
- * @param $node
- *   The node that was passed via the node hook.
- *
- * @return
- *   The object expected by the action that is about to be called.
- */
-function _trigger_normalize_node_context($type, $node) {
-  // Note that comment-type actions are not supported in node contexts,
-  // because we wouldn't know which comment to choose.
-  switch ($type) {
-    // An action that works on users is being called in a node context.
-    // Load the user object of the node's author.
-    case 'user':
-      return user_load($node->uid);
-  }
-}
-
-/**
- * Calls action functions for node triggers.
- *
- * @param $node
- *   Node object.
- * @param $hook
- *   Hook to trigger.
- * @param $a3
- *   Additional argument to action function.
- * @param $a4
- *   Additional argument to action function.
- */
-function _trigger_node($node, $hook, $a3 = NULL, $a4 = NULL) {
-  // Keep objects for reuse so that changes actions make to objects can persist.
-  static $objects;
-  // Prevent recursion by tracking which operations have already been called.
-  static $recursion;
-
-  $aids = trigger_get_assigned_actions($hook);
-  if (!$aids) {
-    return;
-  }
-
-  if (isset($recursion[$hook])) {
-    return;
-  }
-  $recursion[$hook] = TRUE;
-
-  $context = array(
-    'group' => 'node',
-    'hook' => $hook,
-  );
-
-  // We need to get the expected object if the action's type is not 'node'.
-  // We keep the object in $objects so we can reuse it if we have multiple actions
-  // that make changes to an object.
-  foreach ($aids as $aid => $info) {
-    $type = $info['type'];
-    if ($type != 'node') {
-      if (!isset($objects[$type])) {
-        $objects[$type] = _trigger_normalize_node_context($type, $node);
-      }
-      // Since we know about the node, we pass that info along to the action.
-      $context['node'] = $node;
-      $result = actions_do($aid, $objects[$type], $context, $a3, $a4);
-    }
-    else {
-      actions_do($aid, $node, $context, $a3, $a4);
-    }
-  }
-
-  unset($recursion[$hook]);
-}
-
-/**
- * Implements hook_node_view().
- */
-function trigger_node_view($node, $view_mode) {
-  _trigger_node($node, 'node_view', $view_mode);
-}
-
-/**
- * Implements hook_node_update().
- */
-function trigger_node_update($node) {
-  _trigger_node($node, 'node_update');
-}
-
-/**
- * Implements hook_node_presave().
- */
-function trigger_node_presave($node) {
-  _trigger_node($node, 'node_presave');
-}
-
-/**
- * Implements hook_node_insert().
- */
-function trigger_node_insert($node) {
-  _trigger_node($node, 'node_insert');
-}
-
-/**
- * Implements hook_node_delete().
- */
-function trigger_node_delete($node) {
-  _trigger_node($node, 'node_delete');
-}
-
-/**
- * Loads associated objects for comment triggers.
- *
- * When an action is called in a context that does not match its type, the
- * object that the action expects must be retrieved. For example, when an action
- * that works on nodes is called during the comment hook, the node object is not
- * available since the comment hook doesn't pass it. So here we load the object
- * the action expects.
- *
- * @param $type
- *   The type of action that is about to be called.
- * @param $comment
- *   The comment that was passed via the comment hook.
- *
- * @return
- *   The object expected by the action that is about to be called.
- */
-function _trigger_normalize_comment_context($type, $comment) {
-  switch ($type) {
-    // An action that works with nodes is being called in a comment context.
-    case 'node':
-      return node_load(is_array($comment) ? $comment['nid'] : $comment->nid);
-
-    // An action that works on users is being called in a comment context.
-    case 'user':
-      return user_load(is_array($comment) ? $comment['uid'] : $comment->uid);
-  }
-}
-
-/**
- * Implements hook_comment_presave().
- */
-function trigger_comment_presave($comment) {
-  _trigger_comment($comment, 'comment_presave');
-}
-
-/**
- * Implements hook_comment_insert().
- */
-function trigger_comment_insert($comment) {
-  _trigger_comment($comment, 'comment_insert');
-}
-
-/**
- * Implements hook_comment_update().
- */
-function trigger_comment_update($comment) {
-  _trigger_comment($comment, 'comment_update');
-}
-
-/**
- * Implements hook_comment_delete().
- */
-function trigger_comment_delete($comment) {
-  _trigger_comment($comment, 'comment_delete');
-}
-
-/**
- * Implements hook_comment_view().
- */
-function trigger_comment_view($comment) {
-  _trigger_comment($comment, 'comment_view');
-}
-
-/**
- * Calls action functions for comment triggers.
- *
- * @param $a1
- *   Comment object or array of form values.
- * @param $hook
- *   Hook to trigger.
- */
-function _trigger_comment($a1, $hook) {
-  // Keep objects for reuse so that changes actions make to objects can persist.
-  static $objects;
-  $aids = trigger_get_assigned_actions($hook);
-  $context = array(
-    'group' => 'comment',
-    'hook' => $hook,
-  );
-  // We need to get the expected object if the action's type is not 'comment'.
-  // We keep the object in $objects so we can reuse it if we have multiple
-  // actions that make changes to an object.
-  foreach ($aids as $aid => $info) {
-    $type = $info['type'];
-    if ($type != 'comment') {
-      if (!isset($objects[$type])) {
-        $objects[$type] = _trigger_normalize_comment_context($type, $a1);
-      }
-      // Since we know about the comment, we pass it along to the action
-      // in case it wants to peek at it.
-      $context['comment'] = (object) $a1;
-      actions_do($aid, $objects[$type], $context);
-    }
-    else {
-      actions_do($aid, $a1, $context);
-    }
-  }
-}
-
-/**
- * Implements hook_cron().
- */
-function trigger_cron() {
-  $aids = trigger_get_assigned_actions('cron');
-  $context = array(
-    'group' => 'cron',
-    'hook' => 'cron',
-  );
-  // Cron does not act on any specific object.
-  $object = NULL;
-  actions_do(array_keys($aids), $object, $context);
-}
-
-/**
- * Loads associated objects for user triggers.
- *
- * When an action is called in a context that does not match its type, the
- * object that the action expects must be retrieved. For example, when an action
- * that works on nodes is called during the user hook, the node object is not
- * available since the user hook doesn't pass it. So here we load the object the
- * action expects.
- *
- * @param $type
- *   The type of action that is about to be called.
- * @param $account
- *   The account object that was passed via the user hook.
- *
- * @return
- *   The object expected by the action that is about to be called.
- */
-function _trigger_normalize_user_context($type, $account) {
-  // Note that comment-type actions are not supported in user contexts,
-  // because we wouldn't know which comment to choose.
-  switch ($type) {
-    // An action that works with nodes is being called in a user context.
-    // If a single node is being viewed, return the node.
-    case 'node':
-      // If we are viewing an individual node, return the node.
-      if (arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == NULL) {
-        return node_load(array('nid' => arg(1)));
-      }
-      break;
-  }
-}
-
-/**
- * Implements hook_user_login().
- */
-function trigger_user_login(&$edit, $account, $category) {
-  _trigger_user('user_login', $edit, $account, $category);
-}
-
-/**
- * Implements hook_user_logout().
- */
-function trigger_user_logout($account) {
-  $edit = array();
-  _trigger_user('user_logout', $edit, $account);
-}
-
-/**
- * Implements hook_user_insert().
- */
-function trigger_user_insert(&$edit, $account, $category) {
-  _trigger_user('user_insert', $edit, $account, $category);
-}
-
-/**
- * Implements hook_user_update().
- */
-function trigger_user_update(&$edit, $account, $category) {
-  _trigger_user('user_update', $edit, $account, $category);
-}
-
-/**
- * Implements hook_user_cancel().
- */
-function trigger_user_cancel($edit, $account, $method) {
-  switch ($method) {
-    case 'user_cancel_reassign':
-      _trigger_user('user_delete', $edit, $account, $method);
-      break;
-  }
-}
-
-/**
- * Implements hook_user_delete().
- */
-function trigger_user_delete($account) {
-  $edit = array();
-  _trigger_user('user_delete', $edit, $account, NULL);
-}
-
-/**
- * Implements hook_user_view().
- */
-function trigger_user_view($account) {
-  $edit = NULL;
-  _trigger_user('user_view', $edit, $account, NULL);
-}
-
-/**
- * Calls action functions for user triggers.
- *
- * @param $hook
- *   The hook that called this function.
- * @param $edit
- *   Edit variable passed in to the hook or empty array if not needed.
- * @param $account
- *   Account variable passed in to the hook.
- * @param $method
- *   Method variable passed in to the hook or NULL if not needed.
- */
-function _trigger_user($hook, &$edit, $account, $category = NULL) {
-  // Keep objects for reuse so that changes actions make to objects can persist.
-  static $objects;
-  $aids = trigger_get_assigned_actions($hook);
-  $context = array(
-    'group' => 'user',
-    'hook' => $hook,
-    'form_values' => &$edit,
-  );
-  foreach ($aids as $aid => $info) {
-    $type = $info['type'];
-    if ($type != 'user') {
-      if (!isset($objects[$type])) {
-        $objects[$type] = _trigger_normalize_user_context($type, $account);
-      }
-      $context['user'] = $account;
-      actions_do($aid, $objects[$type], $context);
-    }
-    else {
-      actions_do($aid, $account, $context, $category);
-    }
-  }
-}
-
-/**
- * Calls action functions for taxonomy triggers.
- *
- * @param $hook
- *   Hook to trigger actions for taxonomy_term_insert(),
- *   taxonomy_term_update(), and taxonomy_term_delete().
- * @param $array
- *   Item on which operation is being performed, either a term or
- *   form values.
- */
-function _trigger_taxonomy($hook, $array) {
-  $aids = trigger_get_assigned_actions($hook);
-  $context = array(
-    'group' => 'taxonomy',
-    'hook' => $hook
-  );
-  actions_do(array_keys($aids), (object) $array, $context);
-}
-
-/**
- * Implements hook_taxonomy_term_insert().
- */
-function trigger_taxonomy_term_insert($term) {
-  _trigger_taxonomy('taxonomy_term_insert', (array) $term);
-}
-
-/**
- * Implements hook_taxonomy_term_update().
- */
-function trigger_taxonomy_term_update($term) {
-  _trigger_taxonomy('taxonomy_term_update', (array) $term);
-}
-
-/**
- * Implements hook_taxonomy_term_delete().
- */
-function trigger_taxonomy_term_delete($term) {
-  _trigger_taxonomy('taxonomy_term_delete', (array) $term);
-}
-
-/**
- * Implements hook_actions_delete().
- *
- * Removes all trigger entries for the given action, when an action is deleted.
- */
-function trigger_actions_delete($aid) {
-  db_delete('trigger_assignments')
-    ->condition('aid', $aid)
-    ->execute();
-  drupal_static_reset('trigger_get_assigned_actions');
-}
-
-/**
- * Retrieves and caches information from hook_trigger_info() implementations.
- *
- * @return
- *   Array of all triggers.
- */
-function _trigger_get_all_info() {
-  $triggers = &drupal_static(__FUNCTION__);
-
-  if (!isset($triggers)) {
-    $triggers = module_invoke_all('trigger_info');
-    drupal_alter('trigger_info', $triggers);
-  }
-
-  return $triggers;
-}
-
-/**
- * Gathers information about tabs on the triggers administration screen.
- *
- * @return
- *   Array of modules that have triggers, with the keys being the
- *   machine-readable name of the module, and the values being the
- *   human-readable name of the module.
- */
-function _trigger_tab_information() {
-  // Gather information about all triggers and modules.
-  $trigger_info = _trigger_get_all_info();
-  $modules = system_get_info('module');
-  $modules = array_intersect_key($modules, $trigger_info);
-
-  $return_info = array();
-  foreach ($modules as $name => $info) {
-    $return_info[$name] = $info['name'];
-  }
-
-  return $return_info;
-}
diff --git a/modules/trigger/trigger.test b/modules/trigger/trigger.test
deleted file mode 100644
index 9e5f114..0000000
--- a/modules/trigger/trigger.test
+++ /dev/null
@@ -1,771 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for trigger.module.
- */
-
-/**
- * Provides common helper methods.
- */
-class TriggerWebTestCase extends DrupalWebTestCase {
-
-  /**
-   * Configures an advanced action.
-   *
-   * @param $action
-   *   The name of the action callback. For example: 'user_block_user_action'
-   * @param $edit
-   *   The $edit array for the form to be used to configure.
-   *   Example members would be 'actions_label' (always), 'message', etc.
-   *
-   * @return
-   *   the aid (action id) of the configured action, or FALSE if none.
-   */
-  protected function configureAdvancedAction($action, $edit) {
-    // Create an advanced action.
-    $hash = drupal_hash_base64($action);
-    $this->drupalPost("admin/config/system/actions/configure/$hash", $edit, t('Save'));
-    $this->assertText(t('The action has been successfully saved.'));
-
-    // Now we have to find out the action ID of what we created.
-    return db_query('SELECT aid FROM {actions} WHERE callback = :callback AND label = :label', array(':callback' => $action, ':label' => $edit['actions_label']))->fetchField();
-  }
-
-}
-
-/**
- * Provides tests for node triggers.
- */
-class TriggerContentTestCase extends TriggerWebTestCase {
-  var $_cleanup_roles = array();
-  var $_cleanup_users = array();
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Trigger content (node) actions',
-      'description' => 'Perform various tests with content actions.',
-      'group' => 'Trigger',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('trigger', 'trigger_test');
-  }
-
-  /**
-   * Tests several content-oriented trigger issues.
-   *
-   * These are in one function to assure they happen in the right order.
-   */
-  function testActionsContent() {
-    global $user;
-    $content_actions = array('node_publish_action', 'node_unpublish_action', 'node_make_sticky_action', 'node_make_unsticky_action', 'node_promote_action', 'node_unpromote_action');
-
-    $test_user = $this->drupalCreateUser(array('administer actions'));
-    $web_user = $this->drupalCreateUser(array('create page content', 'access content', 'administer nodes'));
-    foreach ($content_actions as $action) {
-      $hash = drupal_hash_base64($action);
-      $info = $this->actionInfo($action);
-
-      // Assign an action to a trigger, then pull the trigger, and make sure
-      // the actions fire.
-      $this->drupalLogin($test_user);
-      $edit = array('aid' => $hash);
-      $this->drupalPost('admin/structure/trigger/node', $edit, t('Assign'), array(), array(), 'trigger-node-presave-assign-form');
-      // Create an unpublished node.
-      $this->drupalLogin($web_user);
-      $edit = array();
-      $langcode = LANGUAGE_NONE;
-      $edit["title"] = '!SimpleTest test node! ' . $this->randomName(10);
-      $edit["body[$langcode][0][value]"] = '!SimpleTest test body! ' . $this->randomName(32) . ' ' . $this->randomName(32);
-      $edit[$info['property']] = !$info['expected'];
-      $this->drupalPost('node/add/page', $edit, t('Save'));
-      // Make sure the text we want appears.
-      $this->assertRaw(t('!post %title has been created.', array('!post' => 'Basic page', '%title' => $edit["title"])), 'Make sure the Basic page has actually been created');
-      // Action should have been fired.
-      $loaded_node = $this->drupalGetNodeByTitle($edit["title"]);
-      $this->assertTrue($loaded_node->$info['property'] == $info['expected'], format_string('Make sure the @action action fired.', array('@action' => $info['name'])));
-      // Leave action assigned for next test
-
-      // There should be an error when the action is assigned to the trigger
-      // twice.
-      $this->drupalLogin($test_user);
-      // This action already assigned in this test.
-      $edit = array('aid' => $hash);
-      $this->drupalPost('admin/structure/trigger/node', $edit, t('Assign'), array(), array(), 'trigger-node-presave-assign-form');
-      $this->assertRaw(t('The action you chose is already assigned to that trigger.'), 'Check to make sure an error occurs when assigning an action to a trigger twice.');
-
-      // The action should be able to be unassigned from a trigger.
-      $this->drupalPost('admin/structure/trigger/unassign/node/node_presave/' . $hash, array(), t('Unassign'));
-      $this->assertRaw(t('Action %action has been unassigned.', array('%action' => ucfirst($info['name']))), format_string('Check to make sure the @action action can be unassigned from the trigger.', array('@action' => $info['name'])));
-      $assigned = db_query("SELECT COUNT(*) FROM {trigger_assignments} WHERE aid IN (:keys)", array(':keys' => $content_actions))->fetchField();
-      $this->assertFalse($assigned, 'Check to make sure unassign worked properly at the database level.');
-    }
-  }
-
-  /**
-   * Tests multiple node actions.
-   *
-   * Verifies that node actions are fired for each node individually, if acting
-   * on multiple nodes.
-   */
-  function testActionContentMultiple() {
-    // Assign an action to the node save/update trigger.
-    $test_user = $this->drupalCreateUser(array('administer actions', 'administer nodes', 'create page content', 'access administration pages', 'access content overview'));
-    $this->drupalLogin($test_user);
-    $nodes = array();
-
-    for ($index = 0; $index < 3; $index++) {
-      $nodes[] = $this->drupalCreateNode(array('type' => 'page'));
-    }
-
-    $action_id = 'trigger_test_generic_any_action';
-    $hash = drupal_hash_base64($action_id);
-    $edit = array('aid' => $hash);
-    $this->drupalPost('admin/structure/trigger/node', $edit, t('Assign'), array(), array(), 'trigger-node-update-assign-form');
-
-    $edit = array(
-      'operation' => 'unpublish',
-      'nodes[' . $nodes[0]->nid . ']' => TRUE,
-      'nodes[' . $nodes[1]->nid . ']' => TRUE,
-    );
-    $this->drupalPost('admin/content', $edit, t('Update'));
-    $count = variable_get('trigger_test_generic_any_action', 0);
-    $this->assertTrue($count == 2, format_string('Action was triggered 2 times. Actual: %count', array('%count' => $count)));
-  }
-
-  /**
-   * Returns some info about each of the content actions.
-   *
-   * This is helper function for testActionsContent().
-   *
-   * @param $action
-   *   The name of the action to return info about.
-   *
-   * @return
-   *   An associative array of info about the action.
-   */
-  function actionInfo($action) {
-    $info = array(
-      'node_publish_action' => array(
-        'property' => 'status',
-        'expected' => 1,
-        'name' => t('publish content'),
-      ),
-      'node_unpublish_action' => array(
-        'property' => 'status',
-        'expected' => 0,
-        'name' => t('unpublish content'),
-      ),
-      'node_make_sticky_action' => array(
-        'property' => 'sticky',
-        'expected' => 1,
-        'name' => t('make content sticky'),
-      ),
-      'node_make_unsticky_action' => array(
-        'property' => 'sticky',
-        'expected' => 0,
-        'name' => t('make content unsticky'),
-      ),
-      'node_promote_action' => array(
-        'property' => 'promote',
-        'expected' => 1,
-        'name' => t('promote content to front page'),
-      ),
-      'node_unpromote_action' => array(
-        'property' => 'promote',
-        'expected' => 0,
-        'name' => t('remove content from front page'),
-      ),
-    );
-    return $info[$action];
-  }
-}
-
-/**
- * Tests cron trigger.
- */
-class TriggerCronTestCase extends TriggerWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Trigger cron (system) actions',
-      'description' => 'Perform various tests with cron trigger.',
-      'group' => 'Trigger',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('trigger', 'trigger_test');
-  }
-
-  /**
-   * Tests assigning multiple actions to the cron trigger.
-   *
-   * This test ensures that both simple and multiple complex actions
-   * succeed properly. This is done in the cron trigger test because
-   * cron allows passing multiple actions in at once.
-   */
-  function testActionsCron() {
-    // Create an administrative user.
-    $test_user = $this->drupalCreateUser(array('administer actions'));
-    $this->drupalLogin($test_user);
-
-    // Assign a non-configurable action to the cron run trigger.
-    $edit = array('aid' => drupal_hash_base64('trigger_test_system_cron_action'));
-    $this->drupalPost('admin/structure/trigger/system', $edit, t('Assign'), array(), array(), 'trigger-cron-assign-form');
-
-    // Assign a configurable action to the cron trigger.
-    $action_label = $this->randomName();
-    $edit = array(
-      'actions_label' => $action_label,
-      'subject' => $action_label,
-    );
-    $aid = $this->configureAdvancedAction('trigger_test_system_cron_conf_action', $edit);
-    // $aid is likely 3 but if we add more uses for the sequences table in
-    // core it might break, so it is easier to get the value from the database.
-    $edit = array('aid' => drupal_hash_base64($aid));
-    $this->drupalPost('admin/structure/trigger/system', $edit, t('Assign'), array(), array(), 'trigger-cron-assign-form');
-
-    // Add a second configurable action to the cron trigger.
-    $action_label = $this->randomName();
-    $edit = array(
-      'actions_label' => $action_label,
-      'subject' => $action_label,
-    );
-    $aid = $this->configureAdvancedAction('trigger_test_system_cron_conf_action', $edit);
-    $edit = array('aid' => drupal_hash_base64($aid));
-    $this->drupalPost('admin/structure/trigger/system', $edit, t('Assign'), array(), array(), 'trigger-cron-assign-form');
-
-    // Force a cron run.
-    $this->cronRun();
-
-    // Make sure the non-configurable action has fired.
-    $action_run = variable_get('trigger_test_system_cron_action', FALSE);
-    $this->assertTrue($action_run, 'Check that the cron run triggered the test action.');
-
-    // Make sure that both configurable actions have fired.
-    $action_run = variable_get('trigger_test_system_cron_conf_action', 0) == 2;
-    $this->assertTrue($action_run, 'Check that the cron run triggered both complex actions.');
-  }
-}
-
-/**
- * Provides a base class with trigger assignments and test comparisons.
- */
-class TriggerActionTestCase extends TriggerWebTestCase {
-
-  function setUp() {
-    parent::setUp('trigger');
-  }
-
-  /**
-   * Creates a message with tokens.
-   *
-   * @param $trigger
-   *
-   * @return
-   *   A message with embedded tokens.
-   */
-  function generateMessageWithTokens($trigger) {
-    // Note that subject is limited to 254 characters in action configuration.
-    $message = t('Action was triggered by trigger @trigger user:name=[user:name] user:uid=[user:uid] user:mail=[user:mail] user:url=[user:url] user:edit-url=[user:edit-url] user:created=[user:created]',
-      array('@trigger' => $trigger));
-    return trim($message);
-  }
-
-  /**
-   * Generates a comparison message to match the pre-token-replaced message.
-   *
-   * @param $trigger
-   *   Trigger, like 'user_login'.
-   * @param $account
-   *   Associated user account.
-   *
-   * @return
-   *   The token-replaced equivalent message. This does not use token
-   *   functionality.
-   *
-   * @see generateMessageWithTokens()
-   */
-  function generateTokenExpandedComparison($trigger, $account) {
-    // Note that user:last-login was omitted because it changes and can't
-    // be properly verified.
-    $message = t('Action was triggered by trigger @trigger user:name=@username user:uid=@uid user:mail=@mail user:url=@user_url user:edit-url=@user_edit_url user:created=@user_created',
-       array(
-        '@trigger' => $trigger,
-        '@username' => $account->name,
-        '@uid' => !empty($account->uid) ? $account->uid : t('not yet assigned'),
-        '@mail' => $account->mail,
-        '@user_url' => !empty($account->uid) ? url("user/$account->uid", array('absolute' => TRUE)) : t('not yet assigned'),
-        '@user_edit_url' => !empty($account->uid) ? url("user/$account->uid/edit", array('absolute' => TRUE)) : t('not yet assigned'),
-        '@user_created' => isset($account->created) ? format_date($account->created, 'medium') : t('not yet created'),
-        )
-      );
-      return trim($message);
-  }
-
-
-  /**
-   * Assigns a simple (non-configurable) action to a trigger.
-   *
-   * @param $trigger
-   *   The trigger to assign to, like 'user_login'.
-   * @param $action
-   *   The simple action to be assigned, like 'comment_insert'.
-   */
-  function assignSimpleAction($trigger, $action) {
-    $form_name = "trigger_{$trigger}_assign_form";
-    $form_html_id = strtr($form_name, '_', '-');
-    $edit = array('aid' => drupal_hash_base64($action));
-    $trigger_type = preg_replace('/_.*/', '', $trigger);
-    $this->drupalPost("admin/structure/trigger/$trigger_type", $edit, t('Assign'), array(), array(), $form_html_id);
-    $actions = trigger_get_assigned_actions($trigger);
-    $this->assertTrue(!empty($actions[$action]), format_string('Simple action @action assigned to trigger @trigger', array('@action' => $action, '@trigger' => $trigger)));
-  }
-
-  /**
-   * Assigns a system message action to the passed-in trigger.
-   *
-   * @param $trigger
-   *   For example, 'user_login'
-   */
-  function assignSystemMessageAction($trigger) {
-    $form_name = "trigger_{$trigger}_assign_form";
-    $form_html_id = strtr($form_name, '_', '-');
-    // Assign a configurable action 'System message' to the passed trigger.
-    $action_edit = array(
-      'actions_label' => $trigger . "_system_message_action_" . $this->randomName(16),
-      'message' => $this->generateMessageWithTokens($trigger),
-    );
-
-    // Configure an advanced action that we can assign.
-    $aid = $this->configureAdvancedAction('system_message_action', $action_edit);
-
-    $edit = array('aid' => drupal_hash_base64($aid));
-    $this->drupalPost('admin/structure/trigger/user', $edit, t('Assign'), array(), array(), $form_html_id);
-    drupal_static_reset('trigger_get_asssigned_actions');
-  }
-
-
-  /**
-   * Assigns a system_send_email_action to the passed-in trigger.
-   *
-   * @param $trigger
-   *   For example, 'user_login'
-   */
-  function assignSystemEmailAction($trigger) {
-    $form_name = "trigger_{$trigger}_assign_form";
-    $form_html_id = strtr($form_name, '_', '-');
-
-    $message = $this->generateMessageWithTokens($trigger);
-    // Assign a configurable action 'System message' to the passed trigger.
-    $action_edit = array(
-      // 'actions_label' => $trigger . "_system_send_message_action_" . $this->randomName(16),
-      'actions_label' => $trigger . "_system_send_email_action",
-      'recipient' => '[user:mail]',
-      'subject' => $message,
-      'message' => $message,
-    );
-
-    // Configure an advanced action that we can assign.
-    $aid = $this->configureAdvancedAction('system_send_email_action', $action_edit);
-
-    $edit = array('aid' => drupal_hash_base64($aid));
-    $this->drupalPost('admin/structure/trigger/user', $edit, t('Assign'), array(), array(), $form_html_id);
-    drupal_static_reset('trigger_get_assigned_actions');
-  }
-
-  /**
-   * Asserts correct token replacement in both system message and email.
-   *
-   * @param $trigger
-   *   A trigger like 'user_login'.
-   * @param $account
-   *   The user account which triggered the action.
-   * @param $email_depth
-   *   Number of emails to scan, starting with most recent.
-   */
-  function assertSystemMessageAndEmailTokenReplacement($trigger, $account, $email_depth = 1) {
-    $this->assertSystemMessageTokenReplacement($trigger, $account);
-    $this->assertSystemEmailTokenReplacement($trigger, $account, $email_depth);
-  }
-
-  /**
-   * Asserts correct token replacement for the given trigger and account.
-   *
-   * @param $trigger
-   *   A trigger like 'user_login'.
-   * @param $account
-   *   The user account which triggered the action.
-   */
-  function assertSystemMessageTokenReplacement($trigger, $account) {
-    $expected = $this->generateTokenExpandedComparison($trigger, $account);
-    $this->assertText($expected,
-      format_string('Expected system message to contain token-replaced text "@expected" found in configured system message action', array('@expected' => $expected )) );
-  }
-
-
-  /**
-   * Asserts correct token replacement for the given trigger and account.
-   *
-   * @param $trigger
-   *   A trigger like 'user_login'.
-   * @param $account
-   *   The user account which triggered the action.
-   * @param $email_depth
-   *   Number of emails to scan, starting with most recent.
-   */
-  function assertSystemEmailTokenReplacement($trigger, $account, $email_depth = 1) {
-    $this->verboseEmail($email_depth);
-    $expected = $this->generateTokenExpandedComparison($trigger, $account);
-    $this->assertMailString('subject', $expected, $email_depth);
-    $this->assertMailString('body', $expected, $email_depth);
-    $this->assertMail('to', $account->mail, 'Mail sent to correct destination');
-  }
-}
-
-/**
- * Tests token substitution in trigger actions.
- *
- * This tests nearly every permutation of user triggers with system actions
- * and checks the token replacement.
- */
-class TriggerUserTokenTestCase extends TriggerActionTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Test user triggers',
-      'description' => 'Test user triggers and system actions with token replacement.',
-      'group' => 'Trigger',
-    );
-  }
-
-
-  /**
-   * Tests a variety of token replacements in actions.
-   */
-  function testUserTriggerTokenReplacement() {
-    $test_user = $this->drupalCreateUser(array('administer actions', 'administer users', 'change own username', 'access user profiles'));
-    $this->drupalLogin($test_user);
-
-    $triggers = array('user_login', 'user_insert', 'user_update', 'user_delete', 'user_logout', 'user_view');
-    foreach ($triggers as $trigger) {
-      $this->assignSystemMessageAction($trigger);
-      $this->assignSystemEmailAction($trigger);
-    }
-
-    $this->drupalLogout();
-    $this->assertSystemEmailTokenReplacement('user_logout', $test_user);
-
-    $this->drupalLogin($test_user);
-    $this->assertSystemMessageAndEmailTokenReplacement('user_login', $test_user, 2);
-    $this->assertSystemMessageAndEmailTokenReplacement('user_view', $test_user, 2);
-
-    $this->drupalPost("user/{$test_user->uid}/edit", array('name' => $test_user->name . '_changed'), t('Save'));
-    $test_user->name .= '_changed'; // Since we just changed it.
-    $this->assertSystemMessageAndEmailTokenReplacement('user_update', $test_user, 2);
-
-    $this->drupalGet('user');
-    $this->assertSystemMessageAndEmailTokenReplacement('user_view', $test_user);
-
-    $new_user = $this->drupalCreateUser(array('administer actions', 'administer users', 'cancel account', 'access administration pages'));
-    $this->assertSystemEmailTokenReplacement('user_insert', $new_user);
-
-    $this->drupalLogin($new_user);
-    $user_to_delete = $this->drupalCreateUser(array('access content'));
-    variable_set('user_cancel_method', 'user_cancel_delete');
-
-    $this->drupalPost("user/{$user_to_delete->uid}/cancel", array(), t('Cancel account'));
-    $this->assertSystemMessageAndEmailTokenReplacement('user_delete', $user_to_delete);
-  }
-
-
-}
-
-/**
- * Tests token substitution in trigger actions.
- *
- * This tests nearly every permutation of user triggers with system actions
- * and checks the token replacement.
- */
-class TriggerUserActionTestCase extends TriggerActionTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Test user actions',
-      'description' => 'Test user actions.',
-      'group' => 'Trigger',
-    );
-  }
-
-  /**
-   * Tests user action assignment and execution.
-   */
-  function testUserActionAssignmentExecution() {
-    $test_user = $this->drupalCreateUser(array('administer actions', 'create article content', 'access comments', 'administer comments', 'skip comment approval', 'edit own comments'));
-    $this->drupalLogin($test_user);
-
-    $triggers = array('comment_presave', 'comment_insert', 'comment_update');
-    // system_block_ip_action is difficult to test without ruining the test.
-    $actions = array('user_block_user_action');
-    foreach ($triggers as $trigger) {
-      foreach ($actions as $action) {
-        $this->assignSimpleAction($trigger, $action);
-      }
-    }
-
-    $node = $this->drupalCreateNode(array('type' => 'article'));
-    $this->drupalPost("node/{$node->nid}", array('comment_body[und][0][value]' => t("my comment"), 'subject' => t("my comment subject")), t('Save'));
-    // Posting a comment should have blocked this user.
-    $account = user_load($test_user->uid, TRUE);
-    $this->assertTrue($account->status == 0, 'Account is blocked');
-    $comment_author_uid = $account->uid;
-    // Now rehabilitate the comment author so it can be be blocked again when
-    // the comment is updated.
-    user_save($account, array('status' => TRUE));
-
-    $test_user = $this->drupalCreateUser(array('administer actions', 'create article content', 'access comments', 'administer comments', 'skip comment approval', 'edit own comments'));
-    $this->drupalLogin($test_user);
-
-    // Our original comment will have been comment 1.
-    $this->drupalPost("comment/1/edit", array('comment_body[und][0][value]' => t("my comment, updated"), 'subject' => t("my comment subject")), t('Save'));
-    $comment_author_account = user_load($comment_author_uid, TRUE);
-    $this->assertTrue($comment_author_account->status == 0, format_string('Comment author account (uid=@uid) is blocked after update to comment', array('@uid' => $comment_author_uid)));
-
-    // Verify that the comment was updated.
-    $test_user = $this->drupalCreateUser(array('administer actions', 'create article content', 'access comments', 'administer comments', 'skip comment approval', 'edit own comments'));
-    $this->drupalLogin($test_user);
-
-    $this->drupalGet("node/$node->nid");
-    $this->assertText(t("my comment, updated"));
-    $this->verboseEmail();
-  }
-}
-
-/**
- * Tests other triggers.
- */
-class TriggerOtherTestCase extends TriggerWebTestCase {
-  var $_cleanup_roles = array();
-  var $_cleanup_users = array();
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Trigger other actions',
-      'description' => 'Test triggering of user, comment, taxonomy actions.',
-      'group' => 'Trigger',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('trigger', 'trigger_test', 'contact');
-  }
-
-  /**
-   * Tests triggering on user create and user login.
-   */
-  function testActionsUser() {
-    // Assign an action to the create user trigger.
-    $test_user = $this->drupalCreateUser(array('administer actions'));
-    $this->drupalLogin($test_user);
-    $action_id = 'trigger_test_generic_action';
-    $hash = drupal_hash_base64($action_id);
-    $edit = array('aid' => $hash);
-    $this->drupalPost('admin/structure/trigger/user', $edit, t('Assign'), array(), array(), 'trigger-user-insert-assign-form');
-
-    // Set action variable to FALSE.
-    variable_set($action_id, FALSE);
-
-    // Create an unblocked user
-    $web_user = $this->drupalCreateUser(array('administer users'));
-    $this->drupalLogin($web_user);
-    $name = $this->randomName();
-    $pass = user_password();
-    $edit = array();
-    $edit['name'] = $name;
-    $edit['mail'] = $name . '@example.com';
-    $edit['pass[pass1]'] = $pass;
-    $edit['pass[pass2]'] = $pass;
-    $edit['status'] = 1;
-    $this->drupalPost('admin/people/create', $edit, t('Create new account'));
-
-    // Verify that the action variable has been set.
-    $this->assertTrue(variable_get($action_id, FALSE), 'Check that creating a user triggered the test action.');
-
-    // Reset the action variable.
-    variable_set($action_id, FALSE);
-
-    $this->drupalLogin($test_user);
-    // Assign a configurable action 'System message' to the user_login trigger.
-    $action_edit = array(
-      'actions_label' => $this->randomName(16),
-      'message' => t("You have logged in:") . $this->randomName(16),
-    );
-
-    // Configure an advanced action that we can assign.
-    $aid = $this->configureAdvancedAction('system_message_action', $action_edit);
-    $edit = array('aid' => drupal_hash_base64($aid));
-    $this->drupalPost('admin/structure/trigger/user', $edit, t('Assign'), array(), array(), 'trigger-user-login-assign-form');
-
-    // Verify that the action has been assigned to the correct hook.
-    $actions = trigger_get_assigned_actions('user_login');
-    $this->assertEqual(1, count($actions), 'One Action assigned to the hook');
-    $this->assertEqual($actions[$aid]['label'], $action_edit['actions_label'], 'Correct action label found.');
-
-    // User should get the configured message at login.
-    $contact_user = $this->drupalCreateUser(array('access site-wide contact form'));;
-    $this->drupalLogin($contact_user);
-    $this->assertText($action_edit['message']);
-  }
-
-  /**
-   * Tests triggering on comment save.
-   */
-  function testActionsComment() {
-    // Assign an action to the comment save trigger.
-    $test_user = $this->drupalCreateUser(array('administer actions'));
-    $this->drupalLogin($test_user);
-    $action_id = 'trigger_test_generic_action';
-    $hash = drupal_hash_base64($action_id);
-    $edit = array('aid' => $hash);
-    $this->drupalPost('admin/structure/trigger/comment', $edit, t('Assign'), array(), array(), 'trigger-comment-insert-assign-form');
-
-    // Set action variable to FALSE.
-    variable_set($action_id, FALSE);
-
-    // Create a node and add a comment to it.
-    $web_user = $this->drupalCreateUser(array('create article content', 'access content', 'skip comment approval', 'post comments'));
-    $this->drupalLogin($web_user);
-    $node = $this->drupalCreateNode(array('type' => 'article', 'promote' => 1));
-    $edit = array();
-    $edit['subject'] = $this->randomName(10);
-    $edit['comment_body[' . LANGUAGE_NONE . '][0][value]'] = $this->randomName(10) . ' ' . $this->randomName(10);
-    $this->drupalGet('comment/reply/' . $node->nid);
-    $this->drupalPost(NULL, $edit, t('Save'));
-
-    // Verify that the action variable has been set.
-    $this->assertTrue(variable_get($action_id, FALSE), 'Check that creating a comment triggered the action.');
-  }
-
-  /**
-   * Tests triggering on taxonomy new term.
-   */
-  function testActionsTaxonomy() {
-    // Assign an action to the taxonomy term save trigger.
-    $test_user = $this->drupalCreateUser(array('administer actions'));
-    $this->drupalLogin($test_user);
-    $action_id = 'trigger_test_generic_action';
-    $hash = drupal_hash_base64($action_id);
-    $edit = array('aid' => $hash);
-    $this->drupalPost('admin/structure/trigger/taxonomy', $edit, t('Assign'), array(), array(), 'trigger-taxonomy-term-insert-assign-form');
-
-    // Set action variable to FALSE.
-    variable_set($action_id, FALSE);
-
-    // Create a taxonomy vocabulary and add a term to it.
-
-    // Create a vocabulary.
-    $vocabulary = new stdClass();
-    $vocabulary->name = $this->randomName();
-    $vocabulary->description = $this->randomName();
-    $vocabulary->machine_name = drupal_strtolower($this->randomName());
-    $vocabulary->help = '';
-    $vocabulary->nodes = array('article' => 'article');
-    $vocabulary->weight = mt_rand(0, 10);
-    taxonomy_vocabulary_save($vocabulary);
-
-    $term = new stdClass();
-    $term->name = $this->randomName();
-    $term->vid = $vocabulary->vid;
-    taxonomy_term_save($term);
-
-    // Verify that the action variable has been set.
-    $this->assertTrue(variable_get($action_id, FALSE), 'Check that creating a taxonomy term triggered the action.');
-  }
-
-}
-
-/**
- * Tests that orphaned actions are properly handled.
- */
-class TriggerOrphanedActionsTestCase extends DrupalWebTestCase {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Trigger orphaned actions',
-      'description' => 'Test triggering an action that has since been removed.',
-      'group' => 'Trigger',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('trigger', 'trigger_test');
-  }
-
-  /**
-   * Tests logic around orphaned actions.
-   */
-  function testActionsOrphaned() {
-    $action = 'trigger_test_generic_any_action';
-    $hash = drupal_hash_base64($action);
-
-    // Assign an action from a disable-able module to a trigger, then pull the
-    // trigger, and make sure the actions fire.
-    $test_user = $this->drupalCreateUser(array('administer actions'));
-    $this->drupalLogin($test_user);
-    $edit = array('aid' => $hash);
-    $this->drupalPost('admin/structure/trigger/node', $edit, t('Assign'), array(), array(), 'trigger-node-presave-assign-form');
-
-    // Create an unpublished node.
-    $web_user = $this->drupalCreateUser(array('create page content', 'edit own page content', 'access content', 'administer nodes'));
-    $this->drupalLogin($web_user);
-    $edit = array();
-    $langcode = LANGUAGE_NONE;
-    $edit["title"] = '!SimpleTest test node! ' . $this->randomName(10);
-    $edit["body[$langcode][0][value]"] = '!SimpleTest test body! ' . $this->randomName(32) . ' ' . $this->randomName(32);
-    $this->drupalPost('node/add/page', $edit, t('Save'));
-    $this->assertRaw(t('!post %title has been created.', array('!post' => 'Basic page', '%title' => $edit["title"])), 'Make sure the Basic page has actually been created');
-
-    // Action should have been fired.
-    $this->assertTrue(variable_get('trigger_test_generic_any_action', FALSE), 'Trigger test action successfully fired.');
-
-    // Disable the module that provides the action and make sure the trigger
-    // doesn't white screen.
-    module_disable(array('trigger_test'));
-    $loaded_node = $this->drupalGetNodeByTitle($edit["title"]);
-    $edit["body[$langcode][0][value]"] = '!SimpleTest test body! ' . $this->randomName(32) . ' ' . $this->randomName(32);
-    $this->drupalPost("node/$loaded_node->nid/edit", $edit, t('Save'));
-
-    // If the node body was updated successfully we have dealt with the
-    // unavailable action.
-    $this->assertRaw(t('!post %title has been updated.', array('!post' => 'Basic page', '%title' => $edit["title"])), 'Make sure the Basic page can be updated with the missing trigger function.');
-  }
-}
-
-/**
- * Tests the unassigning of triggers.
- */
-class TriggerUnassignTestCase extends DrupalWebTestCase {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Trigger unassigning',
-      'description' => 'Tests the unassigning of triggers.',
-      'group' => 'Trigger',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('trigger', 'trigger_test');
-    $web_user = $this->drupalCreateUser(array('administer actions'));
-    $this->drupalLogin($web_user);
-  }
-
-  /**
-   * Tests an attempt to unassign triggers when none are assigned.
-   */
-  function testUnassignAccessDenied() {
-    $this->drupalGet('admin/structure/trigger/unassign');
-    $this->assertResponse(403, 'If there are no actions available, return access denied.');
-  }
-
-}
diff --git a/modules/update/tests/aaa_update_test.1_0.xml b/modules/update/tests/aaa_update_test.1_0.xml
deleted file mode 100644
index a168453..0000000
--- a/modules/update/tests/aaa_update_test.1_0.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<project xmlns:dc="http://purl.org/dc/elements/1.1/">
-<title>AAA Update test</title>
-<short_name>aaa_update_test</short_name>
-<dc:creator>Drupal</dc:creator>
-<api_version>7.x</api_version>
-<recommended_major>1</recommended_major>
-<supported_majors>1</supported_majors>
-<default_major>1</default_major>
-<project_status>published</project_status>
-<link>http://example.com/project/aaa_update_test</link>
-  <terms>
-   <term><name>Projects</name><value>Modules</value></term>
-  </terms>
-<releases>
- <release>
-  <name>aaa_update_test 7.x-1.0</name>
-  <version>7.x-1.0</version>
-  <tag>DRUPAL-7--1-0</tag>
-  <version_major>1</version_major>
-  <version_patch>0</version_patch>
-  <status>published</status>
-  <release_link>http://example.com/aaa_update_test-7-x-1-0-release</release_link>
-  <download_link>http://example.com/aaa_update_test-7.x-1.0.tar.gz</download_link>
-  <date>1250424521</date>
-  <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash>
-  <filesize>1073741824</filesize>
-  <terms>
-   <term><name>Release type</name><value>New features</value></term>
-   <term><name>Release type</name><value>Bug fixes</value></term>
-  </terms>
- </release>
-</releases>
-</project>
diff --git a/modules/update/tests/aaa_update_test.info b/modules/update/tests/aaa_update_test.info
deleted file mode 100644
index a283720..0000000
--- a/modules/update/tests/aaa_update_test.info
+++ /dev/null
@@ -1,5 +0,0 @@
-name = AAA Update test
-description = Support module for update module testing.
-package = Testing
-core = 7.x
-hidden = TRUE
diff --git a/modules/update/tests/aaa_update_test.module b/modules/update/tests/aaa_update_test.module
deleted file mode 100644
index 4d67b8e..0000000
--- a/modules/update/tests/aaa_update_test.module
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-
-/**
- * @file
- * Dummy module for testing Update status.
- */
diff --git a/modules/update/tests/aaa_update_test.no-releases.xml b/modules/update/tests/aaa_update_test.no-releases.xml
deleted file mode 100644
index e266d49..0000000
--- a/modules/update/tests/aaa_update_test.no-releases.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<error>No release history was found for the requested project (aaa_update_test).</error>
diff --git a/modules/update/tests/aaa_update_test.tar.gz b/modules/update/tests/aaa_update_test.tar.gz
deleted file mode 100644
index 22c9719..0000000
Binary files a/modules/update/tests/aaa_update_test.tar.gz and /dev/null differ
diff --git a/modules/update/tests/bbb_update_test.1_0.xml b/modules/update/tests/bbb_update_test.1_0.xml
deleted file mode 100644
index bfdf196..0000000
--- a/modules/update/tests/bbb_update_test.1_0.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<project xmlns:dc="http://purl.org/dc/elements/1.1/">
-<title>BBB Update test</title>
-<short_name>bbb_update_test</short_name>
-<dc:creator>Drupal</dc:creator>
-<api_version>7.x</api_version>
-<recommended_major>1</recommended_major>
-<supported_majors>1</supported_majors>
-<default_major>1</default_major>
-<project_status>published</project_status>
-<link>http://example.com/project/bbb_update_test</link>
-  <terms>
-   <term><name>Projects</name><value>Modules</value></term>
-  </terms>
-<releases>
- <release>
-  <name>bbb_update_test 7.x-1.0</name>
-  <version>7.x-1.0</version>
-  <tag>DRUPAL-7--1-0</tag>
-  <version_major>1</version_major>
-  <version_patch>0</version_patch>
-  <status>published</status>
-  <release_link>http://example.com/bbb_update_test-7-x-1-0-release</release_link>
-  <download_link>http://example.com/bbb_update_test-7.x-1.0.tar.gz</download_link>
-  <date>1250424521</date>
-  <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash>
-  <filesize>1073741824</filesize>
-  <terms>
-   <term><name>Release type</name><value>New features</value></term>
-   <term><name>Release type</name><value>Bug fixes</value></term>
-  </terms>
- </release>
-</releases>
-</project>
diff --git a/modules/update/tests/bbb_update_test.info b/modules/update/tests/bbb_update_test.info
deleted file mode 100644
index 75084ae..0000000
--- a/modules/update/tests/bbb_update_test.info
+++ /dev/null
@@ -1,5 +0,0 @@
-name = BBB Update test
-description = Support module for update module testing.
-package = Testing
-core = 7.x
-hidden = TRUE
diff --git a/modules/update/tests/bbb_update_test.module b/modules/update/tests/bbb_update_test.module
deleted file mode 100644
index 4d67b8e..0000000
--- a/modules/update/tests/bbb_update_test.module
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-
-/**
- * @file
- * Dummy module for testing Update status.
- */
diff --git a/modules/update/tests/ccc_update_test.1_0.xml b/modules/update/tests/ccc_update_test.1_0.xml
deleted file mode 100644
index 1b9ba75..0000000
--- a/modules/update/tests/ccc_update_test.1_0.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<project xmlns:dc="http://purl.org/dc/elements/1.1/">
-<title>CCC Update test</title>
-<short_name>ccc_update_test</short_name>
-<dc:creator>Drupal</dc:creator>
-<api_version>7.x</api_version>
-<recommended_major>1</recommended_major>
-<supported_majors>1</supported_majors>
-<default_major>1</default_major>
-<project_status>published</project_status>
-<link>http://example.com/project/ccc_update_test</link>
-  <terms>
-   <term><name>Projects</name><value>Modules</value></term>
-  </terms>
-<releases>
- <release>
-  <name>ccc_update_test 7.x-1.0</name>
-  <version>7.x-1.0</version>
-  <tag>DRUPAL-7--1-0</tag>
-  <version_major>1</version_major>
-  <version_patch>0</version_patch>
-  <status>published</status>
-  <release_link>http://example.com/ccc_update_test-7-x-1-0-release</release_link>
-  <download_link>http://example.com/ccc_update_test-7.x-1.0.tar.gz</download_link>
-  <date>1250424521</date>
-  <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash>
-  <filesize>1073741824</filesize>
-  <terms>
-   <term><name>Release type</name><value>New features</value></term>
-   <term><name>Release type</name><value>Bug fixes</value></term>
-  </terms>
- </release>
-</releases>
-</project>
diff --git a/modules/update/tests/ccc_update_test.info b/modules/update/tests/ccc_update_test.info
deleted file mode 100644
index 0bd4cde..0000000
--- a/modules/update/tests/ccc_update_test.info
+++ /dev/null
@@ -1,5 +0,0 @@
-name = CCC Update test
-description = Support module for update module testing.
-package = Testing
-core = 7.x
-hidden = TRUE
diff --git a/modules/update/tests/ccc_update_test.module b/modules/update/tests/ccc_update_test.module
deleted file mode 100644
index 4d67b8e..0000000
--- a/modules/update/tests/ccc_update_test.module
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-
-/**
- * @file
- * Dummy module for testing Update status.
- */
diff --git a/modules/update/tests/drupal.0.xml b/modules/update/tests/drupal.0.xml
deleted file mode 100644
index 701e11e..0000000
--- a/modules/update/tests/drupal.0.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<project xmlns:dc="http://purl.org/dc/elements/1.1/">
-<title>Drupal</title>
-<short_name>drupal</short_name>
-<dc:creator>Drupal</dc:creator>
-<api_version>7.x</api_version>
-<recommended_major>7</recommended_major>
-<supported_majors>7</supported_majors>
-<default_major>7</default_major>
-<project_status>published</project_status>
-<link>http://example.com/project/drupal</link>
-  <terms>
-   <term><name>Projects</name><value>Drupal project</value></term>
-  </terms>
-<releases>
- <release>
-  <name>Drupal 7.0</name>
-  <version>7.0</version>
-  <tag>DRUPAL-7-0</tag>
-  <version_major>7</version_major>
-  <version_patch>0</version_patch>
-  <status>published</status>
-  <release_link>http://example.com/drupal-7-0-release</release_link>
-  <download_link>http://example.com/drupal-7-0.tar.gz</download_link>
-  <date>1250424521</date>
-  <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash>
-  <filesize>1073741824</filesize>
-  <terms>
-   <term><name>Release type</name><value>New features</value></term>
-   <term><name>Release type</name><value>Bug fixes</value></term>
-  </terms>
- </release>
-</releases>
-</project>
diff --git a/modules/update/tests/drupal.1.xml b/modules/update/tests/drupal.1.xml
deleted file mode 100644
index de4cfd0..0000000
--- a/modules/update/tests/drupal.1.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<project xmlns:dc="http://purl.org/dc/elements/1.1/">
-<title>Drupal</title>
-<short_name>drupal</short_name>
-<dc:creator>Drupal</dc:creator>
-<api_version>7.x</api_version>
-<recommended_major>7</recommended_major>
-<supported_majors>7</supported_majors>
-<default_major>7</default_major>
-<project_status>published</project_status>
-<link>http://example.com/project/drupal</link>
-  <terms>
-   <term><name>Projects</name><value>Drupal project</value></term>
-  </terms>
-<releases>
- <release>
-  <name>Drupal 7.1</name>
-  <version>7.1</version>
-  <tag>DRUPAL-7-1</tag>
-  <version_major>7</version_major>
-  <version_patch>1</version_patch>
-  <status>published</status>
-  <release_link>http://example.com/drupal-7-1-release</release_link>
-  <download_link>http://example.com/drupal-7-1.tar.gz</download_link>
-  <date>1250424581</date>
-  <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash>
-  <filesize>2147483648</filesize>
-  <terms>
-   <term><name>Release type</name><value>New features</value></term>
-   <term><name>Release type</name><value>Bug fixes</value></term>
-  </terms>
- </release>
- <release>
-  <name>Drupal 7.0</name>
-  <version>7.0</version>
-  <tag>DRUPAL-7-0</tag>
-  <version_major>7</version_major>
-  <version_patch>0</version_patch>
-  <status>published</status>
-  <release_link>http://example.com/drupal-7-0-release</release_link>
-  <download_link>http://example.com/drupal-7-0.tar.gz</download_link>
-  <date>1250424521</date>
-  <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash>
-  <filesize>1073741824</filesize>
-  <terms>
-   <term><name>Release type</name><value>New features</value></term>
-   <term><name>Release type</name><value>Bug fixes</value></term>
-  </terms>
- </release>
-</releases>
-</project>
diff --git a/modules/update/tests/drupal.2-sec.xml b/modules/update/tests/drupal.2-sec.xml
deleted file mode 100644
index 1e68c8d..0000000
--- a/modules/update/tests/drupal.2-sec.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<project xmlns:dc="http://purl.org/dc/elements/1.1/">
-<title>Drupal</title>
-<short_name>drupal</short_name>
-<dc:creator>Drupal</dc:creator>
-<api_version>7.x</api_version>
-<recommended_major>7</recommended_major>
-<supported_majors>7</supported_majors>
-<default_major>7</default_major>
-<project_status>published</project_status>
-<link>http://example.com/project/drupal</link>
-  <terms>
-   <term><name>Projects</name><value>Drupal project</value></term>
-  </terms>
-<releases>
- <release>
-  <name>Drupal 7.2</name>
-  <version>7.2</version>
-  <tag>DRUPAL-7-2</tag>
-  <version_major>7</version_major>
-  <version_patch>2</version_patch>
-  <status>published</status>
-  <release_link>http://example.com/drupal-7-2-release</release_link>
-  <download_link>http://example.com/drupal-7-2.tar.gz</download_link>
-  <date>1250424641</date>
-  <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash>
-  <filesize>4294967296</filesize>
-  <terms>
-   <term><name>Release type</name><value>New features</value></term>
-   <term><name>Release type</name><value>Bug fixes</value></term>
-   <term><name>Release type</name><value>Security update</value></term>
-  </terms>
- </release>
- <release>
-  <name>Drupal 7.1</name>
-  <version>7.1</version>
-  <tag>DRUPAL-7-1</tag>
-  <version_major>7</version_major>
-  <version_patch>1</version_patch>
-  <status>published</status>
-  <release_link>http://example.com/drupal-7-1-release</release_link>
-  <download_link>http://example.com/drupal-7-1.tar.gz</download_link>
-  <date>1250424581</date>
-  <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash>
-  <filesize>2147483648</filesize>
-  <terms>
-   <term><name>Release type</name><value>New features</value></term>
-   <term><name>Release type</name><value>Bug fixes</value></term>
-  </terms>
- </release>
- <release>
-  <name>Drupal 7.0</name>
-  <version>7.0</version>
-  <tag>DRUPAL-7-0</tag>
-  <version_major>7</version_major>
-  <version_patch>0</version_patch>
-  <status>published</status>
-  <release_link>http://example.com/drupal-7-0-release</release_link>
-  <download_link>http://example.com/drupal-7-0.tar.gz</download_link>
-  <date>1250424521</date>
-  <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash>
-  <filesize>1073741824</filesize>
-  <terms>
-   <term><name>Release type</name><value>New features</value></term>
-   <term><name>Release type</name><value>Bug fixes</value></term>
-  </terms>
- </release>
-</releases>
-</project>
diff --git a/modules/update/tests/drupal.dev.xml b/modules/update/tests/drupal.dev.xml
deleted file mode 100644
index 49dcc3f..0000000
--- a/modules/update/tests/drupal.dev.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<project xmlns:dc="http://purl.org/dc/elements/1.1/">
-<title>Drupal</title>
-<short_name>drupal</short_name>
-<dc:creator>Drupal</dc:creator>
-<api_version>7.x</api_version>
-<recommended_major>7</recommended_major>
-<supported_majors>7</supported_majors>
-<default_major>7</default_major>
-<project_status>published</project_status>
-<link>http://example.com/project/drupal</link>
-  <terms>
-   <term><name>Projects</name><value>Drupal project</value></term>
-  </terms>
-<releases>
- <release>
-  <name>Drupal 7.0</name>
-  <version>7.0</version>
-  <tag>DRUPAL-7-0</tag>
-  <version_major>7</version_major>
-  <version_patch>0</version_patch>
-  <status>published</status>
-  <release_link>http://example.com/drupal-7-0-release</release_link>
-  <download_link>http://example.com/drupal-7-0.tar.gz</download_link>
-  <date>1250424521</date>
-  <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash>
-  <filesize>1073741824</filesize>
-  <terms>
-   <term><name>Release type</name><value>New features</value></term>
-   <term><name>Release type</name><value>Bug fixes</value></term>
-  </terms>
- </release>
- <release>
-  <name>Drupal 7.x-dev</name>
-  <version>7.x-dev</version>
-  <tag>DRUPAL-7</tag>
-  <version_major>7</version_major>
-  <version_extra>dev</version_extra>
-  <status>published</status>
-  <release_link>http://example.com/drupal-7-x-dev-release</release_link>
-  <download_link>http://example.com/drupal-7.x-dev.tar.gz</download_link>
-  <date>1250424581</date>
-  <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash>
-  <filesize>2147483648</filesize>
-  <terms>
-   <term><name>Release type</name><value>Bug fixes</value></term>
-  </terms>
- </release>
-</releases>
-</project>
diff --git a/modules/update/tests/themes/update_test_basetheme/update_test_basetheme.info b/modules/update/tests/themes/update_test_basetheme/update_test_basetheme.info
deleted file mode 100644
index 9718784..0000000
--- a/modules/update/tests/themes/update_test_basetheme/update_test_basetheme.info
+++ /dev/null
@@ -1,4 +0,0 @@
-name = Update test base theme
-description = Test theme which acts as a base theme for other test subthemes.
-core = 7.x
-hidden = TRUE
diff --git a/modules/update/tests/themes/update_test_subtheme/update_test_subtheme.info b/modules/update/tests/themes/update_test_subtheme/update_test_subtheme.info
deleted file mode 100644
index 6ca42f4..0000000
--- a/modules/update/tests/themes/update_test_subtheme/update_test_subtheme.info
+++ /dev/null
@@ -1,5 +0,0 @@
-name = Update test subtheme
-description = Test theme which uses update_test_basetheme as the base theme.
-core = 7.x
-base theme = update_test_basetheme
-hidden = TRUE
diff --git a/modules/update/tests/update_test.info b/modules/update/tests/update_test.info
deleted file mode 100644
index f68dc9d..0000000
--- a/modules/update/tests/update_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = Update test
-description = Support module for update module testing.
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/update/tests/update_test.module b/modules/update/tests/update_test.module
deleted file mode 100644
index 6fe4bdd..0000000
--- a/modules/update/tests/update_test.module
+++ /dev/null
@@ -1,191 +0,0 @@
-<?php
-
-/**
- * @file
- * Module for testing Update Manager functionality.
- */
-
-/**
- * Implements hook_system_theme_info().
- */
-function update_test_system_theme_info() {
-  $themes['update_test_basetheme'] = drupal_get_path('module', 'update_test') . '/themes/update_test_basetheme/update_test_basetheme.info';
-  $themes['update_test_subtheme'] = drupal_get_path('module', 'update_test') . '/themes/update_test_subtheme/update_test_subtheme.info';
-  return $themes;
-}
-
-/**
- * Implements hook_menu().
- */
-function update_test_menu() {
-  $items = array();
-
-  $items['update-test'] = array(
-    'title' => t('Update test'),
-    'page callback' => 'update_test_mock_page',
-    'access callback' => TRUE,
-    'type' => MENU_CALLBACK,
-  );
-  $items['503-error'] = array(
-    'title' => t('503 Service unavailable'),
-    'page callback' => 'update_callback_service_unavailable',
-    'access callback' => TRUE,
-    'type' => MENU_CALLBACK,
-  );
-
-  return $items;
-}
-
-/**
- * Implements hook_system_info_alter().
- *
- * Checks the 'update_test_system_info' variable and sees if we need to alter
- * the system info for the given $file based on the setting. The setting is
- * expected to be a nested associative array. If the key '#all' is defined, its
- * subarray will include .info keys and values for all modules and themes on the
- * system. Otherwise, the settings array is keyed by the module or theme short
- * name ($file->name) and the subarrays contain settings just for that module or
- * theme.
- */
-function update_test_system_info_alter(&$info, $file) {
-  $setting = variable_get('update_test_system_info', array());
-  foreach (array('#all', $file->name) as $id) {
-    if (!empty($setting[$id])) {
-      foreach ($setting[$id] as $key => $value) {
-        $info[$key] = $value;
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_update_status_alter().
- *
- * Checks the 'update_test_update_status' variable and sees if we need to alter
- * the update status for the given project based on the setting. The setting is
- * expected to be a nested associative array. If the key '#all' is defined, its
- * subarray will include .info keys and values for all modules and themes on the
- * system. Otherwise, the settings array is keyed by the module or theme short
- * name and the subarrays contain settings just for that module or theme.
- */
-function update_test_update_status_alter(&$projects) {
-  $setting = variable_get('update_test_update_status', array());
-  if (!empty($setting)) {
-    foreach ($projects as $project_name => &$project) {
-      foreach (array('#all', $project_name) as $id) {
-        if (!empty($setting[$id])) {
-          foreach ($setting[$id] as $key => $value) {
-            $project[$key] = $value;
-          }
-        }
-      }
-    }
-  }
-}
-
-/**
- * Page callback: Prints mock XML for the Update Manager module.
- *
- * The specific XML file to print depends on two things: the project we're
- * trying to fetch data for, and the desired "availability scenario" for that
- * project which we're trying to test. Before attempting to fetch this data (by
- * checking for updates on the available updates report), callers need to define
- * the 'update_test_xml_map' variable as an array, keyed by project name,
- * indicating which availability scenario to use for that project.
- *
- * @param $project_name
- *   The project short name the update manager is trying to fetch data for (the
- *   fetch URLs are of the form: [base_url]/[project_name]/[core_version]).
- *
- * @see update_test_menu()
- */
-function update_test_mock_page($project_name) {
-  $xml_map = variable_get('update_test_xml_map', FALSE);
-  if (isset($xml_map[$project_name])) {
-    $availability_scenario = $xml_map[$project_name];
-  }
-  elseif (isset($xml_map['#all'])) {
-    $availability_scenario = $xml_map['#all'];
-  }
-  else {
-    // The test didn't specify (for example, the webroot has other modules and
-    // themes installed but they're disabled by the version of the site
-    // running the test. So, we default to a file we know won't exist, so at
-    // least we'll get an empty page from readfile instead of a bunch of
-    // Drupal page output.
-    $availability_scenario = '#broken#';
-  }
-
-  $path = drupal_get_path('module', 'update_test');
-  readfile("$path/$project_name.$availability_scenario.xml");
-}
-
-/**
- * Implements hook_archiver_info().
- */
-function update_test_archiver_info() {
-  return array(
-    'update_test_archiver' => array(
-      // This is bogus, we only care about the extensions for now.
-      'class' => 'ArchiverUpdateTest',
-      'extensions' => array('update-test-extension'),
-    ),
-  );
-}
-
-/**
- * Implements hook_filetransfer_info().
- */
-function update_test_filetransfer_info() {
-  // Define a mock file transfer method, to ensure that there will always be
-  // at least one method available in the user interface (regardless of the
-  // environment in which the update manager tests are run).
-  return array(
-    'system_test' => array(
-      'title' => t('Update Test FileTransfer'),
-      // This should be in an .inc file, but for testing purposes, it is OK to
-      // leave it in the main module file.
-      'file' => 'update_test.module',
-      'class' => 'UpdateTestFileTransfer',
-      'weight' => -20,
-    ),
-  );
-}
-
-/**
- * Mocks a FileTransfer object to test the settings form functionality.
- */
-class UpdateTestFileTransfer {
-
-  /**
-   * Returns an UpdateTestFileTransfer object.
-   *
-   * @return
-   *   A new UpdateTestFileTransfer object.
-   */
-  public static function factory() {
-    return new UpdateTestFileTransfer;
-  }
-
-  /**
-   * Returns a settings form with a text field to input a username.
-   */
-  public function getSettingsForm() {
-    $form = array();
-    $form['udpate_test_username'] = array(
-      '#type' => 'textfield',
-      '#title' => t('Update Test Username'),
-    );
-    return $form;
-  }
-}
-
-/**
- * Page callback: Displays an Error 503 (Service unavailable) page.
- *
- * @see update_test_menu()
- */
-function update_callback_service_unavailable() {
-  drupal_add_http_header('Status', '503 Service unavailable');
-  print "503 Service Temporarily Unavailable";
-}
diff --git a/modules/update/tests/update_test_basetheme.1_1-sec.xml b/modules/update/tests/update_test_basetheme.1_1-sec.xml
deleted file mode 100644
index 5c11c03..0000000
--- a/modules/update/tests/update_test_basetheme.1_1-sec.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<project xmlns:dc="http://purl.org/dc/elements/1.1/">
-<title>Update test base theme</title>
-<short_name>update_test_basetheme</short_name>
-<dc:creator>Drupal</dc:creator>
-<api_version>7.x</api_version>
-<recommended_major>1</recommended_major>
-<supported_majors>1</supported_majors>
-<default_major>1</default_major>
-<project_status>published</project_status>
-<link>http://example.com/project/update_test_basetheme</link>
-  <terms>
-   <term><name>Projects</name><value>Themes</value></term>
-  </terms>
-<releases>
- <release>
-  <name>update_test_basetheme 7.x-1.1</name>
-  <version>7.x-1.1</version>
-  <tag>DRUPAL-7--1-1</tag>
-  <version_major>1</version_major>
-  <version_patch>1</version_patch>
-  <status>published</status>
-  <release_link>http://example.com/update_test_basetheme-7-x-1-1-release</release_link>
-  <download_link>http://example.com/update_test_basetheme-7.x-1.1.tar.gz</download_link>
-  <date>1250624521</date>
-  <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash>
-  <filesize>1073763241</filesize>
-  <terms>
-   <term><name>Release type</name><value>Security update</value></term>
-   <term><name>Release type</name><value>New features</value></term>
-   <term><name>Release type</name><value>Bug fixes</value></term>
-  </terms>
- </release>
- <release>
-  <name>update_test_basetheme 7.x-1.0</name>
-  <version>7.x-1.0</version>
-  <tag>DRUPAL-7--1-0</tag>
-  <version_major>1</version_major>
-  <version_patch>0</version_patch>
-  <status>published</status>
-  <release_link>http://example.com/update_test_basetheme-7-x-1-0-release</release_link>
-  <download_link>http://example.com/update_test_basetheme-7.x-1.0.tar.gz</download_link>
-  <date>1250524521</date>
-  <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash>
-  <filesize>1073741824</filesize>
-  <terms>
-   <term><name>Release type</name><value>New features</value></term>
-   <term><name>Release type</name><value>Bug fixes</value></term>
-  </terms>
- </release>
-</releases>
-</project>
diff --git a/modules/update/tests/update_test_subtheme.1_0.xml b/modules/update/tests/update_test_subtheme.1_0.xml
deleted file mode 100644
index 5d04ec8..0000000
--- a/modules/update/tests/update_test_subtheme.1_0.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<project xmlns:dc="http://purl.org/dc/elements/1.1/">
-<title>Update test subtheme</title>
-<short_name>update_test_subtheme</short_name>
-<dc:creator>Drupal</dc:creator>
-<api_version>7.x</api_version>
-<recommended_major>1</recommended_major>
-<supported_majors>1</supported_majors>
-<default_major>1</default_major>
-<project_status>published</project_status>
-<link>http://example.com/project/update_test_subtheme</link>
-  <terms>
-   <term><name>Projects</name><value>Themes</value></term>
-  </terms>
-<releases>
- <release>
-  <name>update_test_subtheme 7.x-1.0</name>
-  <version>7.x-1.0</version>
-  <tag>DRUPAL-7--1-0</tag>
-  <version_major>1</version_major>
-  <version_patch>0</version_patch>
-  <status>published</status>
-  <release_link>http://example.com/update_test_subtheme-7-x-1-0-release</release_link>
-  <download_link>http://example.com/update_test_subtheme-7.x-1.0.tar.gz</download_link>
-  <date>1250524521</date>
-  <mdhash>b966255555d9c9b86d480ca08cfaa98e</mdhash>
-  <filesize>1073741824</filesize>
-  <terms>
-   <term><name>Release type</name><value>New features</value></term>
-   <term><name>Release type</name><value>Bug fixes</value></term>
-  </terms>
- </release>
-</releases>
-</project>
diff --git a/modules/update/update-rtl.css b/modules/update/update-rtl.css
deleted file mode 100644
index f181c84..0000000
--- a/modules/update/update-rtl.css
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * @file
- * RTL styles used by the Update Manager module.
- */
-
-.update .project {
-  padding-right: .25em;
-}
-
-.update .version-status {
-  float: left;
-  padding-left: 10px;
-}
-
-.update .version-status .icon {
-  padding-right: .5em;
-}
-
-.update table.version .version-title {
-  padding-left: 1em;
-}
-
-.update table.version .version-details {
-  padding-left: .5em;
-  direction: ltr;
-}
-
-.update table.version .version-links {
-  text-align: left;
-  padding-left: 1em;
-}
-
-.update .check-manually {
-  padding-right: 1em;
-}
diff --git a/modules/update/update.api.php b/modules/update/update.api.php
deleted file mode 100644
index cb5669e..0000000
--- a/modules/update/update.api.php
+++ /dev/null
@@ -1,133 +0,0 @@
-<?php
-
-/**
- * @file
- * Hooks provided by the Update Manager module.
- */
-
-/**
- * @addtogroup hooks
- * @{
- */
-
-/**
- * Alter the list of projects before fetching data and comparing versions.
- *
- * Most modules will never need to implement this hook. It is for advanced
- * interaction with the Update Manager module. The primary use-case for this
- * hook is to add projects to the list; for example, to provide update status
- * data on disabled modules and themes. A contributed module might want to hide
- * projects from the list; for example, if there is a site-specific module that
- * doesn't have any official releases, that module could remove itself from this
- * list to avoid "No available releases found" warnings on the available updates
- * report. In rare cases, a module might want to alter the data associated with
- * a project already in the list.
- *
- * @param $projects
- *   Reference to an array of the projects installed on the system. This
- *   includes all the metadata documented in the comments below for each project
- *   (either module or theme) that is currently enabled. The array is initially
- *   populated inside update_get_projects() with the help of
- *   _update_process_info_list(), so look there for examples of how to populate
- *   the array with real values.
- *
- * @see update_get_projects()
- * @see _update_process_info_list()
- */
-function hook_update_projects_alter(&$projects) {
-  // Hide a site-specific module from the list.
-  unset($projects['site_specific_module']);
-
-  // Add a disabled module to the list.
-  // The key for the array should be the machine-readable project "short name".
-  $projects['disabled_project_name'] = array(
-    // Machine-readable project short name (same as the array key above).
-    'name' => 'disabled_project_name',
-    // Array of values from the main .info file for this project.
-    'info' => array(
-      'name' => 'Some disabled module',
-      'description' => 'A module not enabled on the site that you want to see in the available updates report.',
-      'version' => '7.x-1.0',
-      'core' => '7.x',
-      // The maximum file change time (the "ctime" returned by the filectime()
-      // PHP method) for all of the .info files included in this project.
-      '_info_file_ctime' => 1243888165,
-    ),
-    // The date stamp when the project was released, if known. If the disabled
-    // project was an officially packaged release from drupal.org, this will
-    // be included in the .info file as the 'datestamp' field. This only
-    // really matters for development snapshot releases that are regenerated,
-    // so it can be left undefined or set to 0 in most cases.
-    'datestamp' => 1243888185,
-    // Any modules (or themes) included in this project. Keyed by machine-
-    // readable "short name", value is the human-readable project name printed
-    // in the UI.
-    'includes' => array(
-      'disabled_project' => 'Disabled module',
-      'disabled_project_helper' => 'Disabled module helper module',
-      'disabled_project_foo' => 'Disabled module foo add-on module',
-    ),
-    // Does this project contain a 'module', 'theme', 'disabled-module', or
-    // 'disabled-theme'?
-    'project_type' => 'disabled-module',
-  );
-}
-
-/**
- * Alter the information about available updates for projects.
- *
- * @param $projects
- *   Reference to an array of information about available updates to each
- *   project installed on the system.
- *
- * @see update_calculate_project_data()
- */
-function hook_update_status_alter(&$projects) {
-  $settings = variable_get('update_advanced_project_settings', array());
-  foreach ($projects as $project => $project_info) {
-    if (isset($settings[$project]) && isset($settings[$project]['check']) &&
-        ($settings[$project]['check'] == 'never' ||
-          (isset($project_info['recommended']) &&
-            $settings[$project]['check'] === $project_info['recommended']))) {
-      $projects[$project]['status'] = UPDATE_NOT_CHECKED;
-      $projects[$project]['reason'] = t('Ignored from settings');
-      if (!empty($settings[$project]['notes'])) {
-        $projects[$project]['extra'][] = array(
-          'class' => array('admin-note'),
-          'label' => t('Administrator note'),
-          'data' => $settings[$project]['notes'],
-        );
-      }
-    }
-  }
-}
-
-/**
- * Verify an archive after it has been downloaded and extracted.
- *
- * @param string $project
- *   The short name of the project that has been downloaded.
- * @param string $archive_file
- *   The filename of the unextracted archive.
- * @param string $directory
- *   The directory that the archive was extracted into.
- *
- * @return
- *   If there are any problems, return an array of error messages. If there are
- *   no problems, return an empty array.
- *
- * @see update_manager_archive_verify()
- * @ingroup update_manager_file
- */
-function hook_verify_update_archive($project, $archive_file, $directory) {
-  $errors = array();
-  if (!file_exists($directory)) {
-    $errors[] = t('The %directory does not exist.', array('%directory' => $directory));
-  }
-  // Add other checks on the archive integrity here.
-  return $errors;
-}
-
-/**
- * @} End of "addtogroup hooks".
- */
diff --git a/modules/update/update.authorize.inc b/modules/update/update.authorize.inc
deleted file mode 100644
index 6ddd2c5..0000000
--- a/modules/update/update.authorize.inc
+++ /dev/null
@@ -1,333 +0,0 @@
-<?php
-
-/**
- * @file
- * Callbacks and related functions invoked by authorize.php to update projects.
- *
- * We use the Batch API to actually update each individual project on the site.
- * All of the code in this file is run at a low bootstrap level (modules are not
- * loaded), so these functions cannot assume access to the rest of the code of
- * the Update Manager module.
- */
-
-/**
- * Updates existing projects when invoked by authorize.php.
- *
- * Callback for system_authorized_init() in
- * update_manager_update_ready_form_submit().
- *
- * @param $filetransfer
- *   The FileTransfer object created by authorize.php for use during this
- *   operation.
- * @param $projects
- *   A nested array of projects to install into the live webroot, keyed by
- *   project name. Each subarray contains the following keys:
- *   - project: The canonical project short name.
- *   - updater_name: The name of the Updater class to use for this project.
- *   - local_url: The locally installed location of new code to update with.
- */
-function update_authorize_run_update($filetransfer, $projects) {
-  $operations = array();
-  foreach ($projects as $project => $project_info) {
-    $operations[] = array(
-      'update_authorize_batch_copy_project',
-      array(
-        $project_info['project'],
-        $project_info['updater_name'],
-        $project_info['local_url'],
-        $filetransfer,
-      ),
-    );
-  }
-
-  $batch = array(
-    'title' => t('Installing updates'),
-    'init_message' => t('Preparing to update your site'),
-    'operations' => $operations,
-    'finished' => 'update_authorize_update_batch_finished',
-    'file' => drupal_get_path('module', 'update') . '/update.authorize.inc',
-  );
-
-  batch_set($batch);
-  // Invoke the batch via authorize.php.
-  system_authorized_batch_process();
-}
-
-/**
- * Installs a new project when invoked by authorize.php.
- *
- * Callback for system_authorized_init() in
- * update_manager_install_form_submit().
- *
- * @param FileTransfer $filetransfer
- *   The FileTransfer object created by authorize.php for use during this
- *   operation.
- * @param string $project
- *   The canonical project short name (e.g., {system}.name).
- * @param string $updater_name
- *   The name of the Updater class to use for installing this project.
- * @param string $local_url
- *   The URL to the locally installed temp directory where the project has
- *   already been downloaded and extracted into.
- */
-function update_authorize_run_install($filetransfer, $project, $updater_name, $local_url) {
-  $operations[] = array(
-    'update_authorize_batch_copy_project',
-    array(
-      $project,
-      $updater_name,
-      $local_url,
-      $filetransfer,
-    ),
-  );
-
-  // @todo Instantiate our Updater to set the human-readable title?
-  $batch = array(
-    'title' => t('Installing %project', array('%project' => $project)),
-    'init_message' => t('Preparing to install'),
-    'operations' => $operations,
-    // @todo Use a different finished callback for different messages?
-    'finished' => 'update_authorize_install_batch_finished',
-    'file' => drupal_get_path('module', 'update') . '/update.authorize.inc',
-  );
-  batch_set($batch);
-
-  // Invoke the batch via authorize.php.
-  system_authorized_batch_process();
-}
-
-/**
- * Batch callback: Copies project to its proper place when authorized to do so.
- *
- * @param string $project
- *   The canonical short name of the project being installed.
- * @param string $updater_name
- *   The name of the Updater class to use for installing this project.
- * @param string $local_url
- *   The URL to the locally installed temp directory where the project has
- *   already been downloaded and extracted into.
- * @param FileTransfer $filetransfer
- *   The FileTransfer object to use for performing this operation.
- * @param array $context
- *   Reference to an array used for Batch API storage.
- */
-function update_authorize_batch_copy_project($project, $updater_name, $local_url, $filetransfer, &$context) {
-
-  // Initialize some variables in the Batch API $context array.
-  if (!isset($context['results']['log'])) {
-    $context['results']['log'] = array();
-  }
-  if (!isset($context['results']['log'][$project])) {
-    $context['results']['log'][$project] = array();
-  }
-
-  if (!isset($context['results']['tasks'])) {
-    $context['results']['tasks'] = array();
-  }
-
-  // The batch API uses a session, and since all the arguments are serialized
-  // and unserialized between requests, although the FileTransfer object itself
-  // will be reconstructed, the connection pointer itself will be lost. However,
-  // the FileTransfer object will still have the connection variable, even
-  // though the connection itself is now gone. So, although it's ugly, we have
-  // to unset the connection variable at this point so that the FileTransfer
-  // object will re-initiate the actual connection.
-  unset($filetransfer->connection);
-
-  if (!empty($context['results']['log'][$project]['#abort'])) {
-    $context['finished'] = 1;
-    return;
-  }
-
-  $updater = new $updater_name($local_url);
-
-  try {
-    if ($updater->isInstalled()) {
-      // This is an update.
-      $tasks = $updater->update($filetransfer);
-    }
-    else {
-      $tasks = $updater->install($filetransfer);
-    }
-  }
-  catch (UpdaterException $e) {
-    _update_batch_create_message($context['results']['log'][$project], t('Error installing / updating'), FALSE);
-    _update_batch_create_message($context['results']['log'][$project], $e->getMessage(), FALSE);
-    $context['results']['log'][$project]['#abort'] = TRUE;
-    return;
-  }
-
-  _update_batch_create_message($context['results']['log'][$project], t('Installed %project_name successfully', array('%project_name' => $project)));
-  if (!empty($tasks)) {
-    $context['results']['tasks'] += $tasks;
-  }
-
-  // This particular operation is now complete, even though the batch might
-  // have other operations to perform.
-  $context['finished'] = 1;
-}
-
-/**
- * Batch callback: Performs actions when the authorized update batch is done.
- *
- * This processes the results and stashes them into SESSION such that
- * authorize.php will render a report. Also responsible for putting the site
- * back online and clearing the update status cache after a successful update.
- *
- * @param $success
- *   TRUE if the batch operation was successful; FALSE if there were errors.
- * @param $results
- *   An associative array of results from the batch operation.
- */
-function update_authorize_update_batch_finished($success, $results) {
-  foreach ($results['log'] as $project => $messages) {
-    if (!empty($messages['#abort'])) {
-      $success = FALSE;
-    }
-  }
-  $offline = variable_get('maintenance_mode', FALSE);
-  if ($success) {
-    // Now that the update completed, we need to clear the cache of available
-    // update data and recompute our status, so prevent show bogus results.
-    _update_authorize_clear_update_status();
-
-    // Take the site out of maintenance mode if it was previously that way.
-    if ($offline && isset($_SESSION['maintenance_mode']) && $_SESSION['maintenance_mode'] == FALSE) {
-      variable_set('maintenance_mode', FALSE);
-      $page_message = array(
-        'message' => t('Update was completed successfully. Your site has been taken out of maintenance mode.'),
-        'type' => 'status',
-      );
-    }
-    else {
-      $page_message = array(
-        'message' => t('Update was completed successfully.'),
-        'type' => 'status',
-      );
-    }
-  }
-  elseif (!$offline) {
-    $page_message = array(
-      'message' => t('Update failed! See the log below for more information.'),
-      'type' => 'error',
-    );
-  }
-  else {
-    $page_message = array(
-      'message' => t('Update failed! See the log below for more information. Your site is still in maintenance mode.'),
-      'type' => 'error',
-    );
-  }
-  // Since we're doing an update of existing code, always add a task for
-  // running update.php.
-  $results['tasks'][] = t('Your modules have been downloaded and updated.');
-  $results['tasks'][] = t('<a href="@update">Run database updates</a>', array('@update' => base_path() . 'update.php'));
-
-  // Unset the variable since it is no longer needed.
-  unset($_SESSION['maintenance_mode']);
-
-  // Set all these values into the SESSION so authorize.php can display them.
-  $_SESSION['authorize_results']['success'] = $success;
-  $_SESSION['authorize_results']['page_message'] = $page_message;
-  $_SESSION['authorize_results']['messages'] = $results['log'];
-  $_SESSION['authorize_results']['tasks'] = $results['tasks'];
-  $_SESSION['authorize_operation']['page_title'] = t('Update manager');
-}
-
-/**
- * Batch callback: Performs actions when the authorized install batch is done.
- *
- * This processes the results and stashes them into SESSION such that
- * authorize.php will render a report. Also responsible for putting the site
- * back online after a successful install if necessary.
- *
- * @param $success
- *   TRUE if the batch operation was a success; FALSE if there were errors.
- * @param $results
- *   An associative array of results from the batch operation.
- */
-function update_authorize_install_batch_finished($success, $results) {
-  foreach ($results['log'] as $project => $messages) {
-    if (!empty($messages['#abort'])) {
-      $success = FALSE;
-    }
-  }
-  $offline = variable_get('maintenance_mode', FALSE);
-  if ($success) {
-    // Take the site out of maintenance mode if it was previously that way.
-    if ($offline && isset($_SESSION['maintenance_mode']) && $_SESSION['maintenance_mode'] == FALSE) {
-      variable_set('maintenance_mode', FALSE);
-      $page_message = array(
-        'message' => t('Installation was completed successfully. Your site has been taken out of maintenance mode.'),
-        'type' => 'status',
-      );
-    }
-    else {
-      $page_message = array(
-        'message' => t('Installation was completed successfully.'),
-        'type' => 'status',
-      );
-    }
-  }
-  elseif (!$success && !$offline) {
-    $page_message = array(
-      'message' => t('Installation failed! See the log below for more information.'),
-      'type' => 'error',
-    );
-  }
-  else {
-    $page_message = array(
-      'message' => t('Installation failed! See the log below for more information. Your site is still in maintenance mode.'),
-      'type' => 'error',
-    );
-  }
-
-  // Unset the variable since it is no longer needed.
-  unset($_SESSION['maintenance_mode']);
-
-  // Set all these values into the SESSION so authorize.php can display them.
-  $_SESSION['authorize_results']['success'] = $success;
-  $_SESSION['authorize_results']['page_message'] = $page_message;
-  $_SESSION['authorize_results']['messages'] = $results['log'];
-  $_SESSION['authorize_results']['tasks'] = $results['tasks'];
-  $_SESSION['authorize_operation']['page_title'] = t('Update manager');
-}
-
-/**
- * Creates a structure of log messages.
- *
- * @param array $project_results
- *   An associative array of results from the batch operation.
- * @param string $message
- *   A string containing a log message.
- * @param bool $success
- *   (optional) TRUE if the operation the message is about was a success, FALSE
- *   if there were errors. Defaults to TRUE.
- */
-function _update_batch_create_message(&$project_results, $message, $success = TRUE) {
-  $project_results[] = array('message' => $message, 'success' => $success);
-}
-
-/**
- * Clears cached available update status data.
- *
- * Since this function is run at such a low bootstrap level, the Update Manager
- * module is not loaded. So, we can't just call _update_cache_clear(). However,
- * the database is bootstrapped, so we can do a query ourselves to clear out
- * what we want to clear.
- *
- * Note that we do not want to just truncate the table, since that would remove
- * items related to currently pending fetch attempts.
- *
- * @see update_authorize_update_batch_finished()
- * @see _update_cache_clear()
- */
-function _update_authorize_clear_update_status() {
-  $query = db_delete('cache_update');
-  $query->condition(
-    db_or()
-    ->condition('cid', 'update_project_%', 'LIKE')
-    ->condition('cid', 'available_releases::%', 'LIKE')
-  );
-  $query->execute();
-}
diff --git a/modules/update/update.compare.inc b/modules/update/update.compare.inc
deleted file mode 100644
index 6e0c5fe..0000000
--- a/modules/update/update.compare.inc
+++ /dev/null
@@ -1,831 +0,0 @@
-<?php
-
-/**
- * @file
- * Code required only when comparing available updates to existing data.
- */
-
-/**
- * Fetches an array of installed and enabled projects.
- *
- * This is only responsible for generating an array of projects (taking into
- * account projects that include more than one module or theme). Other
- * information like the specific version and install type (official release,
- * dev snapshot, etc) is handled later in update_process_project_info() since
- * that logic is only required when preparing the status report, not for
- * fetching the available release data.
- *
- * This array is fairly expensive to construct, since it involves a lot of disk
- * I/O, so we cache the results into the {cache_update} table using the
- * 'update_project_projects' cache ID. However, since this is not the data about
- * available updates fetched from the network, it is acceptable to invalidate it
- * somewhat quickly. If we keep this data for very long, site administrators are
- * more likely to see incorrect results if they upgrade to a newer version of a
- * module or theme but do not visit certain pages that automatically clear this
- * cache.
- *
- * @return
- *   An associative array of currently enabled projects keyed by the
- *   machine-readable project short name. Each project contains:
- *   - name: The machine-readable project short name.
- *   - info: An array with values from the main .info file for this project.
- *     - name: The human-readable name of the project.
- *     - package: The package that the project is grouped under.
- *     - version: The version of the project.
- *     - project: The Drupal.org project name.
- *     - datestamp: The date stamp of the project's main .info file.
- *     - _info_file_ctime: The maximum file change time for all of the .info
- *       files included in this project.
- *   - datestamp: The date stamp when the project was released, if known.
- *   - includes: An associative array containing all projects included with this
- *     project, keyed by the machine-readable short name with the human-readable
- *     name as value.
- *   - project_type: The type of project. Allowed values are 'module' and
- *     'theme'.
- *   - project_status: This indicates if the project is enabled and will always
- *     be TRUE, as the function only returns enabled projects.
- *   - sub_themes: If the project is a theme it contains an associative array of
- *     all sub-themes.
- *   - base_themes: If the project is a theme it contains an associative array
- *     of all base-themes.
- *
- * @see update_process_project_info()
- * @see update_calculate_project_data()
- * @see update_project_cache()
- */
-function update_get_projects() {
-  $projects = &drupal_static(__FUNCTION__, array());
-  if (empty($projects)) {
-    // Retrieve the projects from cache, if present.
-    $projects = update_project_cache('update_project_projects');
-    if (empty($projects)) {
-      // Still empty, so we have to rebuild the cache.
-      $module_data = system_rebuild_module_data();
-      $theme_data = system_rebuild_theme_data();
-      _update_process_info_list($projects, $module_data, 'module', TRUE);
-      _update_process_info_list($projects, $theme_data, 'theme', TRUE);
-      if (variable_get('update_check_disabled', FALSE)) {
-        _update_process_info_list($projects, $module_data, 'module', FALSE);
-        _update_process_info_list($projects, $theme_data, 'theme', FALSE);
-      }
-      // Allow other modules to alter projects before fetching and comparing.
-      drupal_alter('update_projects', $projects);
-      // Cache the site's project data for at most 1 hour.
-      _update_cache_set('update_project_projects', $projects, REQUEST_TIME + 3600);
-    }
-  }
-  return $projects;
-}
-
-/**
- * Populates an array of project data.
- *
- * This iterates over a list of the installed modules or themes and groups them
- * by project and status. A few parts of this function assume that enabled
- * modules and themes are always processed first, and if disabled modules or
- * themes are being processed (there is a setting to control if disabled code
- * should be included or not in the 'Available updates' report), those are only
- * processed after $projects has been populated with information about the
- * enabled code. Modules and themes set as hidden are always ignored. This
- * function also records the latest change time on the .info files for each
- * module or theme, which is important data which is used when deciding if the
- * cached available update data should be invalidated.
- *
- * @param $projects
- *   Reference to the array of project data of what's installed on this site.
- * @param $list
- *   Array of data to process to add the relevant info to the $projects array.
- * @param $project_type
- *   The kind of data in the list. Can be 'module' or 'theme'.
- * @param $status
- *   Boolean that controls what status (enabled or disabled) to process out of
- *   the $list and add to the $projects array.
- *
- * @see update_get_projects()
- */
-function _update_process_info_list(&$projects, $list, $project_type, $status) {
-  foreach ($list as $file) {
-    // A disabled base theme of an enabled sub-theme still has all of its code
-    // run by the sub-theme, so we include it in our "enabled" projects list.
-    if ($status && !$file->status && !empty($file->sub_themes)) {
-      foreach ($file->sub_themes as $key => $name) {
-        // Build a list of enabled sub-themes.
-        if ($list[$key]->status) {
-          $file->enabled_sub_themes[$key] = $name;
-        }
-      }
-      // If there are no enabled subthemes, we should ignore this base theme
-      // for the enabled case. If the site is trying to display disabled
-      // themes, we'll catch it then.
-      if (empty($file->enabled_sub_themes)) {
-        continue;
-      }
-    }
-    // Otherwise, just add projects of the proper status to our list.
-    elseif ($file->status != $status) {
-      continue;
-    }
-
-    // Skip if the .info file is broken.
-    if (empty($file->info)) {
-      continue;
-    }
-
-    // Skip if it's a hidden module or theme.
-    if (!empty($file->info['hidden'])) {
-      continue;
-    }
-
-    // If the .info doesn't define the 'project', try to figure it out.
-    if (!isset($file->info['project'])) {
-      $file->info['project'] = update_get_project_name($file);
-    }
-
-    // If we still don't know the 'project', give up.
-    if (empty($file->info['project'])) {
-      continue;
-    }
-
-    // If we don't already know it, grab the change time on the .info file
-    // itself. Note: we need to use the ctime, not the mtime (modification
-    // time) since many (all?) tar implementations will go out of their way to
-    // set the mtime on the files it creates to the timestamps recorded in the
-    // tarball. We want to see the last time the file was changed on disk,
-    // which is left alone by tar and correctly set to the time the .info file
-    // was unpacked.
-    if (!isset($file->info['_info_file_ctime'])) {
-      $info_filename = dirname($file->uri) . '/' . $file->name . '.info';
-      $file->info['_info_file_ctime'] = filectime($info_filename);
-    }
-
-    if (!isset($file->info['datestamp'])) {
-      $file->info['datestamp'] = 0;
-    }
-
-    $project_name = $file->info['project'];
-
-    // Figure out what project type we're going to use to display this module
-    // or theme. If the project name is 'drupal', we don't want it to show up
-    // under the usual "Modules" section, we put it at a special "Drupal Core"
-    // section at the top of the report.
-    if ($project_name == 'drupal') {
-      $project_display_type = 'core';
-    }
-    else {
-      $project_display_type = $project_type;
-    }
-    if (empty($status) && empty($file->enabled_sub_themes)) {
-      // If we're processing disabled modules or themes, append a suffix.
-      // However, we don't do this to a a base theme with enabled
-      // subthemes, since we treat that case as if it is enabled.
-      $project_display_type .= '-disabled';
-    }
-    // Add a list of sub-themes that "depend on" the project and a list of base
-    // themes that are "required by" the project.
-    if ($project_name == 'drupal') {
-      // Drupal core is always required, so this extra info would be noise.
-      $sub_themes = array();
-      $base_themes = array();
-    }
-    else {
-      // Add list of enabled sub-themes.
-      $sub_themes = !empty($file->enabled_sub_themes) ? $file->enabled_sub_themes : array();
-      // Add list of base themes.
-      $base_themes = !empty($file->base_themes) ? $file->base_themes : array();
-    }
-    if (!isset($projects[$project_name])) {
-      // Only process this if we haven't done this project, since a single
-      // project can have multiple modules or themes.
-      $projects[$project_name] = array(
-        'name' => $project_name,
-        // Only save attributes from the .info file we care about so we do not
-        // bloat our RAM usage needlessly.
-        'info' => update_filter_project_info($file->info),
-        'datestamp' => $file->info['datestamp'],
-        'includes' => array($file->name => $file->info['name']),
-        'project_type' => $project_display_type,
-        'project_status' => $status,
-        'sub_themes' => $sub_themes,
-        'base_themes' => $base_themes,
-      );
-    }
-    elseif ($projects[$project_name]['project_type'] == $project_display_type) {
-      // Only add the file we're processing to the 'includes' array for this
-      // project if it is of the same type and status (which is encoded in the
-      // $project_display_type). This prevents listing all the disabled
-      // modules included with an enabled project if we happen to be checking
-      // for disabled modules, too.
-      $projects[$project_name]['includes'][$file->name] = $file->info['name'];
-      $projects[$project_name]['info']['_info_file_ctime'] = max($projects[$project_name]['info']['_info_file_ctime'], $file->info['_info_file_ctime']);
-      $projects[$project_name]['datestamp'] = max($projects[$project_name]['datestamp'], $file->info['datestamp']);
-      if (!empty($sub_themes)) {
-        $projects[$project_name]['sub_themes'] += $sub_themes;
-      }
-      if (!empty($base_themes)) {
-        $projects[$project_name]['base_themes'] += $base_themes;
-      }
-    }
-    elseif (empty($status)) {
-      // If we have a project_name that matches, but the project_display_type
-      // does not, it means we're processing a disabled module or theme that
-      // belongs to a project that has some enabled code. In this case, we add
-      // the disabled thing into a separate array for separate display.
-      $projects[$project_name]['disabled'][$file->name] = $file->info['name'];
-    }
-  }
-}
-
-/**
- * Determines what project a given file object belongs to.
- *
- * @param $file
- *   A file object as returned by system_get_files_database().
- *
- * @return
- *   The canonical project short name.
- *
- * @see system_get_files_database()
- */
-function update_get_project_name($file) {
-  $project_name = '';
-  if (isset($file->info['project'])) {
-    $project_name = $file->info['project'];
-  }
-  elseif (isset($file->info['package']) && (strpos($file->info['package'], 'Core') === 0)) {
-    $project_name = 'drupal';
-  }
-  return $project_name;
-}
-
-/**
- * Determines version and type information for currently installed projects.
- *
- * Processes the list of projects on the system to figure out the currently
- * installed versions, and other information that is required before we can
- * compare against the available releases to produce the status report.
- *
- * @param $projects
- *   Array of project information from update_get_projects().
- */
-function update_process_project_info(&$projects) {
-  foreach ($projects as $key => $project) {
-    // Assume an official release until we see otherwise.
-    $install_type = 'official';
-
-    $info = $project['info'];
-
-    if (isset($info['version'])) {
-      // Check for development snapshots
-      if (preg_match('@(dev|HEAD)@', $info['version'])) {
-        $install_type = 'dev';
-      }
-
-      // Figure out what the currently installed major version is. We need
-      // to handle both contribution (e.g. "5.x-1.3", major = 1) and core
-      // (e.g. "5.1", major = 5) version strings.
-      $matches = array();
-      if (preg_match('/^(\d+\.x-)?(\d+)\..*$/', $info['version'], $matches)) {
-        $info['major'] = $matches[2];
-      }
-      elseif (!isset($info['major'])) {
-        // This would only happen for version strings that don't follow the
-        // drupal.org convention. We let contribs define "major" in their
-        // .info in this case, and only if that's missing would we hit this.
-        $info['major'] = -1;
-      }
-    }
-    else {
-      // No version info available at all.
-      $install_type = 'unknown';
-      $info['version'] = t('Unknown');
-      $info['major'] = -1;
-    }
-
-    // Finally, save the results we care about into the $projects array.
-    $projects[$key]['existing_version'] = $info['version'];
-    $projects[$key]['existing_major'] = $info['major'];
-    $projects[$key]['install_type'] = $install_type;
-  }
-}
-
-/**
- * Calculates the current update status of all projects on the site.
- *
- * The results of this function are expensive to compute, especially on sites
- * with lots of modules or themes, since it involves a lot of comparisons and
- * other operations. Therefore, we cache the results into the {cache_update}
- * table using the 'update_project_data' cache ID. However, since this is not
- * the data about available updates fetched from the network, it is ok to
- * invalidate it somewhat quickly. If we keep this data for very long, site
- * administrators are more likely to see incorrect results if they upgrade to a
- * newer version of a module or theme but do not visit certain pages that
- * automatically clear this cache.
- *
- * @param array $available
- *   Data about available project releases.
- *
- * @return
- *   An array of installed projects with current update status information.
- *
- * @see update_get_available()
- * @see update_get_projects()
- * @see update_process_project_info()
- * @see update_project_cache()
- */
-function update_calculate_project_data($available) {
-  // Retrieve the projects from cache, if present.
-  $projects = update_project_cache('update_project_data');
-  // If $projects is empty, then the cache must be rebuilt.
-  // Otherwise, return the cached data and skip the rest of the function.
-  if (!empty($projects)) {
-    return $projects;
-  }
-  $projects = update_get_projects();
-  update_process_project_info($projects);
-  foreach ($projects as $project => $project_info) {
-    if (isset($available[$project])) {
-      update_calculate_project_update_status($project, $projects[$project], $available[$project]);
-    }
-    else {
-      $projects[$project]['status'] = UPDATE_UNKNOWN;
-      $projects[$project]['reason'] = t('No available releases found');
-    }
-  }
-  // Give other modules a chance to alter the status (for example, to allow a
-  // contrib module to provide fine-grained settings to ignore specific
-  // projects or releases).
-  drupal_alter('update_status', $projects);
-
-  // Cache the site's update status for at most 1 hour.
-  _update_cache_set('update_project_data', $projects, REQUEST_TIME + 3600);
-  return $projects;
-}
-
-/**
- * Calculates the current update status of a specific project.
- *
- * This function is the heart of the update status feature. For each project it
- * is invoked with, it first checks if the project has been flagged with a
- * special status like "unsupported" or "insecure", or if the project node
- * itself has been unpublished. In any of those cases, the project is marked
- * with an error and the next project is considered.
- *
- * If the project itself is valid, the function decides what major release
- * series to consider. The project defines what the currently supported major
- * versions are for each version of core, so the first step is to make sure the
- * current version is still supported. If so, that's the target version. If the
- * current version is unsupported, the project maintainer's recommended major
- * version is used. There's also a check to make sure that this function never
- * recommends an earlier release than the currently installed major version.
- *
- * Given a target major version, the available releases are scanned looking for
- * the specific release to recommend (avoiding beta releases and development
- * snapshots if possible). For the target major version, the highest patch level
- * is found. If there is a release at that patch level with no extra ("beta",
- * etc.), then the release at that patch level with the most recent release date
- * is recommended. If every release at that patch level has extra (only betas),
- * then the latest release from the previous patch level is recommended. For
- * example:
- *
- * - 1.6-bugfix <-- recommended version because 1.6 already exists.
- * - 1.6
- *
- * or
- *
- * - 1.6-beta
- * - 1.5 <-- recommended version because no 1.6 exists.
- * - 1.4
- *
- * Also, the latest release from the same major version is looked for, even beta
- * releases, to display to the user as the "Latest version" option.
- * Additionally, the latest official release from any higher major versions that
- * have been released is searched for to provide a set of "Also available"
- * options.
- *
- * Finally, and most importantly, the release history continues to be scanned
- * until the currently installed release is reached, searching for anything
- * marked as a security update. If any security updates have been found between
- * the recommended release and the installed version, all of the releases that
- * included a security fix are recorded so that the site administrator can be
- * warned their site is insecure, and links pointing to the release notes for
- * each security update can be included (which, in turn, will link to the
- * official security announcements for each vulnerability).
- *
- * This function relies on the fact that the .xml release history data comes
- * sorted based on major version and patch level, then finally by release date
- * if there are multiple releases such as betas from the same major.patch
- * version (e.g., 5.x-1.5-beta1, 5.x-1.5-beta2, and 5.x-1.5). Development
- * snapshots for a given major version are always listed last.
- *
- * @param $project
- *   An array containing information about a specific project.
- * @param $project_data
- *   An array containing information about a specific project.
- * @param $available
- *   Data about available project releases of a specific project.
- */
-function update_calculate_project_update_status($project, &$project_data, $available) {
-  foreach (array('title', 'link') as $attribute) {
-    if (!isset($project_data[$attribute]) && isset($available[$attribute])) {
-      $project_data[$attribute] = $available[$attribute];
-    }
-  }
-
-  // If the project status is marked as something bad, there's nothing else
-  // to consider.
-  if (isset($available['project_status'])) {
-    switch ($available['project_status']) {
-      case 'insecure':
-        $project_data['status'] = UPDATE_NOT_SECURE;
-        if (empty($project_data['extra'])) {
-          $project_data['extra'] = array();
-        }
-        $project_data['extra'][] = array(
-          'class' => array('project-not-secure'),
-          'label' => t('Project not secure'),
-          'data' => t('This project has been labeled insecure by the Drupal security team, and is no longer available for download. Immediately disabling everything included by this project is strongly recommended!'),
-        );
-        break;
-      case 'unpublished':
-      case 'revoked':
-        $project_data['status'] = UPDATE_REVOKED;
-        if (empty($project_data['extra'])) {
-          $project_data['extra'] = array();
-        }
-        $project_data['extra'][] = array(
-          'class' => array('project-revoked'),
-          'label' => t('Project revoked'),
-          'data' => t('This project has been revoked, and is no longer available for download. Disabling everything included by this project is strongly recommended!'),
-        );
-        break;
-      case 'unsupported':
-        $project_data['status'] = UPDATE_NOT_SUPPORTED;
-        if (empty($project_data['extra'])) {
-          $project_data['extra'] = array();
-        }
-        $project_data['extra'][] = array(
-          'class' => array('project-not-supported'),
-          'label' => t('Project not supported'),
-          'data' => t('This project is no longer supported, and is no longer available for download. Disabling everything included by this project is strongly recommended!'),
-        );
-        break;
-      case 'not-fetched':
-        $project_data['status'] = UPDATE_NOT_FETCHED;
-        $project_data['reason'] = t('Failed to get available update data.');
-        break;
-
-      default:
-        // Assume anything else (e.g. 'published') is valid and we should
-        // perform the rest of the logic in this function.
-        break;
-    }
-  }
-
-  if (!empty($project_data['status'])) {
-    // We already know the status for this project, so there's nothing else to
-    // compute. Record the project status into $project_data and we're done.
-    $project_data['project_status'] = $available['project_status'];
-    return;
-  }
-
-  // Figure out the target major version.
-  $existing_major = $project_data['existing_major'];
-  $supported_majors = array();
-  if (isset($available['supported_majors'])) {
-    $supported_majors = explode(',', $available['supported_majors']);
-  }
-  elseif (isset($available['default_major'])) {
-    // Older release history XML file without supported or recommended.
-    $supported_majors[] = $available['default_major'];
-  }
-
-  if (in_array($existing_major, $supported_majors)) {
-    // Still supported, stay at the current major version.
-    $target_major = $existing_major;
-  }
-  elseif (isset($available['recommended_major'])) {
-    // Since 'recommended_major' is defined, we know this is the new XML
-    // format. Therefore, we know the current release is unsupported since
-    // its major version was not in the 'supported_majors' list. We should
-    // find the best release from the recommended major version.
-    $target_major = $available['recommended_major'];
-    $project_data['status'] = UPDATE_NOT_SUPPORTED;
-  }
-  elseif (isset($available['default_major'])) {
-    // Older release history XML file without recommended, so recommend
-    // the currently defined "default_major" version.
-    $target_major = $available['default_major'];
-  }
-  else {
-    // Malformed XML file? Stick with the current version.
-    $target_major = $existing_major;
-  }
-
-  // Make sure we never tell the admin to downgrade. If we recommended an
-  // earlier version than the one they're running, they'd face an
-  // impossible data migration problem, since Drupal never supports a DB
-  // downgrade path. In the unfortunate case that what they're running is
-  // unsupported, and there's nothing newer for them to upgrade to, we
-  // can't print out a "Recommended version", but just have to tell them
-  // what they have is unsupported and let them figure it out.
-  $target_major = max($existing_major, $target_major);
-
-  $release_patch_changed = '';
-  $patch = '';
-
-  // If the project is marked as UPDATE_FETCH_PENDING, it means that the
-  // data we currently have (if any) is stale, and we've got a task queued
-  // up to (re)fetch the data. In that case, we mark it as such, merge in
-  // whatever data we have (e.g. project title and link), and move on.
-  if (!empty($available['fetch_status']) && $available['fetch_status'] == UPDATE_FETCH_PENDING) {
-    $project_data['status'] = UPDATE_FETCH_PENDING;
-    $project_data['reason'] = t('No available update data');
-    $project_data['fetch_status'] = $available['fetch_status'];
-    return;
-  }
-
-  // Defend ourselves from XML history files that contain no releases.
-  if (empty($available['releases'])) {
-    $project_data['status'] = UPDATE_UNKNOWN;
-    $project_data['reason'] = t('No available releases found');
-    return;
-  }
-  foreach ($available['releases'] as $version => $release) {
-    // First, if this is the existing release, check a few conditions.
-    if ($project_data['existing_version'] === $version) {
-      if (isset($release['terms']['Release type']) &&
-          in_array('Insecure', $release['terms']['Release type'])) {
-        $project_data['status'] = UPDATE_NOT_SECURE;
-      }
-      elseif ($release['status'] == 'unpublished') {
-        $project_data['status'] = UPDATE_REVOKED;
-        if (empty($project_data['extra'])) {
-          $project_data['extra'] = array();
-        }
-        $project_data['extra'][] = array(
-          'class' => array('release-revoked'),
-          'label' => t('Release revoked'),
-          'data' => t('Your currently installed release has been revoked, and is no longer available for download. Disabling everything included in this release or upgrading is strongly recommended!'),
-        );
-      }
-      elseif (isset($release['terms']['Release type']) &&
-              in_array('Unsupported', $release['terms']['Release type'])) {
-        $project_data['status'] = UPDATE_NOT_SUPPORTED;
-        if (empty($project_data['extra'])) {
-          $project_data['extra'] = array();
-        }
-        $project_data['extra'][] = array(
-          'class' => array('release-not-supported'),
-          'label' => t('Release not supported'),
-          'data' => t('Your currently installed release is now unsupported, and is no longer available for download. Disabling everything included in this release or upgrading is strongly recommended!'),
-        );
-      }
-    }
-
-    // Otherwise, ignore unpublished, insecure, or unsupported releases.
-    if ($release['status'] == 'unpublished' ||
-        (isset($release['terms']['Release type']) &&
-         (in_array('Insecure', $release['terms']['Release type']) ||
-          in_array('Unsupported', $release['terms']['Release type'])))) {
-      continue;
-    }
-
-    // See if this is a higher major version than our target and yet still
-    // supported. If so, record it as an "Also available" release.
-    // Note: some projects have a HEAD release from CVS days, which could
-    // be one of those being compared. They would not have version_major
-    // set, so we must call isset first.
-    if (isset($release['version_major']) && $release['version_major'] > $target_major) {
-      if (in_array($release['version_major'], $supported_majors)) {
-        if (!isset($project_data['also'])) {
-          $project_data['also'] = array();
-        }
-        if (!isset($project_data['also'][$release['version_major']])) {
-          $project_data['also'][$release['version_major']] = $version;
-          $project_data['releases'][$version] = $release;
-        }
-      }
-      // Otherwise, this release can't matter to us, since it's neither
-      // from the release series we're currently using nor the recommended
-      // release. We don't even care about security updates for this
-      // branch, since if a project maintainer puts out a security release
-      // at a higher major version and not at the lower major version,
-      // they must remove the lower version from the supported major
-      // versions at the same time, in which case we won't hit this code.
-      continue;
-    }
-
-    // Look for the 'latest version' if we haven't found it yet. Latest is
-    // defined as the most recent version for the target major version.
-    if (!isset($project_data['latest_version'])
-        && $release['version_major'] == $target_major) {
-      $project_data['latest_version'] = $version;
-      $project_data['releases'][$version] = $release;
-    }
-
-    // Look for the development snapshot release for this branch.
-    if (!isset($project_data['dev_version'])
-        && $release['version_major'] == $target_major
-        && isset($release['version_extra'])
-        && $release['version_extra'] == 'dev') {
-      $project_data['dev_version'] = $version;
-      $project_data['releases'][$version] = $release;
-    }
-
-    // Look for the 'recommended' version if we haven't found it yet (see
-    // phpdoc at the top of this function for the definition).
-    if (!isset($project_data['recommended'])
-        && $release['version_major'] == $target_major
-        && isset($release['version_patch'])) {
-      if ($patch != $release['version_patch']) {
-        $patch = $release['version_patch'];
-        $release_patch_changed = $release;
-      }
-      if (empty($release['version_extra']) && $patch == $release['version_patch']) {
-        $project_data['recommended'] = $release_patch_changed['version'];
-        $project_data['releases'][$release_patch_changed['version']] = $release_patch_changed;
-      }
-    }
-
-    // Stop searching once we hit the currently installed version.
-    if ($project_data['existing_version'] === $version) {
-      break;
-    }
-
-    // If we're running a dev snapshot and have a timestamp, stop
-    // searching for security updates once we hit an official release
-    // older than what we've got. Allow 100 seconds of leeway to handle
-    // differences between the datestamp in the .info file and the
-    // timestamp of the tarball itself (which are usually off by 1 or 2
-    // seconds) so that we don't flag that as a new release.
-    if ($project_data['install_type'] == 'dev') {
-      if (empty($project_data['datestamp'])) {
-        // We don't have current timestamp info, so we can't know.
-        continue;
-      }
-      elseif (isset($release['date']) && ($project_data['datestamp'] + 100 > $release['date'])) {
-        // We're newer than this, so we can skip it.
-        continue;
-      }
-    }
-
-    // See if this release is a security update.
-    if (isset($release['terms']['Release type'])
-        && in_array('Security update', $release['terms']['Release type'])) {
-      $project_data['security updates'][] = $release;
-    }
-  }
-
-  // If we were unable to find a recommended version, then make the latest
-  // version the recommended version if possible.
-  if (!isset($project_data['recommended']) && isset($project_data['latest_version'])) {
-    $project_data['recommended'] = $project_data['latest_version'];
-  }
-
-  //
-  // Check to see if we need an update or not.
-  //
-
-  if (!empty($project_data['security updates'])) {
-    // If we found security updates, that always trumps any other status.
-    $project_data['status'] = UPDATE_NOT_SECURE;
-  }
-
-  if (isset($project_data['status'])) {
-    // If we already know the status, we're done.
-    return;
-  }
-
-  // If we don't know what to recommend, there's nothing we can report.
-  // Bail out early.
-  if (!isset($project_data['recommended'])) {
-    $project_data['status'] = UPDATE_UNKNOWN;
-    $project_data['reason'] = t('No available releases found');
-    return;
-  }
-
-  // If we're running a dev snapshot, compare the date of the dev snapshot
-  // with the latest official version, and record the absolute latest in
-  // 'latest_dev' so we can correctly decide if there's a newer release
-  // than our current snapshot.
-  if ($project_data['install_type'] == 'dev') {
-    if (isset($project_data['dev_version']) && $available['releases'][$project_data['dev_version']]['date'] > $available['releases'][$project_data['latest_version']]['date']) {
-      $project_data['latest_dev'] = $project_data['dev_version'];
-    }
-    else {
-      $project_data['latest_dev'] = $project_data['latest_version'];
-    }
-  }
-
-  // Figure out the status, based on what we've seen and the install type.
-  switch ($project_data['install_type']) {
-    case 'official':
-      if ($project_data['existing_version'] === $project_data['recommended'] || $project_data['existing_version'] === $project_data['latest_version']) {
-        $project_data['status'] = UPDATE_CURRENT;
-      }
-      else {
-        $project_data['status'] = UPDATE_NOT_CURRENT;
-      }
-      break;
-
-    case 'dev':
-      $latest = $available['releases'][$project_data['latest_dev']];
-      if (empty($project_data['datestamp'])) {
-        $project_data['status'] = UPDATE_NOT_CHECKED;
-        $project_data['reason'] = t('Unknown release date');
-      }
-      elseif (($project_data['datestamp'] + 100 > $latest['date'])) {
-        $project_data['status'] = UPDATE_CURRENT;
-      }
-      else {
-        $project_data['status'] = UPDATE_NOT_CURRENT;
-      }
-      break;
-
-    default:
-      $project_data['status'] = UPDATE_UNKNOWN;
-      $project_data['reason'] = t('Invalid info');
-  }
-}
-
-/**
- * Retrieves data from {cache_update} or empties the cache when necessary.
- *
- * Two very expensive arrays computed by this module are the list of all
- * installed modules and themes (and .info data, project associations, etc), and
- * the current status of the site relative to the currently available releases.
- * These two arrays are cached in the {cache_update} table and used whenever
- * possible. The cache is cleared whenever the administrator visits the status
- * report, available updates report, or the module or theme administration
- * pages, since we should always recompute the most current values on any of
- * those pages.
- *
- * Note: while both of these arrays are expensive to compute (in terms of disk
- * I/O and some fairly heavy CPU processing), neither of these is the actual
- * data about available updates that we have to fetch over the network from
- * updates.drupal.org. That information is stored with the
- * 'update_available_releases' cache ID -- it needs to persist longer than 1
- * hour and never get invalidated just by visiting a page on the site.
- *
- * @param $cid
- *   The cache ID of data to return from the cache. Valid options are
- *   'update_project_data' and 'update_project_projects'.
- *
- * @return
- *   The cached value of the $projects array generated by
- *   update_calculate_project_data() or update_get_projects(), or an empty array
- *   when the cache is cleared.
- */
-function update_project_cache($cid) {
-  $projects = array();
-
-  // On certain paths, we should clear the cache and recompute the projects for
-  // update status of the site to avoid presenting stale information.
-  $q = $_GET['q'];
-  $paths = array(
-    'admin/modules',
-    'admin/modules/update',
-    'admin/appearance',
-    'admin/appearance/update',
-    'admin/reports',
-    'admin/reports/updates',
-    'admin/reports/updates/update',
-    'admin/reports/status',
-    'admin/reports/updates/check',
-  );
-  if (in_array($q, $paths)) {
-    _update_cache_clear($cid);
-  }
-  else {
-    $cache = _update_cache_get($cid);
-    if (!empty($cache->data) && $cache->expire > REQUEST_TIME) {
-      $projects = $cache->data;
-    }
-  }
-  return $projects;
-}
-
-/**
- * Filters the project .info data to only save attributes we need.
- *
- * @param array $info
- *   Array of .info file data as returned by drupal_parse_info_file().
- *
- * @return
- *   Array of .info file data we need for the update manager.
- *
- * @see _update_process_info_list()
- */
-function update_filter_project_info($info) {
-  $whitelist = array(
-    '_info_file_ctime',
-    'datestamp',
-    'major',
-    'name',
-    'package',
-    'project',
-    'project status url',
-    'version',
-  );
-  return array_intersect_key($info, drupal_map_assoc($whitelist));
-}
diff --git a/modules/update/update.css b/modules/update/update.css
deleted file mode 100644
index ba45fe6..0000000
--- a/modules/update/update.css
+++ /dev/null
@@ -1,135 +0,0 @@
-/**
- * @file
- * Styles used by the Update Manager module.
- */
-
-.update .project {
-  font-weight: bold;
-  font-size: 110%;
-  padding-left: .25em; /* LTR */
-  height: 22px;
-}
-
-.update .version-status {
-  float: right; /* LTR */
-  padding-right: 10px; /* LTR */
-  font-size: 110%;
-  height: 20px;
-}
-
-.update .version-status .icon {
-  padding-left: .5em; /* LTR */
-}
-
-.update .version-date {
-  white-space: nowrap;
-}
-
-.update .info {
-  margin: 0;
-  padding: 1em 1em .25em 1em;
-}
-
-.update tr.even,
-.update tr.odd {
-  border: none;
-}
-
-.update tr td {
-  border-top: 1px solid #ccc;
-  border-bottom: 1px solid #ccc;
-}
-
-.update tr.error {
-  background: #fcc;
-}
-
-.update tr.error .version-recommended {
-  background: #fdd;
-}
-
-.update tr.ok {
-  background: #dfd;
-}
-
-.update tr.warning {
-  background: #ffd;
-}
-
-.update tr.warning .version-recommended {
-  background: #ffe;
-}
-
-.current-version,
-.new-version {
-  direction: ltr; /* Note: version numbers should always be LTR. */
-}
-
-.update tr.unknown {
-  background: #ddd;
-}
-
-table.update,
-.update table.version {
-  width: 100%;
-  margin-top: .5em;
-  border: none;
-}
-
-.update table.version tbody {
-  border: none;
-}
-
-.update table.version tr,
-.update table.version td {
-  line-height: .9em;
-  padding: 0;
-  margin: 0;
-  border: none;
-  background: none;
-}
-
-.update table.version .version-title {
-  padding-left: 1em; /* LTR */
-  width: 14em;
-}
-
-.update table.version .version-details {
-  padding-right: .5em; /* LTR */
-}
-
-.update table.version .version-links {
-  text-align: right; /* LTR */
-  padding-right: 1em; /* LTR */
-}
-
-.update table.version-security .version-title {
-  color: #970F00;
-}
-
-.update table.version-recommended-strong .version-title {
-  font-weight: bold;
-}
-
-.update .security-error {
-  font-weight: bold;
-  color: #970F00;
-}
-
-.update .check-manually {
-  padding-left: 1em; /* LTR */
-}
-
-.update-major-version-warning {
-  color: #ff0000;
-}
-
-table tbody tr.update-security,
-table tbody tr.update-unsupported {
-  background: #fcc;
-}
-
-th.update-project-name {
-  width: 50%;
-}
-
diff --git a/modules/update/update.info b/modules/update/update.info
deleted file mode 100644
index 250cae1..0000000
--- a/modules/update/update.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Update manager
-description = Checks for available updates, and can securely install or update modules and themes via a web interface.
-version = VERSION
-package = Core
-core = 7.x
-files[] = update.test
-configure = admin/reports/updates/settings
diff --git a/modules/update/update.install b/modules/update/update.install
deleted file mode 100644
index baf4953..0000000
--- a/modules/update/update.install
+++ /dev/null
@@ -1,190 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update, and uninstall functions for the Update Manager module.
- */
-
-/**
- * Implements hook_requirements().
- *
- * @return
- *   An array describing the status of the site regarding available updates. If
- *   there is no update data, only one record will be returned, indicating that
- *   the status of core can't be determined. If data is available, there will be
- *   two records: one for core, and another for all of contrib (assuming there
- *   are any contributed modules or themes enabled on the site). In addition to
- *   the fields expected by hook_requirements ('value', 'severity', and
- *   optionally 'description'), this array will contain a 'reason' attribute,
- *   which is an integer constant to indicate why the given status is being
- *   returned (UPDATE_NOT_SECURE, UPDATE_NOT_CURRENT, or UPDATE_UNKNOWN). This
- *   is used for generating the appropriate e-mail notification messages during
- *   update_cron(), and might be useful for other modules that invoke
- *   update_requirements() to find out if the site is up to date or not.
- *
- * @see _update_message_text()
- * @see _update_cron_notify()
- */
-function update_requirements($phase) {
-  $requirements = array();
-  if ($phase == 'runtime') {
-    if ($available = update_get_available(FALSE)) {
-      module_load_include('inc', 'update', 'update.compare');
-      $data = update_calculate_project_data($available);
-      // First, populate the requirements for core:
-      $requirements['update_core'] = _update_requirement_check($data['drupal'], 'core');
-      // We don't want to check drupal a second time.
-      unset($data['drupal']);
-      if (!empty($data)) {
-        // Now, sort our $data array based on each project's status. The
-        // status constants are numbered in the right order of precedence, so
-        // we just need to make sure the projects are sorted in ascending
-        // order of status, and we can look at the first project we find.
-        uasort($data, '_update_project_status_sort');
-        $first_project = reset($data);
-        $requirements['update_contrib'] = _update_requirement_check($first_project, 'contrib');
-      }
-    }
-    else {
-      $requirements['update_core']['title'] = t('Drupal core update status');
-      $requirements['update_core']['value'] = t('No update data available');
-      $requirements['update_core']['severity'] = REQUIREMENT_WARNING;
-      $requirements['update_core']['reason'] = UPDATE_UNKNOWN;
-      $requirements['update_core']['description'] = _update_no_data();
-    }
-  }
-  return $requirements;
-}
-
-/**
- * Implements hook_schema().
- */
-function update_schema() {
-  $schema['cache_update'] = drupal_get_schema_unprocessed('system', 'cache');
-  $schema['cache_update']['description'] = 'Cache table for the Update module to store information about available releases, fetched from central server.';
-  return $schema;
-}
-
-/**
- * Implements hook_install().
- */
-function update_install() {
-  $queue = DrupalQueue::get('update_fetch_tasks', TRUE);
-  $queue->createQueue();
-}
-
-/**
- * Implements hook_uninstall().
- */
-function update_uninstall() {
-  // Clear any variables that might be in use
-  $variables = array(
-    'update_check_frequency',
-    'update_fetch_url',
-    'update_last_check',
-    'update_last_email_notification',
-    'update_notification_threshold',
-    'update_notify_emails',
-    'update_max_fetch_attempts',
-    'update_max_fetch_time',
-  );
-  foreach ($variables as $variable) {
-    variable_del($variable);
-  }
-  $queue = DrupalQueue::get('update_fetch_tasks');
-  $queue->deleteQueue();
-}
-
-/**
- * Fills in the requirements array.
- *
- * This is shared for both core and contrib to generate the right elements in
- * the array for hook_requirements().
- *
- * @param $project
- *   Array of information about the project we're testing as returned by
- *   update_calculate_project_data().
- * @param $type
- *   What kind of project this is ('core' or 'contrib').
- *
- * @return
- *   An array to be included in the nested $requirements array.
- *
- * @see hook_requirements()
- * @see update_requirements()
- * @see update_calculate_project_data()
- */
-function _update_requirement_check($project, $type) {
-  $requirement = array();
-  if ($type == 'core') {
-    $requirement['title'] = t('Drupal core update status');
-  }
-  else {
-    $requirement['title'] = t('Module and theme update status');
-  }
-  $status = $project['status'];
-  if ($status != UPDATE_CURRENT) {
-    $requirement['reason'] = $status;
-    $requirement['description'] = _update_message_text($type, $status, TRUE);
-    $requirement['severity'] = REQUIREMENT_ERROR;
-  }
-  switch ($status) {
-    case UPDATE_NOT_SECURE:
-      $requirement_label = t('Not secure!');
-      break;
-    case UPDATE_REVOKED:
-      $requirement_label = t('Revoked!');
-      break;
-    case UPDATE_NOT_SUPPORTED:
-      $requirement_label = t('Unsupported release');
-      break;
-    case UPDATE_NOT_CURRENT:
-      $requirement_label = t('Out of date');
-      $requirement['severity'] = REQUIREMENT_WARNING;
-      break;
-    case UPDATE_UNKNOWN:
-    case UPDATE_NOT_CHECKED:
-    case UPDATE_NOT_FETCHED:
-      $requirement_label = isset($project['reason']) ? $project['reason'] : t('Can not determine status');
-      $requirement['severity'] = REQUIREMENT_WARNING;
-      break;
-    default:
-      $requirement_label = t('Up to date');
-  }
-  if ($status != UPDATE_CURRENT && $type == 'core' && isset($project['recommended'])) {
-    $requirement_label .= ' ' . t('(version @version available)', array('@version' => $project['recommended']));
-  }
-  $requirement['value'] = l($requirement_label, update_manager_access() ? 'admin/reports/updates/update' : 'admin/reports/updates');
-  return $requirement;
-}
-
-/**
- * @addtogroup updates-6.x-to-7.x
- * @{
- */
-
-/**
- * Create a queue to store tasks for requests to fetch available update data.
- */
-function update_update_7000() {
-  module_load_include('inc', 'system', 'system.queue');
-  $queue = DrupalQueue::get('update_fetch_tasks');
-  $queue->createQueue();
-}
-
-/**
- * Recreates cache_update table.
- *
- * Converts fields that hold serialized variables from text to blob.
- * Removes 'headers' column.
- */
-function update_update_7001() {
-  $schema = system_schema_cache_7054();
-
-  db_drop_table('cache_update');
-  db_create_table('cache_update', $schema);
-}
-
-/**
- * @} End of "addtogroup updates-6.x-to-7.x".
- */
diff --git a/modules/update/update.manager.inc b/modules/update/update.manager.inc
deleted file mode 100644
index 85b587d..0000000
--- a/modules/update/update.manager.inc
+++ /dev/null
@@ -1,943 +0,0 @@
-<?php
-
-/**
- * @file
- * Administrative screens and processing functions of the Update Manager module.
- *
- * This allows site administrators with the 'administer software updates'
- * permission to either upgrade existing projects, or download and install new
- * ones, so long as the killswitch setting ('allow_authorize_operations') is
- * still TRUE.
- *
- * To install new code, the administrator is prompted for either the URL of an
- * archive file, or to directly upload the archive file. The archive is loaded
- * into a temporary location, extracted, and verified. If everything is
- * successful, the user is redirected to authorize.php to type in file transfer
- * credentials and authorize the installation to proceed with elevated
- * privileges, such that the extracted files can be copied out of the temporary
- * location and into the live web root.
- *
- * Updating existing code is a more elaborate process. The first step is a
- * selection form where the user is presented with a table of installed projects
- * that are missing newer releases. The user selects which projects they wish to
- * update, and presses the "Download updates" button to continue. This sets up a
- * batch to fetch all the selected releases, and redirects to
- * admin/update/download to display the batch progress bar as it runs. Each
- * batch operation is responsible for downloading a single file, extracting the
- * archive, and verifying the contents. If there are any errors, the user is
- * redirected back to the first page with the error messages. If all downloads
- * were extacted and verified, the user is instead redirected to
- * admin/update/ready, a landing page which reminds them to backup their
- * database and asks if they want to put the site offline during the update.
- * Once the user presses the "Install updates" button, they are redirected to
- * authorize.php to supply their web root file access credentials. The
- * authorized operation (which lives in update.authorize.inc) sets up a batch to
- * copy each extracted update from the temporary location into the live web
- * root.
- */
-
-/**
- * @defgroup update_manager_update Update Manager module: update
- * @{
- * Update Manager module functionality for updating existing code.
- *
- * Provides a user interface to update existing code.
- */
-
-/**
- * Form constructor for the update form of the Update Manager module.
- *
- * This presents a table with all projects that have available updates with
- * checkboxes to select which ones to upgrade.
- *
- * @param $context
- *   String representing the context from which we're trying to update.
- *   Allowed values are 'module', 'theme', and 'report'.
- *
- * @see update_manager_update_form_validate()
- * @see update_manager_update_form_submit()
- * @see update_menu()
- * @ingroup forms
- */
-function update_manager_update_form($form, $form_state = array(), $context) {
-  if (!_update_manager_check_backends($form, 'update')) {
-    return $form;
-  }
-
-  $form['#theme'] = 'update_manager_update_form';
-
-  $available = update_get_available(TRUE);
-  if (empty($available)) {
-    $form['message'] = array(
-      '#markup' => t('There was a problem getting update information. Try again later.'),
-    );
-    return $form;
-  }
-
-  $form['#attached']['css'][] = drupal_get_path('module', 'update') . '/update.css';
-
-  // This will be a nested array. The first key is the kind of project, which
-  // can be either 'enabled', 'disabled', 'manual' (projects which require
-  // manual updates, such as core). Then, each subarray is an array of
-  // projects of that type, indexed by project short name, and containing an
-  // array of data for cells in that project's row in the appropriate table.
-  $projects = array();
-
-  // This stores the actual download link we're going to update from for each
-  // project in the form, regardless of if it's enabled or disabled.
-  $form['project_downloads'] = array('#tree' => TRUE);
-
-  module_load_include('inc', 'update', 'update.compare');
-  $project_data = update_calculate_project_data($available);
-  foreach ($project_data as $name => $project) {
-    // Filter out projects which are up to date already.
-    if ($project['status'] == UPDATE_CURRENT) {
-      continue;
-    }
-    // The project name to display can vary based on the info we have.
-    if (!empty($project['title'])) {
-      if (!empty($project['link'])) {
-        $project_name = l($project['title'], $project['link']);
-      }
-      else {
-        $project_name = check_plain($project['title']);
-      }
-    }
-    elseif (!empty($project['info']['name'])) {
-      $project_name = check_plain($project['info']['name']);
-    }
-    else {
-      $project_name = check_plain($name);
-    }
-    if ($project['project_type'] == 'theme' || $project['project_type'] == 'theme-disabled') {
-      $project_name .= ' ' . t('(Theme)');
-    }
-
-    if (empty($project['recommended'])) {
-      // If we don't know what to recommend they upgrade to, we should skip
-      // the project entirely.
-      continue;
-    }
-
-    $recommended_release = $project['releases'][$project['recommended']];
-    $recommended_version = $recommended_release['version'] . ' ' . l(t('(Release notes)'), $recommended_release['release_link'], array('attributes' => array('title' => t('Release notes for @project_title', array('@project_title' => $project['title'])))));
-    if ($recommended_release['version_major'] != $project['existing_major']) {
-      $recommended_version .= '<div title="Major upgrade warning" class="update-major-version-warning">' . t('This update is a major version update which means that it may not be backwards compatible with your currently running version.  It is recommended that you read the release notes and proceed at your own risk.') . '</div>';
-    }
-
-    // Create an entry for this project.
-    $entry = array(
-      'title' => $project_name,
-      'installed_version' => $project['existing_version'],
-      'recommended_version' => $recommended_version,
-    );
-
-    switch ($project['status']) {
-      case UPDATE_NOT_SECURE:
-      case UPDATE_REVOKED:
-        $entry['title'] .= ' ' . t('(Security update)');
-        $entry['#weight'] = -2;
-        $type = 'security';
-        break;
-
-      case UPDATE_NOT_SUPPORTED:
-        $type = 'unsupported';
-        $entry['title'] .= ' ' . t('(Unsupported)');
-        $entry['#weight'] = -1;
-        break;
-
-      case UPDATE_UNKNOWN:
-      case UPDATE_NOT_FETCHED:
-      case UPDATE_NOT_CHECKED:
-      case UPDATE_NOT_CURRENT:
-        $type = 'recommended';
-        break;
-
-      default:
-        // Jump out of the switch and onto the next project in foreach.
-        continue 2;
-    }
-
-    $entry['#attributes'] = array('class' => array('update-' . $type));
-
-    // Drupal core needs to be upgraded manually.
-    $needs_manual = $project['project_type'] == 'core';
-
-    if ($needs_manual) {
-      // There are no checkboxes in the 'Manual updates' table so it will be
-      // rendered by theme('table'), not theme('tableselect'). Since the data
-      // formats are incompatible, we convert now to the format expected by
-      // theme('table').
-      unset($entry['#weight']);
-      $attributes = $entry['#attributes'];
-      unset($entry['#attributes']);
-      $entry = array(
-        'data' => $entry,
-      ) + $attributes;
-    }
-    else {
-      $form['project_downloads'][$name] = array(
-        '#type' => 'value',
-        '#value' => $recommended_release['download_link'],
-      );
-    }
-
-    // Based on what kind of project this is, save the entry into the
-    // appropriate subarray.
-    switch ($project['project_type']) {
-      case 'core':
-        // Core needs manual updates at this time.
-        $projects['manual'][$name] = $entry;
-        break;
-
-      case 'module':
-      case 'theme':
-        $projects['enabled'][$name] = $entry;
-        break;
-
-      case 'module-disabled':
-      case 'theme-disabled':
-        $projects['disabled'][$name] = $entry;
-        break;
-    }
-  }
-
-  if (empty($projects)) {
-    $form['message'] = array(
-      '#markup' => t('All of your projects are up to date.'),
-    );
-    return $form;
-  }
-
-  $headers = array(
-    'title' => array(
-      'data' => t('Name'),
-      'class' => array('update-project-name'),
-    ),
-    'installed_version' => t('Installed version'),
-    'recommended_version' => t('Recommended version'),
-  );
-
-  if (!empty($projects['enabled'])) {
-    $form['projects'] = array(
-      '#type' => 'tableselect',
-      '#header' => $headers,
-      '#options' => $projects['enabled'],
-    );
-    if (!empty($projects['disabled'])) {
-      $form['projects']['#prefix'] = '<h2>' . t('Enabled') . '</h2>';
-    }
-  }
-
-  if (!empty($projects['disabled'])) {
-    $form['disabled_projects'] = array(
-      '#type' => 'tableselect',
-      '#header' => $headers,
-      '#options' => $projects['disabled'],
-      '#weight' => 1,
-      '#prefix' => '<h2>' . t('Disabled') . '</h2>',
-    );
-  }
-
-  // If either table has been printed yet, we need a submit button and to
-  // validate the checkboxes.
-  if (!empty($projects['enabled']) || !empty($projects['disabled'])) {
-    $form['actions'] = array('#type' => 'actions');
-    $form['actions']['submit'] = array(
-      '#type' => 'submit',
-      '#value' => t('Download these updates'),
-    );
-    $form['#validate'][] = 'update_manager_update_form_validate';
-  }
-
-  if (!empty($projects['manual'])) {
-    $prefix = '<h2>' . t('Manual updates required') . '</h2>';
-    $prefix .= '<p>' . t('Updates of Drupal core are not supported at this time.') . '</p>';
-    $form['manual_updates'] = array(
-      '#type' => 'markup',
-      '#markup' => theme('table', array('header' => $headers, 'rows' => $projects['manual'])),
-      '#prefix' => $prefix,
-      '#weight' => 120,
-    );
-  }
-
-  return $form;
-}
-
-/**
- * Returns HTML for the first page in the process of updating projects.
- *
- * @param $variables
- *   An associative array containing:
- *   - form: A render element representing the form.
- *
- * @ingroup themeable
- */
-function theme_update_manager_update_form($variables) {
-  $form = $variables['form'];
-  $last = variable_get('update_last_check', 0);
-  $output = theme('update_last_check', array('last' => $last));
-  $output .= drupal_render_children($form);
-  return $output;
-}
-
-/**
- * Form validation handler for update_manager_update_form().
- *
- * Ensures that at least one project is selected.
- *
- * @see update_manager_update_form_submit()
- */
-function update_manager_update_form_validate($form, &$form_state) {
-  if (!empty($form_state['values']['projects'])) {
-    $enabled = array_filter($form_state['values']['projects']);
-  }
-  if (!empty($form_state['values']['disabled_projects'])) {
-    $disabled = array_filter($form_state['values']['disabled_projects']);
-  }
-  if (empty($enabled) && empty($disabled)) {
-    form_set_error('projects', t('You must select at least one project to update.'));
-  }
-}
-
-/**
- * Form submission handler for update_manager_update_form().
- *
- * Sets up a batch that downloads, extracts, and verifies the selected releases.
- *
- * @see update_manager_update_form_validate()
- */
-function update_manager_update_form_submit($form, &$form_state) {
-  $projects = array();
-  foreach (array('projects', 'disabled_projects') as $type) {
-    if (!empty($form_state['values'][$type])) {
-      $projects = array_merge($projects, array_keys(array_filter($form_state['values'][$type])));
-    }
-  }
-  $operations = array();
-  foreach ($projects as $project) {
-    $operations[] = array(
-      'update_manager_batch_project_get',
-      array(
-        $project,
-        $form_state['values']['project_downloads'][$project],
-      ),
-    );
-  }
-  $batch = array(
-    'title' => t('Downloading updates'),
-    'init_message' => t('Preparing to download selected updates'),
-    'operations' => $operations,
-    'finished' => 'update_manager_download_batch_finished',
-    'file' => drupal_get_path('module', 'update') . '/update.manager.inc',
-  );
-  batch_set($batch);
-}
-
-/**
- * Batch callback: Performs actions when the download batch is completed.
- *
- * @param $success
- *   TRUE if the batch operation was successful, FALSE if there were errors.
- * @param $results
- *   An associative array of results from the batch operation.
- */
-function update_manager_download_batch_finished($success, $results) {
-  if (!empty($results['errors'])) {
-    $error_list = array(
-      'title' => t('Downloading updates failed:'),
-      'items' => $results['errors'],
-    );
-    drupal_set_message(theme('item_list', $error_list), 'error');
-  }
-  elseif ($success) {
-    drupal_set_message(t('Updates downloaded successfully.'));
-    $_SESSION['update_manager_update_projects'] = $results['projects'];
-    drupal_goto('admin/update/ready');
-  }
-  else {
-    // Ideally we're catching all Exceptions, so they should never see this,
-    // but just in case, we have to tell them something.
-    drupal_set_message(t('Fatal error trying to download.'), 'error');
-  }
-}
-
-/**
- * Form constructor for the update ready form.
- *
- * Build the form when the site is ready to update (after downloading).
- *
- * This form is an intermediary step in the automated update workflow. It is
- * presented to the site administrator after all the required updates have been
- * downloaded and verified. The point of this page is to encourage the user to
- * backup their site, give them the opportunity to put the site offline, and
- * then ask them to confirm that the update should continue. After this step,
- * the user is redirected to authorize.php to enter their file transfer
- * credentials and attempt to complete the update.
- *
- * @see update_manager_update_ready_form_submit()
- * @see update_menu()
- * @ingroup forms
- */
-function update_manager_update_ready_form($form, &$form_state) {
-  if (!_update_manager_check_backends($form, 'update')) {
-    return $form;
-  }
-
-  $form['backup'] = array(
-    '#prefix' => '<strong>',
-    '#markup' => t('Back up your database and site before you continue. <a href="@backup_url">Learn how</a>.', array('@backup_url' => url('http://drupal.org/node/22281'))),
-    '#suffix' => '</strong>',
-  );
-
-  $form['maintenance_mode'] = array(
-    '#title' => t('Perform updates with site in maintenance mode (strongly recommended)'),
-    '#type' => 'checkbox',
-    '#default_value' => TRUE,
-  );
-
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Continue'),
-  );
-
-  return $form;
-}
-
-/**
- * Form submission handler for update_manager_update_ready_form().
- *
- * If the site administrator requested that the site is put offline during the
- * update, do so now. Otherwise, pull information about all the required updates
- * out of the SESSION, figure out what Drupal\Core\Updater\Updater class is
- * needed for each one, generate an array of update operations to perform, and
- * hand it all off to system_authorized_init(), then redirect to authorize.php.
- *
- * @see update_authorize_run_update()
- * @see system_authorized_init()
- * @see system_authorized_get_url()
- */
-function update_manager_update_ready_form_submit($form, &$form_state) {
-  // Store maintenance_mode setting so we can restore it when done.
-  $_SESSION['maintenance_mode'] = variable_get('maintenance_mode', FALSE);
-  if ($form_state['values']['maintenance_mode'] == TRUE) {
-    variable_set('maintenance_mode', TRUE);
-  }
-
-  if (!empty($_SESSION['update_manager_update_projects'])) {
-    // Make sure the Updater registry is loaded.
-    drupal_get_updaters();
-
-    $updates = array();
-    $directory = _update_manager_extract_directory();
-
-    $projects = $_SESSION['update_manager_update_projects'];
-    unset($_SESSION['update_manager_update_projects']);
-
-    foreach ($projects as $project => $url) {
-      $project_location = $directory . '/' . $project;
-      $updater = Updater::factory($project_location);
-      $project_real_location = drupal_realpath($project_location);
-      $updates[] = array(
-        'project' => $project,
-        'updater_name' => get_class($updater),
-        'local_url' => $project_real_location,
-      );
-    }
-
-    // If the owner of the last directory we extracted is the same as the
-    // owner of our configuration directory (e.g. sites/default) where we're
-    // trying to install the code, there's no need to prompt for FTP/SSH
-    // credentials. Instead, we instantiate a FileTransferLocal and invoke
-    // update_authorize_run_update() directly.
-    if (fileowner($project_real_location) == fileowner(conf_path())) {
-      module_load_include('inc', 'update', 'update.authorize');
-      $filetransfer = new FileTransferLocal(DRUPAL_ROOT);
-      update_authorize_run_update($filetransfer, $updates);
-    }
-    // Otherwise, go through the regular workflow to prompt for FTP/SSH
-    // credentials and invoke update_authorize_run_update() indirectly with
-    // whatever FileTransfer object authorize.php creates for us.
-    else {
-      system_authorized_init('update_authorize_run_update', drupal_get_path('module', 'update') . '/update.authorize.inc', array($updates), t('Update manager'));
-      $form_state['redirect'] = system_authorized_get_url();
-    }
-  }
-}
-
-/**
- * @} End of "defgroup update_manager_update".
- */
-
-/**
- * @defgroup update_manager_install Update Manager module: install
- * @{
- * Update Manager module functionality for installing new code.
- *
- * Provides a user interface to install new code.
- */
-
-/**
- * Form constructor for the install form of the Update Manager module.
- *
- * This presents a place to enter a URL or upload an archive file to use to
- * install a new module or theme.
- *
- * @param $context
- *   String representing the context from which we're trying to install.
- *   Allowed values are 'module', 'theme', and 'report'.
- *
- * @see update_manager_install_form_validate()
- * @see update_manager_install_form_submit()
- * @see update_menu()
- * @ingroup forms
- */
-function update_manager_install_form($form, &$form_state, $context) {
-  if (!_update_manager_check_backends($form, 'install')) {
-    return $form;
-  }
-
-  $form['help_text'] = array(
-    '#prefix' => '<p>',
-    '#markup' => t('You can find <a href="@module_url">modules</a> and <a href="@theme_url">themes</a> on <a href="@drupal_org_url">drupal.org</a>. The following file extensions are supported: %extensions.', array(
-      '@module_url' => 'http://drupal.org/project/modules',
-      '@theme_url' => 'http://drupal.org/project/themes',
-      '@drupal_org_url' => 'http://drupal.org',
-      '%extensions' => archiver_get_extensions(),
-    )),
-    '#suffix' => '</p>',
-  );
-
-  $form['project_url'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Install from a URL'),
-    '#description' => t('For example: %url', array('%url' => 'http://ftp.drupal.org/files/projects/name.tar.gz')),
-  );
-
-  $form['information'] = array(
-    '#prefix' => '<strong>',
-    '#markup' => t('Or'),
-    '#suffix' => '</strong>',
-  );
-
-  $form['project_upload'] = array(
-    '#type' => 'file',
-    '#title' => t('Upload a module or theme archive to install'),
-    '#description' => t('For example: %filename from your local computer', array('%filename' => 'name.tar.gz')),
-  );
-
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Install'),
-  );
-
-  return $form;
-}
-
-/**
- * Checks for file transfer backends and prepares a form fragment about them.
- *
- * @param array $form
- *   Reference to the form array we're building.
- * @param string $operation
- *   The update manager operation we're in the middle of. Can be either 'update'
- *   or 'install'. Use to provide operation-specific interface text.
- *
- * @return
- *   TRUE if the update manager should continue to the next step in the
- *   workflow, or FALSE if we've hit a fatal configuration and must halt the
- *   workflow.
- */
-function _update_manager_check_backends(&$form, $operation) {
-  // If file transfers will be performed locally, we do not need to display any
-  // warnings or notices to the user and should automatically continue the
-  // workflow, since we won't be using a FileTransfer backend that requires
-  // user input or a specific server configuration.
-  if (update_manager_local_transfers_allowed()) {
-    return TRUE;
-  }
-
-  // Otherwise, show the available backends.
-  $form['available_backends'] = array(
-    '#prefix' => '<p>',
-    '#suffix' => '</p>',
-  );
-
-  $available_backends = drupal_get_filetransfer_info();
-  if (empty($available_backends)) {
-    if ($operation == 'update') {
-      $form['available_backends']['#markup'] = t('Your server does not support updating modules and themes from this interface. Instead, update modules and themes by uploading the new versions directly to the server, as described in the <a href="@handbook_url">handbook</a>.', array('@handbook_url' => 'http://drupal.org/getting-started/install-contrib'));
-    }
-    else {
-      $form['available_backends']['#markup'] = t('Your server does not support installing modules and themes from this interface. Instead, install modules and themes by uploading them directly to the server, as described in the <a href="@handbook_url">handbook</a>.', array('@handbook_url' => 'http://drupal.org/getting-started/install-contrib'));
-    }
-    return FALSE;
-  }
-
-  $backend_names = array();
-  foreach ($available_backends as $backend) {
-    $backend_names[] = $backend['title'];
-  }
-  if ($operation == 'update') {
-    $form['available_backends']['#markup'] = format_plural(
-      count($available_backends),
-      'Updating modules and themes requires <strong>@backends access</strong> to your server. See the <a href="@handbook_url">handbook</a> for other update methods.',
-      'Updating modules and themes requires access to your server via one of the following methods: <strong>@backends</strong>. See the <a href="@handbook_url">handbook</a> for other update methods.',
-      array(
-        '@backends' => implode(', ', $backend_names),
-        '@handbook_url' => 'http://drupal.org/getting-started/install-contrib',
-      ));
-  }
-  else {
-    $form['available_backends']['#markup'] = format_plural(
-      count($available_backends),
-      'Installing modules and themes requires <strong>@backends access</strong> to your server. See the <a href="@handbook_url">handbook</a> for other installation methods.',
-      'Installing modules and themes requires access to your server via one of the following methods: <strong>@backends</strong>. See the <a href="@handbook_url">handbook</a> for other installation methods.',
-      array(
-        '@backends' => implode(', ', $backend_names),
-        '@handbook_url' => 'http://drupal.org/getting-started/install-contrib',
-      ));
-  }
-  return TRUE;
-}
-
-/**
- * Form validation handler for update_manager_install_form().
- *
- * @see update_manager_install_form_submit()
- */
-function update_manager_install_form_validate($form, &$form_state) {
-  if (!($form_state['values']['project_url'] XOR !empty($_FILES['files']['name']['project_upload']))) {
-    form_set_error('project_url', t('You must either provide a URL or upload an archive file to install.'));
-  }
-
-  if ($form_state['values']['project_url']) {
-    if (!valid_url($form_state['values']['project_url'], TRUE)) {
-      form_set_error('project_url', t('The provided URL is invalid.'));
-    }
-  }
-}
-
-/**
- * Form submission handler for update_manager_install_form().
- *
- * Either downloads the file specified in the URL to a temporary cache, or
- * uploads the file attached to the form, then attempts to extract the archive
- * into a temporary location and verify it. Instantiate the appropriate
- * Updater class for this project and make sure it is not already installed in
- * the live webroot. If everything is successful, setup an operation to run
- * via authorize.php which will copy the extracted files from the temporary
- * location into the live site.
- *
- * @see update_manager_install_form_validate()
- * @see update_authorize_run_install()
- * @see system_authorized_init()
- * @see system_authorized_get_url()
- */
-function update_manager_install_form_submit($form, &$form_state) {
-  if ($form_state['values']['project_url']) {
-    $field = 'project_url';
-    $local_cache = update_manager_file_get($form_state['values']['project_url']);
-    if (!$local_cache) {
-      form_set_error($field, t('Unable to retrieve Drupal project from %url.', array('%url' => $form_state['values']['project_url'])));
-      return;
-    }
-  }
-  elseif ($_FILES['files']['name']['project_upload']) {
-    $validators = array('file_validate_extensions' => array(archiver_get_extensions()));
-    $field = 'project_upload';
-    if (!($finfo = file_save_upload($field, $validators, NULL, FILE_EXISTS_REPLACE))) {
-      // Failed to upload the file. file_save_upload() calls form_set_error() on
-      // failure.
-      return;
-    }
-    $local_cache = $finfo->uri;
-  }
-
-  $directory = _update_manager_extract_directory();
-  try {
-    $archive = update_manager_archive_extract($local_cache, $directory);
-  }
-  catch (Exception $e) {
-    form_set_error($field, $e->getMessage());
-    return;
-  }
-
-  $files = $archive->listContents();
-  if (!$files) {
-    form_set_error($field, t('Provided archive contains no files.'));
-    return;
-  }
-
-  // Unfortunately, we can only use the directory name to determine the project
-  // name. Some archivers list the first file as the directory (i.e., MODULE/)
-  // and others list an actual file (i.e., MODULE/README.TXT).
-  $project = strtok($files[0], '/\\');
-
-  $archive_errors = update_manager_archive_verify($project, $local_cache, $directory);
-  if (!empty($archive_errors)) {
-    form_set_error($field, array_shift($archive_errors));
-    // @todo: Fix me in D8: We need a way to set multiple errors on the same
-    // form element and have all of them appear!
-    if (!empty($archive_errors)) {
-      foreach ($archive_errors as $error) {
-        drupal_set_message($error, 'error');
-      }
-    }
-    return;
-  }
-
-  // Make sure the Updater registry is loaded.
-  drupal_get_updaters();
-
-  $project_location = $directory . '/' . $project;
-  try {
-    $updater = Updater::factory($project_location);
-  }
-  catch (Exception $e) {
-    form_set_error($field, $e->getMessage());
-    return;
-  }
-
-  try {
-    $project_title = Updater::getProjectTitle($project_location);
-  }
-  catch (Exception $e) {
-    form_set_error($field, $e->getMessage());
-    return;
-  }
-
-  if (!$project_title) {
-    form_set_error($field, t('Unable to determine %project name.', array('%project' => $project)));
-  }
-
-  if ($updater->isInstalled()) {
-    form_set_error($field, t('%project is already installed.', array('%project' => $project_title)));
-    return;
-  }
-
-  $project_real_location = drupal_realpath($project_location);
-  $arguments = array(
-    'project' => $project,
-    'updater_name' => get_class($updater),
-    'local_url' => $project_real_location,
-  );
-
-  // If the owner of the directory we extracted is the same as the
-  // owner of our configuration directory (e.g. sites/default) where we're
-  // trying to install the code, there's no need to prompt for FTP/SSH
-  // credentials. Instead, we instantiate a FileTransferLocal and invoke
-  // update_authorize_run_install() directly.
-  if (fileowner($project_real_location) == fileowner(conf_path())) {
-    module_load_include('inc', 'update', 'update.authorize');
-    $filetransfer = new FileTransferLocal(DRUPAL_ROOT);
-    call_user_func_array('update_authorize_run_install', array_merge(array($filetransfer), $arguments));
-  }
-  // Otherwise, go through the regular workflow to prompt for FTP/SSH
-  // credentials and invoke update_authorize_run_install() indirectly with
-  // whatever FileTransfer object authorize.php creates for us.
-  else {
-    system_authorized_init('update_authorize_run_install', drupal_get_path('module', 'update') . '/update.authorize.inc', $arguments, t('Update manager'));
-    $form_state['redirect'] = system_authorized_get_url();
-  }
-}
-
-/**
- * @} End of "defgroup update_manager_install".
- */
-
-/**
- * @defgroup update_manager_file Update Manager module: file management
- * @{
- * Update Manager module file management functions.
- *
- * These functions are used by the update manager to copy, extract, and verify
- * archive files.
- */
-
-/**
- * Unpacks a downloaded archive file.
- *
- * @param string $file
- *   The filename of the archive you wish to extract.
- * @param string $directory
- *   The directory you wish to extract the archive into.
- *
- * @return Archiver
- *   The Archiver object used to extract the archive.
- *
- * @throws Exception
- */
-function update_manager_archive_extract($file, $directory) {
-  $archiver = archiver_get_archiver($file);
-  if (!$archiver) {
-    throw new Exception(t('Cannot extract %file, not a valid archive.', array ('%file' => $file)));
-  }
-
-  // Remove the directory if it exists, otherwise it might contain a mixture of
-  // old files mixed with the new files (e.g. in cases where files were removed
-  // from a later release).
-  $files = $archiver->listContents();
-
-  // Unfortunately, we can only use the directory name to determine the project
-  // name. Some archivers list the first file as the directory (i.e., MODULE/)
-  // and others list an actual file (i.e., MODULE/README.TXT).
-  $project = strtok($files[0], '/\\');
-
-  $extract_location = $directory . '/' . $project;
-  if (file_exists($extract_location)) {
-    file_unmanaged_delete_recursive($extract_location);
-  }
-
-  $archiver->extract($directory);
-  return $archiver;
-}
-
-/**
- * Verifies an archive after it has been downloaded and extracted.
- *
- * This function is responsible for invoking hook_verify_update_archive().
- *
- * @param string $project
- *   The short name of the project to download.
- * @param string $archive_file
- *   The filename of the unextracted archive.
- * @param string $directory
- *   The directory that the archive was extracted into.
- *
- * @return array
- *   An array of error messages to display if the archive was invalid. If there
- *   are no errors, it will be an empty array.
- */
-function update_manager_archive_verify($project, $archive_file, $directory) {
-  return module_invoke_all('verify_update_archive', $project, $archive_file, $directory);
-}
-
-/**
- * Copies a file from the specified URL to the temporary directory for updates.
- *
- * Returns the local path if the file has already been downloaded.
- *
- * @param $url
- *   The URL of the file on the server.
- *
- * @return string
- *   Path to local file.
- */
-function update_manager_file_get($url) {
-  $parsed_url = parse_url($url);
-  $remote_schemes = array('http', 'https', 'ftp', 'ftps', 'smb', 'nfs');
-  if (!in_array($parsed_url['scheme'], $remote_schemes)) {
-    // This is a local file, just return the path.
-    return drupal_realpath($url);
-  }
-
-  // Check the cache and download the file if needed.
-  $cache_directory = _update_manager_cache_directory();
-  $local = $cache_directory . '/' . drupal_basename($parsed_url['path']);
-
-  if (!file_exists($local) || update_delete_file_if_stale($local)) {
-    return system_retrieve_file($url, $local, FALSE, FILE_EXISTS_REPLACE);
-  }
-  else {
-    return $local;
-  }
-}
-
-/**
- * Batch callback: Downloads, unpacks, and verifies a project.
- *
- * This function assumes that the provided URL points to a file archive of some
- * sort. The URL can have any scheme that we have a file stream wrapper to
- * support. The file is downloaded to a local cache.
- *
- * @param string $project
- *   The short name of the project to download.
- * @param string $url
- *   The URL to download a specific project release archive file.
- * @param array $context
- *   Reference to an array used for Batch API storage.
- *
- * @see update_manager_download_page()
- */
-function update_manager_batch_project_get($project, $url, &$context) {
-  // This is here to show the user that we are in the process of downloading.
-  if (!isset($context['sandbox']['started'])) {
-    $context['sandbox']['started'] = TRUE;
-    $context['message'] = t('Downloading %project', array('%project' => $project));
-    $context['finished'] = 0;
-    return;
-  }
-
-  // Actually try to download the file.
-  if (!($local_cache = update_manager_file_get($url))) {
-    $context['results']['errors'][$project] = t('Failed to download %project from %url', array('%project' => $project, '%url' => $url));
-    return;
-  }
-
-  // Extract it.
-  $extract_directory = _update_manager_extract_directory();
-  try {
-    update_manager_archive_extract($local_cache, $extract_directory);
-  }
-  catch (Exception $e) {
-    $context['results']['errors'][$project] = $e->getMessage();
-    return;
-  }
-
-  // Verify it.
-  $archive_errors = update_manager_archive_verify($project, $local_cache, $extract_directory);
-  if (!empty($archive_errors)) {
-    // We just need to make sure our array keys don't collide, so use the
-    // numeric keys from the $archive_errors array.
-    foreach ($archive_errors as $key => $error) {
-      $context['results']['errors']["$project-$key"] = $error;
-    }
-    return;
-  }
-
-  // Yay, success.
-  $context['results']['projects'][$project] = $url;
-  $context['finished'] = 1;
-}
-
-/**
- * Determines if file transfers will be performed locally.
- *
- * If the server is configured such that webserver-created files have the same
- * owner as the configuration directory (e.g., sites/default) where new code
- * will eventually be installed, the update manager can transfer files entirely
- * locally, without changing their ownership (in other words, without prompting
- * the user for FTP, SSH or other credentials).
- *
- * This server configuration is an inherent security weakness because it allows
- * a malicious webserver process to append arbitrary PHP code and then execute
- * it. However, it is supported here because it is a common configuration on
- * shared hosting, and there is nothing Drupal can do to prevent it.
- *
- * @return
- *   TRUE if local file transfers are allowed on this server, or FALSE if not.
- *
- * @see update_manager_update_ready_form_submit()
- * @see update_manager_install_form_submit()
- * @see install_check_requirements()
- */
-function update_manager_local_transfers_allowed() {
-  // Compare the owner of a webserver-created temporary file to the owner of
-  // the configuration directory to determine if local transfers will be
-  // allowed.
-  $temporary_file = drupal_tempnam('temporary://', 'update_');
-  $local_transfers_allowed = fileowner($temporary_file) === fileowner(conf_path());
-
-  // Clean up. If this fails, we can ignore it (since this is just a temporary
-  // file anyway).
-  @drupal_unlink($temporary_file);
-
-  return $local_transfers_allowed;
-}
-
-/**
- * @} End of "defgroup update_manager_file".
- */
diff --git a/modules/update/update.report.inc b/modules/update/update.report.inc
deleted file mode 100644
index f256575..0000000
--- a/modules/update/update.report.inc
+++ /dev/null
@@ -1,327 +0,0 @@
-<?php
-
-/**
- * @file
- * Code required only when rendering the available updates report.
- */
-
-/**
- * Page callback: Generates a page about the update status of projects.
- *
- * @see update_menu()
- */
-function update_status() {
-  if ($available = update_get_available(TRUE)) {
-    module_load_include('inc', 'update', 'update.compare');
-    $data = update_calculate_project_data($available);
-    return theme('update_report', array('data' => $data));
-  }
-  else {
-    return theme('update_report', array('data' => _update_no_data()));
-  }
-}
-
-/**
- * Returns HTML for the project status report.
- *
- * @param array $variables
- *   An associative array containing:
- *   - data: An array of data about each project's status.
- *
- * @ingroup themeable
- */
-function theme_update_report($variables) {
-  $data = $variables['data'];
-
-  $last = variable_get('update_last_check', 0);
-  $output = theme('update_last_check', array('last' => $last));
-
-  if (!is_array($data)) {
-    $output .= '<p>' . $data . '</p>';
-    return $output;
-  }
-
-  $header = array();
-  $rows = array();
-
-  $notification_level = variable_get('update_notification_threshold', 'all');
-
-  // Create an array of status values keyed by module or theme name, since
-  // we'll need this while generating the report if we have to cross reference
-  // anything (e.g. subthemes which have base themes missing an update).
-  foreach ($data as $project) {
-    foreach ($project['includes'] as $key => $name) {
-      $status[$key] = $project['status'];
-    }
-  }
-
-  foreach ($data as $project) {
-    switch ($project['status']) {
-      case UPDATE_CURRENT:
-        $class = 'ok';
-        $icon = theme('image', array('path' => 'misc/watchdog-ok.png', 'width' => 18, 'height' => 18, 'alt' => t('ok'), 'title' => t('ok')));
-        break;
-      case UPDATE_UNKNOWN:
-      case UPDATE_FETCH_PENDING:
-      case UPDATE_NOT_FETCHED:
-        $class = 'unknown';
-        $icon = theme('image', array('path' => 'misc/watchdog-warning.png', 'width' => 18, 'height' => 18, 'alt' => t('warning'), 'title' => t('warning')));
-        break;
-      case UPDATE_NOT_SECURE:
-      case UPDATE_REVOKED:
-      case UPDATE_NOT_SUPPORTED:
-        $class = 'error';
-        $icon = theme('image', array('path' => 'misc/watchdog-error.png', 'width' => 18, 'height' => 18, 'alt' => t('error'), 'title' => t('error')));
-        break;
-      case UPDATE_NOT_CHECKED:
-      case UPDATE_NOT_CURRENT:
-      default:
-        $class = 'warning';
-        $icon = theme('image', array('path' => 'misc/watchdog-warning.png', 'width' => 18, 'height' => 18, 'alt' => t('warning'), 'title' => t('warning')));
-        break;
-    }
-
-    $row = '<div class="version-status">';
-    $status_label = theme('update_status_label', array('status' => $project['status']));
-    $row .= !empty($status_label) ? $status_label : check_plain($project['reason']);
-    $row .= '<span class="icon">' . $icon . '</span>';
-    $row .= "</div>\n";
-
-    $row .= '<div class="project">';
-    if (isset($project['title'])) {
-      if (isset($project['link'])) {
-        $row .= l($project['title'], $project['link']);
-      }
-      else {
-        $row .= check_plain($project['title']);
-      }
-    }
-    else {
-      $row .= check_plain($project['name']);
-    }
-    $row .= ' ' . check_plain($project['existing_version']);
-    if ($project['install_type'] == 'dev' && !empty($project['datestamp'])) {
-      $row .= ' <span class="version-date">(' . format_date($project['datestamp'], 'custom', 'Y-M-d') . ')</span>';
-    }
-    $row .= "</div>\n";
-
-    $versions_inner = '';
-    $security_class = array();
-    $version_class = array();
-    if (isset($project['recommended'])) {
-      if ($project['status'] != UPDATE_CURRENT || $project['existing_version'] !== $project['recommended']) {
-
-        // First, figure out what to recommend.
-        // If there's only 1 security update and it has the same version we're
-        // recommending, give it the same CSS class as if it was recommended,
-        // but don't print out a separate "Recommended" line for this project.
-        if (!empty($project['security updates']) && count($project['security updates']) == 1 && $project['security updates'][0]['version'] === $project['recommended']) {
-          $security_class[] = 'version-recommended';
-          $security_class[] = 'version-recommended-strong';
-        }
-        else {
-          $version_class[] = 'version-recommended';
-          // Apply an extra class if we're displaying both a recommended
-          // version and anything else for an extra visual hint.
-          if ($project['recommended'] !== $project['latest_version']
-              || !empty($project['also'])
-              || ($project['install_type'] == 'dev'
-                && isset($project['dev_version'])
-                && $project['latest_version'] !== $project['dev_version']
-                && $project['recommended'] !== $project['dev_version'])
-              || (isset($project['security updates'][0])
-                && $project['recommended'] !== $project['security updates'][0])
-              ) {
-            $version_class[] = 'version-recommended-strong';
-          }
-          $versions_inner .= theme('update_version', array('version' => $project['releases'][$project['recommended']], 'tag' => t('Recommended version:'), 'class' => $version_class));
-        }
-
-        // Now, print any security updates.
-        if (!empty($project['security updates'])) {
-          $security_class[] = 'version-security';
-          foreach ($project['security updates'] as $security_update) {
-            $versions_inner .= theme('update_version', array('version' => $security_update, 'tag' => t('Security update:'), 'class' => $security_class));
-          }
-        }
-      }
-
-      if ($project['recommended'] !== $project['latest_version']) {
-        $versions_inner .= theme('update_version', array('version' => $project['releases'][$project['latest_version']], 'tag' => t('Latest version:'), 'class' => array('version-latest')));
-      }
-      if ($project['install_type'] == 'dev'
-          && $project['status'] != UPDATE_CURRENT
-          && isset($project['dev_version'])
-          && $project['recommended'] !== $project['dev_version']) {
-        $versions_inner .= theme('update_version', array('version' => $project['releases'][$project['dev_version']], 'tag' => t('Development version:'), 'class' => array('version-latest')));
-      }
-    }
-
-    if (isset($project['also'])) {
-      foreach ($project['also'] as $also) {
-        $versions_inner .= theme('update_version', array('version' => $project['releases'][$also], 'tag' => t('Also available:'), 'class' => array('version-also-available')));
-      }
-    }
-
-    if (!empty($versions_inner)) {
-      $row .= "<div class=\"versions\">\n" . $versions_inner . "</div>\n";
-    }
-    $row .= "<div class=\"info\">\n";
-    if (!empty($project['extra'])) {
-      $row .= '<div class="extra">' . "\n";
-      foreach ($project['extra'] as $key => $value) {
-        $row .= '<div class="' . implode(' ', $value['class']) . '">';
-        $row .= check_plain($value['label']) . ': ';
-        $row .= drupal_placeholder($value['data']);
-        $row .= "</div>\n";
-      }
-      $row .= "</div>\n";  // extra div.
-    }
-
-    $row .= '<div class="includes">';
-    sort($project['includes']);
-    if (!empty($project['disabled'])) {
-      sort($project['disabled']);
-      // Make sure we start with a clean slate for each project in the report.
-      $includes_items = array();
-      $row .= t('Includes:');
-      $includes_items[] = t('Enabled: %includes', array('%includes' => implode(', ', $project['includes'])));
-      $includes_items[] = t('Disabled: %disabled', array('%disabled' => implode(', ', $project['disabled'])));
-      $row .= theme('item_list', array('items' => $includes_items));
-    }
-    else {
-      $row .= t('Includes: %includes', array('%includes' => implode(', ', $project['includes'])));
-    }
-    $row .= "</div>\n";
-
-    if (!empty($project['base_themes'])) {
-      $row .= '<div class="basethemes">';
-      asort($project['base_themes']);
-      $base_themes = array();
-      foreach ($project['base_themes'] as $base_key => $base_theme) {
-        switch ($status[$base_key]) {
-          case UPDATE_NOT_SECURE:
-          case UPDATE_REVOKED:
-          case UPDATE_NOT_SUPPORTED:
-            $base_themes[] = t('%base_theme (!base_label)', array('%base_theme' => $base_theme, '!base_label' => theme('update_status_label', array('status' => $status[$base_key]))));
-            break;
-
-          default:
-            $base_themes[] = drupal_placeholder($base_theme);
-        }
-      }
-      $row .= t('Depends on: !basethemes', array('!basethemes' => implode(', ', $base_themes)));
-      $row .= "</div>\n";
-    }
-
-    if (!empty($project['sub_themes'])) {
-      $row .= '<div class="subthemes">';
-      sort($project['sub_themes']);
-      $row .= t('Required by: %subthemes', array('%subthemes' => implode(', ', $project['sub_themes'])));
-      $row .= "</div>\n";
-    }
-
-    $row .= "</div>\n"; // info div.
-
-    if (!isset($rows[$project['project_type']])) {
-      $rows[$project['project_type']] = array();
-    }
-    $row_key = isset($project['title']) ? drupal_strtolower($project['title']) : drupal_strtolower($project['name']);
-    $rows[$project['project_type']][$row_key] = array(
-      'class' => array($class),
-      'data' => array($row),
-    );
-  }
-
-  $project_types = array(
-    'core' => t('Drupal core'),
-    'module' => t('Modules'),
-    'theme' => t('Themes'),
-    'module-disabled' => t('Disabled modules'),
-    'theme-disabled' => t('Disabled themes'),
-  );
-  foreach ($project_types as $type_name => $type_label) {
-    if (!empty($rows[$type_name])) {
-      ksort($rows[$type_name]);
-      $output .= "\n<h3>" . $type_label . "</h3>\n";
-      $output .= theme('table', array('header' => $header, 'rows' => $rows[$type_name], 'attributes' => array('class' => array('update'))));
-    }
-  }
-  drupal_add_css(drupal_get_path('module', 'update') . '/update.css');
-  return $output;
-}
-
-/**
- * Returns HTML for a label to display for a project's update status.
- *
- * @param array $variables
- *   An associative array containing:
- *   - status: The integer code for a project's current update status.
- *
- * @see update_calculate_project_data()
- * @ingroup themeable
- */
-function theme_update_status_label($variables) {
-  switch ($variables['status']) {
-    case UPDATE_NOT_SECURE:
-      return '<span class="security-error">' . t('Security update required!') . '</span>';
-
-    case UPDATE_REVOKED:
-      return '<span class="revoked">' . t('Revoked!') . '</span>';
-
-    case UPDATE_NOT_SUPPORTED:
-      return '<span class="not-supported">' . t('Not supported!') . '</span>';
-
-    case UPDATE_NOT_CURRENT:
-      return '<span class="not-current">' . t('Update available') . '</span>';
-
-    case UPDATE_CURRENT:
-      return '<span class="current">' . t('Up to date') . '</span>';
-
-  }
-}
-
-/**
- * Returns HTML for the version display of a project.
- *
- * @param array $variables
- *   An associative array containing:
- *   - version: An array of data about the latest released version, containing:
- *     - version: The version number.
- *     - release_link: The URL for the release notes.
- *     - date: The date of the release.
- *     - download_link: The URL for the downloadable file.
- *   - tag: The title of the project.
- *   - class: A string containing extra classes for the wrapping table.
- *
- * @ingroup themeable
- */
-function theme_update_version($variables) {
-  $version = $variables['version'];
-  $tag = $variables['tag'];
-  $class = implode(' ', $variables['class']);
-
-  $output = '';
-  $output .= '<table class="version ' . $class . '">';
-  $output .= '<tr>';
-  $output .= '<td class="version-title">' . $tag . "</td>\n";
-  $output .= '<td class="version-details">';
-  $output .= l($version['version'], $version['release_link']);
-  $output .= ' <span class="version-date">(' . format_date($version['date'], 'custom', 'Y-M-d') . ')</span>';
-  $output .= "</td>\n";
-  $output .= '<td class="version-links">';
-  $links = array();
-  $links['update-download'] = array(
-    'title' => t('Download'),
-    'href' => $version['download_link'],
-  );
-  $links['update-release-notes'] = array(
-    'title' => t('Release notes'),
-    'href' => $version['release_link'],
-  );
-  $output .= theme('links__update_version', array('links' => $links));
-  $output .= '</td>';
-  $output .= '</tr>';
-  $output .= "</table>\n";
-  return $output;
-}
diff --git a/modules/update/update.settings.inc b/modules/update/update.settings.inc
deleted file mode 100644
index 5cd2414..0000000
--- a/modules/update/update.settings.inc
+++ /dev/null
@@ -1,128 +0,0 @@
-<?php
-
-/**
- * @file
- * Code required only for the update status settings form.
- */
-
-/**
- * Form constructor for the update settings form.
- *
- * @see update_settings_validate()
- * @see update_settings_submit()
- * @ingroup forms
- */
-function update_settings($form) {
-  $form['update_check_frequency'] = array(
-    '#type' => 'radios',
-    '#title' => t('Check for updates'),
-    '#default_value' => variable_get('update_check_frequency', 1),
-    '#options' => array(
-      '1' => t('Daily'),
-      '7' => t('Weekly'),
-    ),
-    '#description' => t('Select how frequently you want to automatically check for new releases of your currently installed modules and themes.'),
-  );
-
-  $form['update_check_disabled'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Check for updates of disabled modules and themes'),
-    '#default_value' => variable_get('update_check_disabled', FALSE),
-  );
-
-  $notify_emails = variable_get('update_notify_emails', array());
-  $form['update_notify_emails'] = array(
-    '#type' => 'textarea',
-    '#title' => t('E-mail addresses to notify when updates are available'),
-    '#rows' => 4,
-    '#default_value' => implode("\n", $notify_emails),
-    '#description' => t('Whenever your site checks for available updates and finds new releases, it can notify a list of users via e-mail. Put each address on a separate line. If blank, no e-mails will be sent.'),
-  );
-
-  $form['update_notification_threshold'] = array(
-    '#type' => 'radios',
-    '#title' => t('E-mail notification threshold'),
-    '#default_value' => variable_get('update_notification_threshold', 'all'),
-    '#options' => array(
-      'all' => t('All newer versions'),
-      'security' => t('Only security updates'),
-    ),
-    '#description' => t('You can choose to send e-mail only if a security update is available, or to be notified about all newer versions. If there are updates available of Drupal core or any of your installed modules and themes, your site will always print a message on the <a href="@status_report">status report</a> page, and will also display an error message on administration pages if there is a security update.', array('@status_report' => url('admin/reports/status')))
-  );
-
-  $form = system_settings_form($form);
-  // Custom validation callback for the email notification setting.
-  $form['#validate'][] = 'update_settings_validate';
-  // We need to call our own submit callback first, not the one from
-  // system_settings_form(), so that we can process and save the emails.
-  unset($form['#submit']);
-
-  return $form;
-}
-
-/**
- * Form validation handler for update_settings().
- *
- * Validates the e-mail addresses and ensures the field is formatted correctly.
- *
- * @see update_settings_submit()
- */
-function update_settings_validate($form, &$form_state) {
-  if (!empty($form_state['values']['update_notify_emails'])) {
-    $valid = array();
-    $invalid = array();
-    foreach (explode("\n", trim($form_state['values']['update_notify_emails'])) as $email) {
-      $email = trim($email);
-      if (!empty($email)) {
-        if (valid_email_address($email)) {
-          $valid[] = $email;
-        }
-        else {
-          $invalid[] = $email;
-        }
-      }
-    }
-    if (empty($invalid)) {
-      $form_state['notify_emails'] = $valid;
-    }
-    elseif (count($invalid) == 1) {
-      form_set_error('update_notify_emails', t('%email is not a valid e-mail address.', array('%email' => reset($invalid))));
-    }
-    else {
-      form_set_error('update_notify_emails', t('%emails are not valid e-mail addresses.', array('%emails' => implode(', ', $invalid))));
-    }
-  }
-}
-
-/**
- * Form submission handler for update_settings().
- *
- * Also invalidates the cache of available updates if the "Check for updates of
- * disabled modules and themes" setting is being changed. The available updates
- * report needs to refetch available update data after this setting changes or
- * it would show misleading things (e.g., listing the disabled projects on the
- * site with the "No available releases found" warning).
- *
- * @see update_settings_validate()
- */
-function update_settings_submit($form, $form_state) {
-  $op = $form_state['values']['op'];
-
-  if (empty($form_state['notify_emails'])) {
-    variable_del('update_notify_emails');
-  }
-  else {
-    variable_set('update_notify_emails', $form_state['notify_emails']);
-  }
-  unset($form_state['notify_emails']);
-  unset($form_state['values']['update_notify_emails']);
-
-  // See if the update_check_disabled setting is being changed, and if so,
-  // invalidate all cached update status data.
-  $check_disabled = variable_get('update_check_disabled', FALSE);
-  if ($form_state['values']['update_check_disabled'] != $check_disabled) {
-    _update_cache_clear();
-  }
-
-  system_settings_form_submit($form, $form_state);
-}
diff --git a/modules/update/update.test b/modules/update/update.test
deleted file mode 100644
index 9e04cda..0000000
--- a/modules/update/update.test
+++ /dev/null
@@ -1,803 +0,0 @@
-<?php
-
-/**
- * @file
- * This file contains tests for the Update Manager module.
- *
- * The overarching methodology of these tests is we need to compare a given
- * state of installed modules and themes (e.g., version, project grouping,
- * timestamps, etc) against a current state of what the release history XML
- * files we fetch say is available. We have dummy XML files (in the
- * modules/update/tests directory) that describe various scenarios of what's
- * available for different test projects, and we have dummy .info file data
- * (specified via hook_system_info_alter() in the update_test helper module)
- * describing what's currently installed. Each test case defines a set of
- * projects to install, their current state (via the 'update_test_system_info'
- * variable) and the desired available update data (via the
- * 'update_test_xml_map' variable), and then performs a series of assertions
- * that the report matches our expectations given the specific initial state and
- * availability scenario.
- */
-
-/**
- * Defines some shared functions used by all update tests.
- */
-class UpdateTestHelper extends DrupalWebTestCase {
-
-  /**
-   * Refreshes the update status based on the desired available update scenario.
-   *
-   * @param $xml_map
-   *   Array that maps project names to availability scenarios to fetch. The key
-   *   '#all' is used if a project-specific mapping is not defined.
-   * @param $url
-   *   (optional) A string containing the URL to fetch update data from.
-   *   Defaults to 'update-test'.
-   *
-   * @see update_test_mock_page()
-   */
-  protected function refreshUpdateStatus($xml_map, $url = 'update-test') {
-    // Tell the Update Manager module to fetch from the URL provided by
-    // update_test module.
-    variable_set('update_fetch_url', url($url, array('absolute' => TRUE)));
-    // Save the map for update_test_mock_page() to use.
-    variable_set('update_test_xml_map', $xml_map);
-    // Manually check the update status.
-    $this->drupalGet('admin/reports/updates/check');
-  }
-
-  /**
-   * Runs a series of assertions that are applicable to all update statuses.
-   */
-  protected function standardTests() {
-    $this->assertRaw('<h3>' . t('Drupal core') . '</h3>');
-    $this->assertRaw(l(t('Drupal'), 'http://example.com/project/drupal'), 'Link to the Drupal project appears.');
-    $this->assertNoText(t('No available releases found'));
-  }
-
-}
-
-/**
- * Tests behavior related to discovering and listing updates to Drupal core.
- */
-class UpdateCoreTestCase extends UpdateTestHelper {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Update core functionality',
-      'description' => 'Tests the Update Manager module through a series of functional tests using mock XML data.',
-      'group' => 'Update',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('update_test', 'update');
-    $admin_user = $this->drupalCreateUser(array('administer site configuration', 'administer modules'));
-    $this->drupalLogin($admin_user);
-  }
-
-  /**
-   * Tests the Update Manager module when no updates are available.
-   */
-  function testNoUpdatesAvailable() {
-    $this->setSystemInfo7_0();
-    $this->refreshUpdateStatus(array('drupal' => '0'));
-    $this->standardTests();
-    $this->assertText(t('Up to date'));
-    $this->assertNoText(t('Update available'));
-    $this->assertNoText(t('Security update required!'));
-  }
-
-  /**
-   * Tests the Update Manager module when one normal update is available.
-   */
-  function testNormalUpdateAvailable() {
-    $this->setSystemInfo7_0();
-    $this->refreshUpdateStatus(array('drupal' => '1'));
-    $this->standardTests();
-    $this->assertNoText(t('Up to date'));
-    $this->assertText(t('Update available'));
-    $this->assertNoText(t('Security update required!'));
-    $this->assertRaw(l('7.1', 'http://example.com/drupal-7-1-release'), 'Link to release appears.');
-    $this->assertRaw(l(t('Download'), 'http://example.com/drupal-7-1.tar.gz'), 'Link to download appears.');
-    $this->assertRaw(l(t('Release notes'), 'http://example.com/drupal-7-1-release'), 'Link to release notes appears.');
-  }
-
-  /**
-   * Tests the Update Manager module when a security update is available.
-   */
-  function testSecurityUpdateAvailable() {
-    $this->setSystemInfo7_0();
-    $this->refreshUpdateStatus(array('drupal' => '2-sec'));
-    $this->standardTests();
-    $this->assertNoText(t('Up to date'));
-    $this->assertNoText(t('Update available'));
-    $this->assertText(t('Security update required!'));
-    $this->assertRaw(l('7.2', 'http://example.com/drupal-7-2-release'), 'Link to release appears.');
-    $this->assertRaw(l(t('Download'), 'http://example.com/drupal-7-2.tar.gz'), 'Link to download appears.');
-    $this->assertRaw(l(t('Release notes'), 'http://example.com/drupal-7-2-release'), 'Link to release notes appears.');
-  }
-
-  /**
-   * Ensures proper results where there are date mismatches among modules.
-   */
-  function testDatestampMismatch() {
-    $system_info = array(
-      '#all' => array(
-        // We need to think we're running a -dev snapshot to see dates.
-        'version' => '7.0-dev',
-        'datestamp' => time(),
-      ),
-      'block' => array(
-        // This is 2001-09-09 01:46:40 GMT, so test for "2001-Sep-".
-        'datestamp' => '1000000000',
-      ),
-    );
-    variable_set('update_test_system_info', $system_info);
-    $this->refreshUpdateStatus(array('drupal' => 'dev'));
-    $this->assertNoText(t('2001-Sep-'));
-    $this->assertText(t('Up to date'));
-    $this->assertNoText(t('Update available'));
-    $this->assertNoText(t('Security update required!'));
-  }
-
-  /**
-   * Checks that running cron updates the list of available updates.
-   */
-  function testModulePageRunCron() {
-    $this->setSystemInfo7_0();
-    variable_set('update_fetch_url', url('update-test', array('absolute' => TRUE)));
-    variable_set('update_test_xml_map', array('drupal' => '0'));
-
-    $this->cronRun();
-    $this->drupalGet('admin/modules');
-    $this->assertNoText(t('No update information available.'));
-  }
-
-  /**
-   * Checks the messages at admin/modules when the site is up to date.
-   */
-  function testModulePageUpToDate() {
-    $this->setSystemInfo7_0();
-    // Instead of using refreshUpdateStatus(), set these manually.
-    variable_set('update_fetch_url', url('update-test', array('absolute' => TRUE)));
-    variable_set('update_test_xml_map', array('drupal' => '0'));
-
-    $this->drupalGet('admin/reports/updates');
-    $this->clickLink(t('Check manually'));
-    $this->assertText(t('Checked available update data for one project.'));
-    $this->drupalGet('admin/modules');
-    $this->assertNoText(t('There are updates available for your version of Drupal.'));
-    $this->assertNoText(t('There is a security update available for your version of Drupal.'));
-  }
-
-  /**
-   * Checks the messages at admin/modules when an update is missing.
-   */
-  function testModulePageRegularUpdate() {
-    $this->setSystemInfo7_0();
-    // Instead of using refreshUpdateStatus(), set these manually.
-    variable_set('update_fetch_url', url('update-test', array('absolute' => TRUE)));
-    variable_set('update_test_xml_map', array('drupal' => '1'));
-
-    $this->drupalGet('admin/reports/updates');
-    $this->clickLink(t('Check manually'));
-    $this->assertText(t('Checked available update data for one project.'));
-    $this->drupalGet('admin/modules');
-    $this->assertText(t('There are updates available for your version of Drupal.'));
-    $this->assertNoText(t('There is a security update available for your version of Drupal.'));
-  }
-
-  /**
-   * Checks the messages at admin/modules when a security update is missing.
-   */
-  function testModulePageSecurityUpdate() {
-    $this->setSystemInfo7_0();
-    // Instead of using refreshUpdateStatus(), set these manually.
-    variable_set('update_fetch_url', url('update-test', array('absolute' => TRUE)));
-    variable_set('update_test_xml_map', array('drupal' => '2-sec'));
-
-    $this->drupalGet('admin/reports/updates');
-    $this->clickLink(t('Check manually'));
-    $this->assertText(t('Checked available update data for one project.'));
-    $this->drupalGet('admin/modules');
-    $this->assertNoText(t('There are updates available for your version of Drupal.'));
-    $this->assertText(t('There is a security update available for your version of Drupal.'));
-
-    // Make sure admin/appearance warns you you're missing a security update.
-    $this->drupalGet('admin/appearance');
-    $this->assertNoText(t('There are updates available for your version of Drupal.'));
-    $this->assertText(t('There is a security update available for your version of Drupal.'));
-
-    // Make sure duplicate messages don't appear on Update status pages.
-    $this->drupalGet('admin/reports/status');
-    // We're expecting "There is a security update..." inside the status report
-    // itself, but the drupal_set_message() appears as an li so we can prefix
-    // with that and search for the raw HTML.
-    $this->assertNoRaw('<li>' . t('There is a security update available for your version of Drupal.'));
-
-    $this->drupalGet('admin/reports/updates');
-    $this->assertNoText(t('There is a security update available for your version of Drupal.'));
-
-    $this->drupalGet('admin/reports/updates/settings');
-    $this->assertNoText(t('There is a security update available for your version of Drupal.'));
-  }
-
-  /**
-   * Tests the Update Manager module when the update server returns 503 errors.
-   */
-  function testServiceUnavailable() {
-    $this->refreshUpdateStatus(array(), '503-error');
-    // Ensure that no "Warning: SimpleXMLElement..." parse errors are found.
-    $this->assertNoText('SimpleXMLElement');
-    $this->assertUniqueText(t('Failed to get available update data for one project.'));
-  }
-
-  /**
-   * Tests that exactly one fetch task per project is created and not more.
-   */
-  function testFetchTasks() {
-    $projecta = array(
-      'name' => 'aaa_update_test',
-    );
-    $projectb = array(
-      'name' => 'bbb_update_test',
-    );
-    $queue = DrupalQueue::get('update_fetch_tasks');
-    $this->assertEqual($queue->numberOfItems(), 0, 'Queue is empty');
-    update_create_fetch_task($projecta);
-    $this->assertEqual($queue->numberOfItems(), 1, 'Queue contains one item');
-    update_create_fetch_task($projectb);
-    $this->assertEqual($queue->numberOfItems(), 2, 'Queue contains two items');
-    // Try to add project a again.
-    update_create_fetch_task($projecta);
-    $this->assertEqual($queue->numberOfItems(), 2, 'Queue still contains two items');
-
-    // Clear cache and try again.
-    _update_cache_clear();
-    drupal_static_reset('_update_create_fetch_task');
-    update_create_fetch_task($projecta);
-    $this->assertEqual($queue->numberOfItems(), 2, 'Queue contains two items');
-  }
-
-  /**
-   * Sets the version to 7.0 when no project-specific mapping is defined.
-   */
-  protected function setSystemInfo7_0() {
-    $setting = array(
-      '#all' => array(
-        'version' => '7.0',
-      ),
-    );
-    variable_set('update_test_system_info', $setting);
-  }
-
-}
-
-/**
- * Tests behavior related to handling updates to contributed modules and themes.
- */
-class UpdateTestContribCase extends UpdateTestHelper {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Update contrib functionality',
-      'description' => 'Tests how the Update Manager module handles contributed modules and themes in a series of functional tests using mock XML data.',
-      'group' => 'Update',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('update_test', 'update', 'aaa_update_test', 'bbb_update_test', 'ccc_update_test');
-    $admin_user = $this->drupalCreateUser(array('administer site configuration'));
-    $this->drupalLogin($admin_user);
-  }
-
-  /**
-   * Tests when there is no available release data for a contrib module.
-   */
-  function testNoReleasesAvailable() {
-    $system_info = array(
-      '#all' => array(
-        'version' => '7.0',
-      ),
-      'aaa_update_test' => array(
-        'project' => 'aaa_update_test',
-        'version' => '7.x-1.0',
-        'hidden' => FALSE,
-      ),
-    );
-    variable_set('update_test_system_info', $system_info);
-    $this->refreshUpdateStatus(array('drupal' => '0', 'aaa_update_test' => 'no-releases'));
-    $this->drupalGet('admin/reports/updates');
-    // Cannot use $this->standardTests() because we need to check for the
-    // 'No available releases found' string.
-    $this->assertRaw('<h3>' . t('Drupal core') . '</h3>');
-    $this->assertRaw(l(t('Drupal'), 'http://example.com/project/drupal'));
-    $this->assertText(t('Up to date'));
-    $this->assertRaw('<h3>' . t('Modules') . '</h3>');
-    $this->assertNoText(t('Update available'));
-    $this->assertText(t('No available releases found'));
-    $this->assertNoRaw(l(t('AAA Update test'), 'http://example.com/project/aaa_update_test'));
-  }
-
-  /**
-   * Tests the basic functionality of a contrib module on the status report.
-   */
-  function testUpdateContribBasic() {
-    $system_info = array(
-      '#all' => array(
-        'version' => '7.0',
-      ),
-      'aaa_update_test' => array(
-        'project' => 'aaa_update_test',
-        'version' => '7.x-1.0',
-        'hidden' => FALSE,
-      ),
-    );
-    variable_set('update_test_system_info', $system_info);
-    $this->refreshUpdateStatus(
-      array(
-        'drupal' => '0',
-        'aaa_update_test' => '1_0',
-      )
-    );
-    $this->standardTests();
-    $this->assertText(t('Up to date'));
-    $this->assertRaw('<h3>' . t('Modules') . '</h3>');
-    $this->assertNoText(t('Update available'));
-    $this->assertRaw(l(t('AAA Update test'), 'http://example.com/project/aaa_update_test'), 'Link to aaa_update_test project appears.');
-  }
-
-  /**
-   * Tests that contrib projects are ordered by project name.
-   *
-   * If a project contains multiple modules, we want to make sure that the
-   * available updates report is sorted by the parent project names, not by the
-   * names of the modules included in each project. In this test case, we have
-   * two contrib projects, "BBB Update test" and "CCC Update test". However, we
-   * have a module called "aaa_update_test" that's part of the "CCC Update test"
-   * project. We need to make sure that we see the "BBB" project before the
-   * "CCC" project, even though "CCC" includes a module that's processed first
-   * if you sort alphabetically by module name (which is the order we see things
-   * inside system_rebuild_module_data() for example).
-   */
-  function testUpdateContribOrder() {
-    // We want core to be version 7.0.
-    $system_info = array(
-      '#all' => array(
-        'version' => '7.0',
-      ),
-      // All the rest should be visible as contrib modules at version 7.x-1.0.
-
-      // aaa_update_test needs to be part of the "CCC Update test" project,
-      // which would throw off the report if we weren't properly sorting by
-      // the project names.
-      'aaa_update_test' => array(
-        'project' => 'ccc_update_test',
-        'version' => '7.x-1.0',
-        'hidden' => FALSE,
-      ),
-
-      // This should be its own project, and listed first on the report.
-      'bbb_update_test' => array(
-        'project' => 'bbb_update_test',
-        'version' => '7.x-1.0',
-        'hidden' => FALSE,
-      ),
-
-      // This will contain both aaa_update_test and ccc_update_test, and
-      // should come after the bbb_update_test project.
-      'ccc_update_test' => array(
-        'project' => 'ccc_update_test',
-        'version' => '7.x-1.0',
-        'hidden' => FALSE,
-      ),
-    );
-    variable_set('update_test_system_info', $system_info);
-    $this->refreshUpdateStatus(array('drupal' => '0', '#all' => '1_0'));
-    $this->standardTests();
-    // We're expecting the report to say all projects are up to date.
-    $this->assertText(t('Up to date'));
-    $this->assertNoText(t('Update available'));
-    // We want to see all 3 module names listed, since they'll show up either
-    // as project names or as modules under the "Includes" listing.
-    $this->assertText(t('AAA Update test'));
-    $this->assertText(t('BBB Update test'));
-    $this->assertText(t('CCC Update test'));
-    // We want aaa_update_test included in the ccc_update_test project, not as
-    // its own project on the report.
-    $this->assertNoRaw(l(t('AAA Update test'), 'http://example.com/project/aaa_update_test'), 'Link to aaa_update_test project does not appear.');
-    // The other two should be listed as projects.
-    $this->assertRaw(l(t('BBB Update test'), 'http://example.com/project/bbb_update_test'), 'Link to bbb_update_test project appears.');
-    $this->assertRaw(l(t('CCC Update test'), 'http://example.com/project/ccc_update_test'), 'Link to bbb_update_test project appears.');
-
-    // We want to make sure we see the BBB project before the CCC project.
-    // Instead of just searching for 'BBB Update test' or something, we want
-    // to use the full markup that starts the project entry itself, so that
-    // we're really testing that the project listings are in the right order.
-    $bbb_project_link = '<div class="project"><a href="http://example.com/project/bbb_update_test">BBB Update test</a>';
-    $ccc_project_link = '<div class="project"><a href="http://example.com/project/ccc_update_test">CCC Update test</a>';
-    $this->assertTrue(strpos($this->drupalGetContent(), $bbb_project_link) < strpos($this->drupalGetContent(), $ccc_project_link), "'BBB Update test' project is listed before the 'CCC Update test' project");
-  }
-
-  /**
-   * Tests that subthemes are notified about security updates for base themes.
-   */
-  function testUpdateBaseThemeSecurityUpdate() {
-    // Only enable the subtheme, not the base theme.
-    db_update('system')
-      ->fields(array('status' => 1))
-      ->condition('type', 'theme')
-      ->condition('name', 'update_test_subtheme')
-      ->execute();
-
-    // Define the initial state for core and the subtheme.
-    $system_info = array(
-      // We want core to be version 7.0.
-      '#all' => array(
-        'version' => '7.0',
-      ),
-      // Show the update_test_basetheme
-      'update_test_basetheme' => array(
-        'project' => 'update_test_basetheme',
-        'version' => '7.x-1.0',
-        'hidden' => FALSE,
-      ),
-      // Show the update_test_subtheme
-      'update_test_subtheme' => array(
-        'project' => 'update_test_subtheme',
-        'version' => '7.x-1.0',
-        'hidden' => FALSE,
-      ),
-    );
-    variable_set('update_test_system_info', $system_info);
-    $xml_mapping = array(
-      'drupal' => '0',
-      'update_test_subtheme' => '1_0',
-      'update_test_basetheme' => '1_1-sec',
-    );
-    $this->refreshUpdateStatus($xml_mapping);
-    $this->assertText(t('Security update required!'));
-    $this->assertRaw(l(t('Update test base theme'), 'http://example.com/project/update_test_basetheme'), 'Link to the Update test base theme project appears.');
-  }
-
-  /**
-   * Tests that disabled themes are only shown when desired.
-   */
-  function testUpdateShowDisabledThemes() {
-    // Make sure all the update_test_* themes are disabled.
-    db_update('system')
-      ->fields(array('status' => 0))
-      ->condition('type', 'theme')
-      ->condition('name', 'update_test_%', 'LIKE')
-      ->execute();
-
-    // Define the initial state for core and the test contrib themes.
-    $system_info = array(
-      // We want core to be version 7.0.
-      '#all' => array(
-        'version' => '7.0',
-      ),
-      // The update_test_basetheme should be visible and up to date.
-      'update_test_basetheme' => array(
-        'project' => 'update_test_basetheme',
-        'version' => '7.x-1.1',
-        'hidden' => FALSE,
-      ),
-      // The update_test_subtheme should be visible and up to date.
-      'update_test_subtheme' => array(
-        'project' => 'update_test_subtheme',
-        'version' => '7.x-1.0',
-        'hidden' => FALSE,
-      ),
-    );
-    // When there are contributed modules in the site's file system, the
-    // total number of attempts made in the test may exceed the default value
-    // of update_max_fetch_attempts. Therefore this variable is set very high
-    // to avoid test failures in those cases.
-    variable_set('update_max_fetch_attempts', 99999);
-    variable_set('update_test_system_info', $system_info);
-    $xml_mapping = array(
-      'drupal' => '0',
-      'update_test_subtheme' => '1_0',
-      'update_test_basetheme' => '1_1-sec',
-    );
-    $base_theme_project_link = l(t('Update test base theme'), 'http://example.com/project/update_test_basetheme');
-    $sub_theme_project_link = l(t('Update test subtheme'), 'http://example.com/project/update_test_subtheme');
-    foreach (array(TRUE, FALSE) as $check_disabled) {
-      variable_set('update_check_disabled', $check_disabled);
-      $this->refreshUpdateStatus($xml_mapping);
-      // In neither case should we see the "Themes" heading for enabled themes.
-      $this->assertNoText(t('Themes'));
-      if ($check_disabled) {
-        $this->assertText(t('Disabled themes'));
-        $this->assertRaw($base_theme_project_link, 'Link to the Update test base theme project appears.');
-        $this->assertRaw($sub_theme_project_link, 'Link to the Update test subtheme project appears.');
-      }
-      else {
-        $this->assertNoText(t('Disabled themes'));
-        $this->assertNoRaw($base_theme_project_link, 'Link to the Update test base theme project does not appear.');
-        $this->assertNoRaw($sub_theme_project_link, 'Link to the Update test subtheme project does not appear.');
-      }
-    }
-  }
-
-  /**
-   * Makes sure that if we fetch from a broken URL, sane things happen.
-   */
-  function testUpdateBrokenFetchURL() {
-    $system_info = array(
-      '#all' => array(
-        'version' => '7.0',
-      ),
-      'aaa_update_test' => array(
-        'project' => 'aaa_update_test',
-        'version' => '7.x-1.0',
-        'hidden' => FALSE,
-      ),
-      'bbb_update_test' => array(
-        'project' => 'bbb_update_test',
-        'version' => '7.x-1.0',
-        'hidden' => FALSE,
-      ),
-      'ccc_update_test' => array(
-        'project' => 'ccc_update_test',
-        'version' => '7.x-1.0',
-        'hidden' => FALSE,
-      ),
-    );
-    variable_set('update_test_system_info', $system_info);
-
-    $xml_mapping = array(
-      'drupal' => '0',
-      'aaa_update_test' => '1_0',
-      'bbb_update_test' => 'does-not-exist',
-      'ccc_update_test' => '1_0',
-    );
-    $this->refreshUpdateStatus($xml_mapping);
-
-    $this->assertText(t('Up to date'));
-    // We're expecting the report to say most projects are up to date, so we
-    // hope that 'Up to date' is not unique.
-    $this->assertNoUniqueText(t('Up to date'));
-    // It should say we failed to get data, not that we're missing an update.
-    $this->assertNoText(t('Update available'));
-
-    // We need to check that this string is found as part of a project row,
-    // not just in the "Failed to get available update data for ..." message
-    // at the top of the page.
-    $this->assertRaw('<div class="version-status">' . t('Failed to get available update data'));
-
-    // We should see the output messages from fetching manually.
-    $this->assertUniqueText(t('Checked available update data for 3 projects.'));
-    $this->assertUniqueText(t('Failed to get available update data for one project.'));
-
-    // The other two should be listed as projects.
-    $this->assertRaw(l(t('AAA Update test'), 'http://example.com/project/aaa_update_test'), 'Link to aaa_update_test project appears.');
-    $this->assertNoRaw(l(t('BBB Update test'), 'http://example.com/project/bbb_update_test'), 'Link to bbb_update_test project does not appear.');
-    $this->assertRaw(l(t('CCC Update test'), 'http://example.com/project/ccc_update_test'), 'Link to bbb_update_test project appears.');
-  }
-
-  /**
-   * Checks that hook_update_status_alter() works to change a status.
-   *
-   * We provide the same external data as if aaa_update_test 7.x-1.0 were
-   * installed and that was the latest release. Then we use
-   * hook_update_status_alter() to try to mark this as missing a security
-   * update, then assert if we see the appropriate warnings on the right pages.
-   */
-  function testHookUpdateStatusAlter() {
-    variable_set('allow_authorize_operations', TRUE);
-    $update_admin_user = $this->drupalCreateUser(array('administer site configuration', 'administer software updates'));
-    $this->drupalLogin($update_admin_user);
-
-    $system_info = array(
-      '#all' => array(
-        'version' => '7.0',
-      ),
-      'aaa_update_test' => array(
-        'project' => 'aaa_update_test',
-        'version' => '7.x-1.0',
-        'hidden' => FALSE,
-      ),
-    );
-    variable_set('update_test_system_info', $system_info);
-    $update_status = array(
-      'aaa_update_test' => array(
-        'status' => UPDATE_NOT_SECURE,
-      ),
-    );
-    variable_set('update_test_update_status', $update_status);
-    $this->refreshUpdateStatus(
-      array(
-        'drupal' => '0',
-        'aaa_update_test' => '1_0',
-      )
-    );
-    $this->drupalGet('admin/reports/updates');
-    $this->assertRaw('<h3>' . t('Modules') . '</h3>');
-    $this->assertText(t('Security update required!'));
-    $this->assertRaw(l(t('AAA Update test'), 'http://example.com/project/aaa_update_test'), 'Link to aaa_update_test project appears.');
-
-    // Visit the reports page again without the altering and make sure the
-    // status is back to normal.
-    variable_set('update_test_update_status', array());
-    $this->drupalGet('admin/reports/updates');
-    $this->assertRaw('<h3>' . t('Modules') . '</h3>');
-    $this->assertNoText(t('Security update required!'));
-    $this->assertRaw(l(t('AAA Update test'), 'http://example.com/project/aaa_update_test'), 'Link to aaa_update_test project appears.');
-
-    // Turn the altering back on and visit the Update manager UI.
-    variable_set('update_test_update_status', $update_status);
-    $this->drupalGet('admin/modules/update');
-    $this->assertText(t('Security update'));
-
-    // Turn the altering back off and visit the Update manager UI.
-    variable_set('update_test_update_status', array());
-    $this->drupalGet('admin/modules/update');
-    $this->assertNoText(t('Security update'));
-  }
-
-}
-
-/**
- * Tests project upload and extract functionality.
- */
-class UpdateTestUploadCase extends UpdateTestHelper {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Upload and extract module functionality',
-      'description' => 'Tests the Update Manager module\'s upload and extraction functionality.',
-      'group' => 'Update',
-    );
-  }
-
-  public function setUp() {
-    parent::setUp('update', 'update_test');
-    variable_set('allow_authorize_operations', TRUE);
-    $admin_user = $this->drupalCreateUser(array('administer software updates', 'administer site configuration'));
-    $this->drupalLogin($admin_user);
-  }
-
-  /**
-   * Tests upload and extraction of a module.
-   */
-  public function testUploadModule() {
-    // Images are not valid archives, so get one and try to install it. We
-    // need an extra variable to store the result of drupalGetTestFiles()
-    // since reset() takes an argument by reference and passing in a constant
-    // emits a notice in strict mode.
-    $imageTestFiles = $this->drupalGetTestFiles('image');
-    $invalidArchiveFile = reset($imageTestFiles);
-    $edit = array(
-      'files[project_upload]' => $invalidArchiveFile->uri,
-    );
-    // This also checks that the correct archive extensions are allowed.
-    $this->drupalPost('admin/modules/install', $edit, t('Install'));
-    $this->assertText(t('Only files with the following extensions are allowed: @archive_extensions.', array('@archive_extensions' => archiver_get_extensions())),'Only valid archives can be uploaded.');
-
-    // Check to ensure an existing module can't be reinstalled. Also checks that
-    // the archive was extracted since we can't know if the module is already
-    // installed until after extraction.
-    $validArchiveFile = drupal_get_path('module', 'update') . '/tests/aaa_update_test.tar.gz';
-    $edit = array(
-      'files[project_upload]' => $validArchiveFile,
-    );
-    $this->drupalPost('admin/modules/install', $edit, t('Install'));
-    $this->assertText(t('@module_name is already installed.', array('@module_name' => 'AAA Update test')), 'Existing module was extracted and not reinstalled.');
-  }
-
-  /**
-   * Ensures that archiver extensions are properly merged in the UI.
-   */
-  function testFileNameExtensionMerging() {
-    $this->drupalGet('admin/modules/install');
-    // Make sure the bogus extension supported by update_test.module is there.
-    $this->assertPattern('/file extensions are supported:.*update-test-extension/', "Found 'update-test-extension' extension");
-    // Make sure it didn't clobber the first option from core.
-    $this->assertPattern('/file extensions are supported:.*tar/', "Found 'tar' extension");
-  }
-
-  /**
-   * Checks the messages on update manager pages when missing a security update.
-   */
-  function testUpdateManagerCoreSecurityUpdateMessages() {
-    $setting = array(
-      '#all' => array(
-        'version' => '7.0',
-      ),
-    );
-    variable_set('update_test_system_info', $setting);
-    variable_set('update_fetch_url', url('update-test', array('absolute' => TRUE)));
-    variable_set('update_test_xml_map', array('drupal' => '2-sec'));
-    // Initialize the update status.
-    $this->drupalGet('admin/reports/updates');
-
-    // Now, make sure none of the Update manager pages have duplicate messages
-    // about core missing a security update.
-
-    $this->drupalGet('admin/modules/install');
-    $this->assertNoText(t('There is a security update available for your version of Drupal.'));
-
-    $this->drupalGet('admin/modules/update');
-    $this->assertNoText(t('There is a security update available for your version of Drupal.'));
-
-    $this->drupalGet('admin/appearance/install');
-    $this->assertNoText(t('There is a security update available for your version of Drupal.'));
-
-    $this->drupalGet('admin/appearance/update');
-    $this->assertNoText(t('There is a security update available for your version of Drupal.'));
-
-    $this->drupalGet('admin/reports/updates/install');
-    $this->assertNoText(t('There is a security update available for your version of Drupal.'));
-
-    $this->drupalGet('admin/reports/updates/update');
-    $this->assertNoText(t('There is a security update available for your version of Drupal.'));
-
-    $this->drupalGet('admin/update/ready');
-    $this->assertNoText(t('There is a security update available for your version of Drupal.'));
-  }
-
-}
-
-/**
- * Tests update functionality unrelated to the database.
- */
-class UpdateCoreUnitTestCase extends DrupalUnitTestCase {
-
-  public static function getInfo() {
-    return array(
-      'name' => "Unit tests",
-      'description' => 'Test update funcionality unrelated to the database.',
-      'group' => 'Update',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('update');
-    module_load_include('inc', 'update', 'update.fetch');
-  }
-
-  /**
-   * Tests that _update_build_fetch_url() builds the URL correctly.
-   */
-  function testUpdateBuildFetchUrl() {
-    //first test that we didn't break the trivial case
-    $project['name'] = 'update_test';
-    $project['project_type'] = '';
-    $project['info']['version'] = '';
-    $project['info']['project status url'] = 'http://www.example.com';
-    $project['includes'] = array('module1' => 'Module 1', 'module2' => 'Module 2');
-    $site_key = '';
-    $expected = 'http://www.example.com/' . $project['name'] . '/' . DRUPAL_CORE_COMPATIBILITY;
-    $url = _update_build_fetch_url($project, $site_key);
-    $this->assertEqual($url, $expected, "'$url' when no site_key provided should be '$expected'.");
-
-    //For disabled projects it shouldn't add the site key either.
-    $site_key = 'site_key';
-    $project['project_type'] = 'disabled';
-    $expected = 'http://www.example.com/' . $project['name'] . '/' . DRUPAL_CORE_COMPATIBILITY;
-    $url = _update_build_fetch_url($project, $site_key);
-    $this->assertEqual($url, $expected, "'$url' should be '$expected' for disabled projects.");
-
-    //for enabled projects, adding the site key
-    $project['project_type'] = '';
-    $expected = 'http://www.example.com/' . $project['name'] . '/' . DRUPAL_CORE_COMPATIBILITY;
-    $expected .= '?site_key=site_key';
-    $expected .= '&list=' . rawurlencode('module1,module2');
-    $url = _update_build_fetch_url($project, $site_key);
-    $this->assertEqual($url, $expected, "When site_key provided, '$url' should be '$expected'.");
-
-    // http://drupal.org/node/1481156 test incorrect logic when URL contains
-    // a question mark.
-    $project['info']['project status url'] = 'http://www.example.com/?project=';
-    $expected = 'http://www.example.com/?project=/' . $project['name'] . '/' . DRUPAL_CORE_COMPATIBILITY;
-    $expected .= '&site_key=site_key';
-    $expected .= '&list=' . rawurlencode('module1,module2');
-    $url = _update_build_fetch_url($project, $site_key);
-    $this->assertEqual($url, $expected, "When ? is present, '$url' should be '$expected'.");
-
-  }
-}
\ No newline at end of file
diff --git a/modules/user/tests/user_form_test.info b/modules/user/tests/user_form_test.info
deleted file mode 100644
index 39d6c57..0000000
--- a/modules/user/tests/user_form_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "User module form tests"
-description = "Support module for user form testing."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/user/tests/user_form_test.module b/modules/user/tests/user_form_test.module
deleted file mode 100644
index 4e907f3..0000000
--- a/modules/user/tests/user_form_test.module
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-/**
- * @file
- * Dummy module implementing a form to test user password validation
- */
-
-/**
- * Implements hook_menu().
- *
- * Sets up a form that allows a user to validate password.
- */
-function user_form_test_menu() {
-  $items = array();
-  $items['user_form_test_current_password/%user'] = array(
-    'title' => 'User form test for current password validation',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('user_form_test_current_password',1),
-    'access arguments' => array('administer users'),
-    'type' => MENU_SUGGESTED_ITEM,
-  );
-  return $items;
-}
-
-/**
- * A test form for user_validate_current_pass().
- */
-function user_form_test_current_password($form, &$form_state, $account) {
-  $account->user_form_test_field = '';
-  $form['#user'] = $account;
-
-  $form['user_form_test_field'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Test field'),
-    '#description' => t('A field that would require a correct password to change.'),
-    '#required' => TRUE,
-  );
-  
-  $form['current_pass'] = array(
-    '#type' => 'password',
-    '#title' => t('Current password'),
-    '#size' => 25,
-    '#description' => t('Enter your current password'),
-  );
-
-  $form['current_pass_required_values'] = array(
-    '#type' => 'value',
-    '#value' => array('user_form_test_field' => t('Test field')),
-  );
-
-  $form['#validate'][] = 'user_validate_current_pass';
-  $form['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Test'),
-  );
-  return $form;
-}
-
-/**
- * Submit function for the test form for user_validate_current_pass().
- */
-function user_form_test_current_password_submit($form, &$form_state) {
-  drupal_set_message(t('The password has been validated and the form submitted successfully.'));
-}
diff --git a/modules/user/user-picture.tpl.php b/modules/user/user-picture.tpl.php
deleted file mode 100644
index ee82187..0000000
--- a/modules/user/user-picture.tpl.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to present a picture configured for the
- * user's account.
- *
- * Available variables:
- * - $user_picture: Image set by the user or the site's default. Will be linked
- *   depending on the viewer's permission to view the user's profile page.
- * - $account: Array of account information. Potentially unsafe. Be sure to
- *   check_plain() before use.
- *
- * @see template_preprocess_user_picture()
- *
- * @ingroup themeable
- */
-?>
-<?php if ($user_picture): ?>
-  <div class="user-picture">
-    <?php print $user_picture; ?>
-  </div>
-<?php endif; ?>
diff --git a/modules/user/user-profile-category.tpl.php b/modules/user/user-profile-category.tpl.php
deleted file mode 100644
index 0a86c76..0000000
--- a/modules/user/user-profile-category.tpl.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to present profile categories (groups of
- * profile items).
- *
- * Categories are defined when configuring user profile fields for the site.
- * It can also be defined by modules. All profile items for a category will be
- * output through the $profile_items variable.
- *
- * @see user-profile-item.tpl.php
- *      where each profile item is rendered. It is implemented as a definition
- *      list by default.
- * @see user-profile.tpl.php
- *      where all items and categories are collected and printed out.
- *
- * Available variables:
- * - $title: Category title for the group of items.
- * - $profile_items: All the items for the group rendered through
- *   user-profile-item.tpl.php.
- * - $attributes: HTML attributes. Usually renders classes.
- *
- * @see template_preprocess_user_profile_category()
- */
-?>
-<?php if ($title): ?>
-  <h3><?php print $title; ?></h3>
-<?php endif; ?>
-
-<dl<?php print $attributes; ?>>
-  <?php print $profile_items; ?>
-</dl>
diff --git a/modules/user/user-profile-item.tpl.php b/modules/user/user-profile-item.tpl.php
deleted file mode 100644
index 042d43a..0000000
--- a/modules/user/user-profile-item.tpl.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to present profile items (values from user
- * account profile fields or modules).
- *
- * This template is used to loop through and render each field configured
- * for the user's account. It can also be the data from modules. The output is
- * grouped by categories.
- *
- * @see user-profile-category.tpl.php
- *      for the parent markup. Implemented as a definition list by default.
- * @see user-profile.tpl.php
- *      where all items and categories are collected and printed out.
- *
- * Available variables:
- * - $title: Field title for the profile item.
- * - $value: User defined value for the profile item or data from a module.
- * - $attributes: HTML attributes. Usually renders classes.
- *
- * @see template_preprocess_user_profile_item()
- */
-?>
-<dt<?php print $attributes; ?>><?php print $title; ?></dt>
-<dd<?php print $attributes; ?>><?php print $value; ?></dd>
diff --git a/modules/user/user-profile.tpl.php b/modules/user/user-profile.tpl.php
deleted file mode 100644
index 0a64fed..0000000
--- a/modules/user/user-profile.tpl.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to present all user profile data.
- *
- * This template is used when viewing a registered member's profile page,
- * e.g., example.com/user/123. 123 being the users ID.
- *
- * Use render($user_profile) to print all profile items, or print a subset
- * such as render($user_profile['user_picture']). Always call
- * render($user_profile) at the end in order to print all remaining items. If
- * the item is a category, it will contain all its profile items. By default,
- * $user_profile['summary'] is provided, which contains data on the user's
- * history. Other data can be included by modules. $user_profile['user_picture']
- * is available for showing the account picture.
- *
- * Available variables:
- *   - $user_profile: An array of profile items. Use render() to print them.
- *   - Field variables: for each field instance attached to the user a
- *     corresponding variable is defined; e.g., $account->field_example has a
- *     variable $field_example defined. When needing to access a field's raw
- *     values, developers/themers are strongly encouraged to use these
- *     variables. Otherwise they will have to explicitly specify the desired
- *     field language, e.g. $account->field_example['en'], thus overriding any
- *     language negotiation rule that was previously applied.
- *
- * @see user-profile-category.tpl.php
- *   Where the html is handled for the group.
- * @see user-profile-item.tpl.php
- *   Where the html is handled for each item in the group.
- * @see template_preprocess_user_profile()
- *
- * @ingroup themeable
- */
-?>
-<div class="profile"<?php print $attributes; ?>>
-  <?php print render($user_profile); ?>
-</div>
diff --git a/modules/user/user-rtl.css b/modules/user/user-rtl.css
deleted file mode 100644
index 642c943..0000000
--- a/modules/user/user-rtl.css
+++ /dev/null
@@ -1,34 +0,0 @@
-
-#permissions td.permission {
-  padding-left: 0;
-  padding-right: 1.5em;
-}
-
-#user-admin-roles .form-item-name {
-  float: right;
-  margin-left: 1em;
-  margin-right: 0;
-}
-
-/**
- * Password strength indicator.
- */
-.password-strength {
-  float: left;
-}
-.password-strength-text {
-  float: left;
-}
-div.password-confirm {
-  float: left;
-}
-.confirm-parent,
-.password-parent {
-  clear: right;
-}
-
-/* Generated by user.module but used by profile.module: */
-.profile .user-picture {
-  float: left;
-  margin: 0 0 1em 1em;
-}
diff --git a/modules/user/user.admin.inc b/modules/user/user.admin.inc
deleted file mode 100644
index 6ca330b..0000000
--- a/modules/user/user.admin.inc
+++ /dev/null
@@ -1,1053 +0,0 @@
-<?php
-
-/**
- * @file
- * Admin page callback file for the user module.
- */
-
-/**
- * Page callback: Generates the appropriate user administration form.
- *
- * This function generates the user registration, multiple user cancellation,
- * or filtered user list admin form, depending on the argument and the POST
- * form values.
- *
- * @param string $callback_arg
- *   (optional) Indicates which form to build. Defaults to '', which will
- *   trigger the user filter form. If the POST value 'op' is present, this
- *   function uses that value as the callback argument.
- *
- * @return string
- *   A renderable form array for the respective request.
- */
-function user_admin($callback_arg = '') {
-  $op = isset($_POST['op']) ? $_POST['op'] : $callback_arg;
-
-  switch ($op) {
-    case t('Create new account'):
-    case 'create':
-      $build['user_register'] = drupal_get_form('user_register_form');
-      break;
-    default:
-      if (!empty($_POST['accounts']) && isset($_POST['operation']) && ($_POST['operation'] == 'cancel')) {
-        $build['user_multiple_cancel_confirm'] = drupal_get_form('user_multiple_cancel_confirm');
-      }
-      else {
-        $build['user_filter_form'] = drupal_get_form('user_filter_form');
-        $build['user_admin_account'] = drupal_get_form('user_admin_account');
-      }
-  }
-  return $build;
-}
-
-/**
- * Form builder; Return form for user administration filters.
- *
- * @ingroup forms
- * @see user_filter_form_submit()
- */
-function user_filter_form() {
-  $session = isset($_SESSION['user_overview_filter']) ? $_SESSION['user_overview_filter'] : array();
-  $filters = user_filters();
-
-  $i = 0;
-  $form['filters'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Show only users where'),
-    '#theme' => 'exposed_filters__user',
-  );
-  foreach ($session as $filter) {
-    list($type, $value) = $filter;
-    if ($type == 'permission') {
-      // Merge arrays of module permissions into one.
-      // Slice past the first element '[any]' whose value is not an array.
-      $options = call_user_func_array('array_merge', array_slice($filters[$type]['options'], 1));
-      $value = $options[$value];
-    }
-    else {
-      $value = $filters[$type]['options'][$value];
-    }
-    $t_args = array('%property' => $filters[$type]['title'], '%value' => $value);
-    if ($i++) {
-      $form['filters']['current'][] = array('#markup' => t('and where %property is %value', $t_args));
-    }
-    else {
-      $form['filters']['current'][] = array('#markup' => t('%property is %value', $t_args));
-    }
-  }
-
-  $form['filters']['status'] = array(
-    '#type' => 'container',
-    '#attributes' => array('class' => array('clearfix')),
-    '#prefix' => ($i ? '<div class="additional-filters">' . t('and where') . '</div>' : ''),
-  );
-  $form['filters']['status']['filters'] = array(
-    '#type' => 'container',
-    '#attributes' => array('class' => array('filters')),
-  );
-  foreach ($filters as $key => $filter) {
-    $form['filters']['status']['filters'][$key] = array(
-      '#type' => 'select',
-      '#options' => $filter['options'],
-      '#title' => $filter['title'],
-      '#default_value' => '[any]',
-    );
-  }
-
-  $form['filters']['status']['actions'] = array(
-    '#type' => 'actions',
-    '#attributes' => array('class' => array('container-inline')),
-  );
-  $form['filters']['status']['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => (count($session) ? t('Refine') : t('Filter')),
-  );
-  if (count($session)) {
-    $form['filters']['status']['actions']['undo'] = array(
-      '#type' => 'submit',
-      '#value' => t('Undo'),
-    );
-    $form['filters']['status']['actions']['reset'] = array(
-      '#type' => 'submit',
-      '#value' => t('Reset'),
-    );
-  }
-
-  drupal_add_library('system', 'drupal.form');
-
-  return $form;
-}
-
-/**
- * Process result from user administration filter form.
- */
-function user_filter_form_submit($form, &$form_state) {
-  $op = $form_state['values']['op'];
-  $filters = user_filters();
-  switch ($op) {
-    case t('Filter'):
-    case t('Refine'):
-      // Apply every filter that has a choice selected other than 'any'.
-      foreach ($filters as $filter => $options) {
-        if (isset($form_state['values'][$filter]) && $form_state['values'][$filter] != '[any]') {
-          // Merge an array of arrays into one if necessary.
-          $options = ($filter == 'permission') ? form_options_flatten($filters[$filter]['options']) : $filters[$filter]['options'];
-          // Only accept valid selections offered on the dropdown, block bad input.
-          if (isset($options[$form_state['values'][$filter]])) {
-            $_SESSION['user_overview_filter'][] = array($filter, $form_state['values'][$filter]);
-          }
-        }
-      }
-      break;
-    case t('Undo'):
-      array_pop($_SESSION['user_overview_filter']);
-      break;
-    case t('Reset'):
-      $_SESSION['user_overview_filter'] = array();
-      break;
-    case t('Update'):
-      return;
-  }
-
-  $form_state['redirect'] = 'admin/people';
-  return;
-}
-
-/**
- * Form builder; User administration page.
- *
- * @ingroup forms
- * @see user_admin_account_validate()
- * @see user_admin_account_submit()
- */
-function user_admin_account() {
-
-  $header = array(
-    'username' => array('data' => t('Username'), 'field' => 'u.name'),
-    'status' => array('data' => t('Status'), 'field' => 'u.status'),
-    'roles' => array('data' => t('Roles')),
-    'member_for' => array('data' => t('Member for'), 'field' => 'u.created', 'sort' => 'desc'),
-    'access' => array('data' => t('Last access'), 'field' => 'u.access'),
-    'operations' => array('data' => t('Operations')),
-  );
-
-  $query = db_select('users', 'u');
-  $query->condition('u.uid', 0, '<>');
-  user_build_filter_query($query);
-
-  $count_query = clone $query;
-  $count_query->addExpression('COUNT(u.uid)');
-
-  $query = $query->extend('PagerDefault')->extend('TableSort');
-  $query
-    ->fields('u', array('uid', 'name', 'status', 'created', 'access'))
-    ->limit(50)
-    ->orderByHeader($header)
-    ->setCountQuery($count_query);
-  $result = $query->execute();
-
-  $form['options'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Update options'),
-    '#attributes' => array('class' => array('container-inline')),
-  );
-  $options = array();
-  foreach (module_invoke_all('user_operations') as $operation => $array) {
-    $options[$operation] = $array['label'];
-  }
-  $form['options']['operation'] = array(
-    '#type' => 'select',
-    '#title' => t('Operation'),
-    '#title_display' => 'invisible',
-    '#options' => $options,
-    '#default_value' => 'unblock',
-  );
-  $options = array();
-  $form['options']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Update'),
-  );
-
-  $destination = drupal_get_destination();
-
-  $status = array(t('blocked'), t('active'));
-  $roles = array_map('check_plain', user_roles(TRUE));
-  $accounts = array();
-  foreach ($result as $account) {
-    $users_roles = array();
-    $roles_result = db_query('SELECT rid FROM {users_roles} WHERE uid = :uid', array(':uid' => $account->uid));
-    foreach ($roles_result as $user_role) {
-      $users_roles[] = $roles[$user_role->rid];
-    }
-    asort($users_roles);
-
-    $options[$account->uid] = array(
-      'username' => theme('username', array('account' => $account)),
-      'status' =>  $status[$account->status],
-      'roles' => theme('item_list', array('items' => $users_roles)),
-      'member_for' => format_interval(REQUEST_TIME - $account->created),
-      'access' =>  $account->access ? t('@time ago', array('@time' => format_interval(REQUEST_TIME - $account->access))) : t('never'),
-      'operations' => array('data' => array('#type' => 'link', '#title' => t('edit'), '#href' => "user/$account->uid/edit", '#options' => array('query' => $destination))),
-    );
-  }
-
-  $form['accounts'] = array(
-    '#type' => 'tableselect',
-    '#header' => $header,
-    '#options' => $options,
-    '#empty' => t('No people available.'),
-  );
-  $form['pager'] = array('#markup' => theme('pager'));
-
-  return $form;
-}
-
-/**
- * Submit the user administration update form.
- */
-function user_admin_account_submit($form, &$form_state) {
-  $operations = module_invoke_all('user_operations', $form, $form_state);
-  $operation = $operations[$form_state['values']['operation']];
-  // Filter out unchecked accounts.
-  $accounts = array_filter($form_state['values']['accounts']);
-  if ($function = $operation['callback']) {
-    // Add in callback arguments if present.
-    if (isset($operation['callback arguments'])) {
-      $args = array_merge(array($accounts), $operation['callback arguments']);
-    }
-    else {
-      $args = array($accounts);
-    }
-    call_user_func_array($function, $args);
-
-    drupal_set_message(t('The update has been performed.'));
-  }
-}
-
-function user_admin_account_validate($form, &$form_state) {
-  $form_state['values']['accounts'] = array_filter($form_state['values']['accounts']);
-  if (count($form_state['values']['accounts']) == 0) {
-    form_set_error('', t('No users selected.'));
-  }
-}
-
-/**
- * Form builder; Configure user settings for this site.
- *
- * @ingroup forms
- * @see system_settings_form()
- */
-function user_admin_settings() {
-  // Settings for anonymous users.
-  $form['anonymous_settings'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Anonymous users'),
-  );
-  $form['anonymous_settings']['anonymous'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Name'),
-    '#default_value' => variable_get('anonymous', t('Anonymous')),
-    '#description' => t('The name used to indicate anonymous users.'),
-    '#required' => TRUE,
-  );
-
-  // Administrative role option.
-  $form['admin_role'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Administrator role'),
-  );
-
-  // Do not allow users to set the anonymous or authenticated user roles as the
-  // administrator role.
-  $roles = user_roles();
-  unset($roles[DRUPAL_ANONYMOUS_RID]);
-  unset($roles[DRUPAL_AUTHENTICATED_RID]);
-  $roles[0] = t('disabled');
-
-  $form['admin_role']['user_admin_role'] = array(
-    '#type' => 'select',
-    '#title' => t('Administrator role'),
-    '#default_value' => variable_get('user_admin_role', 0),
-    '#options' => $roles,
-    '#description' => t('This role will be automatically assigned new permissions whenever a module is enabled. Changing this setting will not affect existing permissions.'),
-  );
-
-  // User registration settings.
-  $form['registration_cancellation'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Registration and cancellation'),
-  );
-  $form['registration_cancellation']['user_register'] = array(
-    '#type' => 'radios',
-    '#title' => t('Who can register accounts?'),
-    '#default_value' => variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL),
-    '#options' => array(
-      USER_REGISTER_ADMINISTRATORS_ONLY => t('Administrators only'),
-      USER_REGISTER_VISITORS => t('Visitors'),
-      USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL => t('Visitors, but administrator approval is required'),
-    )
-  );
-  $form['registration_cancellation']['user_email_verification'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Require e-mail verification when a visitor creates an account.'),
-    '#default_value' => variable_get('user_email_verification', TRUE),
-    '#description' => t('New users will be required to validate their e-mail address prior to logging into the site, and will be assigned a system-generated password. With this setting disabled, users will be logged in immediately upon registering, and may select their own passwords during registration.')
-  );
-  module_load_include('inc', 'user', 'user.pages');
-  $form['registration_cancellation']['user_cancel_method'] = array(
-    '#type' => 'item',
-    '#title' => t('When cancelling a user account'),
-    '#description' => t('Users with the %select-cancel-method or %administer-users <a href="@permissions-url">permissions</a> can override this default method.', array('%select-cancel-method' => t('Select method for cancelling account'), '%administer-users' => t('Administer users'), '@permissions-url' => url('admin/people/permissions'))),
-  );
-  $form['registration_cancellation']['user_cancel_method'] += user_cancel_methods();
-  foreach (element_children($form['registration_cancellation']['user_cancel_method']) as $element) {
-    // Remove all account cancellation methods that have #access defined, as
-    // those cannot be configured as default method.
-    if (isset($form['registration_cancellation']['user_cancel_method'][$element]['#access'])) {
-      $form['registration_cancellation']['user_cancel_method'][$element]['#access'] = FALSE;
-    }
-    // Remove the description (only displayed on the confirmation form).
-    else {
-      unset($form['registration_cancellation']['user_cancel_method'][$element]['#description']);
-    }
-  }
-
-  // Account settings.
-  $form['personalization'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Personalization'),
-  );
-  $form['personalization']['user_signatures'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Enable signatures.'),
-    '#default_value' => variable_get('user_signatures', 0),
-  );
-  // If picture support is enabled, check whether the picture directory exists.
-  if (variable_get('user_pictures', 0)) {
-    $picture_path =  file_default_scheme() . '://' . variable_get('user_picture_path', 'pictures');
-    if (!file_prepare_directory($picture_path, FILE_CREATE_DIRECTORY)) {
-      form_set_error('user_picture_path', t('The directory %directory does not exist or is not writable.', array('%directory' => $picture_path)));
-      watchdog('file system', 'The directory %directory does not exist or is not writable.', array('%directory' => $picture_path), WATCHDOG_ERROR);
-    }
-  }
-  $picture_support = variable_get('user_pictures', 0);
-  $form['personalization']['user_pictures'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Enable user pictures.'),
-    '#default_value' => $picture_support,
-  );
-  drupal_add_js(drupal_get_path('module', 'user') . '/user.js');
-  $form['personalization']['pictures'] = array(
-    '#type' => 'container',
-    '#states' => array(
-      // Hide the additional picture settings when user pictures are disabled.
-      'invisible' => array(
-        'input[name="user_pictures"]' => array('checked' => FALSE),
-      ),
-    ),
-  );
-  $form['personalization']['pictures']['user_picture_path'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Picture directory'),
-    '#default_value' => variable_get('user_picture_path', 'pictures'),
-    '#size' => 30,
-    '#maxlength' => 255,
-    '#description' => t('Subdirectory in the file upload directory where pictures will be stored.'),
-  );
-  $form['personalization']['pictures']['user_picture_default'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Default picture'),
-    '#default_value' => variable_get('user_picture_default', ''),
-    '#size' => 30,
-    '#maxlength' => 255,
-    '#description' => t('URL of picture to display for users with no custom picture selected. Leave blank for none.'),
-  );
-  if (module_exists('image')) {
-    $form['personalization']['pictures']['settings']['user_picture_style'] = array(
-      '#type' => 'select',
-      '#title' => t('Picture display style'),
-      '#options' => image_style_options(TRUE, PASS_THROUGH),
-      '#default_value' => variable_get('user_picture_style', ''),
-      '#description' => t('The style selected will be used on display, while the original image is retained. Styles may be configured in the <a href="!url">Image styles</a> administration area.', array('!url' => url('admin/config/media/image-styles'))),
-    );
-  }
-  $form['personalization']['pictures']['user_picture_dimensions'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Picture upload dimensions'),
-    '#default_value' => variable_get('user_picture_dimensions', '85x85'),
-    '#size' => 10,
-    '#maxlength' => 10,
-    '#field_suffix' => ' ' . t('pixels'),
-    '#description' => t('Pictures larger than this will be scaled down to this size.'),
-  );
-  $form['personalization']['pictures']['user_picture_file_size'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Picture upload file size'),
-    '#default_value' => variable_get('user_picture_file_size', '30'),
-    '#size' => 10,
-    '#maxlength' => 10,
-    '#field_suffix' => ' ' . t('KB'),
-    '#description' => t('Maximum allowed file size for uploaded pictures. Upload size is normally limited only by the PHP maximum post and file upload settings, and images are automatically scaled down to the dimensions specified above.'),
-    '#element_validate' => array('element_validate_integer_positive'),
-  );
-  $form['personalization']['pictures']['user_picture_guidelines'] = array(
-    '#type' => 'textarea',
-    '#title' => t('Picture guidelines'),
-    '#default_value' => variable_get('user_picture_guidelines', ''),
-    '#description' => t("This text is displayed at the picture upload form in addition to the default guidelines. It's useful for helping or instructing your users."),
-  );
-
-  $form['email_title'] = array(
-    '#type' => 'item',
-    '#title' => t('E-mails'),
-  );
-  $form['email'] = array(
-    '#type' => 'vertical_tabs',
-  );
-  // These email tokens are shared for all settings, so just define
-  // the list once to help ensure they stay in sync.
-  $email_token_help = t('Available variables are: [site:name], [site:url], [user:name], [user:mail], [site:login-url], [site:url-brief], [user:edit-url], [user:one-time-login-url], [user:cancel-url].');
-
-  $form['email_admin_created'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Welcome (new user created by administrator)'),
-    '#collapsible' => TRUE,
-    '#collapsed' => (variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL) != USER_REGISTER_ADMINISTRATORS_ONLY),
-    '#description' => t('Edit the welcome e-mail messages sent to new member accounts created by an administrator.') . ' ' . $email_token_help,
-    '#group' => 'email',
-  );
-  $form['email_admin_created']['user_mail_register_admin_created_subject'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Subject'),
-    '#default_value' => _user_mail_text('register_admin_created_subject', NULL, array(), FALSE),
-    '#maxlength' => 180,
-  );
-  $form['email_admin_created']['user_mail_register_admin_created_body'] = array(
-    '#type' => 'textarea',
-    '#title' => t('Body'),
-    '#default_value' => _user_mail_text('register_admin_created_body', NULL, array(), FALSE),
-    '#rows' => 15,
-  );
-
-  $form['email_pending_approval'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Welcome (awaiting approval)'),
-    '#collapsible' => TRUE,
-    '#collapsed' => (variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL) != USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL),
-    '#description' => t('Edit the welcome e-mail messages sent to new members upon registering, when administrative approval is required.') . ' ' . $email_token_help,
-    '#group' => 'email',
-  );
-  $form['email_pending_approval']['user_mail_register_pending_approval_subject'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Subject'),
-    '#default_value' => _user_mail_text('register_pending_approval_subject', NULL, array(), FALSE),
-    '#maxlength' => 180,
-  );
-  $form['email_pending_approval']['user_mail_register_pending_approval_body'] = array(
-    '#type' => 'textarea',
-    '#title' => t('Body'),
-    '#default_value' => _user_mail_text('register_pending_approval_body', NULL, array(), FALSE),
-    '#rows' => 8,
-  );
-
-  $form['email_no_approval_required'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Welcome (no approval required)'),
-    '#collapsible' => TRUE,
-    '#collapsed' => (variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL) != USER_REGISTER_VISITORS),
-    '#description' => t('Edit the welcome e-mail messages sent to new members upon registering, when no administrator approval is required.') . ' ' . $email_token_help,
-    '#group' => 'email',
-  );
-  $form['email_no_approval_required']['user_mail_register_no_approval_required_subject'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Subject'),
-    '#default_value' => _user_mail_text('register_no_approval_required_subject', NULL, array(), FALSE),
-    '#maxlength' => 180,
-  );
-  $form['email_no_approval_required']['user_mail_register_no_approval_required_body'] = array(
-    '#type' => 'textarea',
-    '#title' => t('Body'),
-    '#default_value' => _user_mail_text('register_no_approval_required_body', NULL, array(), FALSE),
-    '#rows' => 15,
-  );
-
-  $form['email_password_reset'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Password recovery'),
-    '#collapsible' => TRUE,
-    '#collapsed' => TRUE,
-    '#description' => t('Edit the e-mail messages sent to users who request a new password.') . ' ' . $email_token_help,
-    '#group' => 'email',
-    '#weight' => 10,
-  );
-  $form['email_password_reset']['user_mail_password_reset_subject'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Subject'),
-    '#default_value' => _user_mail_text('password_reset_subject', NULL, array(), FALSE),
-    '#maxlength' => 180,
-  );
-  $form['email_password_reset']['user_mail_password_reset_body'] = array(
-    '#type' => 'textarea',
-    '#title' => t('Body'),
-    '#default_value' => _user_mail_text('password_reset_body', NULL, array(), FALSE),
-    '#rows' => 12,
-  );
-
-  $form['email_activated'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Account activation'),
-    '#collapsible' => TRUE,
-    '#collapsed' => TRUE,
-    '#description' => t('Enable and edit e-mail messages sent to users upon account activation (when an administrator activates an account of a user who has already registered, on a site where administrative approval is required).') . ' ' . $email_token_help,
-    '#group' => 'email',
-  );
-  $form['email_activated']['user_mail_status_activated_notify'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Notify user when account is activated.'),
-    '#default_value' => variable_get('user_mail_status_activated_notify', TRUE),
-  );
-  $form['email_activated']['settings'] = array(
-    '#type' => 'container',
-    '#states' => array(
-      // Hide the additional settings when this email is disabled.
-      'invisible' => array(
-        'input[name="user_mail_status_activated_notify"]' => array('checked' => FALSE),
-      ),
-    ),
-  );
-  $form['email_activated']['settings']['user_mail_status_activated_subject'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Subject'),
-    '#default_value' => _user_mail_text('status_activated_subject', NULL, array(), FALSE),
-    '#maxlength' => 180,
-  );
-  $form['email_activated']['settings']['user_mail_status_activated_body'] = array(
-    '#type' => 'textarea',
-    '#title' => t('Body'),
-    '#default_value' => _user_mail_text('status_activated_body', NULL, array(), FALSE),
-    '#rows' => 15,
-  );
-
-  $form['email_blocked'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Account blocked'),
-    '#collapsible' => TRUE,
-    '#collapsed' => TRUE,
-    '#description' => t('Enable and edit e-mail messages sent to users when their accounts are blocked.') . ' ' . $email_token_help,
-    '#group' => 'email',
-  );
-  $form['email_blocked']['user_mail_status_blocked_notify'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Notify user when account is blocked.'),
-    '#default_value' => variable_get('user_mail_status_blocked_notify', FALSE),
-  );
-  $form['email_blocked']['settings'] = array(
-    '#type' => 'container',
-    '#states' => array(
-      // Hide the additional settings when the blocked email is disabled.
-      'invisible' => array(
-        'input[name="user_mail_status_blocked_notify"]' => array('checked' => FALSE),
-      ),
-    ),
-  );
-  $form['email_blocked']['settings']['user_mail_status_blocked_subject'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Subject'),
-    '#default_value' => _user_mail_text('status_blocked_subject', NULL, array(), FALSE),
-    '#maxlength' => 180,
-  );
-  $form['email_blocked']['settings']['user_mail_status_blocked_body'] = array(
-    '#type' => 'textarea',
-    '#title' => t('Body'),
-    '#default_value' => _user_mail_text('status_blocked_body', NULL, array(), FALSE),
-    '#rows' => 3,
-  );
-
-  $form['email_cancel_confirm'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Account cancellation confirmation'),
-    '#collapsible' => TRUE,
-    '#collapsed' => TRUE,
-    '#description' => t('Edit the e-mail messages sent to users when they attempt to cancel their accounts.') . ' ' . $email_token_help,
-    '#group' => 'email',
-  );
-  $form['email_cancel_confirm']['user_mail_cancel_confirm_subject'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Subject'),
-    '#default_value' => _user_mail_text('cancel_confirm_subject', NULL, array(), FALSE),
-    '#maxlength' => 180,
-  );
-  $form['email_cancel_confirm']['user_mail_cancel_confirm_body'] = array(
-    '#type' => 'textarea',
-    '#title' => t('Body'),
-    '#default_value' => _user_mail_text('cancel_confirm_body', NULL, array(), FALSE),
-    '#rows' => 3,
-  );
-
-  $form['email_canceled'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Account canceled'),
-    '#collapsible' => TRUE,
-    '#collapsed' => TRUE,
-    '#description' => t('Enable and edit e-mail messages sent to users when their accounts are canceled.') . ' ' . $email_token_help,
-    '#group' => 'email',
-  );
-  $form['email_canceled']['user_mail_status_canceled_notify'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Notify user when account is canceled.'),
-    '#default_value' => variable_get('user_mail_status_canceled_notify', FALSE),
-  );
-  $form['email_canceled']['settings'] = array(
-    '#type' => 'container',
-    '#states' => array(
-      // Hide the settings when the cancel notify checkbox is disabled.
-      'invisible' => array(
-        'input[name="user_mail_status_canceled_notify"]' => array('checked' => FALSE),
-      ),
-    ),
-  );
-  $form['email_canceled']['settings']['user_mail_status_canceled_subject'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Subject'),
-    '#default_value' => _user_mail_text('status_canceled_subject', NULL, array(), FALSE),
-    '#maxlength' => 180,
-  );
-  $form['email_canceled']['settings']['user_mail_status_canceled_body'] = array(
-    '#type' => 'textarea',
-    '#title' => t('Body'),
-    '#default_value' => _user_mail_text('status_canceled_body', NULL, array(), FALSE),
-    '#rows' => 3,
-  );
-
-  return system_settings_form($form);
-}
-
-/**
- * Menu callback: administer permissions.
- *
- * @ingroup forms
- * @see user_admin_permissions_submit()
- * @see theme_user_admin_permissions()
- */
-function user_admin_permissions($form, $form_state, $rid = NULL) {
-
-  // Retrieve role names for columns.
-  $role_names = user_roles();
-  if (is_numeric($rid)) {
-    $role_names = array($rid => $role_names[$rid]);
-  }
-  // Fetch permissions for all roles or the one selected role.
-  $role_permissions = user_role_permissions($role_names);
-
-  // Store $role_names for use when saving the data.
-  $form['role_names'] = array(
-    '#type' => 'value',
-    '#value' => $role_names,
-  );
-  // Render role/permission overview:
-  $options = array();
-  $module_info = system_get_info('module');
-  $hide_descriptions = system_admin_compact_mode();
-
-  // Get a list of all the modules implementing a hook_permission() and sort by
-  // display name.
-  $modules = array();
-  foreach (module_implements('permission') as $module) {
-    $modules[$module] = $module_info[$module]['name'];
-  }
-  asort($modules);
-
-  foreach ($modules as $module => $display_name) {
-    if ($permissions = module_invoke($module, 'permission')) {
-      $form['permission'][] = array(
-        '#markup' => $module_info[$module]['name'],
-        '#id' => $module,
-      );
-      foreach ($permissions as $perm => $perm_item) {
-        // Fill in default values for the permission.
-        $perm_item += array(
-          'description' => '',
-          'restrict access' => FALSE,
-          'warning' => !empty($perm_item['restrict access']) ? t('Warning: Give to trusted roles only; this permission has security implications.') : '',
-        );
-        $options[$perm] = '';
-        $form['permission'][$perm] = array(
-          '#type' => 'item',
-          '#markup' => $perm_item['title'],
-          '#description' => theme('user_permission_description', array('permission_item' => $perm_item, 'hide' => $hide_descriptions)),
-        );
-        foreach ($role_names as $rid => $name) {
-          // Builds arrays for checked boxes for each role
-          if (isset($role_permissions[$rid][$perm])) {
-            $status[$rid][] = $perm;
-          }
-        }
-      }
-    }
-  }
-
-  // Have to build checkboxes here after checkbox arrays are built
-  foreach ($role_names as $rid => $name) {
-    $form['checkboxes'][$rid] = array(
-      '#type' => 'checkboxes',
-      '#options' => $options,
-      '#default_value' => isset($status[$rid]) ? $status[$rid] : array(),
-      '#attributes' => array('class' => array('rid-' . $rid)),
-    );
-    $form['role_names'][$rid] = array('#markup' => check_plain($name), '#tree' => TRUE);
-  }
-
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save permissions'));
-
-  $form['#attached']['js'][] = drupal_get_path('module', 'user') . '/user.permissions.js';
-
-  return $form;
-}
-
-/**
- * Save permissions selected on the administer permissions page.
- *
- * @see user_admin_permissions()
- */
-function user_admin_permissions_submit($form, &$form_state) {
-  foreach ($form_state['values']['role_names'] as $rid => $name) {
-    user_role_change_permissions($rid, $form_state['values'][$rid]);
-  }
-
-  drupal_set_message(t('The changes have been saved.'));
-
-  // Clear the cached pages and blocks.
-  cache_clear_all();
-}
-
-/**
- * Returns HTML for the administer permissions page.
- *
- * @param $variables
- *   An associative array containing:
- *   - form: A render element representing the form.
- *
- * @ingroup themeable
- */
-function theme_user_admin_permissions($variables) {
-  $form = $variables['form'];
-
-  $roles = user_roles();
-  foreach (element_children($form['permission']) as $key) {
-    $row = array();
-    // Module name
-    if (is_numeric($key)) {
-      $row[] = array('data' => drupal_render($form['permission'][$key]), 'class' => array('module'), 'id' => 'module-' . $form['permission'][$key]['#id'], 'colspan' => count($form['role_names']['#value']) + 1);
-    }
-    else {
-      // Permission row.
-      $row[] = array(
-        'data' => drupal_render($form['permission'][$key]),
-        'class' => array('permission'),
-      );
-      foreach (element_children($form['checkboxes']) as $rid) {
-        $form['checkboxes'][$rid][$key]['#title'] = $roles[$rid] . ': ' . $form['permission'][$key]['#markup'];
-        $form['checkboxes'][$rid][$key]['#title_display'] = 'invisible';
-        $row[] = array('data' => drupal_render($form['checkboxes'][$rid][$key]), 'class' => array('checkbox'));
-      }
-    }
-    $rows[] = $row;
-  }
-  $header[] = (t('Permission'));
-  foreach (element_children($form['role_names']) as $rid) {
-    $header[] = array('data' => drupal_render($form['role_names'][$rid]), 'class' => array('checkbox'));
-  }
-  $output = theme('system_compact_link');
-  $output .= theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('id' => 'permissions')));
-  $output .= drupal_render_children($form);
-  return $output;
-}
-
-/**
- * Returns HTML for an individual permission description.
- *
- * @param $variables
- *   An associative array containing:
- *   - permission_item: An associative array representing the permission whose
- *     description is being themed. Useful keys include:
- *     - description: The text of the permission description.
- *     - warning: A security-related warning message about the permission (if
- *       there is one).
- *   - hide: A boolean indicating whether or not the permission description was
- *     requested to be hidden rather than shown.
- *
- * @ingroup themeable
- */
-function theme_user_permission_description($variables) {
-  if (!$variables['hide']) {
-    $description = array();
-    $permission_item = $variables['permission_item'];
-    if (!empty($permission_item['description'])) {
-      $description[] = $permission_item['description'];
-    }
-    if (!empty($permission_item['warning'])) {
-      $description[] = '<em class="permission-warning">' . $permission_item['warning'] . '</em>';
-    }
-    if (!empty($description)) {
-      return implode(' ', $description);
-    }
-  }
-}
-
-/**
- * Form to re-order roles or add a new one.
- *
- * @ingroup forms
- * @see theme_user_admin_roles()
- */
-function user_admin_roles($form, $form_state) {
-  $roles = user_roles();
-
-  $form['roles'] = array(
-    '#tree' => TRUE,
-  );
-  $order = 0;
-  foreach ($roles as $rid => $name) {
-    $form['roles'][$rid]['#role'] = (object) array(
-      'rid' => $rid,
-      'name' => $name,
-      'weight' => $order,
-    );
-    $form['roles'][$rid]['#weight'] = $order;
-    $form['roles'][$rid]['weight'] = array(
-      '#type' => 'textfield',
-      '#title' => t('Weight for @title', array('@title' => $name)),
-      '#title_display' => 'invisible',
-      '#size' => 4,
-      '#default_value' => $order,
-      '#attributes' => array('class' => array('role-weight')),
-    );
-    $order++;
-  }
-
-  $form['name'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Name'),
-    '#title_display' => 'invisible',
-    '#size' => 32,
-    '#maxlength' => 64,
-  );
-  $form['add'] = array(
-    '#type' => 'submit',
-    '#value' => t('Add role'),
-    '#validate' => array('user_admin_role_validate'),
-    '#submit' => array('user_admin_role_submit'),
-  );
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Save order'),
-    '#submit' => array('user_admin_roles_order_submit'),
-  );
-
-  return $form;
-}
-
-/**
- * Form submit function. Update the role weights.
- */
-function user_admin_roles_order_submit($form, &$form_state) {
-  foreach ($form_state['values']['roles'] as $rid => $role_values) {
-    $role = $form['roles'][$rid]['#role'];
-    $role->weight = $role_values['weight'];
-    user_role_save($role);
-  }
-  drupal_set_message(t('The role settings have been updated.'));
-}
-
-/**
- * Returns HTML for the role order and new role form.
- *
- * @param $variables
- *   An associative array containing:
- *   - form: A render element representing the form.
- *
- * @ingroup themeable
- */
-function theme_user_admin_roles($variables) {
-  $form = $variables['form'];
-
-  $header = array(t('Name'), t('Weight'), array('data' => t('Operations'), 'colspan' => 2));
-  foreach (element_children($form['roles']) as $rid) {
-    $name = $form['roles'][$rid]['#role']->name;
-    $row = array();
-    if (in_array($rid, array(DRUPAL_ANONYMOUS_RID, DRUPAL_AUTHENTICATED_RID))) {
-      $row[] = t('@name <em>(locked)</em>', array('@name' => $name));
-      $row[] = drupal_render($form['roles'][$rid]['weight']);
-      $row[] = '';
-      $row[] = l(t('edit permissions'), 'admin/people/permissions/' . $rid);
-    }
-    else {
-      $row[] = check_plain($name);
-      $row[] = drupal_render($form['roles'][$rid]['weight']);
-      $row[] = l(t('edit role'), 'admin/people/permissions/roles/edit/' . $rid);
-      $row[] = l(t('edit permissions'), 'admin/people/permissions/' . $rid);
-    }
-    $rows[] = array('data' => $row, 'class' => array('draggable'));
-  }
-  $rows[] = array(array('data' => drupal_render($form['name']) . drupal_render($form['add']), 'colspan' => 4, 'class' => 'edit-name'));
-
-  drupal_add_tabledrag('user-roles', 'order', 'sibling', 'role-weight');
-
-  $output = theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('id' => 'user-roles')));
-  $output .= drupal_render_children($form);
-
-  return $output;
-}
-
-/**
- * Form to configure a single role.
- *
- * @ingroup forms
- * @see user_admin_role_validate()
- * @see user_admin_role_submit()
- */
-function user_admin_role($form, $form_state, $role) {
-  if ($role->rid == DRUPAL_ANONYMOUS_RID || $role->rid == DRUPAL_AUTHENTICATED_RID) {
-    drupal_goto('admin/people/permissions/roles');
-  }
-
-  // Display the edit role form.
-  $form['name'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Role name'),
-    '#default_value' => $role->name,
-    '#size' => 30,
-    '#required' => TRUE,
-    '#maxlength' => 64,
-    '#description' => t('The name for this role. Example: "moderator", "editorial board", "site architect".'),
-  );
-  $form['rid'] = array(
-    '#type' => 'value',
-    '#value' => $role->rid,
-  );
-  $form['weight'] = array(
-    '#type' => 'value',
-    '#value' => $role->weight,
-  );
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Save role'),
-  );
-  $form['actions']['delete'] = array(
-    '#type' => 'submit',
-    '#value' => t('Delete role'),
-    '#submit' => array('user_admin_role_delete_submit'),
-  );
-
-  return $form;
-}
-
-/**
- * Form validation handler for the user_admin_role() form.
- */
-function user_admin_role_validate($form, &$form_state) {
-  if (!empty($form_state['values']['name'])) {
-    if ($form_state['values']['op'] == t('Save role')) {
-      $role = user_role_load_by_name($form_state['values']['name']);
-      if ($role && $role->rid != $form_state['values']['rid']) {
-        form_set_error('name', t('The role name %name already exists. Choose another role name.', array('%name' => $form_state['values']['name'])));
-      }
-    }
-    elseif ($form_state['values']['op'] == t('Add role')) {
-      if (user_role_load_by_name($form_state['values']['name'])) {
-        form_set_error('name', t('The role name %name already exists. Choose another role name.', array('%name' => $form_state['values']['name'])));
-      }
-    }
-  }
-  else {
-    form_set_error('name', t('You must specify a valid role name.'));
-  }
-}
-
-/**
- * Form submit handler for the user_admin_role() form.
- */
-function user_admin_role_submit($form, &$form_state) {
-  $role = (object) $form_state['values'];
-  if ($form_state['values']['op'] == t('Save role')) {
-    user_role_save($role);
-    drupal_set_message(t('The role has been renamed.'));
-  }
-  elseif ($form_state['values']['op'] == t('Add role')) {
-    user_role_save($role);
-    drupal_set_message(t('The role has been added.'));
-  }
-  $form_state['redirect'] = 'admin/people/permissions/roles';
-  return;
-}
-
-/**
- * Form submit handler for the user_admin_role() form.
- */
-function user_admin_role_delete_submit($form, &$form_state) {
-  $form_state['redirect'] = 'admin/people/permissions/roles/delete/' . $form_state['values']['rid'];
-}
-
-/**
- * Form to confirm role delete operation.
- */
-function user_admin_role_delete_confirm($form, &$form_state, $role) {
-  $form['rid'] = array(
-    '#type' => 'value',
-    '#value' => $role->rid,
-  );
-  return confirm_form($form, t('Are you sure you want to delete the role %name ?', array('%name' => $role->name)), 'admin/people/permissions/roles', t('This action cannot be undone.'), t('Delete'));
-}
-
-/**
- * Form submit handler for user_admin_role_delete_confirm().
- */
-function user_admin_role_delete_confirm_submit($form, &$form_state) {
-  user_role_delete((int) $form_state['values']['rid']);
-  drupal_set_message(t('The role has been deleted.'));
-  $form_state['redirect'] = 'admin/people/permissions/roles';
-}
-
diff --git a/modules/user/user.api.php b/modules/user/user.api.php
deleted file mode 100644
index 3afc88a..0000000
--- a/modules/user/user.api.php
+++ /dev/null
@@ -1,469 +0,0 @@
-<?php
-
-/**
- * @file
- * Hooks provided by the User module.
- */
-
-/**
- * @addtogroup hooks
- * @{
- */
-
-/**
- * Act on user objects when loaded from the database.
- *
- * Due to the static cache in user_load_multiple() you should not use this
- * hook to modify the user properties returned by the {users} table itself
- * since this may result in unreliable results when loading from cache.
- *
- * @param $users
- *   An array of user objects, indexed by uid.
- *
- * @see user_load_multiple()
- * @see profile_user_load()
- */
-function hook_user_load($users) {
-  $result = db_query('SELECT uid, foo FROM {my_table} WHERE uid IN (:uids)', array(':uids' => array_keys($users)));
-  foreach ($result as $record) {
-    $users[$record->uid]->foo = $record->foo;
-  }
-}
-
-/**
- * Respond to user deletion.
- *
- * This hook is invoked from user_delete_multiple() before field_attach_delete()
- * is called and before users are actually removed from the database.
- *
- * Modules should additionally implement hook_user_cancel() to process stored
- * user data for other account cancellation methods.
- *
- * @param $account
- *   The account that is being deleted.
- *
- * @see user_delete_multiple()
- */
-function hook_user_delete($account) {
-  db_delete('mytable')
-    ->condition('uid', $account->uid)
-    ->execute();
-}
-
-/**
- * Act on user account cancellations.
- *
- * This hook is invoked from user_cancel() before a user account is canceled.
- * Depending on the account cancellation method, the module should either do
- * nothing, unpublish content, or anonymize content. See user_cancel_methods()
- * for the list of default account cancellation methods provided by User module.
- * Modules may add further methods via hook_user_cancel_methods_alter().
- *
- * This hook is NOT invoked for the 'user_cancel_delete' account cancellation
- * method. To react on this method, implement hook_user_delete() instead.
- *
- * Expensive operations should be added to the global account cancellation batch
- * by using batch_set().
- *
- * @param $edit
- *   The array of form values submitted by the user.
- * @param $account
- *   The user object on which the operation is being performed.
- * @param $method
- *   The account cancellation method.
- *
- * @see user_cancel_methods()
- * @see hook_user_cancel_methods_alter()
- */
-function hook_user_cancel($edit, $account, $method) {
-  switch ($method) {
-    case 'user_cancel_block_unpublish':
-      // Unpublish nodes (current revisions).
-      module_load_include('inc', 'node', 'node.admin');
-      $nodes = db_select('node', 'n')
-        ->fields('n', array('nid'))
-        ->condition('uid', $account->uid)
-        ->execute()
-        ->fetchCol();
-      node_mass_update($nodes, array('status' => 0));
-      break;
-
-    case 'user_cancel_reassign':
-      // Anonymize nodes (current revisions).
-      module_load_include('inc', 'node', 'node.admin');
-      $nodes = db_select('node', 'n')
-        ->fields('n', array('nid'))
-        ->condition('uid', $account->uid)
-        ->execute()
-        ->fetchCol();
-      node_mass_update($nodes, array('uid' => 0));
-      // Anonymize old revisions.
-      db_update('node_revision')
-        ->fields(array('uid' => 0))
-        ->condition('uid', $account->uid)
-        ->execute();
-      // Clean history.
-      db_delete('history')
-        ->condition('uid', $account->uid)
-        ->execute();
-      break;
-  }
-}
-
-/**
- * Modify account cancellation methods.
- *
- * By implementing this hook, modules are able to add, customize, or remove
- * account cancellation methods. All defined methods are turned into radio
- * button form elements by user_cancel_methods() after this hook is invoked.
- * The following properties can be defined for each method:
- * - title: The radio button's title.
- * - description: (optional) A description to display on the confirmation form
- *   if the user is not allowed to select the account cancellation method. The
- *   description is NOT used for the radio button, but instead should provide
- *   additional explanation to the user seeking to cancel their account.
- * - access: (optional) A boolean value indicating whether the user can access
- *   a method. If #access is defined, the method cannot be configured as default
- *   method.
- *
- * @param $methods
- *   An array containing user account cancellation methods, keyed by method id.
- *
- * @see user_cancel_methods()
- * @see user_cancel_confirm_form()
- */
-function hook_user_cancel_methods_alter(&$methods) {
-  // Limit access to disable account and unpublish content method.
-  $methods['user_cancel_block_unpublish']['access'] = user_access('administer site configuration');
-
-  // Remove the content re-assigning method.
-  unset($methods['user_cancel_reassign']);
-
-  // Add a custom zero-out method.
-  $methods['mymodule_zero_out'] = array(
-    'title' => t('Delete the account and remove all content.'),
-    'description' => t('All your content will be replaced by empty strings.'),
-    // access should be used for administrative methods only.
-    'access' => user_access('access zero-out account cancellation method'),
-  );
-}
-
-/**
- * Add mass user operations.
- *
- * This hook enables modules to inject custom operations into the mass operations
- * dropdown found at admin/people, by associating a callback function with
- * the operation, which is called when the form is submitted. The callback function
- * receives one initial argument, which is an array of the checked users.
- *
- * @return
- *   An array of operations. Each operation is an associative array that may
- *   contain the following key-value pairs:
- *   - "label": Required. The label for the operation, displayed in the dropdown menu.
- *   - "callback": Required. The function to call for the operation.
- *   - "callback arguments": Optional. An array of additional arguments to pass to
- *     the callback function.
- *
- */
-function hook_user_operations() {
-  $operations = array(
-    'unblock' => array(
-      'label' => t('Unblock the selected users'),
-      'callback' => 'user_user_operations_unblock',
-    ),
-    'block' => array(
-      'label' => t('Block the selected users'),
-      'callback' => 'user_user_operations_block',
-    ),
-    'cancel' => array(
-      'label' => t('Cancel the selected user accounts'),
-    ),
-  );
-  return $operations;
-}
-
-/**
- * Retrieve a list of user setting or profile information categories.
- *
- * @return
- *   An array of associative arrays. Each inner array has elements:
- *   - "name": The internal name of the category.
- *   - "title": The human-readable, localized name of the category.
- *   - "weight": An integer specifying the category's sort ordering.
- *   - "access callback": Name of the access callback function to use to
- *     determine whether the user can edit the category. Defaults to using
- *     user_edit_access(). See hook_menu() for more information on access
- *     callbacks.
- *   - "access arguments": Arguments for the access callback function. Defaults
- *     to array(1).
- */
-function hook_user_categories() {
-  return array(array(
-    'name' => 'account',
-    'title' => t('Account settings'),
-    'weight' => 1,
-  ));
-}
-
-/**
- * A user account is about to be created or updated.
- *
- * This hook is primarily intended for modules that want to store properties in
- * the serialized {users}.data column, which is automatically loaded whenever a
- * user account object is loaded, modules may add to $edit['data'] in order
- * to have their data serialized on save.
- *
- * @param $edit
- *   The array of form values submitted by the user. Assign values to this
- *   array to save changes in the database.
- * @param $account
- *   The user object on which the operation is performed. Values assigned in
- *   this object will not be saved in the database.
- * @param $category
- *   The active category of user information being edited.
- *
- * @see hook_user_insert()
- * @see hook_user_update()
- */
-function hook_user_presave(&$edit, $account, $category) {
-  // Make sure that our form value 'mymodule_foo' is stored as
-  // 'mymodule_bar' in the 'data' (serialized) column.
-  if (isset($edit['mymodule_foo'])) {
-    $edit['data']['mymodule_bar'] = $edit['mymodule_foo'];
-  }
-}
-
-/**
- * A user account was created.
- *
- * The module should save its custom additions to the user object into the
- * database.
- *
- * @param $edit
- *   The array of form values submitted by the user.
- * @param $account
- *   The user object on which the operation is being performed.
- * @param $category
- *   The active category of user information being edited.
- *
- * @see hook_user_presave()
- * @see hook_user_update()
- */
-function hook_user_insert(&$edit, $account, $category) {
-  db_insert('mytable')
-    ->fields(array(
-      'myfield' => $edit['myfield'],
-      'uid' => $account->uid,
-    ))
-    ->execute();
-}
-
-/**
- * A user account was updated.
- *
- * Modules may use this hook to update their user data in a custom storage
- * after a user account has been updated.
- *
- * @param $edit
- *   The array of form values submitted by the user.
- * @param $account
- *   The user object on which the operation is performed.
- * @param $category
- *   The active category of user information being edited.
- *
- * @see hook_user_presave()
- * @see hook_user_insert()
- */
-function hook_user_update(&$edit, $account, $category) {
-  db_insert('user_changes')
-    ->fields(array(
-      'uid' => $account->uid,
-      'changed' => time(),
-    ))
-    ->execute();
-}
-
-/**
- * The user just logged in.
- *
- * @param $edit
- *   The array of form values submitted by the user.
- * @param $account
- *   The user object on which the operation was just performed.
- */
-function hook_user_login(&$edit, $account) {
-  // If the user has a NULL time zone, notify them to set a time zone.
-  if (!$account->timezone && variable_get('configurable_timezones', 1) && variable_get('empty_timezone_message', 0)) {
-    drupal_set_message(t('Configure your <a href="@user-edit">account time zone setting</a>.', array('@user-edit' => url("user/$account->uid/edit", array('query' => drupal_get_destination(), 'fragment' => 'edit-timezone')))));
-  }
-}
-
-/**
- * The user just logged out.
- *
- * Note that when this hook is invoked, the changes have not yet been written to
- * the database, because a database transaction is still in progress. The
- * transaction is not finalized until the save operation is entirely completed
- * and user_save() goes out of scope. You should not rely on data in the
- * database at this time as it is not updated yet. You should also note that any
- * write/update database queries executed from this hook are also not committed
- * immediately. Check user_save() and db_transaction() for more info.
- *
- * @param $account
- *   The user object on which the operation was just performed.
- */
-function hook_user_logout($account) {
-  db_insert('logouts')
-    ->fields(array(
-      'uid' => $account->uid,
-      'time' => time(),
-    ))
-    ->execute();
-}
-
-/**
- * The user's account information is being displayed.
- *
- * The module should format its custom additions for display and add them to the
- * $account->content array.
- *
- * Note that when this hook is invoked, the changes have not yet been written to
- * the database, because a database transaction is still in progress. The
- * transaction is not finalized until the save operation is entirely completed
- * and user_save() goes out of scope. You should not rely on data in the
- * database at this time as it is not updated yet. You should also note that any
- * write/update database queries executed from this hook are also not committed
- * immediately. Check user_save() and db_transaction() for more info.
- *
- * @param $account
- *   The user object on which the operation is being performed.
- * @param $view_mode
- *   View mode, e.g. 'full'.
- * @param $langcode
- *   The language code used for rendering.
- *
- * @see hook_user_view_alter()
- * @see hook_entity_view()
- */
-function hook_user_view($account, $view_mode, $langcode) {
-  if (user_access('create blog content', $account)) {
-    $account->content['summary']['blog'] =  array(
-      '#type' => 'user_profile_item',
-      '#title' => t('Blog'),
-      '#markup' => l(t('View recent blog entries'), "blog/$account->uid", array('attributes' => array('title' => t("Read !username's latest blog entries.", array('!username' => format_username($account)))))),
-      '#attributes' => array('class' => array('blog')),
-    );
-  }
-}
-
-/**
- * The user was built; the module may modify the structured content.
- *
- * This hook is called after the content has been assembled in a structured array
- * and may be used for doing processing which requires that the complete user
- * content structure has been built.
- *
- * If the module wishes to act on the rendered HTML of the user rather than the
- * structured content array, it may use this hook to add a #post_render callback.
- * Alternatively, it could also implement hook_preprocess_user_profile(). See
- * drupal_render() and theme() documentation respectively for details.
- *
- * @param $build
- *   A renderable array representing the user.
- *
- * @see user_view()
- * @see hook_entity_view_alter()
- */
-function hook_user_view_alter(&$build) {
-  // Check for the existence of a field added by another module.
-  if (isset($build['an_additional_field'])) {
-    // Change its weight.
-    $build['an_additional_field']['#weight'] = -10;
-  }
-
-  // Add a #post_render callback to act on the rendered HTML of the user.
-  $build['#post_render'][] = 'my_module_user_post_render';
-}
-
-/**
- * Inform other modules that a user role is about to be saved.
- *
- * Modules implementing this hook can act on the user role object before
- * it has been saved to the database.
- *
- * @param $role
- *   A user role object.
- *
- * @see hook_user_role_insert()
- * @see hook_user_role_update()
- */
-function hook_user_role_presave($role) {
-  // Set a UUID for the user role if it doesn't already exist
-  if (empty($role->uuid)) {
-    $role->uuid = uuid_uuid();
-  }
-}
-
-/**
- * Inform other modules that a user role has been added.
- *
- * Modules implementing this hook can act on the user role object when saved to
- * the database. It's recommended that you implement this hook if your module
- * adds additional data to user roles object. The module should save its custom
- * additions to the database.
- *
- * @param $role
- *   A user role object.
- */
-function hook_user_role_insert($role) {
-  // Save extra fields provided by the module to user roles.
-  db_insert('my_module_table')
-    ->fields(array(
-      'rid' => $role->rid,
-      'role_description' => $role->description,
-    ))
-    ->execute();
-}
-
-/**
- * Inform other modules that a user role has been updated.
- *
- * Modules implementing this hook can act on the user role object when updated.
- * It's recommended that you implement this hook if your module adds additional
- * data to user roles object. The module should save its custom additions to
- * the database.
- *
- * @param $role
- *   A user role object.
- */
-function hook_user_role_update($role) {
-  // Save extra fields provided by the module to user roles.
-  db_merge('my_module_table')
-    ->key(array('rid' => $role->rid))
-    ->fields(array(
-      'role_description' => $role->description
-    ))
-    ->execute();
-}
-
-/**
- * Inform other modules that a user role has been deleted.
- *
- * This hook allows you act when a user role has been deleted.
- * If your module stores references to roles, it's recommended that you
- * implement this hook and delete existing instances of the deleted role
- * in your module database tables.
- *
- * @param $role
- *   The $role object being deleted.
- */
-function hook_user_role_delete($role) {
-  // Delete existing instances of the deleted role.
-  db_delete('my_module_table')
-    ->condition('rid', $role->rid)
-    ->execute();
-}
-
-/**
- * @} End of "addtogroup hooks".
- */
diff --git a/modules/user/user.css b/modules/user/user.css
deleted file mode 100644
index 079ec38..0000000
--- a/modules/user/user.css
+++ /dev/null
@@ -1,102 +0,0 @@
-
-#permissions td.module {
-  font-weight: bold;
-}
-#permissions td.permission {
-  padding-left: 1.5em; /* LTR */
-}
-#permissions tr.odd .form-item,
-#permissions tr.even .form-item {
-  white-space: normal;
-}
-#user-admin-settings fieldset .fieldset-description {
-  font-size: 0.85em;
-  padding-bottom: .5em;
-}
-
-/**
- * Override default textfield float to put the "Add role" button next to
- * the input textfield.
- */
-#user-admin-roles td.edit-name {
-  clear: both;
-}
-#user-admin-roles .form-item-name {
-  float: left; /* LTR */
-  margin-right: 1em; /* LTR */
-}
-
-/**
- * Password strength indicator.
- */
-.password-strength {
-  width: 17em;
-  float: right;  /* LTR */
-  margin-top: 1.4em;
-}
-.password-strength-title {
-  display: inline;
-}
-.password-strength-text {
-  float: right; /* LTR */
-  font-weight: bold;
-}
-.password-indicator {
-  background-color: #C4C4C4;
-  height: 0.3em;
-  width: 100%;
-}
-.password-indicator div {
-  height: 100%;
-  width: 0%;
-  background-color: #47C965;
-}
-input.password-confirm,
-input.password-field {
-  width: 16em;
-  margin-bottom: 0.4em;
-}
-div.password-confirm {
-  float: right;  /* LTR */
-  margin-top: 1.5em;
-  visibility: hidden;
-  width: 17em;
-}
-div.form-item div.password-suggestions {
-  padding: 0.2em 0.5em;
-  margin: 0.7em 0;
-  width: 38.5em;
-  border: 1px solid #B4B4B4;
-}
-div.password-suggestions ul {
-  margin-bottom: 0;
-}
-.confirm-parent,
-.password-parent {
-  clear: left; /* LTR */
-  margin: 0;
-  width: 36.3em;
-}
-
-/* Generated by user.module but used by profile.module: */
-.profile {
-  clear: both;
-  margin: 1em 0;
-}
-.profile .user-picture {
-  float: right; /* LTR */
-  margin: 0 1em 1em 0; /* LTR */
-}
-.profile h3 {
-  border-bottom: 1px solid #ccc;
-}
-.profile dl {
-  margin: 0 0 1.5em 0;
-}
-.profile dt {
-  margin: 0 0 0.2em 0;
-  font-weight: bold;
-}
-.profile dd {
-  margin: 0 0 1em 0;
-}
diff --git a/modules/user/user.info b/modules/user/user.info
deleted file mode 100644
index 1154f53..0000000
--- a/modules/user/user.info
+++ /dev/null
@@ -1,10 +0,0 @@
-name = User
-description = Manages the user registration and login system.
-package = Core
-version = VERSION
-core = 7.x
-files[] = user.module
-files[] = user.test
-required = TRUE
-configure = admin/config/people
-stylesheets[all][] = user.css
diff --git a/modules/user/user.install b/modules/user/user.install
deleted file mode 100644
index 4e1a3c2..0000000
--- a/modules/user/user.install
+++ /dev/null
@@ -1,913 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the user module.
- */
-
-/**
- * Implements hook_schema().
- */
-function user_schema() {
-  $schema['authmap'] = array(
-    'description' => 'Stores distributed authentication mapping.',
-    'fields' => array(
-      'aid' => array(
-        'description' => 'Primary Key: Unique authmap ID.',
-        'type' => 'serial',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-      ),
-      'uid' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => "User's {users}.uid.",
-      ),
-      'authname' => array(
-        'type' => 'varchar',
-        'length' => 128,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Unique authentication name.',
-      ),
-      'module' => array(
-        'type' => 'varchar',
-        'length' => 128,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Module which is controlling the authentication.',
-      ),
-    ),
-    'unique keys' => array(
-      'authname' => array('authname'),
-    ),
-    'primary key' => array('aid'),
-    'foreign keys' => array(
-      'user' => array(
-        'table' => 'users',
-        'columns' => array('uid' => 'uid'),
-      ),
-    ),
-  );
-
-  $schema['role_permission'] = array(
-    'description' => 'Stores the permissions assigned to user roles.',
-    'fields' => array(
-      'rid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'description' => 'Foreign Key: {role}.rid.',
-      ),
-      'permission' => array(
-        'type' => 'varchar',
-        'length' => 128,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'A single permission granted to the role identified by rid.',
-      ),
-      'module' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => "The module declaring the permission.",
-      ),
-    ),
-    'primary key' => array('rid', 'permission'),
-    'indexes' => array(
-      'permission' => array('permission'),
-    ),
-    'foreign keys' => array(
-      'role' => array(
-        'table' => 'roles',
-        'columns' => array('rid' => 'rid'),
-      ),
-    ),
-  );
-
-  $schema['role'] = array(
-    'description' => 'Stores user roles.',
-    'fields' => array(
-      'rid' => array(
-        'type' => 'serial',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'description' => 'Primary Key: Unique role ID.',
-      ),
-      'name' => array(
-        'type' => 'varchar',
-        'length' => 64,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Unique role name.',
-        'translatable' => TRUE,
-      ),
-      'weight' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The weight of this role in listings and the user interface.',
-      ),
-    ),
-    'unique keys' => array(
-      'name' => array('name'),
-    ),
-    'primary key' => array('rid'),
-    'indexes' => array(
-      'name_weight' => array('name', 'weight'),
-    ),
-  );
-
-  // The table name here is plural, despite Drupal table naming standards,
-  // because "user" is a reserved word in many databases.
-  $schema['users'] = array(
-    'description' => 'Stores user data.',
-    'fields' => array(
-      'uid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'description' => 'Primary Key: Unique user ID.',
-        'default' => 0,
-      ),
-      'name' => array(
-        'type' => 'varchar',
-        'length' => 60,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => 'Unique user name.',
-      ),
-      'pass' => array(
-        'type' => 'varchar',
-        'length' => 128,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => "User's password (hashed).",
-      ),
-      'mail' => array(
-        'type' => 'varchar',
-        'length' => 254,
-        'not null' => FALSE,
-        'default' => '',
-        'description' => "User's e-mail address.",
-      ),
-      'theme' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => "User's default theme.",
-      ),
-      'signature' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => "User's signature.",
-      ),
-      'signature_format' => array(
-        'type' => 'varchar',
-        'length' => 255,
-        'not null' => FALSE,
-        'description' => 'The {filter_format}.format of the signature.',
-      ),
-      'created' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Timestamp for when user was created.',
-      ),
-      'access' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Timestamp for previous time user accessed the site.',
-      ),
-      'login' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => "Timestamp for user's last login.",
-      ),
-      'status' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'size' => 'tiny',
-        'description' => 'Whether the user is active(1) or blocked(0).',
-      ),
-      'timezone' => array(
-        'type' => 'varchar',
-        'length' => 32,
-        'not null' => FALSE,
-        'description' => "User's time zone.",
-      ),
-      'language' => array(
-        'type' => 'varchar',
-        'length' => 12,
-        'not null' => TRUE,
-        'default' => '',
-        'description' => "User's default language.",
-      ),
-      'picture' => array(
-        'type' => 'int',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => "Foreign key: {file_managed}.fid of user's picture.",
-      ),
-      'init' => array(
-        'type' => 'varchar',
-        'length' => 254,
-        'not null' => FALSE,
-        'default' => '',
-        'description' => 'E-mail address used for initial account creation.',
-      ),
-      'data' => array(
-        'type' => 'blob',
-        'not null' => FALSE,
-        'size' => 'big',
-        'serialize' => TRUE,
-        'description' => 'A serialized array of name value pairs that are related to the user. Any form values posted during user edit are stored and are loaded into the $user object during user_load(). Use of this field is discouraged and it will likely disappear in a future version of Drupal.',
-      ),
-    ),
-    'indexes' => array(
-      'access' => array('access'),
-      'created' => array('created'),
-      'mail' => array('mail'),
-      'picture' => array('picture'),
-    ),
-    'unique keys' => array(
-      'name' => array('name'),
-    ),
-    'primary key' => array('uid'),
-    'foreign keys' => array(
-      'signature_format' => array(
-        'table' => 'filter_format',
-        'columns' => array('signature_format' => 'format'),
-      ),
-    ),
-  );
-
-  $schema['users_roles'] = array(
-    'description' => 'Maps users to roles.',
-    'fields' => array(
-      'uid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Primary Key: {users}.uid for user.',
-      ),
-      'rid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'Primary Key: {role}.rid for role.',
-      ),
-    ),
-    'primary key' => array('uid', 'rid'),
-    'indexes' => array(
-      'rid' => array('rid'),
-    ),
-    'foreign keys' => array(
-      'user' => array(
-        'table' => 'users',
-        'columns' => array('uid' => 'uid'),
-      ),
-      'role' => array(
-        'table' => 'roles',
-        'columns' => array('rid' => 'rid'),
-      ),
-    ),
-  );
-
-  return $schema;
-}
-
-/**
- * Implements hook_install().
- */
-function user_install() {
-  // Insert a row for the anonymous user.
-  db_insert('users')
-    ->fields(array(
-      'uid' => 0,
-      'name' => '',
-      'mail' => '',
-    ))
-    ->execute();
-
-  // We need some placeholders here as name and mail are uniques and data is
-  // presumed to be a serialized array. This will be changed by the settings
-  // form in the installer.
-  db_insert('users')
-    ->fields(array(
-      'uid' => 1,
-      'name' => 'placeholder-for-uid-1',
-      'mail' => 'placeholder-for-uid-1',
-      'created' => REQUEST_TIME,
-      'status' => 1,
-      'data' => NULL,
-    ))
-    ->execute();
-
-  // Built-in roles.
-  $rid_anonymous = db_insert('role')
-    ->fields(array('name' => 'anonymous user', 'weight' => 0))
-    ->execute();
-  $rid_authenticated = db_insert('role')
-    ->fields(array('name' => 'authenticated user', 'weight' => 1))
-    ->execute();
-
-  // Sanity check to ensure the anonymous and authenticated role IDs are the
-  // same as the drupal defined constants. In certain situations, this will
-  // not be true.
-  if ($rid_anonymous != DRUPAL_ANONYMOUS_RID) {
-    db_update('role')
-      ->fields(array('rid' => DRUPAL_ANONYMOUS_RID))
-      ->condition('rid', $rid_anonymous)
-      ->execute();
-  }
-  if ($rid_authenticated != DRUPAL_AUTHENTICATED_RID) {
-    db_update('role')
-      ->fields(array('rid' => DRUPAL_AUTHENTICATED_RID))
-      ->condition('rid', $rid_authenticated)
-      ->execute();
-  }
-}
-
-/**
- * Implements hook_update_dependencies().
- */
-function user_update_dependencies() {
-  // user_update_7006() updates data in the {role_permission} table, so it must
-  // run after system_update_7007(), which populates that table.
-  $dependencies['user'][7006] = array(
-    'system' => 7007,
-  );
-
-  // user_update_7010() needs to query the {filter_format} table to get a list
-  // of existing text formats, so it must run after filter_update_7000(), which
-  // creates that table.
-  $dependencies['user'][7010] = array(
-    'filter' => 7000,
-  );
-
-  // user_update_7012() uses the file API, which relies on the {file_managed}
-  // table, so it must run after system_update_7034(), which creates that
-  // table.
-  $dependencies['user'][7012] = array(
-    'system' => 7034,
-  );
-
-  // user_update_7013() uses the file usage API, which relies on the
-  // {file_usage} table, so it must run after system_update_7059(), which
-  // creates that table.
-  $dependencies['user'][7013] = array(
-    'system' => 7059,
-  );
-
-  return $dependencies;
-}
-
-/**
- * Utility function: grant a set of permissions to a role during update.
- *
- * This function is valid for a database schema version 7000.
- *
- * @param $rid
- *   The role ID.
- * @param $permissions
- *   An array of permissions names.
- * @param $module
- *   The name of the module defining the permissions.
- * @ingroup update_api
- */
-function _update_7000_user_role_grant_permissions($rid, array $permissions, $module) {
-  // Grant new permissions for the role.
-  foreach ($permissions as $name) {
-    db_merge('role_permission')
-      ->key(array(
-        'rid' => $rid,
-        'permission' => $name,
-      ))
-      ->fields(array(
-        'module' => $module,
-      ))
-      ->execute();
-  }
-}
-
-/**
- * @addtogroup updates-6.x-to-7.x
- * @{
- */
-
-/**
- * Increase the length of the password field to accommodate better hashes.
- *
- * Also re-hashes all current passwords to improve security. This may be a
- * lengthy process, and is performed batch-wise.
- */
-function user_update_7000(&$sandbox) {
-  $sandbox['#finished'] = 0;
-  // Lower than DRUPAL_HASH_COUNT to make the update run at a reasonable speed.
-  $hash_count_log2 = 11;
-  // Multi-part update.
-  if (!isset($sandbox['user_from'])) {
-    db_change_field('users', 'pass', 'pass', array('type' => 'varchar', 'length' => 128, 'not null' => TRUE, 'default' => ''));
-    $sandbox['user_from'] = 0;
-    $sandbox['user_count'] = db_query("SELECT COUNT(uid) FROM {users}")->fetchField();
-  }
-  else {
-    require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
-    //  Hash again all current hashed passwords.
-    $has_rows = FALSE;
-    // Update this many per page load.
-    $count = 1000;
-    $result = db_query_range("SELECT uid, pass FROM {users} WHERE uid > 0 ORDER BY uid", $sandbox['user_from'], $count);
-    foreach ($result as $account) {
-      $has_rows = TRUE;
-
-      // If the $account->pass value is not a MD5 hash (a 32 character
-      // hexadecimal string) then skip it.
-      if (!preg_match('/^[0-9a-f]{32}$/', $account->pass)) {
-        continue;
-      }
-
-      $new_hash = user_hash_password($account->pass, $hash_count_log2);
-      if ($new_hash) {
-        // Indicate an updated password.
-        $new_hash  = 'U' . $new_hash;
-        db_update('users')
-          ->fields(array('pass' => $new_hash))
-          ->condition('uid', $account->uid)
-          ->execute();
-      }
-    }
-    $sandbox['#finished'] = $sandbox['user_from']/$sandbox['user_count'];
-    $sandbox['user_from'] += $count;
-    if (!$has_rows) {
-      $sandbox['#finished'] = 1;
-      return t('User passwords rehashed to improve security');
-    }
-  }
-}
-
-/**
- * Remove the 'threshold', 'mode' and 'sort' columns from the {users} table.
- *
- * These fields were previously used to store per-user comment settings.
- */
-
-function user_update_7001() {
-  db_drop_field('users', 'threshold');
-  db_drop_field('users', 'mode');
-  db_drop_field('users', 'sort');
-}
-
-/**
- * Convert user time zones from time zone offsets to time zone names.
- */
-function user_update_7002(&$sandbox) {
-  $sandbox['#finished'] = 0;
-
-  // Multi-part update.
-  if (!isset($sandbox['user_from'])) {
-    db_change_field('users', 'timezone', 'timezone', array('type' => 'varchar', 'length' => 32, 'not null' => FALSE));
-    $sandbox['user_from'] = 0;
-    $sandbox['user_count'] = db_query("SELECT COUNT(uid) FROM {users}")->fetchField();
-    $sandbox['user_not_migrated'] = 0;
-  }
-  else {
-    $timezones = system_time_zones();
-    // Update this many per page load.
-    $count = 10000;
-    $contributed_date_module = db_field_exists('users', 'timezone_name');
-    $contributed_event_module = db_field_exists('users', 'timezone_id');
-
-    $results = db_query_range("SELECT uid FROM {users} ORDER BY uid", $sandbox['user_from'], $count);
-    foreach ($results as $account) {
-      $timezone = NULL;
-      // If the contributed Date module has created a users.timezone_name
-      // column, use this data to set each user's time zone.
-      if ($contributed_date_module) {
-        $date_timezone = db_query("SELECT timezone_name FROM {users} WHERE uid = :uid", array(':uid' => $account->uid))->fetchField();
-        if (isset($timezones[$date_timezone])) {
-          $timezone = $date_timezone;
-        }
-      }
-      // If the contributed Event module has stored user time zone information
-      // use that information to update the user accounts.
-      if (!$timezone && $contributed_event_module) {
-        try {
-          $event_timezone = db_query("SELECT t.name FROM {users} u LEFT JOIN {event_timezones} t ON u.timezone_id = t.timezone WHERE u.uid = :uid", array(':uid' => $account->uid))->fetchField();
-          $event_timezone = str_replace(' ', '_', $event_timezone);
-          if (isset($timezones[$event_timezone])) {
-            $timezone = $event_timezone;
-          }
-        }
-        catch (PDOException $e) {
-          // Ignore error if event_timezones table does not exist or unexpected
-          // schema found.
-        }
-      }
-      if ($timezone) {
-        db_update('users')
-          ->fields(array('timezone' => $timezone))
-          ->condition('uid', $account->uid)
-          ->execute();
-      }
-      else {
-        $sandbox['user_not_migrated']++;
-        db_update('users')
-          ->fields(array('timezone' => NULL))
-          ->condition('uid', $account->uid)
-          ->execute();
-      }
-      $sandbox['user_from']++;
-    }
-
-    $sandbox['#finished'] = $sandbox['user_from'] / $sandbox['user_count'];
-    if ($sandbox['user_from'] == $sandbox['user_count']) {
-      if ($sandbox['user_not_migrated'] > 0) {
-        variable_set('empty_timezone_message', 1);
-        drupal_set_message(format_string('Some user time zones have been emptied and need to be set to the correct values. Use the new <a href="@config-url">time zone options</a> to choose whether to remind users at login to set the correct time zone.', array('@config-url' => url('admin/config/regional/settings'))), 'warning');
-      }
-      return t('Migrated user time zones');
-    }
-  }
-}
-
-/**
- * Update user settings for cancelling user accounts.
- *
- * Prior to 7.x, users were not able to cancel their accounts. When
- * administrators deleted an account, all contents were assigned to uid 0,
- * which is the same as the 'user_cancel_reassign' method now.
- */
-function user_update_7003() {
-  // Set the default account cancellation method.
-  variable_set('user_cancel_method', 'user_cancel_reassign');
-  // Re-assign notification setting.
-  if ($setting = variable_get('user_mail_status_deleted_notify', FALSE)) {
-    variable_set('user_mail_status_canceled_notify', $setting);
-    variable_del('user_mail_status_deleted_notify');
-  }
-  // Re-assign "Account deleted" mail strings to "Account canceled" mail.
-  if ($setting = variable_get('user_mail_status_deleted_subject', FALSE)) {
-    variable_set('user_mail_status_canceled_subject', $setting);
-    variable_del('user_mail_status_deleted_subject');
-  }
-  if ($setting = variable_get('user_mail_status_deleted_body', FALSE)) {
-    variable_set('user_mail_status_canceled_body', $setting);
-    variable_del('user_mail_status_deleted_body');
-  }
-}
-
-/**
- * Changes the users table to allow longer e-mail addresses.
- */
-function user_update_7005(&$sandbox) {
-  $mail_field = array(
-    'type' => 'varchar',
-    'length' => 254,
-    'not null' => FALSE,
-    'default' => '',
-    'description' => "User's e-mail address.",
-  );
-  $init_field = array(
-    'type' => 'varchar',
-    'length' => 254,
-    'not null' => FALSE,
-    'default' => '',
-    'description' => 'E-mail address used for initial account creation.',
-  );
-  db_drop_index('users', 'mail');
-  db_change_field('users', 'mail', 'mail', $mail_field, array('indexes' => array('mail' => array('mail'))));
-  db_change_field('users', 'init', 'init', $init_field);
-}
-
-/**
- * Add module data to {role_permission}.
- */
-function user_update_7006(&$sandbox) {
-  $module_field = array(
-    'type' => 'varchar',
-    'length' => 255,
-    'not null' => TRUE,
-    'default' => '',
-    'description' => "The module declaring the permission.",
-  );
-  // Check that the field hasn't been updated in an aborted run of this
-  // update.
-  if (!db_field_exists('role_permission', 'module')) {
-    // Add a new field for the fid.
-    db_add_field('role_permission', 'module', $module_field);
-  }
-}
-
-/**
- * Add a weight column to user roles.
- */
-function user_update_7007() {
-  db_add_field('role', 'weight', array('type' => 'int', 'not null' => TRUE, 'default' => 0));
-  db_add_index('role', 'name_weight', array('name', 'weight'));
-}
-
-/**
- * If 'user_register' variable was unset in Drupal 6, set it to be the same as
- * the Drupal 6 default setting.
- */
-function user_update_7008() {
-  if (!isset($GLOBALS['conf']['user_register'])) {
-    // Set to the Drupal 6 default, "visitors can create accounts".
-    variable_set('user_register', USER_REGISTER_VISITORS);
-  }
-}
-
-/**
- * Converts fields that store serialized variables from text to blob.
- */
-function user_update_7009() {
-  $spec = array(
-    'type' => 'blob',
-    'not null' => FALSE,
-    'size' => 'big',
-    'serialize' => TRUE,
-    'description' => 'A serialized array of name value pairs that are related to the user. Any form values posted during user edit are stored and are loaded into the $user object during user_load(). Use of this field is discouraged and it will likely disappear in a future version of Drupal.',
-  );
-  db_change_field('users', 'data', 'data', $spec);
-}
-
-/**
- * Update the {user}.signature_format column.
- */
-function user_update_7010() {
-  // Update the database column to allow NULL values.
-  db_change_field('users', 'signature_format', 'signature_format', array(
-    'type' => 'int',
-    'unsigned' => TRUE,
-    'not null' => FALSE,
-    'description' => 'The {filter_format}.format of the signature.',
-  ));
-
-  // Replace the signature format with NULL if the signature is empty and does
-  // not already have a stored text format.
-  //
-  // In Drupal 6, "0" (the former FILTER_FORMAT_DEFAULT constant) could be used
-  // to indicate this situation, but in Drupal 7, only NULL is supported. This
-  // update therefore preserves the ability of user accounts which were never
-  // given a signature (for example, if the site did not have user signatures
-  // enabled, or if the user never edited their account information) to not
-  // have a particular text format assumed for them the first time the
-  // signature is edited.
-  db_update('users')
-    ->fields(array('signature_format' => NULL))
-    ->condition('signature', '')
-    ->condition('signature_format', 0)
-    ->execute();
-
-  // There are a number of situations in which a Drupal 6 site could store
-  // content with a nonexistent text format. This includes text formats that
-  // had later been deleted, or non-empty content stored with a value of "0"
-  // (the former FILTER_FORMAT_DEFAULT constant). Drupal 6 would filter this
-  // content using whatever the site-wide default text format was at the moment
-  // the text was being displayed.
-  //
-  // In Drupal 7, this behavior is no longer supported, and all content must be
-  // stored with an explicit text format (or it will not be displayed when it
-  // is filtered). Therefore, to preserve the behavior of the site after the
-  // upgrade, we must replace all instances described above with the current
-  // value of the (old) site-wide default format at the moment of the upgrade.
-  $existing_formats = db_query("SELECT format FROM {filter_format}")->fetchCol();
-  $default_format = variable_get('filter_default_format', 1);
-  db_update('users')
-    ->fields(array('signature_format' => $default_format))
-    ->isNotNull('signature_format')
-    ->condition('signature_format', $existing_formats, 'NOT IN')
-    ->execute();
-}
-
-/**
- * Placeholder function.
- *
- * As a fix for user_update_7011() not updating email templates to use the new
- * tokens, user_update_7017() now targets email templates of Drupal 6 sites and
- * already upgraded sites.
- */
-function user_update_7011() {
-}
-
-/**
- * Add the user's pictures to the {file_managed} table and make them managed
- * files.
- */
-function user_update_7012(&$sandbox) {
-
-  $picture_field = array(
-    'type' => 'int',
-    'not null' => TRUE,
-    'default' => 0,
-    'description' => "Foreign key: {file_managed}.fid of user's picture.",
-  );
-
-  if (!isset($sandbox['progress'])) {
-    // Check that the field hasn't been updated in an aborted run of this
-    // update.
-    if (!db_field_exists('users', 'picture_fid')) {
-      // Add a new field for the fid.
-      db_add_field('users', 'picture_fid', $picture_field);
-    }
-
-    // Initialize batch update information.
-    $sandbox['progress'] = 0;
-    $sandbox['last_user_processed'] = -1;
-    $sandbox['max'] = db_query("SELECT COUNT(*) FROM {users} WHERE picture <> ''")->fetchField();
-  }
-
-  // As a batch operation move the photos into the {file_managed} table and
-  // update the {users} records.
-  $limit = 500;
-  $result = db_query_range("SELECT uid, picture FROM {users} WHERE picture <> '' AND uid > :uid ORDER BY uid", 0, $limit, array(':uid' => $sandbox['last_user_processed']));
-  foreach ($result as $user) {
-    // Don't bother adding files that don't exist.
-    if (file_exists($user->picture)) {
-
-      // Check if the file already exists.
-      $files = file_load_multiple(array(), array('uri' => $user->picture));
-      if (count($files)) {
-        $file = reset($files);
-      }
-      else {
-        // Create a file object.
-        $file = new stdClass();
-        $file->uri      = $user->picture;
-        $file->filename = drupal_basename($file->uri);
-        $file->filemime = file_get_mimetype($file->uri);
-        $file->uid      = $user->uid;
-        $file->status   = FILE_STATUS_PERMANENT;
-        $file = file_save($file);
-      }
-
-      db_update('users')
-        ->fields(array('picture_fid' => $file->fid))
-        ->condition('uid', $user->uid)
-        ->execute();
-    }
-
-    // Update our progress information for the batch update.
-    $sandbox['progress']++;
-    $sandbox['last_user_processed'] = $user->uid;
-  }
-
-  // Indicate our current progress to the batch update system. If there's no
-  // max value then there's nothing to update and we're finished.
-  $sandbox['#finished'] = empty($sandbox['max']) ? 1 : ($sandbox['progress'] / $sandbox['max']);
-
-  // When we're finished, drop the old picture field and rename the new one to
-  // replace it.
-  if (isset($sandbox['#finished']) && $sandbox['#finished'] == 1) {
-    db_drop_field('users', 'picture');
-    db_change_field('users', 'picture_fid', 'picture', $picture_field);
-  }
-}
-
-/**
- * Add user module file usage entries.
- */
-function user_update_7013(&$sandbox) {
-  if (!isset($sandbox['progress'])) {
-    // Initialize batch update information.
-    $sandbox['progress'] = 0;
-    $sandbox['last_uid_processed'] = -1;
-    $sandbox['max'] = db_query("SELECT COUNT(*) FROM {users} u WHERE u.picture <> 0")->fetchField();
-  }
-
-  // Add usage entries for the user picture files.
-  $limit = 500;
-  $result = db_query_range('SELECT f.*, u.uid as user_uid FROM {users} u INNER JOIN {file_managed} f ON u.picture = f.fid WHERE u.picture <> 0 AND u.uid > :uid ORDER BY u.uid', 0, $limit, array(':uid' => $sandbox['last_uid_processed']))->fetchAllAssoc('fid', PDO::FETCH_ASSOC);
-  foreach ($result as $row) {
-    $uid = $row['user_uid'];
-    $file = (object) $row;
-    file_usage_add($file, 'user', 'user', $uid);
-
-    // Update our progress information for the batch update.
-    $sandbox['progress']++;
-    $sandbox['last_uid_processed'] = $uid;
-  }
-
-  // Indicate our current progress to the batch update system.
-  $sandbox['#finished'] = empty($sandbox['max']) || ($sandbox['progress'] / $sandbox['max']);
-}
-
-/**
- * Rename the 'post comments without approval' permission.
- *
- * In Drupal 7, this permission has been renamed to 'skip comment approval'.
- */
-function user_update_7014() {
-  db_update('role_permission')
-        ->fields(array('permission' => 'skip comment approval'))
-        ->condition('permission', 'post comments without approval')
-        ->execute();
-
-  return t("Renamed the 'post comments without approval' permission to 'skip comment approval'.");
-}
-
-/**
- * Change {users}.signature_format into varchar.
- */
-function user_update_7015() {
-  db_change_field('users', 'signature_format', 'signature_format', array(
-    'type' => 'varchar',
-    'length' => 255,
-    'not null' => FALSE,
-    'description' => 'The {filter_format}.format of the signature.',
-  ));
-}
-
-/**
- * @} End of "addtogroup updates-6.x-to-7.x".
- */
-
-/**
- * @addtogroup updates-7.x-extra
- * @{
- */
-
-/**
- * Update the database to match the schema.
- */
-function user_update_7016() {
-  // Add field default.
-  db_change_field('users', 'uid', 'uid', array(
-    'type' => 'int',
-    'unsigned' => TRUE,
-    'not null' => TRUE,
-    'default' => 0,
-  ));
-}
-
-/**
- * Update email templates to use new tokens.
- *
- * This function upgrades customized email templates from the old !token format
- * to the new core tokens format. Additionally, in Drupal 7 we no longer e-mail
- * plain text passwords to users, and there is no token for a plain text
- * password in the new token system. Therefore, it also modifies any saved
- * templates using the old '!password' token such that the token is removed, and
- * displays a warning to users that they may need to go and modify the wording
- * of their templates.
- */
-function user_update_7017() {
-  $message = '';
-
-  $tokens = array(
-    '!site' => '[site:name]',
-    '!username' => '[user:name]',
-    '!mailto' => '[user:mail]',
-    '!login_uri' => '[site:login-url]',
-    '!uri_brief' => '[site:url-brief]',
-    '!edit_uri' => '[user:edit-url]',
-    '!login_url' => '[user:one-time-login-url]',
-    '!uri' => '[site:url]',
-    '!date' => '[date:medium]',
-    '!password' => '',
-  );
-
-  $result = db_select('variable', 'v')
-    ->fields('v', array('name'))
-    ->condition('name', db_like('user_mail_') . '%', 'LIKE')
-    ->execute();
-
-  foreach ($result as $row) {
-    // Use variable_get() to get the unserialized value for free.
-    if ($value = variable_get($row->name, FALSE)) {
-
-      if (empty($message) && (strpos($value, '!password') !== FALSE)) {
-        $message = t('The ability to send users their passwords in plain text has been removed in Drupal 7. Your existing email templates have been modified to remove it. You should <a href="@template-url">review these templates</a> to make sure they read properly.', array('@template-url' => url('admin/config/people/accounts')));
-      }
-
-      variable_set($row->name, str_replace(array_keys($tokens), $tokens, $value));
-    }
-  }
-
-  return $message;
-}
-
-/**
- * Ensure there is an index on {users}.picture.
- */
-function user_update_7018() {
-  if (!db_index_exists('users', 'picture')) {
-    db_add_index('users', 'picture', array('picture'));
-  }
-}
-
-/**
- * @} End of "addtogroup updates-7.x-extra".
- */
diff --git a/modules/user/user.js b/modules/user/user.js
deleted file mode 100644
index d182066..0000000
--- a/modules/user/user.js
+++ /dev/null
@@ -1,196 +0,0 @@
-(function ($) {
-
-/**
- * Attach handlers to evaluate the strength of any password fields and to check
- * that its confirmation is correct.
- */
-Drupal.behaviors.password = {
-  attach: function (context, settings) {
-    var translate = settings.password;
-    $('input.password-field', context).once('password', function () {
-      var passwordInput = $(this);
-      var innerWrapper = $(this).parent();
-      var outerWrapper = $(this).parent().parent();
-
-      // Add identifying class to password element parent.
-      innerWrapper.addClass('password-parent');
-
-      // Add the password confirmation layer.
-      $('input.password-confirm', outerWrapper).parent().prepend('<div class="password-confirm">' + translate['confirmTitle'] + ' <span></span></div>').addClass('confirm-parent');
-      var confirmInput = $('input.password-confirm', outerWrapper);
-      var confirmResult = $('div.password-confirm', outerWrapper);
-      var confirmChild = $('span', confirmResult);
-
-      // Add the description box.
-      var passwordMeter = '<div class="password-strength"><div class="password-strength-text" aria-live="assertive"></div><div class="password-strength-title">' + translate['strengthTitle'] + '</div><div class="password-indicator"><div class="indicator"></div></div></div>';
-      $(confirmInput).parent().after('<div class="password-suggestions description"></div>');
-      $(innerWrapper).prepend(passwordMeter);
-      var passwordDescription = $('div.password-suggestions', outerWrapper).hide();
-
-      // Check the password strength.
-      var passwordCheck = function () {
-
-        // Evaluate the password strength.
-        var result = Drupal.evaluatePasswordStrength(passwordInput.val(), settings.password);
-
-        // Update the suggestions for how to improve the password.
-        if (passwordDescription.html() != result.message) {
-          passwordDescription.html(result.message);
-        }
-
-        // Only show the description box if there is a weakness in the password.
-        if (result.strength == 100) {
-          passwordDescription.hide();
-        }
-        else {
-          passwordDescription.show();
-        }
-
-        // Adjust the length of the strength indicator.
-        $(innerWrapper).find('.indicator').css('width', result.strength + '%');
-
-        // Update the strength indication text.
-        $(innerWrapper).find('.password-strength-text').html(result.indicatorText);
-
-        passwordCheckMatch();
-      };
-
-      // Check that password and confirmation inputs match.
-      var passwordCheckMatch = function () {
-
-        if (confirmInput.val()) {
-          var success = passwordInput.val() === confirmInput.val();
-
-          // Show the confirm result.
-          confirmResult.css({ visibility: 'visible' });
-
-          // Remove the previous styling if any exists.
-          if (this.confirmClass) {
-            confirmChild.removeClass(this.confirmClass);
-          }
-
-          // Fill in the success message and set the class accordingly.
-          var confirmClass = success ? 'ok' : 'error';
-          confirmChild.html(translate['confirm' + (success ? 'Success' : 'Failure')]).addClass(confirmClass);
-          this.confirmClass = confirmClass;
-        }
-        else {
-          confirmResult.css({ visibility: 'hidden' });
-        }
-      };
-
-      // Monitor keyup and blur events.
-      // Blur must be used because a mouse paste does not trigger keyup.
-      passwordInput.keyup(passwordCheck).focus(passwordCheck).blur(passwordCheck);
-      confirmInput.keyup(passwordCheckMatch).blur(passwordCheckMatch);
-    });
-  }
-};
-
-/**
- * Evaluate the strength of a user's password.
- *
- * Returns the estimated strength and the relevant output message.
- */
-Drupal.evaluatePasswordStrength = function (password, translate) {
-  var weaknesses = 0, strength = 100, msg = [];
-
-  var hasLowercase = /[a-z]+/.test(password);
-  var hasUppercase = /[A-Z]+/.test(password);
-  var hasNumbers = /[0-9]+/.test(password);
-  var hasPunctuation = /[^a-zA-Z0-9]+/.test(password);
-
-  // If there is a username edit box on the page, compare password to that, otherwise
-  // use value from the database.
-  var usernameBox = $('input.username');
-  var username = (usernameBox.length > 0) ? usernameBox.val() : translate.username;
-
-  // Lose 5 points for every character less than 6, plus a 30 point penalty.
-  if (password.length < 6) {
-    msg.push(translate.tooShort);
-    strength -= ((6 - password.length) * 5) + 30;
-  }
-
-  // Count weaknesses.
-  if (!hasLowercase) {
-    msg.push(translate.addLowerCase);
-    weaknesses++;
-  }
-  if (!hasUppercase) {
-    msg.push(translate.addUpperCase);
-    weaknesses++;
-  }
-  if (!hasNumbers) {
-    msg.push(translate.addNumbers);
-    weaknesses++;
-  }
-  if (!hasPunctuation) {
-    msg.push(translate.addPunctuation);
-    weaknesses++;
-  }
-
-  // Apply penalty for each weakness (balanced against length penalty).
-  switch (weaknesses) {
-    case 1:
-      strength -= 12.5;
-      break;
-
-    case 2:
-      strength -= 25;
-      break;
-
-    case 3:
-      strength -= 40;
-      break;
-
-    case 4:
-      strength -= 40;
-      break;
-  }
-
-  // Check if password is the same as the username.
-  if (password !== '' && password.toLowerCase() === username.toLowerCase()) {
-    msg.push(translate.sameAsUsername);
-    // Passwords the same as username are always very weak.
-    strength = 5;
-  }
-
-  // Based on the strength, work out what text should be shown by the password strength meter.
-  if (strength < 60) {
-    indicatorText = translate.weak;
-  } else if (strength < 70) {
-    indicatorText = translate.fair;
-  } else if (strength < 80) {
-    indicatorText = translate.good;
-  } else if (strength <= 100) {
-    indicatorText = translate.strong;
-  }
-
-  // Assemble the final message.
-  msg = translate.hasWeaknesses + '<ul><li>' + msg.join('</li><li>') + '</li></ul>';
-  return { strength: strength, message: msg, indicatorText: indicatorText };
-
-};
-
-/**
- * Field instance settings screen: force the 'Display on registration form'
- * checkbox checked whenever 'Required' is checked.
- */
-Drupal.behaviors.fieldUserRegistration = {
-  attach: function (context, settings) {
-    var $checkbox = $('form#field-ui-field-edit-form input#edit-instance-settings-user-register-form');
-
-    if ($checkbox.length) {
-      $('input#edit-instance-required', context).once('user-register-form-checkbox', function () {
-        $(this).bind('change', function (e) {
-          if ($(this).attr('checked')) {
-            $checkbox.attr('checked', true);
-          }
-        });
-      });
-
-    }
-  }
-};
-
-})(jQuery);
diff --git a/modules/user/user.permissions.js b/modules/user/user.permissions.js
deleted file mode 100644
index 988820e..0000000
--- a/modules/user/user.permissions.js
+++ /dev/null
@@ -1,69 +0,0 @@
-(function ($) {
-
-/**
- * Shows checked and disabled checkboxes for inherited permissions.
- */
-Drupal.behaviors.permissions = {
-  attach: function (context) {
-    var self = this;
-    $('table#permissions').once('permissions', function () {
-      // On a site with many roles and permissions, this behavior initially has
-      // to perform thousands of DOM manipulations to inject checkboxes and hide
-      // them. By detaching the table from the DOM, all operations can be
-      // performed without triggering internal layout and re-rendering processes
-      // in the browser.
-      var $table = $(this);
-      if ($table.prev().length) {
-        var $ancestor = $table.prev(), method = 'after';
-      }
-      else {
-        var $ancestor = $table.parent(), method = 'append';
-      }
-      $table.detach();
-
-      // Create dummy checkboxes. We use dummy checkboxes instead of reusing
-      // the existing checkboxes here because new checkboxes don't alter the
-      // submitted form. If we'd automatically check existing checkboxes, the
-      // permission table would be polluted with redundant entries. This
-      // is deliberate, but desirable when we automatically check them.
-      var $dummy = $('<input type="checkbox" class="dummy-checkbox" disabled="disabled" checked="checked" />')
-        .attr('title', Drupal.t("This permission is inherited from the authenticated user role."))
-        .hide();
-
-      $('input[type=checkbox]', this).not('.rid-2, .rid-1').addClass('real-checkbox').each(function () {
-        $dummy.clone().insertAfter(this);
-      });
-
-      // Initialize the authenticated user checkbox.
-      $('input[type=checkbox].rid-2', this)
-        .bind('click.permissions', self.toggle)
-        // .triggerHandler() cannot be used here, as it only affects the first
-        // element.
-        .each(self.toggle);
-
-      // Re-insert the table into the DOM.
-      $ancestor[method]($table);
-    });
-  },
-
-  /**
-   * Toggles all dummy checkboxes based on the checkboxes' state.
-   *
-   * If the "authenticated user" checkbox is checked, the checked and disabled
-   * checkboxes are shown, the real checkboxes otherwise.
-   */
-  toggle: function () {
-    var authCheckbox = this, $row = $(this).closest('tr');
-    // jQuery performs too many layout calculations for .hide() and .show(),
-    // leading to a major page rendering lag on sites with many roles and
-    // permissions. Therefore, we toggle visibility directly.
-    $row.find('.real-checkbox').each(function () {
-      this.style.display = (authCheckbox.checked ? 'none' : '');
-    });
-    $row.find('.dummy-checkbox').each(function () {
-      this.style.display = (authCheckbox.checked ? '' : 'none');
-    });
-  }
-};
-
-})(jQuery);
diff --git a/modules/user/user.test b/modules/user/user.test
deleted file mode 100644
index e2086d4..0000000
--- a/modules/user/user.test
+++ /dev/null
@@ -1,2368 +0,0 @@
-<?php
-
-/**
- * @file
- * Tests for user.module.
- */
-
-class UserRegistrationTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'User registration',
-      'description' => 'Test registration of user under different configurations.',
-      'group' => 'User'
-    );
-  }
-
-  function setUp() {
-    parent::setUp('field_test');
-  }
-
-  function testRegistrationWithEmailVerification() {
-    // Require e-mail verification.
-    variable_set('user_email_verification', TRUE);
-
-    // Set registration to administrator only.
-    variable_set('user_register', USER_REGISTER_ADMINISTRATORS_ONLY);
-    $this->drupalGet('user/register');
-    $this->assertResponse(403, 'Registration page is inaccessible when only administrators can create accounts.');
-
-    // Allow registration by site visitors without administrator approval.
-    variable_set('user_register', USER_REGISTER_VISITORS);
-    $edit = array();
-    $edit['name'] = $name = $this->randomName();
-    $edit['mail'] = $mail = $edit['name'] . '@example.com';
-    $this->drupalPost('user/register', $edit, t('Create new account'));
-    $this->assertText(t('A welcome message with further instructions has been sent to your e-mail address.'), 'User registered successfully.');
-    $accounts = user_load_multiple(array(), array('name' => $name, 'mail' => $mail));
-    $new_user = reset($accounts);
-    $this->assertTrue($new_user->status, 'New account is active after registration.');
-
-    // Allow registration by site visitors, but require administrator approval.
-    variable_set('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL);
-    $edit = array();
-    $edit['name'] = $name = $this->randomName();
-    $edit['mail'] = $mail = $edit['name'] . '@example.com';
-    $this->drupalPost('user/register', $edit, t('Create new account'));
-    $accounts = user_load_multiple(array(), array('name' => $name, 'mail' => $mail));
-    $new_user = reset($accounts);
-    $this->assertFalse($new_user->status, 'New account is blocked until approved by an administrator.');
-  }
-
-  function testRegistrationWithoutEmailVerification() {
-    // Don't require e-mail verification.
-    variable_set('user_email_verification', FALSE);
-
-    // Allow registration by site visitors without administrator approval.
-    variable_set('user_register', USER_REGISTER_VISITORS);
-    $edit = array();
-    $edit['name'] = $name = $this->randomName();
-    $edit['mail'] = $mail = $edit['name'] . '@example.com';
-
-    // Try entering a mismatching password.
-    $edit['pass[pass1]'] = '99999.0';
-    $edit['pass[pass2]'] = '99999';
-    $this->drupalPost('user/register', $edit, t('Create new account'));
-    $this->assertText(t('The specified passwords do not match.'), 'Typing mismatched passwords displays an error message.');
-
-    // Enter a correct password.
-    $edit['pass[pass1]'] = $new_pass = $this->randomName();
-    $edit['pass[pass2]'] = $new_pass;
-    $this->drupalPost('user/register', $edit, t('Create new account'));
-    $accounts = user_load_multiple(array(), array('name' => $name, 'mail' => $mail));
-    $new_user = reset($accounts);
-    $this->assertText(t('Registration successful. You are now logged in.'), 'Users are logged in after registering.');
-    $this->drupalLogout();
-
-    // Allow registration by site visitors, but require administrator approval.
-    variable_set('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL);
-    $edit = array();
-    $edit['name'] = $name = $this->randomName();
-    $edit['mail'] = $mail = $edit['name'] . '@example.com';
-    $edit['pass[pass1]'] = $pass = $this->randomName();
-    $edit['pass[pass2]'] = $pass;
-    $this->drupalPost('user/register', $edit, t('Create new account'));
-    $this->assertText(t('Thank you for applying for an account. Your account is currently pending approval by the site administrator.'), 'Users are notified of pending approval');
-
-    // Try to login before administrator approval.
-    $auth = array(
-      'name' => $name,
-      'pass' => $pass,
-    );
-    $this->drupalPost('user/login', $auth, t('Log in'));
-    $this->assertText(t('The username @name has not been activated or is blocked.', array('@name' => $name)), 'User cannot login yet.');
-
-    // Activate the new account.
-    $accounts = user_load_multiple(array(), array('name' => $name, 'mail' => $mail));
-    $new_user = reset($accounts);
-    $admin_user = $this->drupalCreateUser(array('administer users'));
-    $this->drupalLogin($admin_user);
-    $edit = array(
-      'status' => 1,
-    );
-    $this->drupalPost('user/' . $new_user->uid . '/edit', $edit, t('Save'));
-    $this->drupalLogout();
-
-    // Login after administrator approval.
-    $this->drupalPost('user/login', $auth, t('Log in'));
-    $this->assertText(t('Member for'), 'User can log in after administrator approval.');
-  }
-
-  function testRegistrationEmailDuplicates() {
-    // Don't require e-mail verification.
-    variable_set('user_email_verification', FALSE);
-
-    // Allow registration by site visitors without administrator approval.
-    variable_set('user_register', USER_REGISTER_VISITORS);
-
-    // Set up a user to check for duplicates.
-    $duplicate_user = $this->drupalCreateUser();
-
-    $edit = array();
-    $edit['name'] = $this->randomName();
-    $edit['mail'] = $duplicate_user->mail;
-
-    // Attempt to create a new account using an existing e-mail address.
-    $this->drupalPost('user/register', $edit, t('Create new account'));
-    $this->assertText(t('The e-mail address @email is already registered.', array('@email' => $duplicate_user->mail)), 'Supplying an exact duplicate email address displays an error message');
-
-    // Attempt to bypass duplicate email registration validation by adding spaces.
-    $edit['mail'] = '   ' . $duplicate_user->mail . '   ';
-
-    $this->drupalPost('user/register', $edit, t('Create new account'));
-    $this->assertText(t('The e-mail address @email is already registered.', array('@email' => $duplicate_user->mail)), 'Supplying a duplicate email address with added whitespace displays an error message');
-  }
-
-  function testRegistrationDefaultValues() {
-    // Allow registration by site visitors without administrator approval.
-    variable_set('user_register', USER_REGISTER_VISITORS);
-
-    // Don't require e-mail verification.
-    variable_set('user_email_verification', FALSE);
-
-    // Set the default timezone to Brussels.
-    variable_set('configurable_timezones', 1);
-    variable_set('date_default_timezone', 'Europe/Brussels');
-
-    // Check that the account information fieldset's options are not displayed
-    // is a fieldset if there is not more than one fieldset in the form.
-    $this->drupalGet('user/register');
-    $this->assertNoRaw('<fieldset id="edit-account"><legend>Account information</legend>', 'Account settings fieldset was hidden.');
-
-    $edit = array();
-    $edit['name'] = $name = $this->randomName();
-    $edit['mail'] = $mail = $edit['name'] . '@example.com';
-    $edit['pass[pass1]'] = $new_pass = $this->randomName();
-    $edit['pass[pass2]'] = $new_pass;
-    $this->drupalPost(NULL, $edit, t('Create new account'));
-
-    // Check user fields.
-    $accounts = user_load_multiple(array(), array('name' => $name, 'mail' => $mail));
-    $new_user = reset($accounts);
-    $this->assertEqual($new_user->name, $name, 'Username matches.');
-    $this->assertEqual($new_user->mail, $mail, 'E-mail address matches.');
-    $this->assertEqual($new_user->theme, '', 'Correct theme field.');
-    $this->assertEqual($new_user->signature, '', 'Correct signature field.');
-    $this->assertTrue(($new_user->created > REQUEST_TIME - 20 ), 'Correct creation time.');
-    $this->assertEqual($new_user->status, variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL) == USER_REGISTER_VISITORS ? 1 : 0, 'Correct status field.');
-    $this->assertEqual($new_user->timezone, variable_get('date_default_timezone'), 'Correct time zone field.');
-    $this->assertEqual($new_user->language, '', 'Correct language field.');
-    $this->assertEqual($new_user->picture, '', 'Correct picture field.');
-    $this->assertEqual($new_user->init, $mail, 'Correct init field.');
-  }
-
-  /**
-   * Tests Field API fields on user registration forms.
-   */
-  function testRegistrationWithUserFields() {
-    // Create a field, and an instance on 'user' entity type.
-    $field = array(
-      'type' => 'test_field',
-      'field_name' => 'test_user_field',
-      'cardinality' => 1,
-    );
-    field_create_field($field);
-    $instance = array(
-      'field_name' => 'test_user_field',
-      'entity_type' => 'user',
-      'label' => 'Some user field',
-      'bundle' => 'user',
-      'required' => TRUE,
-      'settings' => array('user_register_form' => FALSE),
-    );
-    field_create_instance($instance);
-
-    // Check that the field does not appear on the registration form.
-    $this->drupalGet('user/register');
-    $this->assertNoText($instance['label'], 'The field does not appear on user registration form');
-
-    // Have the field appear on the registration form.
-    $instance['settings']['user_register_form'] = TRUE;
-    field_update_instance($instance);
-    $this->drupalGet('user/register');
-    $this->assertText($instance['label'], 'The field appears on user registration form');
-
-    // Check that validation errors are correctly reported.
-    $edit = array();
-    $edit['name'] = $name = $this->randomName();
-    $edit['mail'] = $mail = $edit['name'] . '@example.com';
-    // Missing input in required field.
-    $edit['test_user_field[und][0][value]'] = '';
-    $this->drupalPost(NULL, $edit, t('Create new account'));
-    $this->assertRaw(t('@name field is required.', array('@name' => $instance['label'])), 'Field validation error was correctly reported.');
-    // Invalid input.
-    $edit['test_user_field[und][0][value]'] = '-1';
-    $this->drupalPost(NULL, $edit, t('Create new account'));
-    $this->assertRaw(t('%name does not accept the value -1.', array('%name' => $instance['label'])), 'Field validation error was correctly reported.');
-
-    // Submit with valid data.
-    $value = rand(1, 255);
-    $edit['test_user_field[und][0][value]'] = $value;
-    $this->drupalPost(NULL, $edit, t('Create new account'));
-    // Check user fields.
-    $accounts = user_load_multiple(array(), array('name' => $name, 'mail' => $mail));
-    $new_user = reset($accounts);
-    $this->assertEqual($new_user->test_user_field[LANGUAGE_NONE][0]['value'], $value, 'The field value was correctly saved.');
-
-    // Check that the 'add more' button works.
-    $field['cardinality'] = FIELD_CARDINALITY_UNLIMITED;
-    field_update_field($field);
-    foreach (array('js', 'nojs') as $js) {
-      $this->drupalGet('user/register');
-      // Add two inputs.
-      $value = rand(1, 255);
-      $edit = array();
-      $edit['test_user_field[und][0][value]'] = $value;
-      if ($js == 'js') {
-        $this->drupalPostAJAX(NULL, $edit, 'test_user_field_add_more');
-        $this->drupalPostAJAX(NULL, $edit, 'test_user_field_add_more');
-      }
-      else {
-        $this->drupalPost(NULL, $edit, t('Add another item'));
-        $this->drupalPost(NULL, $edit, t('Add another item'));
-      }
-      // Submit with three values.
-      $edit['test_user_field[und][1][value]'] = $value + 1;
-      $edit['test_user_field[und][2][value]'] = $value + 2;
-      $edit['name'] = $name = $this->randomName();
-      $edit['mail'] = $mail = $edit['name'] . '@example.com';
-      $this->drupalPost(NULL, $edit, t('Create new account'));
-      // Check user fields.
-      $accounts = user_load_multiple(array(), array('name' => $name, 'mail' => $mail));
-      $new_user = reset($accounts);
-      $this->assertEqual($new_user->test_user_field[LANGUAGE_NONE][0]['value'], $value, format_string('@js : The field value was correclty saved.', array('@js' => $js)));
-      $this->assertEqual($new_user->test_user_field[LANGUAGE_NONE][1]['value'], $value + 1, format_string('@js : The field value was correclty saved.', array('@js' => $js)));
-      $this->assertEqual($new_user->test_user_field[LANGUAGE_NONE][2]['value'], $value + 2, format_string('@js : The field value was correclty saved.', array('@js' => $js)));
-    }
-  }
-}
-
-class UserValidationTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Username/e-mail validation',
-      'description' => 'Verify that username/email validity checks behave as designed.',
-      'group' => 'User'
-    );
-  }
-
-  // Username validation.
-  function testUsernames() {
-    $test_cases = array( // '<username>' => array('<description>', 'assert<testName>'),
-      'foo'                    => array('Valid username', 'assertNull'),
-      'FOO'                    => array('Valid username', 'assertNull'),
-      'Foo O\'Bar'             => array('Valid username', 'assertNull'),
-      'foo@bar'                => array('Valid username', 'assertNull'),
-      'foo@example.com'        => array('Valid username', 'assertNull'),
-      'foo@-example.com'       => array('Valid username', 'assertNull'), // invalid domains are allowed in usernames
-      'þòøÇßªř€'               => array('Valid username', 'assertNull'),
-      'ᚠᛇᚻ᛫ᛒᛦᚦ'                => array('Valid UTF8 username', 'assertNull'), // runes
-      ' foo'                   => array('Invalid username that starts with a space', 'assertNotNull'),
-      'foo '                   => array('Invalid username that ends with a space', 'assertNotNull'),
-      'foo  bar'               => array('Invalid username that contains 2 spaces \'&nbsp;&nbsp;\'', 'assertNotNull'),
-      ''                       => array('Invalid empty username', 'assertNotNull'),
-      'foo/'                   => array('Invalid username containing invalid chars', 'assertNotNull'),
-      'foo' . chr(0) . 'bar'   => array('Invalid username containing chr(0)', 'assertNotNull'), // NULL
-      'foo' . chr(13) . 'bar'  => array('Invalid username containing chr(13)', 'assertNotNull'), // CR
-      str_repeat('x', USERNAME_MAX_LENGTH + 1) => array('Invalid excessively long username', 'assertNotNull'),
-    );
-    foreach ($test_cases as $name => $test_case) {
-      list($description, $test) = $test_case;
-      $result = user_validate_name($name);
-      $this->$test($result, $description . ' (' . $name . ')');
-    }
-  }
-
-  // Mail validation. More extensive tests can be found at common.test
-  function testMailAddresses() {
-    $test_cases = array( // '<username>' => array('<description>', 'assert<testName>'),
-      ''                => array('Empty mail address', 'assertNotNull'),
-      'foo'             => array('Invalid mail address', 'assertNotNull'),
-      'foo@example.com' => array('Valid mail address', 'assertNull'),
-    );
-    foreach ($test_cases as $name => $test_case) {
-      list($description, $test) = $test_case;
-      $result = user_validate_mail($name);
-      $this->$test($result, $description . ' (' . $name . ')');
-    }
-  }
-}
-
-/**
- * Functional tests for user logins, including rate limiting of login attempts.
- */
-class UserLoginTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'User login',
-      'description' => 'Ensure that login works as expected.',
-      'group' => 'User',
-    );
-  }
-
-  /**
-   * Test the global login flood control.
-   */
-  function testGlobalLoginFloodControl() {
-    // Set the global login limit.
-    variable_set('user_failed_login_ip_limit', 10);
-    // Set a high per-user limit out so that it is not relevant in the test.
-    variable_set('user_failed_login_user_limit', 4000);
-
-    $user1 = $this->drupalCreateUser(array());
-    $incorrect_user1 = clone $user1;
-    $incorrect_user1->pass_raw .= 'incorrect';
-
-    // Try 2 failed logins.
-    for ($i = 0; $i < 2; $i++) {
-      $this->assertFailedLogin($incorrect_user1);
-    }
-
-    // A successful login will not reset the IP-based flood control count.
-    $this->drupalLogin($user1);
-    $this->drupalLogout();
-
-    // Try 8 more failed logins, they should not trigger the flood control
-    // mechanism.
-    for ($i = 0; $i < 8; $i++) {
-      $this->assertFailedLogin($incorrect_user1);
-    }
-
-    // The next login trial should result in an IP-based flood error message.
-    $this->assertFailedLogin($incorrect_user1, 'ip');
-
-    // A login with the correct password should also result in a flood error
-    // message.
-    $this->assertFailedLogin($user1, 'ip');
-  }
-
-  /**
-   * Test the per-user login flood control.
-   */
-  function testPerUserLoginFloodControl() {
-    // Set a high global limit out so that it is not relevant in the test.
-    variable_set('user_failed_login_ip_limit', 4000);
-    // Set the per-user login limit.
-    variable_set('user_failed_login_user_limit', 3);
-
-    $user1 = $this->drupalCreateUser(array());
-    $incorrect_user1 = clone $user1;
-    $incorrect_user1->pass_raw .= 'incorrect';
-
-    $user2 = $this->drupalCreateUser(array());
-
-    // Try 2 failed logins.
-    for ($i = 0; $i < 2; $i++) {
-      $this->assertFailedLogin($incorrect_user1);
-    }
-
-    // A successful login will reset the per-user flood control count.
-    $this->drupalLogin($user1);
-    $this->drupalLogout();
-
-    // Try 3 failed logins for user 1, they will not trigger flood control.
-    for ($i = 0; $i < 3; $i++) {
-      $this->assertFailedLogin($incorrect_user1);
-    }
-
-    // Try one successful attempt for user 2, it should not trigger any
-    // flood control.
-    $this->drupalLogin($user2);
-    $this->drupalLogout();
-
-    // Try one more attempt for user 1, it should be rejected, even if the
-    // correct password has been used.
-    $this->assertFailedLogin($user1, 'user');
-  }
-
-  /**
-   * Test that user password is re-hashed upon login after changing $count_log2.
-   */
-  function testPasswordRehashOnLogin() {
-    // Load password hashing API.
-    require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
-    // Set initial $count_log2 to the default, DRUPAL_HASH_COUNT.
-    variable_set('password_count_log2', DRUPAL_HASH_COUNT);
-    // Create a new user and authenticate.
-    $account = $this->drupalCreateUser(array());
-    $password = $account->pass_raw;
-    $this->drupalLogin($account);
-    $this->drupalLogout();
-    // Load the stored user. The password hash should reflect $count_log2.
-    $account = user_load($account->uid);
-    $this->assertIdentical(_password_get_count_log2($account->pass), DRUPAL_HASH_COUNT);
-    // Change $count_log2 and log in again.
-    variable_set('password_count_log2', DRUPAL_HASH_COUNT + 1);
-    $account->pass_raw = $password;
-    $this->drupalLogin($account);
-    // Load the stored user, which should have a different password hash now.
-    $account = user_load($account->uid, TRUE);
-    $this->assertIdentical(_password_get_count_log2($account->pass), DRUPAL_HASH_COUNT + 1);
-  }
-
-  /**
-   * Make an unsuccessful login attempt.
-   *
-   * @param $account
-   *   A user object with name and pass_raw attributes for the login attempt.
-   * @param $flood_trigger
-   *   Whether or not to expect that the flood control mechanism will be
-   *   triggered.
-   */
-  function assertFailedLogin($account, $flood_trigger = NULL) {
-    $edit = array(
-      'name' => $account->name,
-      'pass' => $account->pass_raw,
-    );
-    $this->drupalPost('user', $edit, t('Log in'));
-    $this->assertNoFieldByXPath("//input[@name='pass' and @value!='']", NULL, 'Password value attribute is blank.');
-    if (isset($flood_trigger)) {
-      if ($flood_trigger == 'user') {
-        $this->assertRaw(format_plural(variable_get('user_failed_login_user_limit', 5), 'Sorry, there has been more than one failed login attempt for this account. It is temporarily blocked. Try again later or <a href="@url">request a new password</a>.', 'Sorry, there have been more than @count failed login attempts for this account. It is temporarily blocked. Try again later or <a href="@url">request a new password</a>.', array('@url' => url('user/password'))));
-      }
-      else {
-        // No uid, so the limit is IP-based.
-        $this->assertRaw(t('Sorry, too many failed login attempts from your IP address. This IP address is temporarily blocked. Try again later or <a href="@url">request a new password</a>.', array('@url' => url('user/password'))));
-      }
-    }
-    else {
-      $this->assertText(t('Sorry, unrecognized username or password. Have you forgotten your password?'));
-    }
-  }
-}
-
-/**
- * Tests resetting a user password.
- */
-class UserPasswordResetTestCase extends DrupalWebTestCase {
-  protected $profile = 'standard';
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Reset password',
-      'description' => 'Ensure that password reset methods work as expected.',
-      'group' => 'User',
-    );
-  }
-
-  /**
-   * Tests password reset functionality.
-   */
-  function testUserPasswordReset() {
-    // Create a user.
-    $account = $this->drupalCreateUser();
-    $this->drupalLogin($account);
-    $this->drupalLogout();
-    // Attempt to reset password.
-    $edit = array('name' => $account->name);
-    $this->drupalPost('user/password', $edit, t('E-mail new password'));
-    // Confirm the password reset.
-    $this->assertText(t('Further instructions have been sent to your e-mail address.'), 'Password reset instructions mailed message displayed.');
-  }
-
-  /**
-   * Attempts login using an expired password reset link.
-   */
-  function testUserPasswordResetExpired() {
-    // Set password reset timeout variable to 43200 seconds = 12 hours.
-    $timeout = 43200;
-    variable_set('user_password_reset_timeout', $timeout);
-
-    // Create a user.
-    $account = $this->drupalCreateUser();
-    $this->drupalLogin($account);
-    // Load real user object.
-    $account = user_load($account->uid, TRUE);
-    $this->drupalLogout();
-
-    // To attempt an expired password reset, create a password reset link as if
-    // its request time was 60 seconds older than the allowed limit of timeout.
-    $bogus_timestamp = REQUEST_TIME - variable_get('user_password_reset_timeout', 86400) - 60;
-    $this->drupalGet("user/reset/$account->uid/$bogus_timestamp/" . user_pass_rehash($account->pass, $bogus_timestamp, $account->login));
-    $this->assertText(t('You have tried to use a one-time login link that has expired. Please request a new one using the form below.'), 'Expired password reset request rejected.');
-  }
-
-  /**
-   * Prefill the text box on incorrect login via link to password reset page.
-   */
-  function testUserPasswordTextboxFilled() {
-    $this->drupalGet('user/login');
-    $edit = array(
-      'name' => $this->randomName(),
-      'pass' => $this->randomName(),
-    );
-    $this->drupalPost('user', $edit, t('Log in'));
-    $this->assertRaw(t('Sorry, unrecognized username or password. <a href="@password">Have you forgotten your password?</a>',
-      array('@password' => url('user/password', array('query' => array('name' => $edit['name']))))));
-    unset($edit['pass']);
-    $this->drupalGet('user/password', array('query' => array('name' => $edit['name'])));
-    $this->assertFieldByName('name', $edit['name'], 'User name found.');
-  }
-
-}
-
-/**
- * Test cancelling a user.
- */
-class UserCancelTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Cancel account',
-      'description' => 'Ensure that account cancellation methods work as expected.',
-      'group' => 'User',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('comment');
-  }
-
-  /**
-   * Attempt to cancel account without permission.
-   */
-  function testUserCancelWithoutPermission() {
-    variable_set('user_cancel_method', 'user_cancel_reassign');
-
-    // Create a user.
-    $account = $this->drupalCreateUser(array());
-    $this->drupalLogin($account);
-    // Load real user object.
-    $account = user_load($account->uid, TRUE);
-
-    // Create a node.
-    $node = $this->drupalCreateNode(array('uid' => $account->uid));
-
-    // Attempt to cancel account.
-    $this->drupalGet('user/' . $account->uid . '/edit');
-    $this->assertNoRaw(t('Cancel account'), 'No cancel account button displayed.');
-
-    // Attempt bogus account cancellation request confirmation.
-    $timestamp = $account->login;
-    $this->drupalGet("user/$account->uid/cancel/confirm/$timestamp/" . user_pass_rehash($account->pass, $timestamp, $account->login));
-    $this->assertResponse(403, 'Bogus cancelling request rejected.');
-    $account = user_load($account->uid);
-    $this->assertTrue($account->status == 1, 'User account was not canceled.');
-
-    // Confirm user's content has not been altered.
-    $test_node = node_load($node->nid, NULL, TRUE);
-    $this->assertTrue(($test_node->uid == $account->uid && $test_node->status == 1), 'Node of the user has not been altered.');
-  }
-
-  /**
-   * Tests that user account for uid 1 cannot be cancelled.
-   *
-   * This should never be possible, or the site owner would become unable to
-   * administer the site.
-   */
-  function testUserCancelUid1() {
-    // Update uid 1's name and password to we know it.
-    $password = user_password();
-    require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
-    $account = array(
-      'name' => 'user1',
-      'pass' => user_hash_password(trim($password)),
-    );
-    // We cannot use user_save() here or the password would be hashed again.
-    db_update('users')
-      ->fields($account)
-      ->condition('uid', 1)
-      ->execute();
-
-    // Reload and log in uid 1.
-    $user1 = user_load(1, TRUE);
-    $user1->pass_raw = $password;
-
-    // Try to cancel uid 1's account with a different user.
-    $this->admin_user = $this->drupalCreateUser(array('administer users'));
-    $this->drupalLogin($this->admin_user);
-    $edit = array(
-      'operation' => 'cancel',
-      'accounts[1]' => TRUE,
-    );
-    $this->drupalPost('admin/people', $edit, t('Update'));
-
-    // Verify that uid 1's account was not cancelled.
-    $user1 = user_load(1, TRUE);
-    $this->assertEqual($user1->status, 1, 'User #1 still exists and is not blocked.');
-  }
-
-  /**
-   * Attempt invalid account cancellations.
-   */
-  function testUserCancelInvalid() {
-    variable_set('user_cancel_method', 'user_cancel_reassign');
-
-    // Create a user.
-    $account = $this->drupalCreateUser(array('cancel account'));
-    $this->drupalLogin($account);
-    // Load real user object.
-    $account = user_load($account->uid, TRUE);
-
-    // Create a node.
-    $node = $this->drupalCreateNode(array('uid' => $account->uid));
-
-    // Attempt to cancel account.
-    $this->drupalPost('user/' . $account->uid . '/edit', NULL, t('Cancel account'));
-
-    // Confirm account cancellation.
-    $timestamp = time();
-    $this->drupalPost(NULL, NULL, t('Cancel account'));
-    $this->assertText(t('A confirmation request to cancel your account has been sent to your e-mail address.'), 'Account cancellation request mailed message displayed.');
-
-    // Attempt bogus account cancellation request confirmation.
-    $bogus_timestamp = $timestamp + 60;
-    $this->drupalGet("user/$account->uid/cancel/confirm/$bogus_timestamp/" . user_pass_rehash($account->pass, $bogus_timestamp, $account->login));
-    $this->assertText(t('You have tried to use an account cancellation link that has expired. Please request a new one using the form below.'), 'Bogus cancelling request rejected.');
-    $account = user_load($account->uid);
-    $this->assertTrue($account->status == 1, 'User account was not canceled.');
-
-    // Attempt expired account cancellation request confirmation.
-    $bogus_timestamp = $timestamp - 86400 - 60;
-    $this->drupalGet("user/$account->uid/cancel/confirm/$bogus_timestamp/" . user_pass_rehash($account->pass, $bogus_timestamp, $account->login));
-    $this->assertText(t('You have tried to use an account cancellation link that has expired. Please request a new one using the form below.'), 'Expired cancel account request rejected.');
-    $accounts = user_load_multiple(array($account->uid), array('status' => 1));
-    $this->assertTrue(reset($accounts), 'User account was not canceled.');
-
-    // Confirm user's content has not been altered.
-    $test_node = node_load($node->nid, NULL, TRUE);
-    $this->assertTrue(($test_node->uid == $account->uid && $test_node->status == 1), 'Node of the user has not been altered.');
-  }
-
-  /**
-   * Disable account and keep all content.
-   */
-  function testUserBlock() {
-    variable_set('user_cancel_method', 'user_cancel_block');
-
-    // Create a user.
-    $web_user = $this->drupalCreateUser(array('cancel account'));
-    $this->drupalLogin($web_user);
-
-    // Load real user object.
-    $account = user_load($web_user->uid, TRUE);
-
-    // Attempt to cancel account.
-    $this->drupalGet('user/' . $account->uid . '/edit');
-    $this->drupalPost(NULL, NULL, t('Cancel account'));
-    $this->assertText(t('Are you sure you want to cancel your account?'), 'Confirmation form to cancel account displayed.');
-    $this->assertText(t('Your account will be blocked and you will no longer be able to log in. All of your content will remain attributed to your user name.'), 'Informs that all content will be remain as is.');
-    $this->assertNoText(t('Select the method to cancel the account above.'), 'Does not allow user to select account cancellation method.');
-
-    // Confirm account cancellation.
-    $timestamp = time();
-
-    $this->drupalPost(NULL, NULL, t('Cancel account'));
-    $this->assertText(t('A confirmation request to cancel your account has been sent to your e-mail address.'), 'Account cancellation request mailed message displayed.');
-
-    // Confirm account cancellation request.
-    $this->drupalGet("user/$account->uid/cancel/confirm/$timestamp/" . user_pass_rehash($account->pass, $timestamp, $account->login));
-    $account = user_load($account->uid, TRUE);
-    $this->assertTrue($account->status == 0, 'User has been blocked.');
-
-    // Confirm that the confirmation message made it through to the end user.
-    $this->assertRaw(t('%name has been disabled.', array('%name' => $account->name)), "Confirmation message displayed to user.");
-  }
-
-  /**
-   * Disable account and unpublish all content.
-   */
-  function testUserBlockUnpublish() {
-    variable_set('user_cancel_method', 'user_cancel_block_unpublish');
-
-    // Create a user.
-    $account = $this->drupalCreateUser(array('cancel account'));
-    $this->drupalLogin($account);
-    // Load real user object.
-    $account = user_load($account->uid, TRUE);
-
-    // Create a node with two revisions.
-    $node = $this->drupalCreateNode(array('uid' => $account->uid));
-    $settings = get_object_vars($node);
-    $settings['revision'] = 1;
-    $node = $this->drupalCreateNode($settings);
-
-    // Attempt to cancel account.
-    $this->drupalGet('user/' . $account->uid . '/edit');
-    $this->drupalPost(NULL, NULL, t('Cancel account'));
-    $this->assertText(t('Are you sure you want to cancel your account?'), 'Confirmation form to cancel account displayed.');
-    $this->assertText(t('Your account will be blocked and you will no longer be able to log in. All of your content will be hidden from everyone but administrators.'), 'Informs that all content will be unpublished.');
-
-    // Confirm account cancellation.
-    $timestamp = time();
-    $this->drupalPost(NULL, NULL, t('Cancel account'));
-    $this->assertText(t('A confirmation request to cancel your account has been sent to your e-mail address.'), 'Account cancellation request mailed message displayed.');
-
-    // Confirm account cancellation request.
-    $this->drupalGet("user/$account->uid/cancel/confirm/$timestamp/" . user_pass_rehash($account->pass, $timestamp, $account->login));
-    $account = user_load($account->uid, TRUE);
-    $this->assertTrue($account->status == 0, 'User has been blocked.');
-
-    // Confirm user's content has been unpublished.
-    $test_node = node_load($node->nid, NULL, TRUE);
-    $this->assertTrue($test_node->status == 0, 'Node of the user has been unpublished.');
-    $test_node = node_load($node->nid, $node->vid, TRUE);
-    $this->assertTrue($test_node->status == 0, 'Node revision of the user has been unpublished.');
-
-    // Confirm that the confirmation message made it through to the end user.
-    $this->assertRaw(t('%name has been disabled.', array('%name' => $account->name)), "Confirmation message displayed to user.");
-  }
-
-  /**
-   * Delete account and anonymize all content.
-   */
-  function testUserAnonymize() {
-    variable_set('user_cancel_method', 'user_cancel_reassign');
-
-    // Create a user.
-    $account = $this->drupalCreateUser(array('cancel account'));
-    $this->drupalLogin($account);
-    // Load real user object.
-    $account = user_load($account->uid, TRUE);
-
-    // Create a simple node.
-    $node = $this->drupalCreateNode(array('uid' => $account->uid));
-
-    // Create a node with two revisions, the initial one belonging to the
-    // cancelling user.
-    $revision_node = $this->drupalCreateNode(array('uid' => $account->uid));
-    $revision = $revision_node->vid;
-    $settings = get_object_vars($revision_node);
-    $settings['revision'] = 1;
-    $settings['uid'] = 1; // Set new/current revision to someone else.
-    $revision_node = $this->drupalCreateNode($settings);
-
-    // Attempt to cancel account.
-    $this->drupalGet('user/' . $account->uid . '/edit');
-    $this->drupalPost(NULL, NULL, t('Cancel account'));
-    $this->assertText(t('Are you sure you want to cancel your account?'), 'Confirmation form to cancel account displayed.');
-    $this->assertRaw(t('Your account will be removed and all account information deleted. All of your content will be assigned to the %anonymous-name user.', array('%anonymous-name' => variable_get('anonymous', t('Anonymous')))), 'Informs that all content will be attributed to anonymous account.');
-
-    // Confirm account cancellation.
-    $timestamp = time();
-    $this->drupalPost(NULL, NULL, t('Cancel account'));
-    $this->assertText(t('A confirmation request to cancel your account has been sent to your e-mail address.'), 'Account cancellation request mailed message displayed.');
-
-    // Confirm account cancellation request.
-    $this->drupalGet("user/$account->uid/cancel/confirm/$timestamp/" . user_pass_rehash($account->pass, $timestamp, $account->login));
-    $this->assertFalse(user_load($account->uid, TRUE), 'User is not found in the database.');
-
-    // Confirm that user's content has been attributed to anonymous user.
-    $test_node = node_load($node->nid, NULL, TRUE);
-    $this->assertTrue(($test_node->uid == 0 && $test_node->status == 1), 'Node of the user has been attributed to anonymous user.');
-    $test_node = node_load($revision_node->nid, $revision, TRUE);
-    $this->assertTrue(($test_node->revision_uid == 0 && $test_node->status == 1), 'Node revision of the user has been attributed to anonymous user.');
-    $test_node = node_load($revision_node->nid, NULL, TRUE);
-    $this->assertTrue(($test_node->uid != 0 && $test_node->status == 1), "Current revision of the user's node was not attributed to anonymous user.");
-
-    // Confirm that the confirmation message made it through to the end user.
-    $this->assertRaw(t('%name has been deleted.', array('%name' => $account->name)), "Confirmation message displayed to user.");
-  }
-
-  /**
-   * Delete account and remove all content.
-   */
-  function testUserDelete() {
-    variable_set('user_cancel_method', 'user_cancel_delete');
-
-    // Create a user.
-    $account = $this->drupalCreateUser(array('cancel account', 'post comments', 'skip comment approval'));
-    $this->drupalLogin($account);
-    // Load real user object.
-    $account = user_load($account->uid, TRUE);
-
-    // Create a simple node.
-    $node = $this->drupalCreateNode(array('uid' => $account->uid));
-
-    // Create comment.
-    $langcode = LANGUAGE_NONE;
-    $edit = array();
-    $edit['subject'] = $this->randomName(8);
-    $edit['comment_body[' . $langcode . '][0][value]'] = $this->randomName(16);
-
-    $this->drupalPost('comment/reply/' . $node->nid, $edit, t('Preview'));
-    $this->drupalPost(NULL, array(), t('Save'));
-    $this->assertText(t('Your comment has been posted.'));
-    $comments = comment_load_multiple(array(), array('subject' => $edit['subject']));
-    $comment = reset($comments);
-    $this->assertTrue($comment->cid, 'Comment found.');
-
-    // Create a node with two revisions, the initial one belonging to the
-    // cancelling user.
-    $revision_node = $this->drupalCreateNode(array('uid' => $account->uid));
-    $revision = $revision_node->vid;
-    $settings = get_object_vars($revision_node);
-    $settings['revision'] = 1;
-    $settings['uid'] = 1; // Set new/current revision to someone else.
-    $revision_node = $this->drupalCreateNode($settings);
-
-    // Attempt to cancel account.
-    $this->drupalGet('user/' . $account->uid . '/edit');
-    $this->drupalPost(NULL, NULL, t('Cancel account'));
-    $this->assertText(t('Are you sure you want to cancel your account?'), 'Confirmation form to cancel account displayed.');
-    $this->assertText(t('Your account will be removed and all account information deleted. All of your content will also be deleted.'), 'Informs that all content will be deleted.');
-
-    // Confirm account cancellation.
-    $timestamp = time();
-    $this->drupalPost(NULL, NULL, t('Cancel account'));
-    $this->assertText(t('A confirmation request to cancel your account has been sent to your e-mail address.'), 'Account cancellation request mailed message displayed.');
-
-    // Confirm account cancellation request.
-    $this->drupalGet("user/$account->uid/cancel/confirm/$timestamp/" . user_pass_rehash($account->pass, $timestamp, $account->login));
-    $this->assertFalse(user_load($account->uid, TRUE), 'User is not found in the database.');
-
-    // Confirm that user's content has been deleted.
-    $this->assertFalse(node_load($node->nid, NULL, TRUE), 'Node of the user has been deleted.');
-    $this->assertFalse(node_load($node->nid, $revision, TRUE), 'Node revision of the user has been deleted.');
-    $this->assertTrue(node_load($revision_node->nid, NULL, TRUE), "Current revision of the user's node was not deleted.");
-    $this->assertFalse(comment_load($comment->cid), 'Comment of the user has been deleted.');
-
-    // Confirm that the confirmation message made it through to the end user.
-    $this->assertRaw(t('%name has been deleted.', array('%name' => $account->name)), "Confirmation message displayed to user.");
-  }
-
-  /**
-   * Create an administrative user and delete another user.
-   */
-  function testUserCancelByAdmin() {
-    variable_set('user_cancel_method', 'user_cancel_reassign');
-
-    // Create a regular user.
-    $account = $this->drupalCreateUser(array());
-
-    // Create administrative user.
-    $admin_user = $this->drupalCreateUser(array('administer users'));
-    $this->drupalLogin($admin_user);
-
-    // Delete regular user.
-    $this->drupalGet('user/' . $account->uid . '/edit');
-    $this->drupalPost(NULL, NULL, t('Cancel account'));
-    $this->assertRaw(t('Are you sure you want to cancel the account %name?', array('%name' => $account->name)), 'Confirmation form to cancel account displayed.');
-    $this->assertText(t('Select the method to cancel the account above.'), 'Allows to select account cancellation method.');
-
-    // Confirm deletion.
-    $this->drupalPost(NULL, NULL, t('Cancel account'));
-    $this->assertRaw(t('%name has been deleted.', array('%name' => $account->name)), 'User deleted.');
-    $this->assertFalse(user_load($account->uid), 'User is not found in the database.');
-  }
-
-  /**
-   * Create an administrative user and mass-delete other users.
-   */
-  function testMassUserCancelByAdmin() {
-    variable_set('user_cancel_method', 'user_cancel_reassign');
-    // Enable account cancellation notification.
-    variable_set('user_mail_status_canceled_notify', TRUE);
-
-    // Create administrative user.
-    $admin_user = $this->drupalCreateUser(array('administer users'));
-    $this->drupalLogin($admin_user);
-
-    // Create some users.
-    $users = array();
-    for ($i = 0; $i < 3; $i++) {
-      $account = $this->drupalCreateUser(array());
-      $users[$account->uid] = $account;
-    }
-
-    // Cancel user accounts, including own one.
-    $edit = array();
-    $edit['operation'] = 'cancel';
-    foreach ($users as $uid => $account) {
-      $edit['accounts[' . $uid . ']'] = TRUE;
-    }
-    $edit['accounts[' . $admin_user->uid . ']'] = TRUE;
-    // Also try to cancel uid 1.
-    $edit['accounts[1]'] = TRUE;
-    $this->drupalPost('admin/people', $edit, t('Update'));
-    $this->assertText(t('Are you sure you want to cancel these user accounts?'), 'Confirmation form to cancel accounts displayed.');
-    $this->assertText(t('When cancelling these accounts'), 'Allows to select account cancellation method.');
-    $this->assertText(t('Require e-mail confirmation to cancel account.'), 'Allows to send confirmation mail.');
-    $this->assertText(t('Notify user when account is canceled.'), 'Allows to send notification mail.');
-
-    // Confirm deletion.
-    $this->drupalPost(NULL, NULL, t('Cancel accounts'));
-    $status = TRUE;
-    foreach ($users as $account) {
-      $status = $status && (strpos($this->content, t('%name has been deleted.', array('%name' => $account->name))) !== FALSE);
-      $status = $status && !user_load($account->uid, TRUE);
-    }
-    $this->assertTrue($status, 'Users deleted and not found in the database.');
-
-    // Ensure that admin account was not cancelled.
-    $this->assertText(t('A confirmation request to cancel your account has been sent to your e-mail address.'), 'Account cancellation request mailed message displayed.');
-    $admin_user = user_load($admin_user->uid);
-    $this->assertTrue($admin_user->status == 1, 'Administrative user is found in the database and enabled.');
-
-    // Verify that uid 1's account was not cancelled.
-    $user1 = user_load(1, TRUE);
-    $this->assertEqual($user1->status, 1, 'User #1 still exists and is not blocked.');
-  }
-}
-
-class UserPictureTestCase extends DrupalWebTestCase {
-  protected $user;
-  protected $_directory_test;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Upload user picture',
-      'description' => 'Assure that dimension check, extension check and image scaling work as designed.',
-      'group' => 'User'
-    );
-  }
-
-  function setUp() {
-    parent::setUp();
-    // Enable user pictures.
-    variable_set('user_pictures', 1);
-
-    $this->user = $this->drupalCreateUser();
-
-    // Test if directories specified in settings exist in filesystem.
-    $file_dir = 'public://';
-    $file_check = file_prepare_directory($file_dir, FILE_CREATE_DIRECTORY);
-    // TODO: Test public and private methods?
-
-    $picture_dir = variable_get('user_picture_path', 'pictures');
-    $picture_path = $file_dir . $picture_dir;
-
-    $pic_check = file_prepare_directory($picture_path, FILE_CREATE_DIRECTORY);
-    $this->_directory_test = is_writable($picture_path);
-    $this->assertTrue($this->_directory_test, "The directory $picture_path doesn't exist or is not writable. Further tests won't be made.");
-  }
-
-  function testNoPicture() {
-    $this->drupalLogin($this->user);
-
-    // Try to upload a file that is not an image for the user picture.
-    $not_an_image = current($this->drupalGetTestFiles('html'));
-    $this->saveUserPicture($not_an_image);
-    $this->assertRaw(t('Only JPEG, PNG and GIF images are allowed.'), 'Non-image files are not accepted.');
-  }
-
-  /**
-   * Do the test:
-   *  GD Toolkit is installed
-   *  Picture has invalid dimension
-   *
-   * results: The image should be uploaded because ImageGDToolkit resizes the picture
-   */
-  function testWithGDinvalidDimension() {
-    if ($this->_directory_test && image_get_toolkit()) {
-      $this->drupalLogin($this->user);
-
-      $image = current($this->drupalGetTestFiles('image'));
-      $info = image_get_info($image->uri);
-
-      // Set new variables: invalid dimensions, valid filesize (0 = no limit).
-      $test_dim = ($info['width'] - 10) . 'x' . ($info['height'] - 10);
-      variable_set('user_picture_dimensions', $test_dim);
-      variable_set('user_picture_file_size', 0);
-
-      $pic_path = $this->saveUserPicture($image);
-      // Check that the image was resized and is being displayed on the
-      // user's profile page.
-      $text = t('The image was resized to fit within the maximum allowed dimensions of %dimensions pixels.', array('%dimensions' => $test_dim));
-      $this->assertRaw($text, 'Image was resized.');
-      $alt = t("@user's picture", array('@user' => format_username($this->user)));
-      $style = variable_get('user_picture_style', '');
-      $this->assertRaw(check_plain(image_style_url($style, $pic_path)), "Image is displayed in user's edit page");
-
-      // Check if file is located in proper directory.
-      $this->assertTrue(is_file($pic_path), "File is located in proper directory");
-    }
-  }
-
-  /**
-   * Do the test:
-   *  GD Toolkit is installed
-   *  Picture has invalid size
-   *
-   * results: The image should be uploaded because ImageGDToolkit resizes the picture
-   */
-  function testWithGDinvalidSize() {
-    if ($this->_directory_test && image_get_toolkit()) {
-      $this->drupalLogin($this->user);
-
-      // Images are sorted first by size then by name. We need an image
-      // bigger than 1 KB so we'll grab the last one.
-      $files = $this->drupalGetTestFiles('image');
-      $image = end($files);
-      $info = image_get_info($image->uri);
-
-      // Set new variables: valid dimensions, invalid filesize.
-      $test_dim = ($info['width'] + 10) . 'x' . ($info['height'] + 10);
-      $test_size = 1;
-      variable_set('user_picture_dimensions', $test_dim);
-      variable_set('user_picture_file_size', $test_size);
-
-      $pic_path = $this->saveUserPicture($image);
-
-      // Test that the upload failed and that the correct reason was cited.
-      $text = t('The specified file %filename could not be uploaded.', array('%filename' => $image->filename));
-      $this->assertRaw($text, 'Upload failed.');
-      $text = t('The file is %filesize exceeding the maximum file size of %maxsize.', array('%filesize' => format_size(filesize($image->uri)), '%maxsize' => format_size($test_size * 1024)));
-      $this->assertRaw($text, 'File size cited as reason for failure.');
-
-      // Check if file is not uploaded.
-      $this->assertFalse(is_file($pic_path), 'File was not uploaded.');
-    }
-  }
-
-  /**
-   * Do the test:
-   *  GD Toolkit is not installed
-   *  Picture has invalid size
-   *
-   * results: The image shouldn't be uploaded
-   */
-  function testWithoutGDinvalidDimension() {
-    if ($this->_directory_test && !image_get_toolkit()) {
-      $this->drupalLogin($this->user);
-
-      $image = current($this->drupalGetTestFiles('image'));
-      $info = image_get_info($image->uri);
-
-      // Set new variables: invalid dimensions, valid filesize (0 = no limit).
-      $test_dim = ($info['width'] - 10) . 'x' . ($info['height'] - 10);
-      variable_set('user_picture_dimensions', $test_dim);
-      variable_set('user_picture_file_size', 0);
-
-      $pic_path = $this->saveUserPicture($image);
-
-      // Test that the upload failed and that the correct reason was cited.
-      $text = t('The specified file %filename could not be uploaded.', array('%filename' => $image->filename));
-      $this->assertRaw($text, 'Upload failed.');
-      $text = t('The image is too large; the maximum dimensions are %dimensions pixels.', array('%dimensions' => $test_dim));
-      $this->assertRaw($text, 'Checking response on invalid image (dimensions).');
-
-      // Check if file is not uploaded.
-      $this->assertFalse(is_file($pic_path), 'File was not uploaded.');
-    }
-  }
-
-  /**
-   * Do the test:
-   *  GD Toolkit is not installed
-   *  Picture has invalid size
-   *
-   * results: The image shouldn't be uploaded
-   */
-  function testWithoutGDinvalidSize() {
-    if ($this->_directory_test && !image_get_toolkit()) {
-      $this->drupalLogin($this->user);
-
-      $image = current($this->drupalGetTestFiles('image'));
-      $info = image_get_info($image->uri);
-
-      // Set new variables: valid dimensions, invalid filesize.
-      $test_dim = ($info['width'] + 10) . 'x' . ($info['height'] + 10);
-      $test_size = 1;
-      variable_set('user_picture_dimensions', $test_dim);
-      variable_set('user_picture_file_size', $test_size);
-
-      $pic_path = $this->saveUserPicture($image);
-
-      // Test that the upload failed and that the correct reason was cited.
-      $text = t('The specified file %filename could not be uploaded.', array('%filename' => $image->filename));
-      $this->assertRaw($text, 'Upload failed.');
-      $text = t('The file is %filesize exceeding the maximum file size of %maxsize.', array('%filesize' => format_size(filesize($image->uri)), '%maxsize' => format_size($test_size * 1024)));
-      $this->assertRaw($text, 'File size cited as reason for failure.');
-
-      // Check if file is not uploaded.
-      $this->assertFalse(is_file($pic_path), 'File was not uploaded.');
-    }
-  }
-
-  /**
-   * Do the test:
-   *  Picture is valid (proper size and dimension)
-   *
-   * results: The image should be uploaded
-   */
-  function testPictureIsValid() {
-    if ($this->_directory_test) {
-      $this->drupalLogin($this->user);
-
-      $image = current($this->drupalGetTestFiles('image'));
-      $info = image_get_info($image->uri);
-
-      // Set new variables: valid dimensions, valid filesize (0 = no limit).
-      $test_dim = ($info['width'] + 10) . 'x' . ($info['height'] + 10);
-      variable_set('user_picture_dimensions', $test_dim);
-      variable_set('user_picture_file_size', 0);
-
-      $pic_path = $this->saveUserPicture($image);
-
-      // Check if image is displayed in user's profile page.
-      $this->drupalGet('user');
-      $this->assertRaw(file_uri_target($pic_path), "Image is displayed in user's profile page");
-
-      // Check if file is located in proper directory.
-      $this->assertTrue(is_file($pic_path), 'File is located in proper directory');
-
-      // Set new picture dimensions.
-      $test_dim = ($info['width'] + 5) . 'x' . ($info['height'] + 5);
-      variable_set('user_picture_dimensions', $test_dim);
-
-      $pic_path2 = $this->saveUserPicture($image);
-      $this->assertNotEqual($pic_path, $pic_path2, 'Filename of second picture is different.');
-    }
-  }
-
-  /**
-   * Test HTTP schema working with user pictures.
-   */
-  function testExternalPicture() {
-    $this->drupalLogin($this->user);
-    // Set the default picture to an URI with a HTTP schema.
-    $images = $this->drupalGetTestFiles('image');
-    $image = $images[0];
-    $pic_path = file_create_url($image->uri);
-    variable_set('user_picture_default', $pic_path);
-
-    // Check if image is displayed in user's profile page.
-    $this->drupalGet('user');
-
-    // Get the user picture image via xpath.
-    $elements = $this->xpath('//div[@class="user-picture"]/img');
-    $this->assertEqual(count($elements), 1, "There is exactly one user picture on the user's profile page");
-    $this->assertEqual($pic_path, (string) $elements[0]['src'], "User picture source is correct.");
-  }
-
-  /**
-   * Tests deletion of user pictures.
-   */
-  function testDeletePicture() {
-    $this->drupalLogin($this->user);
-
-    $image = current($this->drupalGetTestFiles('image'));
-    $info = image_get_info($image->uri);
-
-    // Set new variables: valid dimensions, valid filesize (0 = no limit).
-    $test_dim = ($info['width'] + 10) . 'x' . ($info['height'] + 10);
-    variable_set('user_picture_dimensions', $test_dim);
-    variable_set('user_picture_file_size', 0);
-
-    // Save a new picture.
-    $edit = array('files[picture_upload]' => drupal_realpath($image->uri));
-    $this->drupalPost('user/' . $this->user->uid . '/edit', $edit, t('Save'));
-
-    // Load actual user data from database.
-    $account = user_load($this->user->uid, TRUE);
-    $pic_path = isset($account->picture) ? $account->picture->uri : NULL;
-
-    // Check if image is displayed in user's profile page.
-    $this->drupalGet('user');
-    $this->assertRaw(file_uri_target($pic_path), "Image is displayed in user's profile page");
-
-    // Check if file is located in proper directory.
-    $this->assertTrue(is_file($pic_path), 'File is located in proper directory');
-
-    $edit = array('picture_delete' => 1);
-    $this->drupalPost('user/' . $this->user->uid . '/edit', $edit, t('Save'));
-
-    // Load actual user data from database.
-    $account1 = user_load($this->user->uid, TRUE);
-    $this->assertNull($account1->picture, 'User object has no picture');
-
-    $file = file_load($account->picture->fid);
-    $this->assertFalse($file, 'File is removed from database');
-
-    // Clear out PHP's file stat cache so we see the current value.
-    clearstatcache();
-    $this->assertFalse(is_file($pic_path), 'File is removed from file system');
-  }
-
-  function saveUserPicture($image) {
-    $edit = array('files[picture_upload]' => drupal_realpath($image->uri));
-    $this->drupalPost('user/' . $this->user->uid . '/edit', $edit, t('Save'));
-
-    // Load actual user data from database.
-    $account = user_load($this->user->uid, TRUE);
-    return isset($account->picture) ? $account->picture->uri : NULL;
-  }
-
-  /**
-   * Tests the admin form validates user picture settings.
-   */
-  function testUserPictureAdminFormValidation() {
-    $this->drupalLogin($this->drupalCreateUser(array('administer users')));
-
-    // The default values are valid.
-    $this->drupalPost('admin/config/people/accounts', array(), t('Save configuration'));
-    $this->assertText(t('The configuration options have been saved.'), 'The default values are valid.');
-
-    // The form does not save with an invalid file size.
-    $edit = array(
-      'user_picture_file_size' => $this->randomName(),
-    );
-    $this->drupalPost('admin/config/people/accounts', $edit, t('Save configuration'));
-    $this->assertNoText(t('The configuration options have been saved.'), 'The form does not save with an invalid file size.');
-  }
-}
-
-
-class UserPermissionsTestCase extends DrupalWebTestCase {
-  protected $admin_user;
-  protected $rid;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Role permissions',
-      'description' => 'Verify that role permissions can be added and removed via the permissions page.',
-      'group' => 'User'
-    );
-  }
-
-  function setUp() {
-    parent::setUp();
-
-    $this->admin_user = $this->drupalCreateUser(array('administer permissions', 'access user profiles', 'administer site configuration', 'administer modules', 'administer users'));
-
-    // Find the new role ID - it must be the maximum.
-    $all_rids = array_keys($this->admin_user->roles);
-    sort($all_rids);
-    $this->rid = array_pop($all_rids);
-  }
-
-  /**
-   * Change user permissions and check user_access().
-   */
-  function testUserPermissionChanges() {
-    $this->drupalLogin($this->admin_user);
-    $rid = $this->rid;
-    $account = $this->admin_user;
-
-    // Add a permission.
-    $this->assertFalse(user_access('administer nodes', $account), 'User does not have "administer nodes" permission.');
-    $edit = array();
-    $edit[$rid . '[administer nodes]'] = TRUE;
-    $this->drupalPost('admin/people/permissions', $edit, t('Save permissions'));
-    $this->assertText(t('The changes have been saved.'), 'Successful save message displayed.');
-    drupal_static_reset('user_access');
-    drupal_static_reset('user_role_permissions');
-    $this->assertTrue(user_access('administer nodes', $account), 'User now has "administer nodes" permission.');
-
-    // Remove a permission.
-    $this->assertTrue(user_access('access user profiles', $account), 'User has "access user profiles" permission.');
-    $edit = array();
-    $edit[$rid . '[access user profiles]'] = FALSE;
-    $this->drupalPost('admin/people/permissions', $edit, t('Save permissions'));
-    $this->assertText(t('The changes have been saved.'), 'Successful save message displayed.');
-    drupal_static_reset('user_access');
-    drupal_static_reset('user_role_permissions');
-    $this->assertFalse(user_access('access user profiles', $account), 'User no longer has "access user profiles" permission.');
-  }
-
-  /**
-   * Test assigning of permissions for the administrator role.
-   */
-  function testAdministratorRole() {
-    $this->drupalLogin($this->admin_user);
-    $this->drupalGet('admin/config/people/accounts');
-
-    // Set the user's role to be the administrator role.
-    $edit = array();
-    $edit['user_admin_role'] = $this->rid;
-    $this->drupalPost('admin/config/people/accounts', $edit, t('Save configuration'));
-
-    // Enable aggregator module and ensure the 'administer news feeds'
-    // permission is assigned by default.
-    $edit = array();
-    $edit['modules[Core][aggregator][enable]'] = TRUE;
-    $this->drupalPost('admin/modules', $edit, t('Save configuration'));
-    $this->assertTrue(user_access('administer news feeds', $this->admin_user), 'The permission was automatically assigned to the administrator role');
-  }
-
-  /**
-   * Verify proper permission changes by user_role_change_permissions().
-   */
-  function testUserRoleChangePermissions() {
-    $rid = $this->rid;
-    $account = $this->admin_user;
-
-    // Verify current permissions.
-    $this->assertFalse(user_access('administer nodes', $account), 'User does not have "administer nodes" permission.');
-    $this->assertTrue(user_access('access user profiles', $account), 'User has "access user profiles" permission.');
-    $this->assertTrue(user_access('administer site configuration', $account), 'User has "administer site configuration" permission.');
-
-    // Change permissions.
-    $permissions = array(
-      'administer nodes' => 1,
-      'access user profiles' => 0,
-    );
-    user_role_change_permissions($rid, $permissions);
-
-    // Verify proper permission changes.
-    $this->assertTrue(user_access('administer nodes', $account), 'User now has "administer nodes" permission.');
-    $this->assertFalse(user_access('access user profiles', $account), 'User no longer has "access user profiles" permission.');
-    $this->assertTrue(user_access('administer site configuration', $account), 'User still has "administer site configuration" permission.');
-  }
-}
-
-class UserAdminTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'User administration',
-      'description' => 'Test user administration page functionality.',
-      'group' => 'User'
-    );
-  }
-
-  /**
-   * Registers a user and deletes it.
-   */
-  function testUserAdmin() {
-
-    $user_a = $this->drupalCreateUser(array());
-    $user_b = $this->drupalCreateUser(array('administer taxonomy'));
-    $user_c = $this->drupalCreateUser(array('administer taxonomy'));
-
-    // Create admin user to delete registered user.
-    $admin_user = $this->drupalCreateUser(array('administer users'));
-    $this->drupalLogin($admin_user);
-    $this->drupalGet('admin/people');
-    $this->assertText($user_a->name, 'Found user A on admin users page');
-    $this->assertText($user_b->name, 'Found user B on admin users page');
-    $this->assertText($user_c->name, 'Found user C on admin users page');
-    $this->assertText($admin_user->name, 'Found Admin user on admin users page');
-
-    // Test for existence of edit link in table.
-    $link = l(t('edit'), "user/$user_a->uid/edit", array('query' => array('destination' => 'admin/people')));
-    $this->assertRaw($link, 'Found user A edit link on admin users page');
-
-    // Filter the users by permission 'administer taxonomy'.
-    $edit = array();
-    $edit['permission'] = 'administer taxonomy';
-    $this->drupalPost('admin/people', $edit, t('Filter'));
-
-    // Check if the correct users show up.
-    $this->assertNoText($user_a->name, 'User A not on filtered by perm admin users page');
-    $this->assertText($user_b->name, 'Found user B on filtered by perm admin users page');
-    $this->assertText($user_c->name, 'Found user C on filtered by perm admin users page');
-
-    // Filter the users by role. Grab the system-generated role name for User C.
-    $edit['role'] = max(array_flip($user_c->roles));
-    $this->drupalPost('admin/people', $edit, t('Refine'));
-
-    // Check if the correct users show up when filtered by role.
-    $this->assertNoText($user_a->name, 'User A not on filtered by role on admin users page');
-    $this->assertNoText($user_b->name, 'User B not on filtered by role on admin users page');
-    $this->assertText($user_c->name, 'User C on filtered by role on admin users page');
-
-    // Test blocking of a user.
-    $account = user_load($user_c->uid);
-    $this->assertEqual($account->status, 1, 'User C not blocked');
-    $edit = array();
-    $edit['operation'] = 'block';
-    $edit['accounts[' . $account->uid . ']'] = TRUE;
-    $this->drupalPost('admin/people', $edit, t('Update'));
-    $account = user_load($user_c->uid, TRUE);
-    $this->assertEqual($account->status, 0, 'User C blocked');
-
-    // Test unblocking of a user from /admin/people page and sending of activation mail
-    $editunblock = array();
-    $editunblock['operation'] = 'unblock';
-    $editunblock['accounts[' . $account->uid . ']'] = TRUE;
-    $this->drupalPost('admin/people', $editunblock, t('Update'));
-    $account = user_load($user_c->uid, TRUE);
-    $this->assertEqual($account->status, 1, 'User C unblocked');
-    $this->assertMail("to", $account->mail, "Activation mail sent to user C");
-
-    // Test blocking and unblocking another user from /user/[uid]/edit form and sending of activation mail
-    $user_d = $this->drupalCreateUser(array());
-    $account1 = user_load($user_d->uid, TRUE);
-    $this->drupalPost('user/' . $account1->uid . '/edit', array('status' => 0), t('Save'));
-    $account1 = user_load($user_d->uid, TRUE);
-    $this->assertEqual($account1->status, 0, 'User D blocked');
-    $this->drupalPost('user/' . $account1->uid . '/edit', array('status' => TRUE), t('Save'));
-    $account1 = user_load($user_d->uid, TRUE);
-    $this->assertEqual($account1->status, 1, 'User D unblocked');
-    $this->assertMail("to", $account1->mail, "Activation mail sent to user D");
-  }
-}
-
-/**
- * Tests for user-configurable time zones.
- */
-class UserTimeZoneFunctionalTest extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'User time zones',
-      'description' => 'Set a user time zone and verify that dates are displayed in local time.',
-      'group' => 'User',
-    );
-  }
-
-  /**
-   * Tests the display of dates and time when user-configurable time zones are set.
-   */
-  function testUserTimeZone() {
-    // Setup date/time settings for Los Angeles time.
-    variable_set('date_default_timezone', 'America/Los_Angeles');
-    variable_set('configurable_timezones', 1);
-    variable_set('date_format_medium', 'Y-m-d H:i T');
-
-    // Create a user account and login.
-    $web_user = $this->drupalCreateUser();
-    $this->drupalLogin($web_user);
-
-    // Create some nodes with different authored-on dates.
-    // Two dates in PST (winter time):
-    $date1 = '2007-03-09 21:00:00 -0800';
-    $date2 = '2007-03-11 01:00:00 -0800';
-    // One date in PDT (summer time):
-    $date3 = '2007-03-20 21:00:00 -0700';
-    $node1 = $this->drupalCreateNode(array('created' => strtotime($date1), 'type' => 'article'));
-    $node2 = $this->drupalCreateNode(array('created' => strtotime($date2), 'type' => 'article'));
-    $node3 = $this->drupalCreateNode(array('created' => strtotime($date3), 'type' => 'article'));
-
-    // Confirm date format and time zone.
-    $this->drupalGet("node/$node1->nid");
-    $this->assertText('2007-03-09 21:00 PST', 'Date should be PST.');
-    $this->drupalGet("node/$node2->nid");
-    $this->assertText('2007-03-11 01:00 PST', 'Date should be PST.');
-    $this->drupalGet("node/$node3->nid");
-    $this->assertText('2007-03-20 21:00 PDT', 'Date should be PDT.');
-
-    // Change user time zone to Santiago time.
-    $edit = array();
-    $edit['mail'] = $web_user->mail;
-    $edit['timezone'] = 'America/Santiago';
-    $this->drupalPost("user/$web_user->uid/edit", $edit, t('Save'));
-    $this->assertText(t('The changes have been saved.'), 'Time zone changed to Santiago time.');
-
-    // Confirm date format and time zone.
-    $this->drupalGet("node/$node1->nid");
-    $this->assertText('2007-03-10 02:00 CLST', 'Date should be Chile summer time; five hours ahead of PST.');
-    $this->drupalGet("node/$node2->nid");
-    $this->assertText('2007-03-11 05:00 CLT', 'Date should be Chile time; four hours ahead of PST');
-    $this->drupalGet("node/$node3->nid");
-    $this->assertText('2007-03-21 00:00 CLT', 'Date should be Chile time; three hours ahead of PDT.');
-  }
-}
-
-/**
- * Test user autocompletion.
- */
-class UserAutocompleteTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'User autocompletion',
-      'description' => 'Test user autocompletion functionality.',
-      'group' => 'User'
-    );
-  }
-
-  function setUp() {
-    parent::setUp();
-
-    // Set up two users with different permissions to test access.
-    $this->unprivileged_user = $this->drupalCreateUser();
-    $this->privileged_user = $this->drupalCreateUser(array('access user profiles'));
-  }
-
-  /**
-   * Tests access to user autocompletion and verify the correct results.
-   */
-  function testUserAutocomplete() {
-    // Check access from unprivileged user, should be denied.
-    $this->drupalLogin($this->unprivileged_user);
-    $this->drupalGet('user/autocomplete/' . $this->unprivileged_user->name[0]);
-    $this->assertResponse(403, 'Autocompletion access denied to user without permission.');
-
-    // Check access from privileged user.
-    $this->drupalLogout();
-    $this->drupalLogin($this->privileged_user);
-    $this->drupalGet('user/autocomplete/' . $this->unprivileged_user->name[0]);
-    $this->assertResponse(200, 'Autocompletion access allowed.');
-
-    // Using first letter of the user's name, make sure the user's full name is in the results.
-    $this->assertRaw($this->unprivileged_user->name, 'User name found in autocompletion results.');
-  }
-}
-
-
-/**
- * Tests user links in the secondary menu.
- */
-class UserAccountLinksUnitTests extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'User account links',
-      'description' => 'Test user-account links.',
-      'group' => 'User'
-    );
-  }
-
-  function setUp() {
-    parent::setUp('menu');
-  }
-
-  /**
-   * Tests the secondary menu.
-   */
-  function testSecondaryMenu() {
-    // Create a regular user.
-    $user = $this->drupalCreateUser(array());
-
-    // Log in and get the homepage.
-    $this->drupalLogin($user);
-    $this->drupalGet('<front>');
-
-    // For a logged-in user, expect the secondary menu to have links for "My
-    // account" and "Log out".
-    $link = $this->xpath('//ul[@id=:menu_id]/li/a[contains(@href, :href) and text()=:text]', array(
-      ':menu_id' => 'secondary-menu-links',
-      ':href' => 'user',
-      ':text' => 'My account',
-    ));
-    $this->assertEqual(count($link), 1, 'My account link is in secondary menu.');
-
-    $link = $this->xpath('//ul[@id=:menu_id]/li/a[contains(@href, :href) and text()=:text]', array(
-      ':menu_id' => 'secondary-menu-links',
-      ':href' => 'user/logout',
-      ':text' => 'Log out',
-    ));
-    $this->assertEqual(count($link), 1, 'Log out link is in secondary menu.');
-
-    // Log out and get the homepage.
-    $this->drupalLogout();
-    $this->drupalGet('<front>');
-
-    // For a logged-out user, expect no secondary links.
-    $element = $this->xpath('//ul[@id=:menu_id]', array(':menu_id' => 'secondary-menu-links'));
-    $this->assertEqual(count($element), 0, 'No secondary-menu for logged-out users.');
-  }
-
-  /**
-   * Tests disabling the 'My account' link.
-   */
-  function testDisabledAccountLink() {
-    // Create an admin user and log in.
-    $this->drupalLogin($this->drupalCreateUser(array('access administration pages', 'administer menu')));
-
-    // Verify that the 'My account' link is enabled.
-    $this->drupalGet('admin/structure/menu/manage/user-menu');
-    $label = $this->xpath('//label[contains(.,:text)]/@for', array(':text' => 'Enable My account menu link'));
-    $this->assertFieldChecked((string) $label[0], "The 'My account' link is enabled by default.");
-
-    // Disable the 'My account' link.
-    $input = $this->xpath('//input[@id=:field_id]/@name', array(':field_id' => (string)$label[0]));
-    $edit = array(
-      (string) $input[0] => FALSE,
-    );
-    $this->drupalPost('admin/structure/menu/manage/user-menu', $edit, t('Save configuration'));
-
-    // Get the homepage.
-    $this->drupalGet('<front>');
-
-    // Verify that the 'My account' link does not appear when disabled.
-    $link = $this->xpath('//ul[@id=:menu_id]/li/a[contains(@href, :href) and text()=:text]', array(
-      ':menu_id' => 'secondary-menu-links',
-      ':href' => 'user',
-      ':text' => 'My account',
-    ));
-    $this->assertEqual(count($link), 0, 'My account link is not in the secondary menu.');
-  }
-
-}
-
-/**
- * Test user blocks.
- */
-class UserBlocksUnitTests extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'User blocks',
-      'description' => 'Test user blocks.',
-      'group' => 'User'
-    );
-  }
-
-  /**
-   * Test the user login block.
-   */
-  function testUserLoginBlock() {
-    // Create a user with some permission that anonymous users lack.
-    $user = $this->drupalCreateUser(array('administer permissions'));
-
-    // Log in using the block.
-    $edit = array();
-    $edit['name'] = $user->name;
-    $edit['pass'] = $user->pass_raw;
-    $this->drupalPost('admin/people/permissions', $edit, t('Log in'));
-    $this->assertNoText(t('User login'), 'Logged in.');
-
-    // Check that we are still on the same page.
-    $this->assertEqual(url('admin/people/permissions', array('absolute' => TRUE)), $this->getUrl(), 'Still on the same page after login for access denied page');
-
-    // Now, log out and repeat with a non-403 page.
-    $this->drupalLogout();
-    $this->drupalPost('filter/tips', $edit, t('Log in'));
-    $this->assertNoText(t('User login'), 'Logged in.');
-    $this->assertPattern('!<title.*?' . t('Compose tips') . '.*?</title>!', 'Still on the same page after login for allowed page');
-
-    // Check that the user login block is not vulnerable to information
-    // disclosure to third party sites.
-    $this->drupalLogout();
-    $this->drupalPost('http://example.com/', $edit, t('Log in'), array('external' => FALSE));
-    // Check that we remain on the site after login.
-    $this->assertEqual(url('user/' . $user->uid, array('absolute' => TRUE)), $this->getUrl(), 'Redirected to user profile page after login from the frontpage');
-  }
-
-  /**
-   * Test the Who's Online block.
-   */
-  function testWhosOnlineBlock() {
-    // Generate users and make sure there are no current user sessions.
-    $user1 = $this->drupalCreateUser(array());
-    $user2 = $this->drupalCreateUser(array());
-    $user3 = $this->drupalCreateUser(array());
-    $this->assertEqual(db_query("SELECT COUNT(*) FROM {sessions}")->fetchField(), 0, 'Sessions table is empty.');
-
-    // Insert a user with two sessions.
-    $this->insertSession(array('uid' => $user1->uid));
-    $this->insertSession(array('uid' => $user1->uid));
-    $this->assertEqual(db_query("SELECT COUNT(*) FROM {sessions} WHERE uid = :uid", array(':uid' => $user1->uid))->fetchField(), 2, 'Duplicate user session has been inserted.');
-
-    // Insert a user with only one session.
-    $this->insertSession(array('uid' => $user2->uid, 'timestamp' => REQUEST_TIME + 1));
-
-    // Insert an inactive logged-in user who should not be seen in the block.
-    $this->insertSession(array('uid' => $user3->uid, 'timestamp' => (REQUEST_TIME - variable_get('user_block_seconds_online', 900) - 1)));
-
-    // Insert two anonymous user sessions.
-    $this->insertSession();
-    $this->insertSession();
-
-    // Test block output.
-    $block = user_block_view('online');
-    $this->drupalSetContent($block['content']);
-    $this->assertRaw(t('2 users'), 'Correct number of online users (2 users).');
-    $this->assertText($user1->name, 'Active user 1 found in online list.');
-    $this->assertText($user2->name, 'Active user 2 found in online list.');
-    $this->assertNoText($user3->name, "Inactive user not found in online list.");
-    $this->assertTrue(strpos($this->drupalGetContent(), $user1->name) > strpos($this->drupalGetContent(), $user2->name), 'Online users are ordered correctly.');
-  }
-
-  /**
-   * Insert a user session into the {sessions} table. This function is used
-   * since we cannot log in more than one user at the same time in tests.
-   */
-  private function insertSession(array $fields = array()) {
-    $fields += array(
-      'uid' => 0,
-      'sid' => drupal_hash_base64(uniqid(mt_rand(), TRUE)),
-      'timestamp' => REQUEST_TIME,
-    );
-    db_insert('sessions')
-      ->fields($fields)
-      ->execute();
-    $this->assertEqual(db_query("SELECT COUNT(*) FROM {sessions} WHERE uid = :uid AND sid = :sid AND timestamp = :timestamp", array(':uid' => $fields['uid'], ':sid' => $fields['sid'], ':timestamp' => $fields['timestamp']))->fetchField(), 1, 'Session record inserted.');
-  }
-}
-
-/**
- * Tests saving a user account.
- */
-class UserSaveTestCase extends DrupalWebTestCase {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'User save test',
-      'description' => 'Test user_save() for arbitrary new uid.',
-      'group' => 'User',
-    );
-  }
-
-  /**
-   * Test creating a user with arbitrary uid.
-   */
-  function testUserImport() {
-    // User ID must be a number that is not in the database.
-    $max_uid = db_query('SELECT MAX(uid) FROM {users}')->fetchField();
-    $test_uid = $max_uid + mt_rand(1000, 1000000);
-    $test_name = $this->randomName();
-
-    // Create the base user, based on drupalCreateUser().
-    $user = array(
-      'name' => $test_name,
-      'uid' => $test_uid,
-      'mail' => $test_name . '@example.com',
-      'is_new' => TRUE,
-      'pass' => user_password(),
-      'status' => 1,
-    );
-    $user_by_return = user_save(drupal_anonymous_user(), $user);
-    $this->assertTrue($user_by_return, 'Loading user by return of user_save().');
-
-    // Test if created user exists.
-    $user_by_uid = user_load($test_uid);
-    $this->assertTrue($user_by_uid, 'Loading user by uid.');
-
-    $user_by_name = user_load_by_name($test_name);
-    $this->assertTrue($user_by_name, 'Loading user by name.');
-  }
-}
-
-/**
- * Test the create user administration page.
- */
-class UserCreateTestCase extends DrupalWebTestCase {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'User create',
-      'description' => 'Test the create user administration page.',
-      'group' => 'User',
-    );
-  }
-
-  /**
-   * Create a user through the administration interface and ensure that it
-   * displays in the user list.
-   */
-  protected function testUserAdd() {
-    $user = $this->drupalCreateUser(array('administer users'));
-    $this->drupalLogin($user);
-
-    foreach (array(FALSE, TRUE) as $notify) {
-      $edit = array(
-        'name' => $this->randomName(),
-        'mail' => $this->randomName() . '@example.com',
-        'pass[pass1]' => $pass = $this->randomString(),
-        'pass[pass2]' => $pass,
-        'notify' => $notify,
-      );
-      $this->drupalPost('admin/people/create', $edit, t('Create new account'));
-
-      if ($notify) {
-        $this->assertText(t('A welcome message with further instructions has been e-mailed to the new user @name.', array('@name' => $edit['name'])), 'User created');
-        $this->assertEqual(count($this->drupalGetMails()), 1, 'Notification e-mail sent');
-      }
-      else {
-        $this->assertText(t('Created a new user account for @name. No e-mail has been sent.', array('@name' => $edit['name'])), 'User created');
-        $this->assertEqual(count($this->drupalGetMails()), 0, 'Notification e-mail not sent');
-      }
-
-      $this->drupalGet('admin/people');
-      $this->assertText($edit['name'], 'User found in list of users');
-    }
-  }
-}
-
-/**
- * Tests editing a user account.
- */
-class UserEditTestCase extends DrupalWebTestCase {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'User edit',
-      'description' => 'Test user edit page.',
-      'group' => 'User',
-    );
-  }
-
-  /**
-   * Test user edit page.
-   */
-  function testUserEdit() {
-    // Test user edit functionality with user pictures disabled.
-    variable_set('user_pictures', 0);
-    $user1 = $this->drupalCreateUser(array('change own username'));
-    $user2 = $this->drupalCreateUser(array());
-    $this->drupalLogin($user1);
-
-    // Test that error message appears when attempting to use a non-unique user name.
-    $edit['name'] = $user2->name;
-    $this->drupalPost("user/$user1->uid/edit", $edit, t('Save'));
-    $this->assertRaw(t('The name %name is already taken.', array('%name' => $edit['name'])));
-
-    // Repeat the test with user pictures enabled, which modifies the form.
-    variable_set('user_pictures', 1);
-    $this->drupalPost("user/$user1->uid/edit", $edit, t('Save'));
-    $this->assertRaw(t('The name %name is already taken.', array('%name' => $edit['name'])));
-
-    // Check that filling out a single password field does not validate.
-    $edit = array();
-    $edit['pass[pass1]'] = '';
-    $edit['pass[pass2]'] = $this->randomName();
-    $this->drupalPost("user/$user1->uid/edit", $edit, t('Save'));
-    $this->assertText(t("The specified passwords do not match."), 'Typing mismatched passwords displays an error message.');
-
-    $edit['pass[pass1]'] = $this->randomName();
-    $edit['pass[pass2]'] = '';
-    $this->drupalPost("user/$user1->uid/edit", $edit, t('Save'));
-    $this->assertText(t("The specified passwords do not match."), 'Typing mismatched passwords displays an error message.');
-
-    // Test that the error message appears when attempting to change the mail or
-    // pass without the current password.
-    $edit = array();
-    $edit['mail'] = $this->randomName() . '@new.example.com';
-    $this->drupalPost("user/$user1->uid/edit", $edit, t('Save'));
-    $this->assertRaw(t("Your current password is missing or incorrect; it's required to change the %name.", array('%name' => t('E-mail address'))));
-
-    $edit['current_pass'] = $user1->pass_raw;
-    $this->drupalPost("user/$user1->uid/edit", $edit, t('Save'));
-    $this->assertRaw(t("The changes have been saved."));
-
-    // Test that the user must enter current password before changing passwords.
-    $edit = array();
-    $edit['pass[pass1]'] = $new_pass = $this->randomName();
-    $edit['pass[pass2]'] = $new_pass;
-    $this->drupalPost("user/$user1->uid/edit", $edit, t('Save'));
-    $this->assertRaw(t("Your current password is missing or incorrect; it's required to change the %name.", array('%name' => t('Password'))));
-
-    // Try again with the current password.
-    $edit['current_pass'] = $user1->pass_raw;
-    $this->drupalPost("user/$user1->uid/edit", $edit, t('Save'));
-    $this->assertRaw(t("The changes have been saved."));
-
-    // Make sure the user can log in with their new password.
-    $this->drupalLogout();
-    $user1->pass_raw = $new_pass;
-    $this->drupalLogin($user1);
-    $this->drupalLogout();
-  }
-}
-
-/**
- * Test case for user signatures.
- */
-class UserSignatureTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'User signatures',
-      'description' => 'Test user signatures.',
-      'group' => 'User',
-    );
-  }
-
-  function setUp() {
-    parent::setUp('comment');
-
-    // Enable user signatures.
-    variable_set('user_signatures', 1);
-
-    // Prefetch text formats.
-    $this->full_html_format = filter_format_load('full_html');
-    $this->plain_text_format = filter_format_load('plain_text');
-
-    // Create regular and administrative users.
-    $this->web_user = $this->drupalCreateUser(array());
-    $admin_permissions = array('administer comments');
-    foreach (filter_formats() as $format) {
-      if ($permission = filter_permission_name($format)) {
-        $admin_permissions[] = $permission;
-      }
-    }
-    $this->admin_user = $this->drupalCreateUser($admin_permissions);
-  }
-
-  /**
-   * Test that a user can change their signature format and that it is respected
-   * upon display.
-   */
-  function testUserSignature() {
-    // Create a new node with comments on.
-    $node = $this->drupalCreateNode(array('comment' => COMMENT_NODE_OPEN));
-
-    // Verify that user signature field is not displayed on registration form.
-    $this->drupalGet('user/register');
-    $this->assertNoText(t('Signature'));
-
-    // Log in as a regular user and create a signature.
-    $this->drupalLogin($this->web_user);
-    $signature_text = "<h1>" . $this->randomName() . "</h1>";
-    $edit = array(
-      'signature[value]' => $signature_text,
-      'signature[format]' => $this->plain_text_format->format,
-    );
-    $this->drupalPost('user/' . $this->web_user->uid . '/edit', $edit, t('Save'));
-
-    // Verify that values were stored.
-    $this->assertFieldByName('signature[value]', $edit['signature[value]'], 'Submitted signature text found.');
-    $this->assertFieldByName('signature[format]', $edit['signature[format]'], 'Submitted signature format found.');
-
-    // Create a comment.
-    $langcode = LANGUAGE_NONE;
-    $edit = array();
-    $edit['subject'] = $this->randomName(8);
-    $edit['comment_body[' . $langcode . '][0][value]'] = $this->randomName(16);
-    $this->drupalPost('comment/reply/' . $node->nid, $edit, t('Preview'));
-    $this->drupalPost(NULL, array(), t('Save'));
-
-    // Get the comment ID. (This technique is the same one used in the Comment
-    // module's CommentHelperCase test case.)
-    preg_match('/#comment-([0-9]+)/', $this->getURL(), $match);
-    $comment_id = $match[1];
-
-    // Log in as an administrator and edit the comment to use Full HTML, so
-    // that the comment text itself is not filtered at all.
-    $this->drupalLogin($this->admin_user);
-    $edit['comment_body[' . $langcode . '][0][format]'] = $this->full_html_format->format;
-    $this->drupalPost('comment/' . $comment_id . '/edit', $edit, t('Save'));
-
-    // Assert that the signature did not make it through unfiltered.
-    $this->drupalGet('node/' . $node->nid);
-    $this->assertNoRaw($signature_text, 'Unfiltered signature text not found.');
-    $this->assertRaw(check_markup($signature_text, $this->plain_text_format->format), 'Filtered signature text found.');
-  }
-}
-
-/*
- * Test that a user, having editing their own account, can still log in.
- */
-class UserEditedOwnAccountTestCase extends DrupalWebTestCase {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'User edited own account',
-      'description' => 'Test user edited own account can still log in.',
-      'group' => 'User',
-    );
-  }
-
-  function testUserEditedOwnAccount() {
-    // Change account setting 'Who can register accounts?' to Administrators
-    // only.
-    variable_set('user_register', USER_REGISTER_ADMINISTRATORS_ONLY);
-
-    // Create a new user account and log in.
-    $account = $this->drupalCreateUser(array('change own username'));
-    $this->drupalLogin($account);
-
-    // Change own username.
-    $edit = array();
-    $edit['name'] = $this->randomName();
-    $this->drupalPost('user/' . $account->uid . '/edit', $edit, t('Save'));
-
-    // Log out.
-    $this->drupalLogout();
-
-    // Set the new name on the user account and attempt to log back in.
-    $account->name = $edit['name'];
-    $this->drupalLogin($account);
-  }
-}
-
-/**
- * Test case to test adding, editing and deleting roles.
- */
-class UserRoleAdminTestCase extends DrupalWebTestCase {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'User role administration',
-      'description' => 'Test adding, editing and deleting user roles and changing role weights.',
-      'group' => 'User',
-    );
-  }
-
-  function setUp() {
-    parent::setUp();
-    $this->admin_user = $this->drupalCreateUser(array('administer permissions', 'administer users'));
-  }
-
-  /**
-   * Test adding, renaming and deleting roles.
-   */
-  function testRoleAdministration() {
-    $this->drupalLogin($this->admin_user);
-
-    // Test adding a role. (In doing so, we use a role name that happens to
-    // correspond to an integer, to test that the role administration pages
-    // correctly distinguish between role names and IDs.)
-    $role_name = '123';
-    $edit = array('name' => $role_name);
-    $this->drupalPost('admin/people/permissions/roles', $edit, t('Add role'));
-    $this->assertText(t('The role has been added.'), 'The role has been added.');
-    $role = user_role_load_by_name($role_name);
-    $this->assertTrue(is_object($role), 'The role was successfully retrieved from the database.');
-
-    // Try adding a duplicate role.
-    $this->drupalPost(NULL, $edit, t('Add role'));
-    $this->assertRaw(t('The role name %name already exists. Choose another role name.', array('%name' => $role_name)), 'Duplicate role warning displayed.');
-
-    // Test renaming a role.
-    $old_name = $role_name;
-    $role_name = '456';
-    $edit = array('name' => $role_name);
-    $this->drupalPost("admin/people/permissions/roles/edit/{$role->rid}", $edit, t('Save role'));
-    $this->assertText(t('The role has been renamed.'), 'The role has been renamed.');
-    $this->assertFalse(user_role_load_by_name($old_name), 'The role can no longer be retrieved from the database using its old name.');
-    $this->assertTrue(is_object(user_role_load_by_name($role_name)), 'The role can be retrieved from the database using its new name.');
-
-    // Test deleting a role.
-    $this->drupalPost("admin/people/permissions/roles/edit/{$role->rid}", NULL, t('Delete role'));
-    $this->drupalPost(NULL, NULL, t('Delete'));
-    $this->assertText(t('The role has been deleted.'), 'The role has been deleted');
-    $this->assertNoLinkByHref("admin/people/permissions/roles/edit/{$role->rid}", 'Role edit link removed.');
-    $this->assertFalse(user_role_load_by_name($role_name), 'A deleted role can no longer be loaded.');
-
-    // Make sure that the system-defined roles cannot be edited via the user
-    // interface.
-    $this->drupalGet('admin/people/permissions/roles/edit/' . DRUPAL_ANONYMOUS_RID);
-    $this->assertResponse(403, 'Access denied when trying to edit the built-in anonymous role.');
-    $this->drupalGet('admin/people/permissions/roles/edit/' . DRUPAL_AUTHENTICATED_RID);
-    $this->assertResponse(403, 'Access denied when trying to edit the built-in authenticated role.');
-  }
-
-  /**
-   * Test user role weight change operation.
-   */
-  function testRoleWeightChange() {
-    $this->drupalLogin($this->admin_user);
-
-    // Pick up a random role and get its weight.
-    $rid = array_rand(user_roles());
-    $role = user_role_load($rid);
-    $old_weight = $role->weight;
-
-    // Change the role weight and submit the form.
-    $edit = array('roles['. $rid .'][weight]' => $old_weight + 1);
-    $this->drupalPost('admin/people/permissions/roles', $edit, t('Save order'));
-    $this->assertText(t('The role settings have been updated.'), 'The role settings form submitted successfully.');
-
-    // Retrieve the saved role and compare its weight.
-    $role = user_role_load($rid);
-    $new_weight = $role->weight;
-    $this->assertTrue(($old_weight + 1) == $new_weight, 'Role weight updated successfully.');
-  }
-}
-
-/**
- * Test user token replacement in strings.
- */
-class UserTokenReplaceTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'User token replacement',
-      'description' => 'Generates text using placeholders for dummy content to check user token replacement.',
-      'group' => 'User',
-    );
-  }
-
-  /**
-   * Creates a user, then tests the tokens generated from it.
-   */
-  function testUserTokenReplacement() {
-    global $language;
-    $url_options = array(
-      'absolute' => TRUE,
-      'language' => $language,
-    );
-
-    // Create two users and log them in one after another.
-    $user1 = $this->drupalCreateUser(array());
-    $user2 = $this->drupalCreateUser(array());
-    $this->drupalLogin($user1);
-    $this->drupalLogout();
-    $this->drupalLogin($user2);
-
-    $account = user_load($user1->uid);
-    $global_account = user_load($GLOBALS['user']->uid);
-
-    // Generate and test sanitized tokens.
-    $tests = array();
-    $tests['[user:uid]'] = $account->uid;
-    $tests['[user:name]'] = check_plain(format_username($account));
-    $tests['[user:mail]'] = check_plain($account->mail);
-    $tests['[user:url]'] = url("user/$account->uid", $url_options);
-    $tests['[user:edit-url]'] = url("user/$account->uid/edit", $url_options);
-    $tests['[user:last-login]'] = format_date($account->login, 'medium', '', NULL, $language->language);
-    $tests['[user:last-login:short]'] = format_date($account->login, 'short', '', NULL, $language->language);
-    $tests['[user:created]'] = format_date($account->created, 'medium', '', NULL, $language->language);
-    $tests['[user:created:short]'] = format_date($account->created, 'short', '', NULL, $language->language);
-    $tests['[current-user:name]'] = check_plain(format_username($global_account));
-
-    // Test to make sure that we generated something for each token.
-    $this->assertFalse(in_array(0, array_map('strlen', $tests)), 'No empty tokens generated.');
-
-    foreach ($tests as $input => $expected) {
-      $output = token_replace($input, array('user' => $account), array('language' => $language));
-      $this->assertEqual($output, $expected, format_string('Sanitized user token %token replaced.', array('%token' => $input)));
-    }
-
-    // Generate and test unsanitized tokens.
-    $tests['[user:name]'] = format_username($account);
-    $tests['[user:mail]'] = $account->mail;
-    $tests['[current-user:name]'] = format_username($global_account);
-
-    foreach ($tests as $input => $expected) {
-      $output = token_replace($input, array('user' => $account), array('language' => $language, 'sanitize' => FALSE));
-      $this->assertEqual($output, $expected, format_string('Unsanitized user token %token replaced.', array('%token' => $input)));
-    }
-  }
-}
-
-/**
- * Test user search.
- */
-class UserUserSearchTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'User search',
-      'description' => 'Tests the user search page and verifies that sensitive information is hidden from unauthorized users.',
-      'group' => 'User',
-    );
-  }
-
-  function testUserSearch() {
-    $user1 = $this->drupalCreateUser(array('access user profiles', 'search content', 'use advanced search'));
-    $this->drupalLogin($user1);
-    $keys = $user1->mail;
-    $edit = array('keys' => $keys);
-    $this->drupalPost('search/user/', $edit, t('Search'));
-    $this->assertNoText($keys);
-    $this->drupalLogout();
-
-    $user2 = $this->drupalCreateUser(array('administer users', 'access user profiles', 'search content', 'use advanced search'));
-    $this->drupalLogin($user2);
-    $keys = $user2->mail;
-    $edit = array('keys' => $keys);
-    $this->drupalPost('search/user/', $edit, t('Search'));
-    $this->assertText($keys);
-
-    // Create a blocked user.
-    $blocked_user = $this->drupalCreateUser();
-    $edit = array('status' => 0);
-    $blocked_user = user_save($blocked_user, $edit);
-
-    // Verify that users with "administer users" permissions can see blocked
-    // accounts in search results.
-    $edit = array('keys' => $blocked_user->name);
-    $this->drupalPost('search/user/', $edit, t('Search'));
-    $this->assertText($blocked_user->name, 'Blocked users are listed on the user search results for users with the "administer users" permission.');
-
-    // Verify that users without "administer users" permissions do not see
-    // blocked accounts in search results.
-    $this->drupalLogin($user1);
-    $edit = array('keys' => $blocked_user->name);
-    $this->drupalPost('search/user/', $edit, t('Search'));
-    $this->assertNoText($blocked_user->name, 'Blocked users are hidden from the user search results.');
-
-    $this->drupalLogout();
-  }
-}
-
-/**
- * Test role assignment.
- */
-class UserRolesAssignmentTestCase extends DrupalWebTestCase {
-  protected $admin_user;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Role assignment',
-      'description' => 'Tests that users can be assigned and unassigned roles.',
-      'group' => 'User'
-    );
-  }
-
-  function setUp() {
-    parent::setUp();
-    $this->admin_user = $this->drupalCreateUser(array('administer permissions', 'administer users'));
-    $this->drupalLogin($this->admin_user);
-  }
-
-  /**
-   * Tests that a user can be assigned a role and that the role can be removed
-   * again.
-   */
-  function testAssignAndRemoveRole()  {
-    $rid = $this->drupalCreateRole(array('administer content types'));
-    $account = $this->drupalCreateUser();
-
-    // Assign the role to the user.
-    $this->drupalPost('user/' . $account->uid . '/edit', array("roles[$rid]" => $rid), t('Save'));
-    $this->assertText(t('The changes have been saved.'));
-    $this->assertFieldChecked('edit-roles-' . $rid, 'Role is assigned.');
-    $this->userLoadAndCheckRoleAssigned($account, $rid);
-
-    // Remove the role from the user.
-    $this->drupalPost('user/' . $account->uid . '/edit', array("roles[$rid]" => FALSE), t('Save'));
-    $this->assertText(t('The changes have been saved.'));
-    $this->assertNoFieldChecked('edit-roles-' . $rid, 'Role is removed from user.');
-    $this->userLoadAndCheckRoleAssigned($account, $rid, FALSE);
-  }
-
-  /**
-   * Tests that when creating a user the role can be assigned. And that it can
-   * be removed again.
-   */
-  function testCreateUserWithRole() {
-    $rid = $this->drupalCreateRole(array('administer content types'));
-    // Create a new user and add the role at the same time.
-    $edit = array(
-      'name' => $this->randomName(),
-      'mail' => $this->randomName() . '@example.com',
-      'pass[pass1]' => $pass = $this->randomString(),
-      'pass[pass2]' => $pass,
-      "roles[$rid]" => $rid,
-    );
-    $this->drupalPost('admin/people/create', $edit, t('Create new account'));
-    $this->assertText(t('Created a new user account for !name.', array('!name' => $edit['name'])));
-    // Get the newly added user.
-    $account = user_load_by_name($edit['name']);
-
-    $this->drupalGet('user/' . $account->uid . '/edit');
-    $this->assertFieldChecked('edit-roles-' . $rid, 'Role is assigned.');
-    $this->userLoadAndCheckRoleAssigned($account, $rid);
-
-    // Remove the role again.
-    $this->drupalPost('user/' . $account->uid . '/edit', array("roles[$rid]" => FALSE), t('Save'));
-    $this->assertText(t('The changes have been saved.'));
-    $this->assertNoFieldChecked('edit-roles-' . $rid, 'Role is removed from user.');
-    $this->userLoadAndCheckRoleAssigned($account, $rid, FALSE);
-  }
-
-  /**
-   * Check role on user object.
-   *
-   * @param object $account
-   *   The user account to check.
-   * @param string $rid
-   *   The role ID to search for.
-   * @param bool $is_assigned
-   *   (optional) Whether to assert that $rid exists (TRUE) or not (FALSE).
-   *   Defaults to TRUE.
-   */
-  private function userLoadAndCheckRoleAssigned($account, $rid, $is_assigned = TRUE) {
-    $account = user_load($account->uid, TRUE);
-    if ($is_assigned) {
-      $this->assertTrue(array_key_exists($rid, $account->roles), 'The role is present in the user object.');
-    }
-    else {
-      $this->assertFalse(array_key_exists($rid, $account->roles), 'The role is not present in the user object.');
-    }
-  }
-}
-
-
-/**
- * Unit test for authmap assignment.
- */
-class UserAuthmapAssignmentTestCase extends DrupalWebTestCase {
-  public static function getInfo() {
-    return array(
-      'name' => 'Authmap assignment',
-      'description' => 'Tests that users can be assigned and unassigned authmaps.',
-      'group' => 'User'
-    );
-  }
-
-  /**
-   * Test authmap assignment and retrieval.
-   */
-  function testAuthmapAssignment()  {
-    $account = $this->drupalCreateUser();
-
-    // Assign authmaps to the user.
-    $authmaps = array(
-      'authname_poll' => 'external username one',
-      'authname_book' => 'external username two',
-    );
-    user_set_authmaps($account, $authmaps);
-
-    // Test for expected authmaps.
-    $expected_authmaps = array(
-      'external username one' => array(
-        'poll' => 'external username one',
-      ),
-      'external username two' => array(
-        'book' => 'external username two',
-      ),
-    );
-    foreach ($expected_authmaps as $authname => $expected_output) {
-      $this->assertIdentical(user_get_authmaps($authname), $expected_output, format_string('Authmap for authname %authname was set correctly.', array('%authname' => $authname)));
-    }
-
-    // Remove authmap for module poll, add authmap for module blog.
-    $authmaps = array(
-      'authname_poll' => NULL,
-      'authname_blog' => 'external username three',
-    );
-    user_set_authmaps($account, $authmaps);
-
-    // Assert that external username one does not have authmaps.
-    $remove_username = 'external username one';
-    unset($expected_authmaps[$remove_username]);
-    $this->assertFalse(user_get_authmaps($remove_username), format_string('Authmap for %authname was removed.', array('%authname' => $remove_username)));
-
-    // Assert that a new authmap was created for external username three, and
-    // existing authmaps for external username two were unchanged.
-    $expected_authmaps['external username three'] = array('blog' => 'external username three');
-    foreach ($expected_authmaps as $authname => $expected_output) {
-      $this->assertIdentical(user_get_authmaps($authname), $expected_output, format_string('Authmap for authname %authname was set correctly.', array('%authname' => $authname)));
-    }
-  }
-}
-
-/**
- * Tests user_validate_current_pass on a custom form.
- */
-class UserValidateCurrentPassCustomForm extends DrupalWebTestCase {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'User validate current pass custom form',
-      'description' => 'Test that user_validate_current_pass is usable on a custom form.',
-      'group' => 'User',
-    );
-  }
-
-  /**
-   * User with permission to view content.
-   */
-  protected $accessUser;
-
-  /**
-   * User permission to administer users.
-   */
-  protected $adminUser;
-
-  function setUp() {
-    parent::setUp('user_form_test');
-    // Create two users
-    $this->accessUser = $this->drupalCreateUser(array('access content'));
-    $this->adminUser = $this->drupalCreateUser(array('administer users'));
-  }
-
-  /**
-   * Tests that user_validate_current_pass can be reused on a custom form.
-   */
-  function testUserValidateCurrentPassCustomForm() {
-    $this->drupalLogin($this->adminUser);
-
-    // Submit the custom form with the admin user using the access user's password.
-    $edit = array();
-    $edit['user_form_test_field'] = $this->accessUser->name;
-    $edit['current_pass'] = $this->accessUser->pass_raw;
-    $this->drupalPost('user_form_test_current_password/' . $this->accessUser->uid, $edit, t('Test'));
-    $this->assertText(t('The password has been validated and the form submitted successfully.'));
-  }
-}
diff --git a/modules/user/user.tokens.inc b/modules/user/user.tokens.inc
deleted file mode 100644
index 8dcea4b..0000000
--- a/modules/user/user.tokens.inc
+++ /dev/null
@@ -1,131 +0,0 @@
-<?php
-
-/**
- * @file
- * Builds placeholder replacement tokens for user-related data.
- */
-
-/**
- * Implements hook_token_info().
- */
-function user_token_info() {
-  $types['user'] = array(
-    'name' => t('Users'),
-    'description' => t('Tokens related to individual user accounts.'),
-    'needs-data' => 'user',
-  );
-  $types['current-user'] = array(
-    'name' => t('Current user'),
-    'description' => t('Tokens related to the currently logged in user.'),
-    'type' => 'user',
-  );
-
-  $user['uid'] = array(
-    'name' => t('User ID'),
-    'description' => t("The unique ID of the user account."),
-  );
-  $user['name'] = array(
-    'name' => t("Name"),
-    'description' => t("The login name of the user account."),
-  );
-  $user['mail'] = array(
-    'name' => t("Email"),
-    'description' => t("The email address of the user account."),
-  );
-  $user['url'] = array(
-    'name' => t("URL"),
-    'description' => t("The URL of the account profile page."),
-  );
-  $user['edit-url'] = array(
-    'name' => t("Edit URL"),
-    'description' => t("The URL of the account edit page."),
-  );
-
-  $user['last-login'] = array(
-    'name' => t("Last login"),
-    'description' => t("The date the user last logged in to the site."),
-    'type' => 'date',
-  );
-  $user['created'] = array(
-    'name' => t("Created"),
-    'description' => t("The date the user account was created."),
-    'type' => 'date',
-  );
-
-  return array(
-    'types' => $types,
-    'tokens' => array('user' => $user),
-  );
-}
-
-/**
- * Implements hook_tokens().
- */
-function user_tokens($type, $tokens, array $data = array(), array $options = array()) {
-  $url_options = array('absolute' => TRUE);
-  if (isset($options['language'])) {
-    $url_options['language'] = $options['language'];
-    $language_code = $options['language']->language;
-  }
-  else {
-    $language_code = NULL;
-  }
-  $sanitize = !empty($options['sanitize']);
-
-  $replacements = array();
-
-  if ($type == 'user' && !empty($data['user'])) {
-    $account = $data['user'];
-    foreach ($tokens as $name => $original) {
-      switch ($name) {
-        // Basic user account information.
-        case 'uid':
-          // In the case of hook user_presave uid is not set yet.
-          $replacements[$original] = !empty($account->uid) ? $account->uid : t('not yet assigned');
-          break;
-
-        case 'name':
-          $name = format_username($account);
-          $replacements[$original] = $sanitize ? check_plain($name) : $name;
-          break;
-
-        case 'mail':
-          $replacements[$original] = $sanitize ? check_plain($account->mail) : $account->mail;
-          break;
-
-        case 'url':
-          $replacements[$original] = !empty($account->uid) ? url("user/$account->uid", $url_options) : t('not yet assigned');
-          break;
-
-        case 'edit-url':
-          $replacements[$original] = !empty($account->uid) ? url("user/$account->uid/edit", $url_options) : t('not yet assigned');
-          break;
-
-        // These tokens are default variations on the chained tokens handled below.
-        case 'last-login':
-          $replacements[$original] = !empty($account->login) ? format_date($account->login, 'medium', '', NULL, $language_code) : t('never');
-          break;
-
-        case 'created':
-          // In the case of user_presave the created date may not yet be set.
-          $replacements[$original] = !empty($account->created) ? format_date($account->created, 'medium', '', NULL, $language_code) : t('not yet created');
-          break;
-      }
-    }
-
-    if ($login_tokens = token_find_with_prefix($tokens, 'last-login')) {
-      $replacements += token_generate('date', $login_tokens, array('date' => $account->login), $options);
-    }
-
-    if ($registered_tokens = token_find_with_prefix($tokens, 'created')) {
-      $replacements += token_generate('date', $registered_tokens, array('date' => $account->created), $options);
-    }
-  }
-
-  if ($type == 'current-user') {
-    $account = user_load($GLOBALS['user']->uid);
-    $replacements += token_generate('user', $tokens, array('user' => $account), $options);
-  }
-
-  return $replacements;
-}
