';
+ $closediv = TRUE;
+ break;
+ case "none":
+ case "top":
+ case "bottom":
+ if (($theme->thumb_inpage) and ($page_subtype == "photo")):
+ echo '
';
+ $closediv = TRUE;
+ else:
+ $closediv = FALSE;
+ endif;
+ break;
+ default:
+ echo '
';
+ $closediv = TRUE;
+ break;
+ endswitch; ?>
+ if (($theme->page_subtype != "login") and ($theme->page_subtype != "reauthenticate")): ?>
+ if (($theme->sidebarvisible == "none") or ($theme->sidebarvisible == "bottom") or ($theme->sidebarvisible == "top")): ?>
+ if (($theme->thumb_inpage) and ($page_subtype == "photo")): ?>
+= '
'; ?>
+= $theme->get_block_html("thumbnav"); ?>
+ endif; ?>
+ else: ?>
+= new View("sidebar.html") ?>
+ endif; ?>
+ endif ?>
+= ($closediv)? "
" : null; ?>
+
+ switch ($theme->sidebarvisible):
+ case "left":
+ echo '
';
+ break;
+ case "none":
+ case "top":
+ case "bottom":
+ if (($theme->thumb_inpage) and ($page_subtype == "photo")):
+ echo '
';
+ else:
+ echo '
';
+ endif;
+ break;
+ default:
+ echo '
';
+ break;
+ endswitch;
+
+ if ($theme->show_root_page):
+ echo new View("rootpage.html");
+ else:
+ echo $content;
+ endif; ?>
+
+
+
+ if (($theme->page_subtype != "login") and ($theme->page_subtype != "reauthenticate") and ($theme->sidebarvisible == "bottom")): ?>
+
+ = new View("sidebar.html") ?>
+
+ endif; ?>
+
+= $theme->page_bottom() ?>
+
+
diff --git a/3.0/modules/tag_albums/-- Theme Files/GreyDragon 3.1.0/views/paginator.html.php b/3.0/modules/tag_albums/-- Theme Files/GreyDragon 3.1.0/views/paginator.html.php
new file mode 100644
index 00000000..0a85b414
--- /dev/null
+++ b/3.0/modules/tag_albums/-- Theme Files/GreyDragon 3.1.0/views/paginator.html.php
@@ -0,0 +1,210 @@
+
+
+// This is a generic paginator for album, photo and movie pages. Depending on the page type,
+// there are different sets of variables available. With this data, you can make a paginator
+// that lets you say "You're viewing photo 5 of 35", or "You're viewing photos 10 - 18 of 37"
+// for album views.
+//
+// Available variables for all page types:
+// $page_type - "collection", "item", or "other"
+// $page_subtype - "album", "movie", "photo", "tag", etc.
+// $previous_page_url - the url to the previous page, if there is one
+// $next_page_url - the url to the next page, if there is one
+// $total - the total number of photos in this album
+//
+// Available for the "collection" page types:
+// $page - what page number we're on
+// $max_pages - the maximum page number
+// $page_size - the page size
+// $first_page_url - the url to the first page, or null if we're on the first page
+// $last_page_url - the url to the last page, or null if we're on the last page
+// $first_visible_position - the position number of the first visible photo on this page
+// $last_visible_position - the position number of the last visible photo on this page
+//
+// Available for "item" page types:
+// $position - the position number of this photo
+//
+?>
+
+
+ $_pagelist = array();
+
+ // rWatcher Mod
+ if (isset($dynamic_siblings)):
+ $current_page = $position;
+ $total_pages = count($dynamic_siblings);
+ $siblings = $dynamic_siblings;
+ for ($i = 1; $i <= $total_pages; $i++):
+ if ($page_type == "item") {
+ $_pagelist[$i] = url::site("tag_albums/show/" . $siblings[$i-1]->id . "/" . $tag_id . "/" . $album_id . "/" . urlencode($siblings[$i-1]->name));
+ } elseif ($page_type == "") {
+ }
+ endfor;
+ else:
+ // End rWatcher Mod.
+
+ switch ($page_type) {
+ case "collection":
+ if (isset($item)):
+ $parent = $item->parent();
+ endif;
+ $current_page = $page;
+ $total_pages = $max_pages;
+ // Prepare page url list
+ for ($i = 1; $i <= $total_pages; $i++):
+ $_pagelist[$i] = url::site(url::merge(array("page" => $i)));
+ endfor;
+ break;
+ case "item":
+ if (isset($item)):
+ $parent = $item->parent();
+ endif;
+ $current_page = $position;
+ $total_pages = $total;
+ if (isset($parent)):
+ $siblings = $parent->children();
+ for ($i = 1; $i <= $total; $i++):
+ $_pagelist[$i] = $siblings[$i-1]->url();
+ endfor;
+ endif;
+ break;
+ default:
+ $current_page = 1;
+ $total_pages = 1;
+ $_pagelist[1] = url::site();
+ break;
+ }
+
+// rWatcher Mod
+ endif;
+// End rWatcher Mod.
+
+ if ($total_pages <= 1):
+ $pagination_msg = " ";
+ else:
+ $pagination_msg = t("Page:") . ' ';
+ if ($total_pages < 13):
+ for ($i = 1; $i <= $total_pages; $i++):
+ if ($i == $current_page):
+ $pagination_msg .= '
' . t($i) . ' ';
+ else:
+ $pagination_msg .= '
' . t($i) . ' ';
+ endif;
+ if ($i < $total_pages):
+ $pagination_msg .= '·';
+ endif;
+ endfor;
+ elseif ($current_page < 9):
+ for ($i = 1; $i <= 10; $i++):
+ if ($i == $current_page):
+ $pagination_msg .= '
' . t($i) . ' ';
+ else:
+ $pagination_msg .= '
' . t($i) . ' ';
+ endif;
+ if ($i < 10):
+ $pagination_msg .= '·';
+ endif;
+ endfor;
+
+ $pagination_msg .= '…';
+ $pagination_msg .= '
' . t($total_pages - 1) . ' ';
+ $pagination_msg .= '·';
+ $pagination_msg .= '
' . t($total_pages) . ' ';
+
+ elseif ($current_page > $total_pages - 8):
+ $pagination_msg .= '
' . t(1) . ' ';
+ $pagination_msg .= '·';
+ $pagination_msg .= '
' . t(2) . ' ';
+ $pagination_msg .= '…';
+
+ for ($i = $total_pages - 9; $i <= $total_pages; $i++):
+ if ($i == $current_page):
+ $pagination_msg .= '
' . t($i) . ' ';
+ else:
+ $pagination_msg .= '
' . t($i) . ' ';
+ endif;
+ if ($i < $total_pages):
+ $pagination_msg .= '·';
+ endif;
+ endfor;
+
+ else:
+ $pagination_msg .= '
' . t(1) . ' ';
+ $pagination_msg .= '·';
+ $pagination_msg .= '
' . t(2) . ' ';
+ $pagination_msg .= '…';
+
+ for ($i = $current_page - 5; $i <= $current_page + 5; $i++):
+ if ($i == $current_page):
+ $pagination_msg .= '
' . t($i) . ' ';
+ else:
+ $pagination_msg .= '
' . t($i) . ' ';
+ endif;
+ if ($i < $current_page + 5):
+ $pagination_msg .= '·';
+ endif;
+ endfor;
+
+ $pagination_msg .= '…';
+ $pagination_msg .= '
' . t($total_pages - 1) . ' ';
+ $pagination_msg .= '·';
+ $pagination_msg .= '
' . t($total_pages) . ' ';
+ endif;
+ endif;
+?>
+
+
\ No newline at end of file
diff --git a/3.0/modules/tag_albums/-- Theme Files/GreyDragon 3.1.0/views/photo.html.php b/3.0/modules/tag_albums/-- Theme Files/GreyDragon 3.1.0/views/photo.html.php
new file mode 100644
index 00000000..bfe20999
--- /dev/null
+++ b/3.0/modules/tag_albums/-- Theme Files/GreyDragon 3.1.0/views/photo.html.php
@@ -0,0 +1,122 @@
+
+
+ if ($theme->desc_allowbbcode):
+ $_description = $theme->bb2html($item->description, 1);
+ else:
+ $_description = nl2br(html::purify($item->description));
+ endif;
+
+ if ($theme->is_photometa_visible):
+ $_description .= '
';
+ endif;
+
+ switch ($theme->photo_popupbox):
+ case "preview":
+ $include_list = FALSE;
+ $include_single = TRUE;
+ break;
+ case "none":
+ $include_list = FALSE;
+ $include_single = FALSE;
+ break;
+ default:
+ $include_list = TRUE;
+ $include_single = TRUE;
+ break;
+ endswitch;
+?>
+
+
+ $_title = $theme->bb2html(html::purify($item->title), 1); ?>
+
+
= $_title ?>
+
+ = $theme->add_paginator("top", FALSE); ?>
+ = $theme->photo_top() ?>
+ if (($theme->photo_descmode == "top") and ($_description)): ?>
+
+ endif; ?>
+
+ = $theme->resize_top($item) ?>
+ $_resizewidth = $item->resize_width;
+// rWatcher Modification.
+ //ORIGINAL LINE $siblings = $item->parent()->children();
+ $siblings = "";
+ if (isset($dynamic_siblings)) {
+ $siblings = $dynamic_siblings;
+ } else {
+ $siblings = $item->parent()->children();
+ }
+// End rWatcher Modification
+ ?>
+
+
+ $script = "\n"; ?>
+ $_align = "";
+ if ($_description):
+ switch ($theme->photo_descmode):
+ case "overlay_top":
+ $_align = "g-align-top";
+ break;
+ case "overlay_bottom":
+ $_align = "g-align-bottom";
+ break;
+ default:
+ break;
+ endswitch;
+ endif; ?>
+ if ($_align): ?>
+
= t("More") ?>
+
+ = $_title ?>
+ = $_description ?>
+
+ endif ?>
+
+ = $theme->resize_bottom($item) ?>
+
+ if (($theme->photo_descmode == "bottom") and ($_description)): ?>
+
+ endif; ?>
+ = $theme->add_paginator("bottom", FALSE); ?>
+ = $theme->photo_bottom() ?>
+
+= $script ?>
\ No newline at end of file
diff --git a/3.0/modules/tag_albums/-- Theme Files/GreyDragon 3.1.0/views/tag_albums_album.html.php b/3.0/modules/tag_albums/-- Theme Files/GreyDragon 3.1.0/views/tag_albums_album.html.php
new file mode 100644
index 00000000..ac750319
--- /dev/null
+++ b/3.0/modules/tag_albums/-- Theme Files/GreyDragon 3.1.0/views/tag_albums_album.html.php
@@ -0,0 +1,239 @@
+
+
+ // Used album.html.php as starting point.
+ // The g-info block was taken from album.html.php and $theme->album_top() was changed to $theme->dynamic_top().
+ // $item->title and $item->description have been changed to $title and $description.
+ //
+ // The g-album-grid block was also taken from album.html.php. The section for uploading new photos to an empty album
+ // has been removed. Also, $theme->context_menu has been removed as well (it was crashing the page).
+?>
+
+
+
+= $theme->add_paginator("top"); ?>
+
+ if (($theme->album_descmode == "top") and ($description)): ?>
+
= $theme->bb2html(html::purify($description), 1) ?>
+ endif; ?>
+
+ if (isset($filter_text) && (module::get_var("tag_albums", "tag_index_filter"))): ?>
+
+
+
= $filter_text; ?>
+
+ endif ?>
+
+
+
+
+ if (count($children)):
+ $siblings = $all_siblings;
+ if (($theme->disablephotopage) && (count($siblings) > count($children))):
+ $j = 0;
+ foreach ($siblings as $i => $sibling):
+ //if ($sibling->rand_key == $children[$j]->rand_key):
+ if ($sibling->id == $children[$j]->item_id):
+ //echo $theme->get_thumb_element($sibling, !$theme->hidecontextmenu);
+ echo rw_get_thumb_element($children[$j], $theme);
+ if ($j + 1 < count($children)):
+ $j++;
+ endif;
+ else:
+ echo $theme->get_thumb_link($sibling);
+ //echo rw_get_thumb_link($sibling, $theme);
+ endif;
+ endforeach;
+ else:
+ foreach ($children as $i => $child):
+ //echo $theme->get_thumb_element($child, !$theme->hidecontextmenu);
+ echo rw_get_thumb_element($child, $theme);
+ endforeach;
+ endif;
+ else: ?>
+ = t("There aren't any photos here yet!") ?>
+ endif; ?>
+
+
+
+= $theme->dynamic_bottom() ?>
+
+ if (($theme->album_descmode == "bottom") and ($description)): ?>
+
= $theme->bb2html(html::purify($description), 1) ?>
+ endif; ?>
+
+= $theme->add_paginator("bottom"); ?>
+
+
+ function rw_get_thumb_link($item, $theme) {
+ // This code is based on grey dragon's get_thumb_link function.
+ // Change all $this to $theme
+ if ($item->is_album()):
+ return "";
+ endif;
+
+ /*
+ if (access::can("view_full", $item)):
+ $direct_link = $item->file_url();
+ else:
+ $direct_link = $item->resize_url();
+ endif;*/
+ $direct_link = $child->full_or_resize_url();
+
+ return '
';
+ }
+
+ function rw_get_thumb_element($child, $theme) {
+ // This code is based on grey dragon's get_thumb_element function.
+ // Change all $item to $child
+ // Change all $this to $theme
+ $thumb_item = $child;
+ if ($theme->thumb_random):
+ if ($child->is_album() && ($rnd = item::random_query()->where("parent_id", "=", $child->id)->find()) && $rnd->loaded()):
+ $thumb_item = $rnd;
+ endif;
+ endif;
+
+ $item_class = $child->is_album() ? "g-album" : "g-photo";
+ $content = '
has_thumb()):
+ $is_portrait = ($thumb_item->thumb_height > $thumb_item->thumb_width);
+ $_shift = "";
+ switch ($theme->thumb_imgalign):
+ case "center":
+ if (($theme->crop_factor == 1) and (!$is_portrait)):
+ $_shift = 'style="margin-top: ' . intval(($theme->_thumb_size_y - $thumb_item->thumb_height) / 2) . 'px;"';
+ elseif ($theme->crop_factor > 0):
+ $_shift = 'style="margin-top: -' . intval(($thumb_item->thumb_height - $theme->_thumb_size_y) / 2) . 'px;"';
+ endif;
+ break;
+ case "bottom":
+ if (($theme->crop_factor == 1) and (!$is_portrait)):
+ $_shift = 'style="margin-top: ' . intval($theme->_thumb_size_y - $thumb_item->thumb_height) . 'px;"';
+ elseif ($theme->crop_factor > 0):
+ $_shift = 'style="margin-top: -' . intval($thumb_item->thumb_height - $theme->_thumb_size_y) . 'px;"';
+ endif;
+ break;
+ case "fit":
+ break;
+ case "top":
+ default:
+ break;
+ endswitch;
+ else:
+ $is_portrait = FALSE;
+ $_shift = 'style="margin-top: 0px;"';
+ endif;
+
+ $content .= ($is_portrait)? " g-portrait" : " g-landscape";
+ $content .= '">' . $theme->thumb_top($child);
+
+ $content .= '';
+ $content .= $theme->thumb_bottom($child);
+ $content .= ' ';
+
+ return $content;
+ //print $content;
+ // End of modified function code.
+ }
+?>
\ No newline at end of file
diff --git a/3.0/modules/tag_albums/-- Theme Files/clean_canvas 1.0.7/views/calpage.html.php b/3.0/modules/tag_albums/-- Theme Files/clean_canvas 1.0.7/views/calpage.html.php
new file mode 100644
index 00000000..9b4635ef
--- /dev/null
+++ b/3.0/modules/tag_albums/-- Theme Files/clean_canvas 1.0.7/views/calpage.html.php
@@ -0,0 +1,204 @@
+
+
+html_attributes() ?> xml:lang="en" lang="en">
+
+
+ $theme->start_combining("script,css") ?>
+
+ if ($page_title): ?>
+ = $page_title ?>
+ else: ?>
+ if ($theme->item()): ?>
+ = $theme->item()->title ?>
+ elseif ($theme->tag()): ?>
+ = t("Photos tagged with %tag_title", array("tag_title" => $theme->tag()->name)) ?>
+ else: /* Not an item, not a tag, no page_title specified. Help! */ ?>
+ = item::root()->title ?>
+ endif ?>
+ endif ?>
+
+
"
+ type="image/x-icon" />
+
+ if ($theme->page_type == "collection"): ?>
+ if ($thumb_proportion != 1): ?>
+ $new_width = round($thumb_proportion * 213) ?>
+ $new_height = round($thumb_proportion * 240) ?>
+
+ endif ?>
+ endif ?>
+
+ = $theme->script("json2-min.js") ?>
+ = $theme->script("jquery.js") ?>
+ = $theme->script("jquery.form.js") ?>
+ = $theme->script("jquery-ui.js") ?>
+ = $theme->script("gallery.common.js") ?>
+ /* MSG_CANCEL is required by gallery.dialog.js */ ?>
+
+ = $theme->script("gallery.ajax.js") ?>
+ = $theme->script("gallery.dialog.js") ?>
+ = $theme->script("superfish/js/superfish.js") ?>
+ = $theme->script("jquery.localscroll.js") ?>
+
+ /* These are page specific but they get combined */ ?>
+ if ($theme->page_subtype == "photo"): ?>
+ = $theme->script("jquery.scrollTo.js") ?>
+ = $theme->script("gallery.show_full_size.js") ?>
+ elseif ($theme->page_subtype == "movie"): ?>
+ = $theme->script("flowplayer.js") ?>
+ endif ?>
+
+ = $theme->head() ?>
+
+ /* Theme specific CSS/JS goes last so that it can override module CSS/JS */ ?>
+ = $theme->script("ui.init.js") ?>
+ = $theme->css("yui/reset-fonts-grids.css") ?>
+ = $theme->css("superfish/css/superfish.css") ?>
+ if (module::get_var("theme_clean_canvas", "color_variant") == "dark" ): ?>
+ = $theme->css("dark/themeroller/ui.base.css") ?>
+ = $theme->css("dark/screen_colors.css") ?>
+ = $theme->css("dark/screen_candy.css") ?>
+ else: ?>
+ = $theme->css("clean/themeroller/ui.base.css") ?>
+ = $theme->css("clean/screen_colors.css") ?>
+ = $theme->css("clean/screen_candy.css") ?>
+ endif ?>
+ = $theme->css("screen_layout_base.css") ?>
+ = $theme->css("screen_fonts.css") ?>
+ if (module::get_var("theme_clean_canvas", "wide")): ?>
+ = $theme->css("screen_layout_wide.css") ?>
+ else: ?>
+ = $theme->css("screen_layout_fixed.css") ?>
+ endif ?>
+
+
+
+ = $theme->get_combined("script") ?>
+
+
+ = $theme->get_combined("css") ?>
+
+
+ body_attributes() ?>>
+ = $theme->page_top() ?>
+ if (module::get_var("theme_clean_canvas", "wide")): ?>
+
+ else: ?>
+
+ endif ?>
+ = $theme->site_status() ?>
+
+
+
+
+
+ = $theme->messages() ?>
+ = $content ?>
+
+
+
+ if (!($theme->item() && !empty($parents))): ?>
+
+ endif ?>
+
+
+
+
+ = $theme->page_bottom() ?>
+
+
diff --git a/3.0/modules/tag_albums/controllers/admin_tag_albums.php b/3.0/modules/tag_albums/controllers/admin_tag_albums.php
new file mode 100644
index 00000000..6267e33c
--- /dev/null
+++ b/3.0/modules/tag_albums/controllers/admin_tag_albums.php
@@ -0,0 +1,123 @@
+content = new View("admin_tag_albums.html");
+
+ // Generate a form for the admin Settings.
+ $view->content->tag_albums_form = $this->_get_admin_form();
+
+ // Display the page.
+ print $view;
+ }
+
+ private function _get_admin_form() {
+ $form = new Forge("admin/tag_albums/saveprefs", "", "post",
+ array("id" => "g-tag-albums-admin-form"));
+
+ $tag_albums_tagsort_group = $form->group("Tag_Albums_Tag_Sort")->label(t("\"All Tags\" Album Preferences"));
+ $tag_albums_tagsort_group->input("tag_page_title")
+ ->label(t("Page Title"))
+ ->value(module::get_var("tag_albums", "tag_page_title"));
+ $tag_albums_tagsort_group->dropdown("tag_index")
+ ->label(t("Tag album's index should display:"))
+ ->options(
+ array("default" => "(default) Individual Tag Albums",
+ "tagcloudpage" => "Tag Cloud Page Module",
+ "alltags" => "All Tags Module"))
+ ->selected(module::get_var("tag_albums", "tag_index"));
+
+ $tag_albums_tagsort_group->dropdown("tag_sort_by")
+ ->label(t("Sort \"All Tags\" Albums By:"))
+ ->options(
+ array("name" => "Name",
+ "count" => "Count",
+ "id" => "ID Number"))
+ ->selected(module::get_var("tag_albums", "tag_sort_by"));
+ $tag_albums_tagsort_group->dropdown("tag_sort_direction")
+ ->label(t("Display Albums In:"))
+ ->options(
+ array("ASC" => "Ascending Order",
+ "DESC" => "Descending"))
+ ->selected(module::get_var("tag_albums", "tag_sort_direction"));
+
+ $tag_index_scope_options["tag_index_scope"] = Array(t("Use tag album index setting for \"*\" albums as well?"), module::get_var("tag_albums", "tag_index_scope"));
+ $tag_albums_tagsort_group->checklist("tag_index_scope")
+ ->options($tag_index_scope_options);
+
+ $tag_index_filter_options["tag_index_filter"] = Array(t("Display filter links on \"All Tags\" album pages?"), module::get_var("tag_albums", "tag_index_filter"));
+ $tag_albums_tagsort_group->checklist("tag_index_filter")
+ ->options($tag_index_filter_options);
+
+ $tag_albums_tagitemsort_group = $form->group("Tag_Albums_Tag_Item_Sort")->label(t("\"All Tags\" Sub-Album Preferences"));
+ $tag_albums_tagitemsort_group->dropdown("subalbum_sort_by")
+ ->label(t("Sort Contents of Sub-Albums By:"))
+ ->options(
+ array("title" => "Title",
+ "name" => "File name",
+ "captured" => "Date captured",
+ "created" => "Date uploaded",
+ "updated" => "Date modified",
+ "view_count" => "Number of views"))
+ ->selected(module::get_var("tag_albums", "subalbum_sort_by"));
+ $tag_albums_tagitemsort_group->dropdown("subalbum_sort_direction")
+ ->label(t("Display Contents of Sub-Albums In:"))
+ ->options(
+ array("ASC" => "Ascending Order",
+ "DESC" => "Descending"))
+ ->selected(module::get_var("tag_albums", "subalbum_sort_direction"));
+
+ // Add a save button to the form.
+ $form->submit("SaveSettings")->value(t("Save"));
+
+ // Return the newly generated form.
+ return $form;
+ }
+
+ public function saveprefs() {
+ // Prevent Cross Site Request Forgery
+ access::verify_csrf();
+
+ $form = $this->_get_admin_form();
+ if ($form->validate()) {
+ Kohana_Log::add("error",print_r($form,1));
+ module::set_var("tag_albums", "tag_page_title", $form->Tag_Albums_Tag_Sort->tag_page_title->value);
+ module::set_var("tag_albums", "tag_index", $form->Tag_Albums_Tag_Sort->tag_index->value);
+ module::set_var("tag_albums", "tag_index_scope", count($form->Tag_Albums_Tag_Sort->tag_index_scope->value));
+ module::set_var("tag_albums", "tag_index_filter", count($form->Tag_Albums_Tag_Sort->tag_index_filter->value));
+ module::set_var("tag_albums", "tag_sort_by", $form->Tag_Albums_Tag_Sort->tag_sort_by->value);
+ module::set_var("tag_albums", "tag_sort_direction", $form->Tag_Albums_Tag_Sort->tag_sort_direction->value);
+ module::set_var("tag_albums", "subalbum_sort_by", $form->Tag_Albums_Tag_Item_Sort->subalbum_sort_by->value);
+ module::set_var("tag_albums", "subalbum_sort_direction", $form->Tag_Albums_Tag_Item_Sort->subalbum_sort_direction->value);
+ message::success(t("Your settings have been saved."));
+
+ url::redirect("admin/tag_albums");
+ }
+
+ // Else show the page with errors
+ $view = new Admin_View("admin.html");
+ $view->content = new View("admin_tag_albums.html");
+ $view->content->tag_albums_form = $form;
+ print $view;
+ }
+}
diff --git a/3.0/modules/tag_albums/controllers/tag_albums.php b/3.0/modules/tag_albums/controllers/tag_albums.php
new file mode 100644
index 00000000..c234a1c5
--- /dev/null
+++ b/3.0/modules/tag_albums/controllers/tag_albums.php
@@ -0,0 +1,879 @@
+where("id", "=", $id)
+ ->find_all();
+
+ // If it doesn't exist, redirect to the modules root page.
+ if (count($album_tags) == 0) {
+ url::redirect("tag_albums/");
+ }
+
+ // If it does exist, and is set to *, load a list of all tags.
+ if ($album_tags[0]->tags == "*") {
+ $this->index($id, "");
+ } else {
+ // Otherwise, populate this page with the specified items.
+
+ // Inherit permissions, title and description from the album that linked to this page.
+ $album = ORM::factory("item", $album_tags[0]->album_id);
+ access::required("view", $album);
+ $page_title = $album->title;
+ $page_description = $album->description;
+
+ // URL to this page
+ $str_page_url = "tag_albums/album/" . $id . "/" . urlencode($album->name);
+
+ // Determine page sort order.
+ $sort_page_field = $album->sort_column;
+ $sort_page_direction = $album->sort_order;
+
+ // Determine search type (AND/OR) and generate an array of the tag ids.
+ $tag_ids = Array();
+ foreach (explode(",", $album_tags[0]->tags) as $tag_name) {
+ $tag = ORM::factory("tag")->where("name", "=", trim($tag_name))->find();
+ if ($tag->loaded()) {
+ $tag_ids[] = $tag->id;
+ }
+ }
+ $album_tags_search_type = $album_tags[0]->search_type;
+
+ // Figure out how many items to display on each page.
+ $page_size = module::get_var("gallery", "page_size", 9);
+
+ // If this page was reached from a breadcrumb, figure out what page to load from the show id.
+ $show = Input::instance()->get("show");
+ if ($show) {
+ $child = ORM::factory("item", $show);
+ $index = $this->_get_position($child->$sort_page_field, $child->id, $tag_ids, "items." . $sort_page_field, $sort_page_direction, $album_tags_search_type, true);
+ if ($index) {
+ $page = ceil($index / $page_size);
+ if ($page == 1) {
+ url::redirect($str_page_url);
+ } else {
+ url::redirect($str_page_url . "?page=$page");
+ }
+ }
+ }
+
+ // Figure out how many items are in this "virtual album"
+ $count = $this->_count_records($tag_ids, $album_tags_search_type, true);
+
+ // Figure out which page # the visitor is on and
+ // don't allow the visitor to go below page 1.
+ $page = Input::instance()->get("page", 1);
+ if ($page < 1) {
+ url::redirect($str_page_url);
+ }
+
+ // First item to display.
+ $offset = ($page - 1) * $page_size;
+
+ // Figure out what the highest page number is.
+ $max_pages = ceil($count / $page_size);
+
+ // Don't let the visitor go past the last page.
+ if ($max_pages && $page > $max_pages) {
+ url::redirect($str_page_url . "/?page=$max_pages");
+ }
+
+ // Figure out which items to display on this page and store their details in $children.
+ $tag_children = $this->_get_records($tag_ids, $page_size, $offset, "items." . $sort_page_field, $sort_page_direction, $album_tags_search_type, true);
+ $children_array = Array();
+ foreach ($tag_children as $one_child) {
+ $child_tag = new Tag_Albums_Item($one_child->title, url::site("tag_albums/show/" . $one_child->id . "/0/" . $id . "/" . urlencode($one_child->name)), $one_child->type, $one_child->id);
+ $child_tag->id = $one_child->id;
+ $child_tag->view_count = $one_child->view_count;
+ $child_tag->owner = identity::lookup_user($one_child->owner_id);
+ if ($one_child->has_thumb()) {
+ $child_tag->set_thumb($one_child->thumb_url(), $one_child->thumb_width, $one_child->thumb_height);
+ }
+ $children_array[] = $child_tag;
+ }
+ $children = new Tag_Albums_Children($children_array);
+
+ // Set up the previous and next page buttons.
+ if ($page > 1) {
+ $previous_page = $page - 1;
+ $view->previous_page_link = url::site($str_page_url . "/?page={$previous_page}");
+ }
+ if ($page < $max_pages) {
+ $next_page = $page + 1;
+ $view->next_page_link = url::site($str_page_url . "/?page={$next_page}");
+ }
+
+ // Set up breadcrumbs.
+ $tag_album_breadcrumbs = Array();
+ $counter = 0;
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($album->title, "");
+ $parent_item = ORM::factory("item", $album->parent_id);
+ while ($parent_item->id != 1) {
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($parent_item->title, $parent_item->url());
+ $parent_item = ORM::factory("item", $parent_item->parent_id);
+ }
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($parent_item->title, $parent_item->url());
+ $tag_album_breadcrumbs[1]->url .= "?show=" . $album->id;
+ $tag_album_breadcrumbs = array_reverse($tag_album_breadcrumbs, true);
+
+ // Set up and display the actual page.
+ $parent_album = ORM::factory("item", $album->parent_id);
+ $template = new Theme_View("calpage.html", "collection", "Tag Albums");
+ $template->page_title = $page_title;
+ $template->set_global("page", $page);
+ $template->set_global("page_size", $page_size);
+ $template->set_global("max_pages", $max_pages);
+ $template->set_global("children", $children);
+ $template->set_global("all_siblings", $this->_get_records($tag_ids, $count, 0, "items." . $sort_page_field, $sort_page_direction, $album_tags_search_type, false));
+ $template->set_global("children_count", $count);
+ $template->set_global("parent_url", $parent_album->url()); // Used by Grey Dragon.
+ $template->content = new View("tag_albums_album.html");
+ $template->content->title = $page_title;
+ $template->content->description = $page_description;
+ $template->set_global("breadcrumbs", $tag_album_breadcrumbs);
+ print $template;
+ }
+ }
+
+ public function filter($id, $filter) {
+ // Display the index page, but only show albums for
+ // tags whose name begins with $filter.
+ $this->index($id, $filter);
+ }
+
+ public function index($id, $filter) {
+ // Load a page containing sub-albums for each tag in the gallery.
+
+ // Check to see if the user has overridden default behavior, and act accordingly.
+ if ((module::get_var("tag_albums", "tag_index_scope", "false")) || ($id == "")) {
+ $tag_album_index_type = module::get_var("tag_albums", "tag_index", "default");
+ if (($tag_album_index_type == "tagcloudpage") && (module::is_active("tag_cloud_page"))) {
+ $redirect_url = "tag_cloud_page/";
+ if ($id) {
+ $redirect_url .= "?album={$id}";
+ }
+ url::redirect($redirect_url);
+ return;
+ } elseif (($tag_album_index_type == "alltags") && (module::is_active("all_tags"))) {
+ $redirect_url = "all_tags/";
+ if ($id) {
+ $redirect_url .= "?album={$id}";
+ }
+ url::redirect($redirect_url);
+ return;
+ }
+ }
+
+ // If an ID was specified, make sure it's valid.
+ $album_tags = ORM::factory("tags_album_id")
+ ->where("id", "=", $id)
+ ->find_all();
+ if (count($album_tags) == 0) {
+ $id = 0;
+ }
+
+ // Inherit permissions, title and description from the album that linked to this page,
+ // if available, if not use the root album and some default values.
+ $album = "";
+ $page_title = module::get_var("tag_albums", "tag_page_title", "All Tags");
+ $page_description = "";
+ $str_page_url = "";
+ if ($id == 0) {
+ $album = ORM::factory("item", 1);
+ access::required("view", $album);
+ $str_page_url = "tag_albums/";
+ } else {
+ $album = ORM::factory("item", $album_tags[0]->album_id);
+ access::required("view", $album);
+ $page_title = $album->title;
+ $page_description = $album->description;
+ $str_page_url = "tag_albums/album/" . $id . "/" . urlencode($album->title);
+ }
+
+ // Figure out sort order from module preferences.
+ $sort_page_field = module::get_var("tag_albums", "tag_sort_by", "name");
+ $sort_page_direction = module::get_var("tag_albums", "tag_sort_direction", "ASC");
+
+ // Figure out how many items to display on each page.
+ $page_size = module::get_var("gallery", "page_size", 9);
+
+ // If this page was reached from a breadcrumb, figure out what page to load from the show id.
+ $show = Input::instance()->get("show");
+ if ($show) {
+ $child = ORM::factory("tag", $show);
+ $comp = "";
+ if (!strcasecmp($sort_page_direction, "DESC")) {
+ $comp = ">";
+ } else {
+ $comp = "<";
+ }
+ $index = ORM::factory("tag")
+ ->where($sort_page_field, $comp, $child->$sort_page_field)
+ ->order_by("tags." . $sort_page_field, $sort_page_direction)
+ ->count_all();
+ $tag_model = ORM::factory("tag")
+ ->where($sort_page_field, "=", $child->$sort_page_field)
+ ->order_by("tags." . $sort_page_field, $sort_page_direction)
+ ->find_all();
+ foreach ($tag_model as $one_tag) {
+ $index++;
+ if ($one_tag->id == $show) {
+ break;
+ }
+ }
+ if ($index) {
+ $page = ceil($index / $page_size);
+ if ($page == 1) {
+ url::redirect("$str_page_url");
+ } else {
+ url::redirect("$str_page_url?page=$page");
+ }
+ }
+ }
+
+ // Figure out which page # the visitor is on and
+ // don't allow the visitor to go below page 1.
+ $page = Input::instance()->get("page", 1);
+ if ($page < 1) {
+ url::redirect($str_page_url);
+ }
+
+ // First item to display.
+ $offset = ($page - 1) * $page_size;
+
+ // Determine the total number of items,
+ // for page numbering purposes.
+ $all_tags_count_model = ORM::factory("tag");
+ if ($filter != "") {
+ if ($filter == "NUM") {
+ $all_tags_count_model->open();
+ $all_tags_count_model->where("tags.name", "LIKE", "0%");
+ $counter = 1;
+ while ($counter < 10) {
+ $all_tags_count_model->or_where("tags.name", "LIKE", ($counter++) . "%");
+ }
+ $all_tags_count_model->close();
+ } else {
+ $all_tags_count_model->where("tags.name", "LIKE", $filter . "%");
+ }
+ }
+ $all_tags_count = $all_tags_count_model->count_all();
+
+ // Figure out what the highest page number is.
+ $max_pages = ceil($all_tags_count / $page_size);
+
+ // Don't let the visitor go past the last page.
+ if ($max_pages && $page > $max_pages) {
+ url::redirect("$str_page_url?page=$max_pages");
+ }
+
+ // Figure out which items to display on this page.
+ $display_tags_model = ORM::factory("tag");
+ if ($filter != "") {
+ if ($filter == "NUM") {
+ $display_tags_model->open();
+ $display_tags_model->where("tags.name", "LIKE", "0%");
+ $counter = 1;
+ while ($counter < 10) {
+ $display_tags_model->or_where("tags.name", "LIKE", ($counter++) . "%");
+ }
+ $display_tags_model->close();
+ } else {
+ $display_tags_model->where("tags.name", "LIKE", $filter . "%");
+ }
+ }
+ $display_tags_model->order_by("tags." . $sort_page_field, $sort_page_direction);
+ $display_tags = $display_tags_model->find_all($page_size, $offset);
+
+ // Set up the previous and next page buttons.
+ if ($page > 1) {
+ $previous_page = $page - 1;
+ $view->previous_page_link = url::site($str_page_url . "?page={$previous_page}");
+ }
+ if ($page < $max_pages) {
+ $next_page = $page + 1;
+ $view->next_page_link = url::site($str_page_url . "?page={$next_page}");
+ }
+
+ // Generate an arry of "fake" items, one for each tag on the page.
+ // Grab thumbnails from the most recently uploaded item for each tag, if available.
+ $children_array = Array();
+ foreach ($display_tags as $one_tag) {
+ $tag_item = ORM::factory("item")
+ ->viewable()
+ ->join("items_tags", "items.id", "items_tags.item_id")
+ ->where("items_tags.tag_id", "=", $one_tag->id)
+ ->order_by("items.id", "DESC")
+ ->find_all(1, 0);
+ $child_tag = new Tag_Albums_Item($one_tag->name, url::site("tag_albums/tag/" . $one_tag->id . "/" . $id . "/" . urlencode($one_tag->name)), "album", 0);
+ if (count($tag_item) > 0) {
+ if ($tag_item[0]->has_thumb()) {
+ $child_tag->set_thumb($tag_item[0]->thumb_url(), $tag_item[0]->thumb_width, $tag_item[0]->thumb_height);
+ }
+ }
+ $children_array[] = $child_tag;
+ }
+ $children = new Tag_Albums_Children($children_array);
+
+ // Set up breadcrumbs.
+ $tag_album_breadcrumbs = Array();
+ $parent_url = "";
+ if ($id > 0) {
+ $counter = 0;
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($album->title, "");
+ $parent_item = ORM::factory("item", $album->parent_id);
+ $parent_url = $parent_item->url();
+ while ($parent_item->id != 1) {
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($parent_item->title, $parent_item->url());
+ $parent_item = ORM::factory("item", $parent_item->parent_id);
+ }
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($parent_item->title, $parent_item->url());
+ $tag_album_breadcrumbs[1]->url .= "?show=" . $album->id;
+ $tag_album_breadcrumbs = array_reverse($tag_album_breadcrumbs, true);
+ } else {
+ $parent_url = item::root()->url();
+ $tag_album_breadcrumbs[0] = new Tag_Albums_Breadcrumb(item::root()->title, item::root()->url());
+ $tag_album_breadcrumbs[1] = new Tag_Albums_Breadcrumb($page_title, "");
+ }
+
+ // Set up and display the actual page.
+ $template = new Theme_View("calpage.html", "collection", "Tag Albums");
+ $template->page_title = $page_title;
+ $template->set_global("page", $page);
+ $template->set_global("page_size", $page_size);
+ $template->set_global("max_pages", $max_pages);
+ $template->set_global("children", $children);
+ $template->set_global("children_count", $all_tags_count);
+ $template->set_global("parent_url", $parent_url); // Used by Grey Dragon.
+ $template->content = new View("tag_albums_album.html");
+ $template->content->title = $page_title;
+ $template->content->description = $page_description;
+ $template->content->filter_text = $this->_get_filter_html($id, $filter);
+ $template->set_global("breadcrumbs", $tag_album_breadcrumbs);
+ print $template;
+ }
+
+ public function tag($id, $album_id) {
+ // Display a dynamic album containing everything tagged with a specific tag where,
+ // TAG is $id.
+ // Optionally, set the breadcrumbs to make this page look like an album where the
+ // album is $album_id.
+
+ // Make sure $album_id is valid, clear it out if it isn't.
+ $album_tags = ORM::factory("tags_album_id")
+ ->where("id", "=", $album_id)
+ ->find_all();
+ if (count($album_tags) == 0) {
+ $album_id = 0;
+ }
+
+ // Load the current tag.
+ $display_tag = ORM::factory("tag", $id);
+
+ // Figure out sort order from module preferences.
+ $sort_page_field = module::get_var("tag_albums", "subalbum_sort_by", "title");
+ $sort_page_direction = module::get_var("tag_albums", "subalbum_sort_direction", "ASC");
+
+ // Figure out the URL to this page.
+ $str_page_url = "tag_albums/tag/{$id}/{$album_id}/" . urlencode($display_tag->name);
+
+ // Figure out how many items to display on each page.
+ $page_size = module::get_var("gallery", "page_size", 9);
+
+ // If this page was reached from a breadcrumb, figure out what page to load from the show id.
+ $show = Input::instance()->get("show");
+ if ($show) {
+ $child = ORM::factory("item", $show);
+ $index = $this->_get_position($child->$sort_page_field, $child->id, Array($id), "items." . $sort_page_field, $sort_page_direction, "OR", true);
+ if ($index) {
+ $page = ceil($index / $page_size);
+ if ($page == 1) {
+ url::redirect($str_page_url);
+ } else {
+ url::redirect($str_page_url . "?page=$page");
+ }
+ }
+ }
+
+ // Figure out which page # the visitor is on and
+ // don't allow the visitor to go below page 1.
+ $page = Input::instance()->get("page", 1);
+ if ($page < 1) {
+ url::redirect($str_page_url);
+ }
+
+ // First item to display.
+ $offset = ($page - 1) * $page_size;
+
+ // Determine the total number of items,
+ // for page numbering purposes.
+ $count = $this->_count_records(Array($id), "OR", true);
+
+ // Figure out what the highest page number is.
+ $max_pages = ceil($count / $page_size);
+
+ // Don't let the visitor go past the last page.
+ if ($max_pages && $page > $max_pages) {
+ url::redirect($str_page_url . "/?page=$max_pages");
+ }
+
+ // Figure out which items to display on this page.
+ $tag_children = $this->_get_records(Array($id), $page_size, $offset, "items." . $sort_page_field, $sort_page_direction, "OR", true);
+
+ // Create an array of "fake" items to display on the page.
+ $children_array = Array();
+ foreach ($tag_children as $one_child) {
+ $child_tag = new Tag_Albums_Item($one_child->title, url::site("tag_albums/show/" . $one_child->id . "/" . $id . "/" . $album_id . "/" . urlencode($one_child->name)), $one_child->type, $one_child->id);
+ $child_tag->id = $one_child->id;
+ $child_tag->view_count = $one_child->view_count;
+ $child_tag->owner = identity::lookup_user($one_child->owner_id);
+ if ($one_child->has_thumb()) {
+ $child_tag->set_thumb($one_child->thumb_url(), $one_child->thumb_width, $one_child->thumb_height);
+ }
+ $children_array[] = $child_tag;
+ }
+ $children = new Tag_Albums_Children($children_array);
+
+ // Set up the previous and next page buttons.
+ if ($page > 1) {
+ $previous_page = $page - 1;
+ $view->previous_page_link = url::site($str_page_url . "/?page={$previous_page}");
+ }
+ if ($page < $max_pages) {
+ $next_page = $page + 1;
+ $view->next_page_link = url::site($str_page_url . "/?page={$next_page}");
+ }
+
+ // Set up breadcrumbs for the page.
+ $tag_album_breadcrumbs = Array();
+ $parent_url = "";
+ if ($album_id > 0) {
+ $counter = 0;
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($display_tag->name, "");
+ $parent_item = ORM::factory("item", $album_tags[0]->album_id);
+ if ($album_tags[0]->tags != "*") {
+ $parent_item = ORM::factory("item", $parent_item->parent_id);
+ }
+ $parent_url = $parent_item->url(); // Used by Grey Dragon.
+ while ($parent_item->id != 1) {
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($parent_item->title, $parent_item->url());
+ $parent_item = ORM::factory("item", $parent_item->parent_id);
+ }
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($parent_item->title, $parent_item->url());
+ $parent_item = ORM::factory("item", $album_tags[0]->album_id);
+ if ((module::get_var("tag_albums", "tag_index_scope", "false")) && (module::get_var("tag_albums", "tag_index", "default") != "default")) {
+ $tag_album_breadcrumbs[1]->url = url::site("tag_albums/album/" . $album_id . "/" . urlencode($parent_item->name));
+ } else {
+ $tag_album_breadcrumbs[1]->url = url::site("tag_albums/album/" . $album_id . "/" . urlencode($parent_item->name)) . "?show=" . $id;
+ }
+ $tag_album_breadcrumbs = array_reverse($tag_album_breadcrumbs, true);
+ } else {
+ $parent_url = url::site("tag_albums/");
+ $tag_album_breadcrumbs[0] = new Tag_Albums_Breadcrumb(item::root()->title, item::root()->url());
+ if (module::get_var("tag_albums", "tag_index", "default") == "default") {
+ $tag_album_breadcrumbs[1] = new Tag_Albums_Breadcrumb(module::get_var("tag_albums", "tag_page_title", "All Tags"), url::site("tag_albums/") . "?show=" . $id);
+ } else {
+ $tag_album_breadcrumbs[1] = new Tag_Albums_Breadcrumb(module::get_var("tag_albums", "tag_page_title", "All Tags"), url::site("tag_albums/"));
+ }
+ $tag_album_breadcrumbs[2] = new Tag_Albums_Breadcrumb($display_tag->name, "");
+ }
+
+ // Set up and display the actual page.
+ $template = new Theme_View("calpage.html", "collection", "Tag Albums");
+ $template->page_title = $display_tag->name;
+ $template->set_global("page", $page);
+ $template->set_global("page_size", $page_size);
+ $template->set_global("max_pages", $max_pages);
+ $template->set_global("children", $children);
+ $template->set_global("all_siblings", $this->_get_records(Array($id), $count, 0, "items." . $sort_page_field, $sort_page_direction, "OR", false));
+ $template->set_global("children_count", $count);
+ $template->set_global("parent_url", $parent_url); // Used by Grey Dragon.
+ $template->content = new View("tag_albums_album.html");
+ $template->content->title = $display_tag->name;
+ $template->set_global("breadcrumbs", $tag_album_breadcrumbs);
+ print $template;
+ }
+
+ public function show($item_id, $tag_id, $album_id) {
+ // Display the specified photo or video ($item_id) with breadcrumbs
+ // that point back to a virtual album ($tag_id / $album_id).
+
+ // Make sure #album_id is valid, clear it out if it isn't.
+ $album_tags = ORM::factory("tags_album_id")
+ ->where("id", "=", $album_id)
+ ->find_all();
+ if (count($album_tags) == 0) {
+ $album_id = 0;
+ }
+
+ // Load the tag and item, make sure the user has access to the item.
+ $display_tag = ORM::factory("tag", $tag_id);
+ $item = ORM::factory("item", $item_id);
+ access::required("view", $item);
+ $parent_url = "";
+
+ // Figure out sort order from module preferences.
+ $sort_page_field = "";
+ $sort_page_direction = "";
+ if (($tag_id > 0) || (count($album_tags) == 0)) {
+ $sort_page_field = module::get_var("tag_albums", "subalbum_sort_by", "title");
+ $sort_page_direction = module::get_var("tag_albums", "subalbum_sort_direction", "ASC");
+ } else {
+ $parent_album = ORM::factory("item", $album_tags[0]->album_id);
+ $sort_page_field = $parent_album->sort_column;
+ $sort_page_direction = $parent_album->sort_order;
+ }
+
+ // Load the number of items in the parent album, and determine previous and next items.
+ $sibling_count = "";
+ $tag_children = "";
+ $previous_item = "";
+ $next_item = "";
+ $position = 0;
+ $dynamic_siblings = "";
+ if ($tag_id > 0) {
+ $sibling_count = $this->_count_records(Array($tag_id), "OR", false);
+ $position = $this->_get_position($item->$sort_page_field, $item->id, Array($tag_id), "items." . $sort_page_field, $sort_page_direction, $album_tags_search_type, false);
+ if ($position > 1) {
+ $previous_item_object = $this->_get_records(Array($tag_id), 1, $position-2, "items." . $sort_page_field, $sort_page_direction, $album_tags_search_type, false);
+ if (count($previous_item_object) > 0) {
+ $previous_item = new Tag_Albums_Item($previous_item_object[0]->title, url::site("tag_albums/show/" . $previous_item_object[0]->id . "/" . $tag_id . "/" . $album_id . "/" . urlencode($previous_item_object[0]->name)), $previous_item_object[0]->type, $previous_item_object[0]->id);
+ }
+ }
+ $next_item_object = $this->_get_records(Array($tag_id), 1, $position, "items." . $sort_page_field, $sort_page_direction, $album_tags_search_type, false);
+ if (count($next_item_object) > 0) {
+ $next_item = new Tag_Albums_Item($next_item_object[0]->title, url::site("tag_albums/show/" . $next_item_object[0]->id . "/" . $tag_id . "/" . $album_id . "/" . urlencode($next_item_object[0]->name)), $next_item_object[0]->type, $next_item_object[0]->id);
+ }
+ $dynamic_siblings = $this->_get_records(Array($tag_id), null, null, "items." . $sort_page_field, $sort_page_direction, $album_tags_search_type, false);
+ } else {
+ $tag_ids = Array();
+ foreach (explode(",", $album_tags[0]->tags) as $tag_name) {
+ $tag = ORM::factory("tag")->where("name", "=", trim($tag_name))->find();
+ if ($tag->loaded()) {
+ $tag_ids[] = $tag->id;
+ }
+ }
+ $album_tags_search_type = $album_tags[0]->search_type;
+ $sibling_count = $this->_count_records($tag_ids, $album_tags_search_type, false);
+ $position = $this->_get_position($item->$sort_page_field, $item->id, $tag_ids, "items." . $sort_page_field, $sort_page_direction, $album_tags_search_type, false);
+ if ($position > 1) {
+ $previous_item_object = $this->_get_records($tag_ids, 1, $position-2, "items." . $sort_page_field, $sort_page_direction, $album_tags_search_type, false);
+ if (count($previous_item_object) > 0) {
+ $previous_item = new Tag_Albums_Item($previous_item_object[0]->title, url::site("tag_albums/show/" . $previous_item_object[0]->id . "/" . $tag_id . "/" . $album_id . "/" . urlencode($previous_item_object[0]->name)), $previous_item_object[0]->type);
+ }
+ }
+ $next_item_object = $this->_get_records($tag_ids, 1, $position, "items." . $sort_page_field, $sort_page_direction, $album_tags_search_type, false);
+ if (count($next_item_object) > 0) {
+ $next_item = new Tag_Albums_Item($next_item_object[0]->title, url::site("tag_albums/show/" . $next_item_object[0]->id . "/" . $tag_id . "/" . $album_id . "/" . urlencode($next_item_object[0]->name)), $next_item_object[0]->type);
+ }
+ $dynamic_siblings = $this->_get_records($tag_ids, null, null, "items." . $sort_page_field, $sort_page_direction, $album_tags_search_type, false);
+ }
+
+ // Set up breadcrumbs
+ $tag_album_breadcrumbs = Array();
+ if ($album_id > 0) {
+ $counter = 0;
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($item->title, "");
+ if ($album_tags[0]->tags == "*") {
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($display_tag->name, url::site("tag_albums/tag/" . $display_tag->id . "/" . $album_id . "/" . urlencode($display_tag->name)));
+ }
+ $parent_item = ORM::factory("item", $album_tags[0]->album_id);
+ if ($album_tags[0]->tags == "*") {
+ $parent_url = url::site("tag_albums/tag/" . $display_tag->id . "/" . $album_id . "/" . urlencode($display_tag->name));
+ } else {
+ $parent_url = $parent_item->url();
+ }
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($parent_item->title, url::site("tag_albums/album/" . $album_id . "/" . urlencode($parent_item->name)));
+ $parent_item = ORM::factory("item", $parent_item->parent_id);
+ while ($parent_item->id != 1) {
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($parent_item->title, $parent_item->url());
+ $parent_item = ORM::factory("item", $parent_item->parent_id);
+ }
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($parent_item->title, $parent_item->url());
+ $tag_album_breadcrumbs[1]->url .= "?show=" . $item->id;
+ $tag_album_breadcrumbs = array_reverse($tag_album_breadcrumbs, true);
+ } else {
+ $tag_album_breadcrumbs[0] = new Tag_Albums_Breadcrumb(item::root()->title, item::root()->url());
+ $tag_album_breadcrumbs[1] = new Tag_Albums_Breadcrumb(module::get_var("tag_albums", "tag_page_title", "All Tags"), url::site("tag_albums/"));
+ $tag_album_breadcrumbs[2] = new Tag_Albums_Breadcrumb($display_tag->name, url::site("tag_albums/tag/" . $display_tag->id . "/" . urlencode($display_tag->name)) . "?show=" . $item->id);
+ $tag_album_breadcrumbs[3] = new Tag_Albums_Breadcrumb($item->title, "");
+ $parent_url = url::site("tag_albums/tag/" . $display_tag->id . "/" . urlencode($display_tag->name));
+ }
+
+ // Increase the items view count.
+ $item->increment_view_count();
+
+ // Load the page.
+ if ($item->is_photo()) {
+ $template = new Theme_View("calpage.html", "item", "photo");
+ $template->page_title = $item->title;
+ $template->set_global("children", Array());
+ $template->set_global("item", $item);
+ $template->set_global("previous_item", $previous_item);
+ $template->set_global("next_item", $next_item);
+ $template->set_global("is_tagalbum_page", true); // used for grey dragon
+ $template->set_global("tag_id", $tag_id); // used for grey dragon
+ $template->set_global("album_id", $album_id); // used for grey dragon
+ $template->set_global("parent_url", $parent_url); // Used by Grey Dragon.
+ $template->set_global("dynamic_siblings", $dynamic_siblings); // Used by Grey Dragon.
+ $template->set_global("children_count", 0);
+ $template->set_global("position", $position);
+ $template->set_global("sibling_count", $sibling_count);
+ $template->content = new View("photo.html");
+ $template->content->title = $item->title;
+ $template->set_global("breadcrumbs", $tag_album_breadcrumbs);
+ print $template;
+ } elseif ($item->is_movie()) {
+ $template = new Theme_View("calpage.html", "item", "movie");
+ $template->page_title = $item->title;
+ $template->set_global("children", Array());
+ $template->set_global("item", $item);
+ $template->set_global("previous_item", $previous_item);
+ $template->set_global("next_item", $next_item);
+ $template->set_global("is_tagalbum_page", true); // used for grey dragon
+ $template->set_global("tag_id", $tag_id); // used for grey dragon
+ $template->set_global("album_id", $album_id); // used for grey dragon
+ $template->set_global("parent_url", $parent_url); // Used by Grey Dragon.
+ $template->set_global("dynamic_siblings", $dynamic_siblings); // Used by Grey Dragon.
+ $template->set_global("children_count", 0);
+ $template->set_global("position", $position);
+ $template->set_global("sibling_count", $sibling_count);
+ $template->content = new View("movie.html");
+ $template->content->title = $item->title;
+ $template->set_global("breadcrumbs", $tag_album_breadcrumbs);
+ print $template;
+ } else {
+ // If it's something we don't know how to deal with, just redirect to its real page.
+ url::redirect(url::abs_site("{$item->type}s/{$item->id}"));
+ }
+ }
+
+ private function _get_position($item_title, $item_id, $tag_ids, $sort_field, $sort_direction, $search_type, $include_albums) {
+ // Determine an item's position within a virtual album.
+
+ // Convert ASC/DESC to < or > characters.
+ if (!strcasecmp($sort_direction, "DESC")) {
+ $comp = ">";
+ } else {
+ $comp = "<";
+ }
+
+ // Figure out how many items are _before the current item.
+ $items_model = ORM::factory("item");
+ if ($search_type == "AND") {
+ $items_model->select('COUNT("*") AS result_count');
+ } else {
+ $items_model->select("items.id");
+ }
+ $items_model->viewable();
+ $items_model->join("items_tags", "items.id", "items_tags.item_id");
+ $items_model->open();
+ $items_model->where("items_tags.tag_id", "=", $tag_ids[0]);
+ $counter = 1;
+ while ($counter < count($tag_ids)) {
+ $items_model->or_where("items_tags.tag_id", "=", $tag_ids[$counter]);
+ $counter++;
+ }
+ $items_model->close();
+ if ($include_albums == false) {
+ $items_model->and_where("items.type", "!=", "album");
+ }
+ $items_model->and_where($sort_field, $comp, $item_title);
+ $items_model->order_by($sort_field, $sort_direction);
+ $items_model->group_by("items.id");
+ if ($search_type == "AND") {
+ $items_model->having("result_count", "=", count($tag_ids));
+ }
+ $position = count($items_model->find_all());
+
+ // In case multiple items have identical sort criteria, query for
+ // everything with the same criteria, and increment the position
+ // one at a time until we find the right item.
+ $items_model = ORM::factory("item");
+ if ($search_type == "AND") {
+ $items_model->select("items.id");
+ $items_model->select('COUNT("*") AS result_count');
+ } else {
+ $items_model->select("items.id");
+ }
+ $items_model->viewable();
+ $items_model->join("items_tags", "items.id", "items_tags.item_id");
+ $items_model->open();
+ $items_model->where("items_tags.tag_id", "=", $tag_ids[0]);
+ $counter = 1;
+ while ($counter < count($tag_ids)) {
+ $items_model->or_where("items_tags.tag_id", "=", $tag_ids[$counter]);
+ $counter++;
+ }
+ $items_model->close();
+ if ($include_albums == false) {
+ $items_model->and_where("items.type", "!=", "album");
+ }
+ $items_model->and_where($sort_field, "=", $item_title);
+ $items_model->order_by($sort_field, $sort_direction);
+ $items_model->group_by("items.id");
+ if ($search_type == "AND") {
+ $items_model->having("result_count", "=", count($tag_ids));
+ }
+ $match_items = $items_model->find_all();
+ foreach ($match_items as $one_item) {
+ $position++;
+ if ($one_item->id == $item_id) {
+ break;
+ }
+ }
+
+ return ($position);
+ }
+
+ private function _get_records($tag_ids, $page_size, $offset, $sort_field, $sort_direction, $search_type, $include_albums) {
+ // Returns an array of items to be displayed on the current page.
+
+ $items_model = ORM::factory("item");
+ if ($search_type == "AND") {
+ // For some reason, if I do 'select("*")' the item ids all have values that are 1000+
+ // higher then they should be. So instead, I'm manually selecting each column that I need.
+ $items_model->select("items.id");
+ $items_model->select("items.name");
+ $items_model->select("items.title");
+ $items_model->select("items.view_count");
+ $items_model->select("items.owner_id");
+ $items_model->select("items.rand_key");
+ $items_model->select("items.type");
+ $items_model->select("items.thumb_width");
+ $items_model->select("items.thumb_height");
+ $items_model->select("items.left_ptr");
+ $items_model->select("items.right_ptr");
+ $items_model->select("items.relative_path_cache");
+ $items_model->select('COUNT("*") AS result_count');
+ }
+ $items_model->viewable();
+ $items_model->join("items_tags", "items.id", "items_tags.item_id");
+ $items_model->open();
+ $items_model->where("items_tags.tag_id", "=", $tag_ids[0]);
+ $counter = 1;
+ while ($counter < count($tag_ids)) {
+ $items_model->or_where("items_tags.tag_id", "=", $tag_ids[$counter]);
+ $counter++;
+ }
+ $items_model->close();
+ if ($include_albums == false) {
+ $items_model->and_where("items.type", "!=", "album");
+ }
+ $items_model->order_by($sort_field, $sort_direction);
+ $items_model->group_by("items.id");
+ if ($search_type == "AND") {
+ $items_model->having("result_count", "=", count($tag_ids));
+ }
+ return $items_model->find_all($page_size, $offset);
+ }
+
+ private function _get_filter_html($album_id, $str_filter) {
+ // Generate HTML to display filter links on the index page.
+
+ // Make sure $album_id is set.
+ if ($album_id == "") {
+ $album_id = 0;
+ }
+
+ // Generate the links.
+ $str_html = "Filter: ";
+ if ($str_filter != "") {
+ if ($album_id > 0) {
+ $album_tags = ORM::factory("tags_album_id")
+ ->where("id", "=", $album_id)
+ ->find_all();
+ $album = ORM::factory("item", $album_tags[0]->album_id);
+ $str_html .= "
name)) . "\">(All) ";
+ } else {
+ $str_html .= "
(All) ";
+ }
+ }
+ if ($str_filter == "NUM") {
+ $str_html .= "# ";
+ } else {
+ $str_html .= "
# ";
+ }
+ foreach(range('A','Z') as $letter) {
+ if ($letter == $str_filter) {
+ $str_html .= $letter . " ";
+ } else {
+ $str_html .= "
";
+ $str_html .= $letter . " ";
+ }
+ }
+
+ // Return the HTML.
+ return $str_html;
+ }
+
+ private function _count_records($tag_ids, $search_type, $include_albums) {
+ // Count the number of viewable items for the designated tag(s)
+ // and return that number.
+
+ if (count($tag_ids) == 0) {
+ // If no tags were specified, return 0.
+ return 0;
+
+ } elseif (count($tag_ids) == 1) {
+ // if one tag was specified, we can use count_all to get the number.
+ $count = ORM::factory("item")
+ ->viewable()
+ ->join("items_tags", "items.id", "items_tags.item_id")
+ ->where("items_tags.tag_id", "=", $tag_ids[0]);
+ if ($include_albums == false) {
+ $count->and_where("items.type", "!=", "album");
+ }
+ return $count->count_all();
+
+ } else {
+ // If multiple tags were specified, count_all won't work,
+ // so we'll have to do count(find_all) instead.
+ $items_model = ORM::factory("item");
+ if ($search_type == "AND") {
+ $items_model->select('COUNT("*") AS result_count');
+ } else {
+ $items_model->select('items.id');
+ }
+ $items_model->viewable();
+ $items_model->join("items_tags", "items.id", "items_tags.item_id");
+ $items_model->where("items_tags.tag_id", "=", $tag_ids[0]);
+ $counter = 1;
+ while ($counter < count($tag_ids)) {
+ $items_model->or_where("items_tags.tag_id", "=", $tag_ids[$counter]);
+ $counter++;
+ }
+ if ($include_albums == false) {
+ $items_model->and_where("items.type", "!=", "album");
+ }
+ $items_model->group_by("items.id");
+ if ($search_type == "AND") {
+ $items_model->having("result_count", "=", count($tag_ids));
+ }
+
+ return count($items_model->find_all());
+ }
+ }
+}
diff --git a/3.0/modules/tag_albums/helpers/tag_albums_block.php b/3.0/modules/tag_albums/helpers/tag_albums_block.php
new file mode 100644
index 00000000..7243722c
--- /dev/null
+++ b/3.0/modules/tag_albums/helpers/tag_albums_block.php
@@ -0,0 +1,40 @@
+ t("Tag Albums"));
+ }
+
+ static function get($block_id, $theme) {
+ $block = "";
+
+ switch ($block_id) {
+ case "tag_albums":
+ // Make a new sidebar block.
+ $block = new Block();
+ $block->css_id = "g-tag-albums";
+ $block->title = t("Tag Albums");
+ $block->content = new View("tag_albums_block.html");
+
+ break;
+ }
+ return $block;
+ }
+}
diff --git a/3.0/modules/tag_albums/helpers/tag_albums_event.php b/3.0/modules/tag_albums/helpers/tag_albums_event.php
new file mode 100644
index 00000000..b9bf4d3a
--- /dev/null
+++ b/3.0/modules/tag_albums/helpers/tag_albums_event.php
@@ -0,0 +1,109 @@
+module == "tag") {
+ $data->messages["warn"][] = t("The Tag Albums module requires the Tags module.");
+ }
+ }
+
+ static function module_change($changes) {
+ // See if the Tags module is installed,
+ // tell the user to install it if it isn't.
+ if (!module::is_active("tag") || in_array("tag", $changes->deactivate)) {
+ site_status::warning(
+ t("The Tag Albums module requires the Tags module.
Activate the Tags module now ",
+ array("url" => url::site("admin/modules"))),
+ "tag_albums_needs_tag");
+ } else {
+ site_status::clear("tag_albums_needs_tag");
+ }
+ }
+
+ static function admin_menu($menu, $theme) {
+ // Add a link to the admin page to the Content menu.
+ $menu->get("settings_menu")
+ ->append(Menu::factory("link")
+ ->id("tag_albums")
+ ->label(t("Tag Albums Settings"))
+ ->url(url::site("admin/tag_albums")));
+ }
+
+ static function item_edit_form($item, $form) {
+ // Create fields on the album edit screen to allow the user to link
+ // the album to a tag_albums page.
+ if (!($item->is_album())) {
+ return;
+ }
+
+ $url = url::site("tags/autocomplete");
+ $form->script("")
+ ->text("$('form input[name=tag_albums]').ready(function() {
+ $('form input[name=tag_albums]').autocomplete(
+ '$url', {max: 30, multiple: true, multipleSeparator: ',', cacheLength: 1});
+ });");
+
+ $album_tags = ORM::factory("tags_album_id")
+ ->where("album_id", "=", $item->id)
+ ->find_all();
+
+ $tag_names = "";
+ $tag_album_type = "OR";
+ if (count($album_tags) > 0) {
+ $tag_names = $album_tags[0]->tags;
+ $tag_album_type = $album_tags[0]->search_type;
+ }
+
+ $tags_album_group = $form->edit_item->group("tags_album_group");
+ $tags_album_group->dropdown("tags_album_type")
+ ->options(
+ array("OR" => t("Display items that contain ANY of the following tags:"),
+ "AND" => t("Display items that contain ALL of the following tags:")))
+ ->selected($tag_album_type);
+ $tags_album_group->input("tag_albums")
+ ->value($tag_names);
+ }
+
+ static function item_deleted($item) {
+ // Whenever an item is deleted, delete any corresponding data.
+ db::build()->delete("tags_album_ids")->where("album_id", "=", $item->id)->execute();
+ }
+
+ static function item_edit_form_completed($item, $form) {
+ // Update the database with any changes to the tag_albums field.
+ if (!($item->is_album())) {
+ return;
+ }
+
+ $record = ORM::factory("tags_album_id")->where("album_id", "=", $item->id)->find();
+
+ if ($form->edit_item->tags_album_group->tag_albums->value != "") {
+ if (!$record->loaded()) {
+ $record->album_id = $item->id;
+ }
+ $record->tags = $form->edit_item->tags_album_group->tag_albums->value;
+ $record->search_type = $form->edit_item->tags_album_group->tags_album_type->value;
+ $record->save();
+ } else {
+ db::build()->delete("tags_album_ids")->where("album_id", "=", $item->id)->execute();
+ }
+ }
+}
diff --git a/3.0/modules/tag_albums/helpers/tag_albums_installer.php b/3.0/modules/tag_albums/helpers/tag_albums_installer.php
new file mode 100644
index 00000000..ee3df5e2
--- /dev/null
+++ b/3.0/modules/tag_albums/helpers/tag_albums_installer.php
@@ -0,0 +1,69 @@
+query("CREATE TABLE IF NOT EXISTS {tags_album_ids} (
+ `id` int(9) NOT NULL auto_increment,
+ `album_id` int(9) NOT NULL,
+ `tags` varchar(2048) default NULL,
+ `search_type` varchar(128) NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY(`album_id`, `id`))
+ DEFAULT CHARSET=utf8;");
+
+ // Set up some default values.
+ module::set_var("tag_albums", "tag_sort_by", "name");
+ module::set_var("tag_albums", "tag_sort_direction", "ASC");
+ module::set_var("tag_albums", "subalbum_sort_by", "title");
+ module::set_var("tag_albums", "subalbum_sort_direction", "ASC");
+ module::set_var("tag_albums", "tag_index", "default");
+ module::set_var("tag_albums", "tag_index_scope", "0");
+ module::set_var("tag_albums", "tag_index_filter", "0");
+
+ // Set the module's version number.
+ module::set_version("tag_albums", 2);
+ }
+
+ static function upgrade($version) {
+ if ($version == 1) {
+ module::set_var("tag_albums", "tag_index", "default");
+ module::set_var("tag_albums", "tag_index_scope", "0");
+ module::set_var("tag_albums", "tag_index_filter", "0");
+ module::set_version("tag_albums", 2);
+ }
+ }
+
+ static function deactivate() {
+ site_status::clear("tag_albums_needs_tag");
+ }
+
+ static function can_activate() {
+ $messages = array();
+ if (!module::is_active("tag")) {
+ $messages["warn"][] = t("The Tag Albums module requires the Tags module.");
+ }
+ return $messages;
+ }
+
+ static function uninstall() {
+ module::delete("tag_albums");
+ }
+}
diff --git a/3.0/modules/tag_albums/helpers/tag_albums_theme.php b/3.0/modules/tag_albums/helpers/tag_albums_theme.php
new file mode 100644
index 00000000..84f9a633
--- /dev/null
+++ b/3.0/modules/tag_albums/helpers/tag_albums_theme.php
@@ -0,0 +1,34 @@
+item()) {
+ $album_tags = ORM::factory("tags_album_id")
+ ->where("album_id", "=", $theme->item->id)
+ ->find_all();
+ if (count($album_tags) > 0) {
+ url::redirect(url::abs_site("tag_albums/album/" . $album_tags[0]->id . "/" . urlencode($theme->item->name)));
+ }
+ }
+ return;
+ }
+}
diff --git a/3.0/modules/tag_albums/libraries/Tag_Albums_Breadcrumb.php b/3.0/modules/tag_albums/libraries/Tag_Albums_Breadcrumb.php
new file mode 100644
index 00000000..ba576e49
--- /dev/null
+++ b/3.0/modules/tag_albums/libraries/Tag_Albums_Breadcrumb.php
@@ -0,0 +1,31 @@
+title = $new_title;
+ $this->url = $new_url;
+ }
+}
diff --git a/3.0/modules/tag_albums/libraries/Tag_Albums_Children.php b/3.0/modules/tag_albums/libraries/Tag_Albums_Children.php
new file mode 100644
index 00000000..c6ea859d
--- /dev/null
+++ b/3.0/modules/tag_albums/libraries/Tag_Albums_Children.php
@@ -0,0 +1,48 @@
+position = 0;
+ $this->array = $children;
+ }
+
+ function rewind() {
+ $this->position = 0;
+ }
+
+ function current() {
+ return $this->array[$this->position];
+ }
+
+ function key() {
+ return $this->position;
+ }
+
+ function next() {
+ ++$this->position;
+ }
+
+ function valid() {
+ return isset($this->array[$this->position]);
+ }
+}
diff --git a/3.0/modules/tag_albums/libraries/Tag_Albums_Item.php b/3.0/modules/tag_albums/libraries/Tag_Albums_Item.php
new file mode 100644
index 00000000..d521697a
--- /dev/null
+++ b/3.0/modules/tag_albums/libraries/Tag_Albums_Item.php
@@ -0,0 +1,129 @@
+item_type == "album") {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public function has_thumb() {
+ if ($this->thumb_url != "") {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public function full_or_resize_url() {
+ if ($this->item_id > 0) {
+ $item = ORM::factory("item", $this->item_id);
+ if (access::can("view_full", $item)) {
+ return $item->file_url();
+ } else {
+ return $item->resize_url();
+ }
+ } else {
+ return "";
+ }
+ }
+
+ public function thumb_img($extra_attrs=array(), $max=null, $center_vertically=false) {
+ list ($height, $width) = $this->scale_dimensions($max);
+ if ($center_vertically && $max) {
+ // The constant is divide by 2 to calculate the file and 10 to convert to em
+ $margin_top = (int)(($max - $height) / 20);
+ $extra_attrs["style"] = "margin-top: {$margin_top}em";
+ $extra_attrs["title"] = $this->title;
+ }
+ $attrs = array_merge($extra_attrs,
+ array(
+ "src" => $this->thumb_url(),
+ "alt" => $this->title,
+ "width" => $width,
+ "height" => $height)
+ );
+ // html::image forces an absolute url which we don't want
+ return "
";
+ }
+
+ public function scale_dimensions($max) {
+ $width = $this->thumb_width;
+ $height = $this->thumb_height;
+
+ if ($width <= $max && $height <= $max) {
+ return array($height, $width);
+ }
+
+ if ($height) {
+ if (isset($max)) {
+ if ($width > $height) {
+ $height = (int)($max * $height / $width);
+ $width = $max;
+ } else {
+ $width = (int)($max * $width / $height);
+ $height = $max;
+ }
+ }
+ } else {
+ // Missing thumbnail, can happen on albums with no photos yet.
+ // @todo we should enforce a placeholder for those albums.
+ $width = 0;
+ $height = 0;
+ }
+ return array($height, $width);
+ }
+
+ public function thumb_url() {
+ return $this->thumb_url;
+ }
+
+ public function url() {
+ return $this->url;
+ }
+
+ public function set_thumb($new_url, $new_width, $new_height) {
+ $this->thumb_url = $new_url;
+ $this->thumb_width = $new_width;
+ $this->thumb_height = $new_height;
+ }
+
+ public function __construct($new_title, $new_url, $new_type, $new_id) {
+ $this->title = $new_title;
+ $this->url = $new_url;
+ $this->item_type = $new_type;
+ $this->type = $new_type;
+ $this->item_id = $new_id;
+ }
+}
diff --git a/3.0/modules/tag_albums/models/tag.php b/3.0/modules/tag_albums/models/tag.php
new file mode 100644
index 00000000..0cc47030
--- /dev/null
+++ b/3.0/modules/tag_albums/models/tag.php
@@ -0,0 +1,145 @@
+loaded()) {
+ // Set reasonable defaults
+ $this->count = 0;
+ }
+ }
+
+ /**
+ * Return all viewable items associated with this tag.
+ * @param integer $limit number of rows to limit result to
+ * @param integer $offset offset in result to start returning rows from
+ * @param string $type the type of item (album, photo)
+ * @return ORM_Iterator
+ */
+ public function items($limit=null, $offset=null, $type=null) {
+ $model = ORM::factory("item")
+ ->viewable()
+ ->join("items_tags", "items.id", "items_tags.item_id")
+ ->where("items_tags.tag_id", "=", $this->id);
+ if ($type) {
+ $model->where("items.type", "=", $type);
+ }
+ return $model->find_all($limit, $offset);
+ }
+
+ /**
+ * Return the count of all viewable items associated with this tag.
+ * @param string $type the type of item (album, photo)
+ * @return integer
+ */
+ public function items_count($type=null) {
+ $model = ORM::factory("item")
+ ->viewable()
+ ->join("items_tags", "items.id", "items_tags.item_id")
+ ->where("items_tags.tag_id", "=", $this->id);
+
+ if ($type) {
+ $model->where("items.type", "=", $type);
+ }
+ return $model->count_all();
+ }
+
+ /**
+ * Overload ORM::save() to trigger an item_related_update event for all items that are related
+ * to this tag.
+ */
+ public function save() {
+ $related_item_ids = array();
+ foreach (db::build()
+ ->select("item_id")
+ ->from("items_tags")
+ ->where("tag_id", "=", $this->id)
+ ->execute() as $row) {
+ $related_item_ids[$row->item_id] = 1;
+ }
+
+ if (isset($this->object_relations["items"])) {
+ $added = array_diff($this->changed_relations["items"], $this->object_relations["items"]);
+ $removed = array_diff($this->object_relations["items"], $this->changed_relations["items"]);
+ if (isset($this->changed_relations["items"])) {
+ $changed = array_merge($added, $removed);
+ }
+ $this->count = count($this->object_relations["items"]) + count($added) - count($removed);
+ }
+
+ $result = parent::save();
+
+ if (!empty($changed)) {
+ foreach (ORM::factory("item")->where("id", "IN", $changed)->find_all() as $item) {
+ module::event("item_related_update", $item);
+ }
+ }
+
+ return $result;
+ }
+
+ /**
+ * Overload ORM::delete() to trigger an item_related_update event for all items that are
+ * related to this tag, and delete all items_tags relationships.
+ */
+ public function delete($ignored_id=null) {
+ $related_item_ids = array();
+ foreach (db::build()
+ ->select("item_id")
+ ->from("items_tags")
+ ->where("tag_id", "=", $this->id)
+ ->execute() as $row) {
+ $related_item_ids[$row->item_id] = 1;
+ }
+
+ db::build()->delete("items_tags")->where("tag_id", "=", $this->id)->execute();
+ $result = parent::delete();
+
+ if ($related_item_ids) {
+ foreach (ORM::factory("item")
+ ->where("id", "IN", array_keys($related_item_ids))
+ ->find_all() as $item) {
+ module::event("item_related_update", $item);
+ }
+ }
+ return $result;
+ }
+
+ /**
+ * Return the server-relative url to this item, eg:
+ * /gallery3/index.php/tags/35
+ *
+ * @param string $query the query string (eg "page=3")
+ */
+ public function url($query=null) {
+ $album_id = Input::instance()->get("album");
+ if (!($album_id)) {
+ $album_id = 0;
+ }
+ $url = url::site("/tag_albums/tag/{$this->id}/{$album_id}/" . urlencode($this->name));
+ if ($query) {
+ $url .= "?$query";
+ }
+ return $url;
+ }
+}
diff --git a/3.0/modules/tag_albums/models/tags_album_id.php b/3.0/modules/tag_albums/models/tags_album_id.php
new file mode 100644
index 00000000..a9b16b4f
--- /dev/null
+++ b/3.0/modules/tag_albums/models/tags_album_id.php
@@ -0,0 +1,21 @@
+
+
+ = t("Tag Albums Admin") ?>
+
+
+
+ = $tag_albums_form ?>
+
diff --git a/3.0/modules/tag_albums/views/calpage.html.php b/3.0/modules/tag_albums/views/calpage.html.php
new file mode 100644
index 00000000..c7fdbef0
--- /dev/null
+++ b/3.0/modules/tag_albums/views/calpage.html.php
@@ -0,0 +1,167 @@
+
+
+html_attributes() ?> xml:lang="en" lang="en">
+
+
+ $theme->start_combining("script,css") ?>
+
+ if ($page_title): ?>
+ = $page_title ?>
+ else: ?>
+ if ($theme->item()): ?>
+ = $theme->item()->title ?>
+ elseif ($theme->tag()): ?>
+ = t("Photos tagged with %tag_title", array("tag_title" => $theme->tag()->name)) ?>
+ else: /* Not an item, not a tag, no page_title specified. Help! */ ?>
+ = item::root()->title ?>
+ endif ?>
+ endif ?>
+
+
"
+ type="image/x-icon" />
+
" />
+ if ($theme->page_type == "collection"): ?>
+ if (($thumb_proportion = $theme->thumb_proportion($theme->item())) != 1): ?>
+ $new_width = round($thumb_proportion * 213) ?>
+ $new_height = round($thumb_proportion * 240) ?>
+
+ endif ?>
+ endif ?>
+
+ = $theme->script("json2-min.js") ?>
+ = $theme->script("jquery.js") ?>
+ = $theme->script("jquery.form.js") ?>
+ = $theme->script("jquery-ui.js") ?>
+ = $theme->script("gallery.common.js") ?>
+ /* MSG_CANCEL is required by gallery.dialog.js */ ?>
+
+ = $theme->script("gallery.ajax.js") ?>
+ = $theme->script("gallery.dialog.js") ?>
+ = $theme->script("superfish/js/superfish.js") ?>
+ = $theme->script("jquery.localscroll.js") ?>
+
+ /* These are page specific but they get combined */ ?>
+ if ($theme->page_subtype == "photo"): ?>
+ = $theme->script("jquery.scrollTo.js") ?>
+ = $theme->script("gallery.show_full_size.js") ?>
+ elseif ($theme->page_subtype == "movie"): ?>
+ = $theme->script("flowplayer.js") ?>
+ endif ?>
+
+ = $theme->head() ?>
+
+ /* Theme specific CSS/JS goes last so that it can override module CSS/JS */ ?>
+ = $theme->script("ui.init.js") ?>
+ = $theme->css("yui/reset-fonts-grids.css") ?>
+ = $theme->css("superfish/css/superfish.css") ?>
+ = $theme->css("themeroller/ui.base.css") ?>
+ = $theme->css("screen.css") ?>
+ if (locales::is_rtl()): ?>
+ = $theme->css("screen-rtl.css") ?>
+ endif; ?>
+
+
+
+ = $theme->get_combined("css") ?>
+
+
+ = $theme->get_combined("script") ?>
+
+
+ body_attributes() ?>>
+ = $theme->page_top() ?>
+
+ = $theme->site_status() ?>
+
+
+
+
+
+ = $theme->messages() ?>
+ = $content ?>
+
+
+
+
+
+
+
+ = $theme->page_bottom() ?>
+
+
\ No newline at end of file
diff --git a/3.0/modules/tag_albums/views/tag_albums_album.html.php b/3.0/modules/tag_albums/views/tag_albums_album.html.php
new file mode 100644
index 00000000..620d3c81
--- /dev/null
+++ b/3.0/modules/tag_albums/views/tag_albums_album.html.php
@@ -0,0 +1,50 @@
+
+
+ // The g-info block was taken from album.html.php and $theme->album_top() was changed to $theme->dynamic_top().
+ // $item->title and $item->description have been changed to $title and $description.
+ //
+ // The g-album-grid block was also taken from album.html.php. The section for uploading new photos to an empty album
+ // has been removed. Also, $theme->context_menu has been removed as well (it was crashing the page).
+?>
+
+ = $theme->dynamic_top() ?>
+
= html::purify($title) ?>
+
= nl2br(html::purify($description)) ?>
+
+
+ if (isset($filter_text) && (module::get_var("tag_albums", "tag_index_filter"))): ?>
+
+
+
= $filter_text; ?>
+
+ endif ?>
+
+
+= $theme->dynamic_bottom() ?>
+
+= $theme->paginator() ?>
diff --git a/3.0/modules/tag_albums/views/tag_albums_block.html.php b/3.0/modules/tag_albums/views/tag_albums_block.html.php
new file mode 100644
index 00000000..d4b08087
--- /dev/null
+++ b/3.0/modules/tag_albums/views/tag_albums_block.html.php
@@ -0,0 +1,4 @@
+
+
diff --git a/3.0/modules/tag_cloud/module.info b/3.0/modules/tag_cloud/module.info
index af8f9ce1..72c95532 100644
--- a/3.0/modules/tag_cloud/module.info
+++ b/3.0/modules/tag_cloud/module.info
@@ -1,3 +1,7 @@
name = "Tag Cloud"
description = "3D tag cloud"
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:tag_cloud"
+discuss_url = "http://gallery.menalto.com/forum_module_tag_cloud"
diff --git a/3.0/modules/tag_cloud_page/helpers/tag_cloud_page_event.php b/3.0/modules/tag_cloud_page/helpers/tag_cloud_page_event.php
new file mode 100644
index 00000000..32f0ada0
--- /dev/null
+++ b/3.0/modules/tag_cloud_page/helpers/tag_cloud_page_event.php
@@ -0,0 +1,40 @@
+deactivate)) {
+ site_status::warning(
+ t("The Tag Cloud Page module requires the Tags module. " .
+ "
Activate the Tags module now ",
+ array("url" => url::site("admin/modules"))),
+ "tag_cloud_page_needs_tag");
+ } else {
+ site_status::clear("tag_cloud_page_needs_tag");
+ }
+ }
+
+ static function pre_deactivate($data) {
+ if ($data->module == "tag") {
+ $data->messages["warn"][] = t("The Tag Cloud Page module requires the Tags module.");
+ }
+ }
+}
diff --git a/3.0/modules/tag_cloud_page/helpers/tag_cloud_page_installer.php b/3.0/modules/tag_cloud_page/helpers/tag_cloud_page_installer.php
new file mode 100644
index 00000000..4f12115a
--- /dev/null
+++ b/3.0/modules/tag_cloud_page/helpers/tag_cloud_page_installer.php
@@ -0,0 +1,32 @@
+item) && ($theme->item->is_album())) {
$item = $theme->item;
- $all_tags = ORM::factory("tag")
+
+ // Create an ORM query for finding one instance of each tag
+ // used by children in the current album.
+ $tags_model = ORM::factory("tag")
->join("items_tags", "items_tags.tag_id", "tags.id")
->join("items", "items.id", "items_tags.item_id", "LEFT")
->where("items.parent_id", "=", $item->id)
- ->order_by("tags.id", "ASC")
- ->find_all();
+ ->order_by("tags.name", "ASC")
+ ->group_by("tags.id");
+
+ // Limit $all_tags to the first X tags if max_display_tags is set,
+ // else populate it with all tags used by this album's children.
+ $all_tags = "";
+ if (module::get_var("tagsinalbum", "max_display_tags") > 0) {
+ $all_tags = $tags_model->find_all(module::get_var("tagsinalbum", "max_display_tags"));
+ } else {
+ $all_tags = $tags_model->find_all();
+ }
+
+ // If this album has children that are tagged, display those tags.
if (count($all_tags) > 0) {
$block = new Block();
$block->css_id = "g-tags-in-album-block";
diff --git a/3.0/modules/tagsinalbum/helpers/tagsinalbum_installer.php b/3.0/modules/tagsinalbum/helpers/tagsinalbum_installer.php
index 4357ab87..09f82108 100644
--- a/3.0/modules/tagsinalbum/helpers/tagsinalbum_installer.php
+++ b/3.0/modules/tagsinalbum/helpers/tagsinalbum_installer.php
@@ -19,7 +19,15 @@
*/
class tagsinalbum_installer {
static function install() {
- module::set_version("tagsinalbum", 1);
+ module::set_var("tagsinalbum", "max_display_tags", 0);
+ module::set_version("tagsinalbum", 2);
+ }
+
+ static function upgrade($version) {
+ if ($version == 1) {
+ module::set_var("tagsinalbum", "max_display_tags", 0);
+ module::set_version("tagsinalbum", $version = 2);
+ }
}
static function deactivate() {
diff --git a/3.0/modules/tagsinalbum/module.info b/3.0/modules/tagsinalbum/module.info
index 94b7699b..cc732774 100644
--- a/3.0/modules/tagsinalbum/module.info
+++ b/3.0/modules/tagsinalbum/module.info
@@ -1,3 +1,7 @@
name = "Tags In Album"
description = "Creates a sidebar block to display tags used by photos and videos in the current album."
-version = 1
+version = 2
+author_name = "rWatcher"
+author_url = "http://codex.gallery2.org/User:RWatcher"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:tagsinalbum"
+discuss_url = "http://gallery.menalto.com/node/99171"
diff --git a/3.0/modules/tagsinalbum/views/tagsinalbum_sidebar.html.php b/3.0/modules/tagsinalbum/views/tagsinalbum_sidebar.html.php
index 803e46ee..8d9e0910 100644
--- a/3.0/modules/tagsinalbum/views/tagsinalbum_sidebar.html.php
+++ b/3.0/modules/tagsinalbum/views/tagsinalbum_sidebar.html.php
@@ -1,28 +1,11 @@
- // Create an array to store the tag names and urls in.
- $display_tags = array();
-
- // Loop through all tags in the album, copying their
- // names and urls into the array and skipping duplicates.
- $last_tagid = "";
- foreach ($all_tags as $one_tag) {
- if ($last_tagid != $one_tag->id) {
- $tag = ORM::factory("tag", $one_tag->id);
- $display_tags[] = array(html::clean($tag->name), $tag->url());
- $last_tagid = $one_tag->id;
- }
- }
-
- // Sort the array.
- asort($display_tags);
-
- // Print out the list of tags as clickable links.
+ // Loop through each tag in $all_tags, and display it as a link.
$not_first = 0;
- foreach ($display_tags as $one_tag) {
+ foreach ($all_tags as $one_tag) {
if ($not_first++ > 0) {
print ", ";
}
- print "
" . $one_tag[0] . " ";
+ print "
url() . "\">" . html::clean($one_tag->name) . " ";
}
?>
diff --git a/3.0/modules/tagsmap/controllers/admin_tagsmap.php b/3.0/modules/tagsmap/controllers/admin_tagsmap.php
index 8c9b643a..40d87119 100644
--- a/3.0/modules/tagsmap/controllers/admin_tagsmap.php
+++ b/3.0/modules/tagsmap/controllers/admin_tagsmap.php
@@ -206,8 +206,12 @@ class Admin_TagsMap_Controller extends Admin_Controller {
$startingmap_group->dropdown("google_default_type")
->label(t("Default Map Type"))
->options(
- array("G_NORMAL_MAP", "G_SATELLITE_MAP", "G_HYBRID_MAP",
- "G_PHYSICAL_MAP", "G_SATELLITE_3D_MAP"));
+ array("G_NORMAL_MAP" => "Normal",
+ "G_SATELLITE_MAP" => "Satellite",
+ "G_HYBRID_MAP" => "Hybrid",
+ "G_PHYSICAL_MAP" => "Physical",
+ "G_SATELLITE_3D_MAP" => "Google Earth"))
+ ->selected(module::get_var("tagsmap", "googlemap_type"));
// Add a save button to the form.
$form->submit("SaveSettings")->value(t("Save"));
diff --git a/3.0/modules/tagsmap/helpers/tagsmap_event.php b/3.0/modules/tagsmap/helpers/tagsmap_event.php
index 66ed8fd2..b38d9f50 100644
--- a/3.0/modules/tagsmap/helpers/tagsmap_event.php
+++ b/3.0/modules/tagsmap/helpers/tagsmap_event.php
@@ -32,6 +32,12 @@ class tagsmap_event_Core {
}
}
+ static function pre_deactivate($data) {
+ if ($data->module == "tag") {
+ $data->messages["warn"][] = t("The TagsMap module requires the Tags module.");
+ }
+ }
+
static function admin_menu($menu, $theme) {
// Add a link to the TagsMap admin page to the Content menu.
$menu->get("content_menu")
diff --git a/3.0/modules/tagsmap/helpers/tagsmap_installer.php b/3.0/modules/tagsmap/helpers/tagsmap_installer.php
index 48ad5461..4567d4df 100644
--- a/3.0/modules/tagsmap/helpers/tagsmap_installer.php
+++ b/3.0/modules/tagsmap/helpers/tagsmap_installer.php
@@ -43,6 +43,14 @@ class tagsmap_installer {
site_status::clear("tagsmap_needs_tag");
}
+ static function can_activate() {
+ $messages = array();
+ if (!module::is_active("tag")) {
+ $messages["warn"][] = t("The TagsMap module requires the Tags module.");
+ }
+ return $messages;
+ }
+
static function uninstall() {
// Delete the GPS table before uninstalling.
$db = Database::instance();
diff --git a/3.0/modules/tagsmap/module.info b/3.0/modules/tagsmap/module.info
index b916f09d..827de3eb 100644
--- a/3.0/modules/tagsmap/module.info
+++ b/3.0/modules/tagsmap/module.info
@@ -1,3 +1,7 @@
name = "TagsMap"
description = "Assign GPS coordinates to existing tags and display them on a map."
version = 2
+author_name = "rWatcher"
+author_url = "http://codex.gallery2.org/User:RWatcher"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:tagsmap"
+discuss_url = "http://gallery.menalto.com/node/89338"
diff --git a/3.0/modules/themeroller/controllers/admin_themeroller.php b/3.0/modules/themeroller/controllers/admin_themeroller.php
index 2b448431..d36074cd 100755
--- a/3.0/modules/themeroller/controllers/admin_themeroller.php
+++ b/3.0/modules/themeroller/controllers/admin_themeroller.php
@@ -84,12 +84,16 @@ class Admin_Themeroller_Controller extends Admin_Controller {
->name(t("Generate theme"));
$v->task = task::create($task_def,
- array("path" => $extract_path,
- "original_name" => $form->theme->original->value,
- "theme_name" => $form->theme->theme_name->value,
- "display_name" => $form->theme->display_name->value,
- "description" => $form->theme->description->value,
- "is_admin" => $session->get("themeroller_is_admin")));
+ array("path" => $extract_path,
+ "user_name" => SafeString::purify(identity::active_user()->name),
+ "original_name" => SafeString::purify($form->theme->original->value),
+ "theme_name" => SafeString::purify($form->theme->theme_name->value),
+ "display_name" => SafeString::purify($form->theme->display_name->value),
+ "description" => SafeString::purify($form->theme->description->value),
+ "author_url" => SafeString::purify($form->theme->author_url->value),
+ "info_url" => SafeString::purify($form->theme->info_url->value),
+ "discuss_url" => SafeString::purify($form->theme->discuss_url->value),
+ "is_admin" => $session->get("themeroller_is_admin")));
json::reply(array("html" => (string) $v));
} else {
@@ -169,9 +173,13 @@ class Admin_Themeroller_Controller extends Admin_Controller {
}
$form_group->textarea("description")->label(t("Description"))
->id("g-description")
- ->value(t("A generated theme based on the ui themeroller '%name' styling", array("name" => str_replace("admin_", "", $theme_name))))
+ ->value(t("A generated theme based on the ui themeroller '%name' styling",
+ array("name" => str_replace("admin_", "", $theme_name))))
->rules("required")
->error_messages("required", t("You must enter a theme description name"));
+ $form_group->input("author_url")->label(t("Author url"))->id("g-author-url");
+ $form_group->input("info_url")->label(t("Info url"))->id("g-info-url");
+ $form_group->input("discuss_url")->label(t("Theme Name"))->id("g-discuss-url");
$form_group->submit("")->value(t("Create"));
return $form;
diff --git a/3.0/modules/themeroller/data/views/page.html.php b/3.0/modules/themeroller/data/views/page.html.php
index ffd5a173..dc3be7a4 100644
--- a/3.0/modules/themeroller/data/views/page.html.php
+++ b/3.0/modules/themeroller/data/views/page.html.php
@@ -4,47 +4,40 @@
+ $theme->start_combining("script,css") ?>
if ($page_title): ?>
= $page_title ?>
else: ?>
if ($theme->item()): ?>
- if ($theme->item()->is_album()): ?>
- = t("Browse Album :: %album_title", array("album_title" => $theme->item()->title)) ?>
- elseif ($theme->item()->is_photo()): ?>
- = t("Photo :: %photo_title", array("photo_title" => $theme->item()->title)) ?>
- else: ?>
- = t("Movie :: %movie_title", array("movie_title" => $theme->item()->title)) ?>
- endif ?>
+ = $theme->item()->title ?>
elseif ($theme->tag()): ?>
- = t("Browse Tag :: %tag_title", array("tag_title" => $theme->tag()->name)) ?>
+ = t("Photos tagged with %tag_title", array("tag_title" => $theme->tag()->name)) ?>
else: /* Not an item, not a tag, no page_title specified. Help! */ ?>
- = t("Gallery") ?>
+ = item::root()->title ?>
endif ?>
endif ?>
-
" type="image/x-icon" />
- = $theme->css("yui/reset-fonts-grids.css") ?>
- = $theme->css("superfish/css/superfish.css") ?>
- = $theme->css("themeroller/ui.base.css") ?>
- = $theme->css("screen.css") ?>
-
+
"
+ type="image/x-icon" />
+
" />
if ($theme->page_type == "collection"): ?>
- if ($thumb_proportion != 1): ?>
+ if (($thumb_proportion = $theme->thumb_proportion($theme->item())) != 1): ?>
$new_width = round($thumb_proportion * 213) ?>
$new_height = round($thumb_proportion * 240) ?>
-
+
endif ?>
endif ?>
+
+ = $theme->script("json2-min.js") ?>
= $theme->script("jquery.js") ?>
= $theme->script("jquery.form.js") ?>
= $theme->script("jquery-ui.js") ?>
@@ -57,7 +50,6 @@
= $theme->script("gallery.dialog.js") ?>
= $theme->script("superfish/js/superfish.js") ?>
= $theme->script("jquery.localscroll.js") ?>
- = $theme->script("ui.init.js") ?>
/* These are page specific, but if we put them before $theme->head() they get combined */ ?>
if ($theme->page_subtype == "photo"): ?>
@@ -68,6 +60,26 @@
endif ?>
= $theme->head() ?>
+
+ /* Theme specific CSS/JS goes last so that it can override module CSS/JS */ ?>
+ = $theme->script("ui.init.js") ?>
+ = $theme->css("yui/reset-fonts-grids.css") ?>
+ = $theme->css("superfish/css/superfish.css") ?>
+ = $theme->css("themeroller/ui.base.css") ?>
+ = $theme->css("screen.css") ?>
+ if (locales::is_rtl()): ?>
+ = $theme->css("screen-rtl.css") ?>
+ endif; ?>
+
+
+
+ = $theme->get_combined("css") ?>
+
+
+ = $theme->get_combined("script") ?>
body_attributes() ?>>
@@ -95,25 +107,16 @@
= $theme->header_bottom() ?>
- if ($theme->item() && !empty($parents)): ?>
+ if (!empty($breadcrumbs)): ?>
endif ?>
diff --git a/3.0/modules/themeroller/helpers/themeroller_task.php b/3.0/modules/themeroller/helpers/themeroller_task.php
index f6fec329..48d8b312 100644
--- a/3.0/modules/themeroller/helpers/themeroller_task.php
+++ b/3.0/modules/themeroller/helpers/themeroller_task.php
@@ -208,15 +208,18 @@ class themeroller_task_Core {
break;
case "generate_screen_css":
$file = "{$theme_path}/css/screen.css";
- $v = new View(($is_admin ? "admin" : "site") . "_screen.css");
- $v->display_name = $task->get("display_name");
- foreach ($parameters["colors"] as $color => $value) {
- $v->$color = $value;
+ foreach (array("screen", "screen-rtl") as $file) {
+ $css_file = "{$theme_path}/css/$file.css";
+ $v = new View(($is_admin ? "admin" : "site") . "_{$file}.css");
+ $v->display_name = $task->get("display_name");
+ foreach ($parameters["colors"] as $color => $value) {
+ $v->$color = $value;
+ }
+ ob_start();
+ print $v->render();
+ file_put_contents($css_file, ob_get_contents());
+ ob_end_clean();
}
- ob_start();
- print $v->render();
- file_put_contents($file, ob_get_contents());
- ob_end_clean();
$completed++;
$task->log(t("Generated screen css: %path", array("path" => $file)));
$task->status = t("Screen css generated");
@@ -229,14 +232,18 @@ class themeroller_task_Core {
$task->status = t("Thumbnail generated");
$task->set("mode", "generate_theme_info");
$completed++;
- $task->log(t("Generated theme thumbnail: %path", array("path" => "{$theme_path}thumbnail.png")));
+ $task->log(t("Generated theme thumbnail: %path",
+ array("path" => "{$theme_path}thumbnail.png")));
break;
case "generate_theme_info":
$file = "{$theme_path}/theme.info";
$v = new View("theme.info");
$v->display_name = $task->get("display_name");
$v->description = $task->get("description");
- $v->user_name = identity::active_user()->name;
+ $v->user_name = $task->get("user_name");
+ $v->author_url = $task->get("author_url");
+ $v->info_url = $task->get("info_url");
+ $v->discuss_url = $task->get("discuss_url");
$v->is_admin = $is_admin;
$v->definition = json_encode($parameters["colors"]);
ob_start();
diff --git a/3.0/modules/themeroller/module.info b/3.0/modules/themeroller/module.info
index 0e50286e..aaa16bd6 100755
--- a/3.0/modules/themeroller/module.info
+++ b/3.0/modules/themeroller/module.info
@@ -1,3 +1,7 @@
-name = "Theme generator"
+name = "Theme Roller"
description = "Use a JQuery UI theme to create a Gallery3 Theme"
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:themeroller"
+discuss_url = "http://gallery.menalto.com/forum_module_themeroller"
diff --git a/3.0/modules/themeroller/views/admin_screen-rtl.css.php b/3.0/modules/themeroller/views/admin_screen-rtl.css.php
new file mode 100644
index 00000000..62655b58
--- /dev/null
+++ b/3.0/modules/themeroller/views/admin_screen-rtl.css.php
@@ -0,0 +1,375 @@
+/**
+ * Gallery 3 Admin Right to left language styles
+ */
+
+.rtl {
+ direction: rtl;
+}
+
+#g-header,
+#g-content,
+#g-sidebar,
+#g-footer,
+caption,
+th,
+#g-dialog,
+.g-context-menu li a,
+.g-message-box li,
+#g-site-status li {
+ text-align: right;
+}
+
+.g-text-right {
+ text-align: left;
+}
+
+.g-error,
+.g-info,
+.g-success,
+.g-warning,
+#g-add-photos-status .g-success,
+#g-add-photos-status .g-error {
+ background-position: center right;
+ padding-right: 30px !important;
+}
+
+form li.g-error,
+form li.g-info,
+form li.g-success,
+form li.g-warning {
+ padding-right: 0 !important;
+}
+
+.g-left,
+.g-inline li,
+#g-content #g-album-grid .g-item,
+.sf-menu li,
+.g-breadcrumbs li,
+.g-paginator li,
+.g-buttonset li,
+.ui-icon-left .ui-icon,
+.g-short-form li,
+form ul ul li,
+input[type="submit"],
+input[type="reset"],
+input.checkbox,
+input[type=checkbox],
+input.radio,
+input[type=radio] {
+ float: right;
+}
+
+.g-right,
+ .ui-icon-right .ui-icon {
+ float: left;
+}
+
+.g-inline li {
+ margin-right: 1em;
+}
+
+.g-inline li.g-first {
+ margin-right: 0;
+}
+
+.g-breadcrumbs li {
+ background: transparent url('../images/ico-separator-rtl.png') no-repeat scroll right center;
+ padding: 1em 18px 1em 8px;
+}
+
+.g-breadcrumbs .g-first {
+ background: none;
+ padding-right: 0;
+}
+
+input.checkbox,
+input[type="checkbox"],
+input.radio,
+input[type="radio"] {
+ margin-right: 0;
+ margin-left: .4em;
+}
+
+#g-add-comment {
+ right: inherit;
+ left: 0;
+}
+
+.ui-icon-left .ui-icon {
+ margin-left: .2em;
+}
+
+.ui-icon-right .ui-icon {
+ margin-right: .2em;
+}
+
+.g-group h4 {
+ padding: .5em .5em .5em 0;
+}
+
+.g-group .g-user {
+ padding: .2em .5em 0 0;
+}
+
+/* RTL Corner radius ~~~~~~~~~~~~~~~~~~~~~~ */
+.g-buttonset .ui-corner-tl {
+ -moz-border-radius-topleft: 0;
+ -webkit-border-top-left-radius: 0;
+ border-top-left-radius: 0;
+ -moz-border-radius-topright: 5px !important;
+ -webkit-border-top-right-radius: 5px !important;
+ border-top-right-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-tr {
+ -moz-border-radius-topright: 0;
+ -webkit-border-top-right-radius: 0;
+ border-top-right-radius: 0;
+ -moz-border-radius-topleft: 5px !important;
+ -webkit-border-top-left-radius: 5px !important;
+ border-top-left-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-bl {
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-bottomright: 5px !important;
+ -webkit-border-bottom-right-radius: 5px !important;
+ border-bottom-right-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-br {
+ -moz-border-radius-bottomright: 0;
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomleft: 5px !important;
+ -webkit-border-bottom-left-radius: 5px !important;
+ border-bottom-left-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-right,
+.ui-progressbar .ui-corner-right {
+ -moz-border-radius-topright: 0;
+ -webkit-border-top-right-radius: 0;
+ border-top-right-radius: 0;
+ -moz-border-radius-topleft: 5px !important;
+ -webkit-border-top-left-radius: 5px !important;
+ border-top-left-radius: 5px !important;
+ -moz-border-radius-bottomright: 0;
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomleft: 5px !important;
+ -webkit-border-bottom-left-radius: 5px !important;
+ border-bottom-left-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-left,
+.ui-progressbar .ui-corner-left {
+ -moz-border-radius-topleft: 0;
+ -webkit-border-top-left-radius: 0;
+ border-top-left-radius: 0;
+ -moz-border-radius-topright: 5px !important;
+ -webkit-border-top-right-radius: 5px !important;
+ border-top-right-radius: 5px !important;
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-bottomright: 5px !important;
+ -webkit-border-bottom-right-radius: 5px !important;
+ border-bottom-right-radius: 5px !important;
+}
+
+/* RTL Superfish ~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.sf-menu a {
+ border-left: none;
+ border-right:1px solid #= $borderColorContent ?>;
+}
+
+.sf-menu a.sf-with-ul {
+ padding-left: 2.25em;
+ padding-right: 1em;
+}
+
+.sf-sub-indicator {
+ background: url("themeroller/images/ui-icons_= $fcDefault ?>_256x240.png") no-repeat -96px -16px; /* 8-bit indexed alpha png. IE6 gets solid image only */
+ left: .75em !important;
+ right: auto;
+}
+
+a > .sf-sub-indicator { /* give all except IE6 the correct values */
+ top: .8em;
+ background-position: -10px -100px; /* use translucent arrow for modern browsers*/
+}
+/* apply hovers to modern browsers */
+a:focus > .sf-sub-indicator,
+a:hover > .sf-sub-indicator,
+a:active > .sf-sub-indicator,
+li:hover > a > .sf-sub-indicator,
+li.sfHover > a > .sf-sub-indicator {
+ background-position: 0 -100px; /* arrow hovers for modern browsers*/
+}
+
+/* point right for anchors in subs */
+.sf-menu ul .sf-sub-indicator { background-position: 0 0; }
+.sf-menu ul a > .sf-sub-indicator { background-position: -10px 0; }
+/* apply hovers to modern browsers */
+.sf-menu ul a:focus > .sf-sub-indicator,
+.sf-menu ul a:hover > .sf-sub-indicator,
+.sf-menu ul a:active > .sf-sub-indicator,
+.sf-menu ul li:hover > a > .sf-sub-indicator,
+.sf-menu ul li.sfHover > a > .sf-sub-indicator {
+ background-position: 0 0; /* arrow hovers for modern browsers*/
+}
+
+.sf-menu li:hover ul,
+.sf-menu li.sfHover ul {
+ right: 0;
+ left: auto;
+}
+
+ul.sf-menu li li:hover ul,
+ul.sf-menu li li.sfHover ul {
+ right: 12em; /* match ul width */
+ left: auto;
+}
+ul.sf-menu li li li:hover ul,
+ul.sf-menu li li li.sfHover ul {
+ right: 12em; /* match ul width */
+ left: auto;
+}
+
+/*** shadows for all but IE6 ***/
+.sf-shadow ul {
+ background: url('../images/superfish-shadow.png') no-repeat bottom left;
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-topright: 0;
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-top-right-radius: 0;
+ -webkit-border-bottom-left-radius: 0;
+ -moz-border-radius-topleft: 17px;
+ -moz-border-radius-bottomright: 17px;
+ -webkit-border-top-left-radius: 17px;
+ -webkit-border-bottom-right-radius: 17px;
+ border-top-left-radius: 17px;
+ border-bottom-right-radius: 17px;
+}
+
+/* RTL ThemeRoller ~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.ui-dialog .ui-dialog-titlebar {
+ padding: 0.5em 1em 0.3em 0.3em;
+}
+
+.ui-dialog .ui-dialog-title {
+ float: right;
+}
+
+.ui-dialog .ui-dialog-titlebar-close {
+ left: 0.3em;
+ right: auto;
+}
+
+.ui-tabs .ui-tabs-nav li {
+ float: right;
+}
+
+#g-content #g-album-grid .g-item,
+#g-site-theme,
+#g-admin-theme,
+.g-selected img,
+.g-available .g-block img,
+#g-content #g-photo-stream .g-item,
+li.g-group,
+#g-server-add-admin {
+ float: right;
+}
+
+#g-admin-graphics .g-available .g-block {
+ float: right;
+ margin-left: 1em;
+ margin-right: 0em;
+}
+
+#g-site-admin-menu {
+ left: auto;
+ right: 150px;
+}
+
+#g-header #g-login-menu {
+ float: left;
+}
+
+#g-header #g-login-menu li {
+ margin-left: 0;
+ padding-left: 0;
+ padding-right: 1.2em;
+}
+
+.g-selected img,
+.g-available .g-block img {
+ margin: 0 0 1em 1em;
+}
+
+.g-button {
+ margin: 0 0 0 4px;
+}
+
+/* RTL paginator ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-paginator .g-info {
+ width: 35%;
+}
+
+.g-paginator .g-text-right {
+ margin-left: 0;
+}
+
+.g-paginator .ui-icon-seek-end {
+ background-position: -80px -160px;
+}
+
+.g-paginator .ui-icon-seek-next {
+ background-position: -48px -160px;
+}
+
+.g-paginator .ui-icon-seek-prev {
+ background-position: -32px -160px;
+}
+
+.g-paginator .ui-icon-seek-first {
+ background-position: -64px -160px;
+}
+
+#g-header #g-login-menu,
+#g-header #g-quick-search-form {
+ clear: left;
+ float: left;
+}
+
+#g-header #g-login-menu li {
+ margin-left: 0;
+ padding-left: 0;
+ padding-right: 1.2em;
+}
+
+#g-site-menu {
+ left: auto;
+ right: 240px;
+}
+
+#g-view-menu #g-slideshow-link {
+ background-image: url('../images/ico-view-slideshow-rtl.png');
+}
+
+#g-sidebar .g-block-content {
+ padding-right: 1em;
+ padding-left: 0;
+}
+
+#g-footer #g-credits li {
+ padding-left: 1.2em !important;
+ padding-right: 0;
+}
diff --git a/3.0/modules/themeroller/views/admin_screen.css.php b/3.0/modules/themeroller/views/admin_screen.css.php
index 54ea97f4..68659be2 100644
--- a/3.0/modules/themeroller/views/admin_screen.css.php
+++ b/3.0/modules/themeroller/views/admin_screen.css.php
@@ -13,7 +13,6 @@
* 7) Navigation and menus
* 8) jQuery and jQuery UI
* 9) Module color overrides
- * 10) Right-to-left language styles
*
* @todo Review g-buttonset-vertical
*/
@@ -98,7 +97,16 @@ a:hover,
text-decoration: none;
}
+/* Lists ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+ul.g-text li,
+.g-text ul li {
+ list-style-type: disc;
+ margin-left: 1em;
+}
+
/* Forms ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
form {
margin: 0;
}
@@ -415,11 +423,6 @@ th {
background-color: #= $bgColorContent ?>;
}
-ul.enumeration li {
- list-style-type: disc;
- margin-left: 20px;
-}
-
/*** ******************************************************************
* 3) Page layout containers
*********************************************************************/
@@ -1126,303 +1129,3 @@ a > .sf-sub-indicator {
.g-default-group .g-user {
color: #= $fcDefault ?> !important;
}
-
-/** *******************************************************************
- * 10) Right to left styles
- *********************************************************************/
-
-.rtl {
- direction: rtl;
-}
-
-.rtl #g-header,
-.rtl #g-content,
-.rtl #g-sidebar,
-.rtl #g-footer,
-.rtl caption,
-.rtl th,
-.rtl #g-dialog,
-.rtl .g-context-menu li a,
-.rtl .g-message-box li,
-.rtl #g-site-status li {
- text-align: right;
-}
-
-.rtl .g-text-right {
- text-align: left;
-}
-
-.rtl .g-error,
-.rtl .g-info,
-.rtl .g-success,
-.rtl .g-warning,
-.rtl #g-add-photos-status .g-success,
-.rtl #g-add-photos-status .g-error {
- background-position: center right;
- padding-right: 30px !important;
-}
-
-.rtl form li.g-error,
-.rtl form li.g-info,
-.rtl form li.g-success,
-.rtl form li.g-warning {
- padding-right: 0 !important;
-}
-
-.rtl .g-left,
-.rtl .g-inline li,
-.rtl #g-content #g-album-grid .g-item,
-.rtl .sf-menu li,
-.rtl .g-breadcrumbs li,
-.rtl .g-paginator li,
-.rtl .g-buttonset li,
-.rtl .ui-icon-left .ui-icon,
-.rtl .g-short-form li,
-.rtl form ul ul li,
-.rtl input[type="submit"],
-.rtl input[type="reset"],
-.rtl input.checkbox,
-.rtl input[type=checkbox],
-.rtl input.radio,
-.rtl input[type=radio] {
- float: right;
-}
-
-.rtl .g-right,
-.rtl .ui-icon-right .ui-icon {
- float: left;
-}
-
-.rtl .g-inline li {
- margin-right: 1em;
-}
-
-.rtl .g-inline li.g-first {
- margin-right: 0;
-}
-
-.rtl .g-breadcrumbs li {
- background: transparent url('../images/ico-separator-rtl.png') no-repeat scroll right center;
- padding: 1em 18px 1em 8px;
-}
-
-.rtl .g-breadcrumbs .g-first {
- background: none;
- padding-right: 0;
-}
-
-.rtl input.checkbox {
- margin-left: .4em;
-}
-
-.rtl #g-add-comment {
- right: inherit;
- left: 0;
-}
-
-.rtl .ui-icon-left .ui-icon {
- margin-left: .2em;
-}
-
-.rtl .ui-icon-right .ui-icon {
- margin-right: .2em;
-}
-
-/* RTL Corner radius ~~~~~~~~~~~~~~~~~~~~~~ */
-.rtl .g-buttonset .ui-corner-tl {
- -moz-border-radius-topleft: 0;
- -webkit-border-top-left-radius: 0;
- border-top-left-radius: 0;
- -moz-border-radius-topright: 5px !important;
- -webkit-border-top-right-radius: 5px !important;
- border-top-right-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-tr {
- -moz-border-radius-topright: 0;
- -webkit-border-top-right-radius: 0;
- border-top-right-radius: 0;
- -moz-border-radius-topleft: 5px !important;
- -webkit-border-top-left-radius: 5px !important;
- border-top-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-bl {
- -moz-border-radius-bottomleft: 0;
- -webkit-border-bottom-left-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-bottomright: 5px !important;
- -webkit-border-bottom-right-radius: 5px !important;
- border-bottom-right-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-br {
- -moz-border-radius-bottomright: 0;
- -webkit-border-bottom-right-radius: 0;
- border-bottom-right-radius: 0;
- -moz-border-radius-bottomleft: 5px !important;
- -webkit-border-bottom-left-radius: 5px !important;
- border-bottom-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-right,
-.rtl .ui-progressbar .ui-corner-right {
- -moz-border-radius-topright: 0;
- -webkit-border-top-right-radius: 0;
- border-top-right-radius: 0;
- -moz-border-radius-topleft: 5px !important;
- -webkit-border-top-left-radius: 5px !important;
- border-top-left-radius: 5px !important;
- -moz-border-radius-bottomright: 0;
- -webkit-border-bottom-right-radius: 0;
- border-bottom-right-radius: 0;
- -moz-border-radius-bottomleft: 5px !important;
- -webkit-border-bottom-left-radius: 5px !important;
- border-bottom-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-left,
-.rtl .ui-progressbar .ui-corner-left {
- -moz-border-radius-topleft: 0;
- -webkit-border-top-left-radius: 0;
- border-top-left-radius: 0;
- -moz-border-radius-topright: 5px !important;
- -webkit-border-top-right-radius: 5px !important;
- border-top-right-radius: 5px !important;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-bottom-left-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-bottomright: 5px !important;
- -webkit-border-bottom-right-radius: 5px !important;
- border-bottom-right-radius: 5px !important;
-}
-
-/* RTL Superfish ~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.rtl .sf-menu a {
- border-left: none;
- border-right:1px solid #= $borderColorContent ?>;
-}
-
-.rtl .sf-menu a.sf-with-ul {
- padding-left: 2.25em;
- padding-right: 1em;
-}
-
-.rtl .sf-sub-indicator {
- background: url("themeroller/images/ui-icons_= $fcDefault ?>_256x240.png") no-repeat -96px -16px; /* 8-bit indexed alpha png. IE6 gets solid image only */
- left: .75em !important;
- right: auto;
-}
-
-.rtl a > .sf-sub-indicator { /* give all except IE6 the correct values */
- top: .8em;
- background-position: -10px -100px; /* use translucent arrow for modern browsers*/
-}
-/* apply hovers to modern browsers */
-.rtl a:focus > .sf-sub-indicator,
-.rtl a:hover > .sf-sub-indicator,
-.rtl a:active > .sf-sub-indicator,
-.rtl li:hover > a > .sf-sub-indicator,
-.rtl li.sfHover > a > .sf-sub-indicator {
- background-position: 0 -100px; /* arrow hovers for modern browsers*/
-}
-
-/* point right for anchors in subs */
-.rtl .sf-menu ul .sf-sub-indicator { background-position: 0 0; }
-.rtl .sf-menu ul a > .sf-sub-indicator { background-position: -10px 0; }
-/* apply hovers to modern browsers */
-.rtl .sf-menu ul a:focus > .sf-sub-indicator,
-.rtl .sf-menu ul a:hover > .sf-sub-indicator,
-.rtl .sf-menu ul a:active > .sf-sub-indicator,
-.rtl .sf-menu ul li:hover > a > .sf-sub-indicator,
-.rtl .sf-menu ul li.sfHover > a > .sf-sub-indicator {
- background-position: 0 0; /* arrow hovers for modern browsers*/
-}
-
-.rtl .sf-menu li:hover ul,
-.rtl .sf-menu li.sfHover ul {
- right: 0;
- left: auto;
-}
-
-.rtl ul.sf-menu li li:hover ul,
-.rtl ul.sf-menu li li.sfHover ul {
- right: 12em; /* match ul width */
- left: auto;
-}
-.rtl ul.sf-menu li li li:hover ul,
-.rtl ul.sf-menu li li li.sfHover ul {
- right: 12em; /* match ul width */
- left: auto;
-}
-
-/*** shadows for all but IE6 ***/
-.rtl .sf-shadow ul {
- background: url('../images/superfish-shadow.png') no-repeat bottom left;
- border-top-right-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-topright: 0;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-top-right-radius: 0;
- -webkit-border-bottom-left-radius: 0;
- -moz-border-radius-topleft: 17px;
- -moz-border-radius-bottomright: 17px;
- -webkit-border-top-left-radius: 17px;
- -webkit-border-bottom-right-radius: 17px;
- border-top-left-radius: 17px;
- border-bottom-right-radius: 17px;
-}
-
-/* RTL ThemeRoller ~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.rtl .ui-dialog .ui-dialog-titlebar {
- padding: 0.5em 1em 0.3em 0.3em;
-}
-
-.rtl .ui-dialog .ui-dialog-title {
- float: right;
-}
-
-.rtl .ui-dialog .ui-dialog-titlebar-close {
- left: 0.3em;
- right: auto;
-}
-
-.rtl #g-content #g-album-grid .g-item,
-.rtl #g-site-theme,
-.rtl #g-admin-theme,
-.rtl .g-selected img,
-.rtl .g-available .g-block img,
-.rtl #g-content #g-photo-stream .g-item,
-.rtl li.g-group,
-.rtl #g-server-add-admin {
- float: right;
-}
-
-.rtl #g-admin-graphics .g-available .g-block {
- float: right;
- margin-left: 1em;
- margin-right: 0em;
-}
-
-.rtl #g-site-admin-menu {
- left: auto;
- right: 150px;
-}
-
-.rtl #g-header #g-login-menu {
- float: left;
-}
-
-.rtl #g-header #g-login-menu li {
- margin-left: 0;
- padding-left: 0;
- padding-right: 1.2em;
-}
-
-.rtl .g-selected img,
-.rtl .g-available .g-block img {
- margin: 0 0 1em 1em;
-}
-
diff --git a/3.0/modules/themeroller/views/site_screen-rtl.css.php b/3.0/modules/themeroller/views/site_screen-rtl.css.php
new file mode 100644
index 00000000..991234cb
--- /dev/null
+++ b/3.0/modules/themeroller/views/site_screen-rtl.css.php
@@ -0,0 +1,320 @@
+
+/**
+ * Gallery 3 = $display_name ?> right to left language styles
+ */
+
+.rtl {
+ direction: rtl;
+}
+
+ #g-header,
+ #g-content,
+ #g-sidebar,
+ #g-footer,
+ caption,
+ th,
+ #g-dialog,
+ .g-context-menu li a,
+ .g-message-box li,
+ #g-site-status li {
+ text-align: right;
+}
+
+ .g-text-right {
+ text-align: left;
+}
+
+ .g-error,
+ .g-info,
+ .g-success,
+ .g-warning,
+ #g-add-photos-status .g-success,
+ #g-add-photos-status .g-error {
+ background-position: center right;
+ padding-right: 30px !important;
+}
+
+ form li.g-error,
+ form li.g-info,
+ form li.g-success,
+ form li.g-warning {
+ padding-right: 0 !important;
+}
+
+ .g-left,
+ .g-inline li,
+ #g-content #g-album-grid .g-item,
+ .sf-menu li,
+ .g-breadcrumbs li,
+ .g-paginator li,
+ .g-buttonset li,
+ .ui-icon-left .ui-icon,
+ .g-short-form li,
+ form ul ul li,
+ input[type="submit"],
+ input[type="reset"],
+ input.checkbox,
+ input[type=checkbox],
+ input.radio,
+ input[type=radio] {
+ float: right;
+}
+
+ .g-right,
+ .ui-icon-right .ui-icon {
+ float: left;
+}
+
+ .g-inline li {
+ margin-right: 1em;
+}
+
+ .g-inline li.g-first {
+ margin-right: 0;
+}
+
+ .g-breadcrumbs li {
+ background: transparent url('../images/ico-separator-rtl.png') no-repeat scroll right center;
+ padding: 1em 18px 1em 8px;
+}
+
+ .g-breadcrumbs .g-first {
+ background: none;
+ padding-right: 0;
+}
+
+ input.checkbox {
+ margin-left: .4em;
+}
+
+ #g-add-comment {
+ right: inherit;
+ left: 0;
+}
+
+ .ui-icon-left .ui-icon {
+ margin-left: .2em;
+}
+
+ .ui-icon-right .ui-icon {
+ margin-right: .2em;
+}
+
+/* RTL Corner radius ~~~~~~~~~~~~~~~~~~~~~~ */
+ .g-buttonset .ui-corner-tl {
+ -moz-border-radius-topleft: 0;
+ -webkit-border-top-left-radius: 0;
+ border-top-left-radius: 0;
+ -moz-border-radius-topright: 5px !important;
+ -webkit-border-top-right-radius: 5px !important;
+ border-top-right-radius: 5px !important;
+}
+
+ .g-buttonset .ui-corner-tr {
+ -moz-border-radius-topright: 0;
+ -webkit-border-top-right-radius: 0;
+ border-top-right-radius: 0;
+ -moz-border-radius-topleft: 5px !important;
+ -webkit-border-top-left-radius: 5px !important;
+ border-top-left-radius: 5px !important;
+}
+
+ .g-buttonset .ui-corner-bl {
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-bottomright: 5px !important;
+ -webkit-border-bottom-right-radius: 5px !important;
+ border-bottom-right-radius: 5px !important;
+}
+
+ .g-buttonset .ui-corner-br {
+ -moz-border-radius-bottomright: 0;
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomleft: 5px !important;
+ -webkit-border-bottom-left-radius: 5px !important;
+ border-bottom-left-radius: 5px !important;
+}
+
+ .g-buttonset .ui-corner-right,
+ .ui-progressbar .ui-corner-right {
+ -moz-border-radius-topright: 0;
+ -webkit-border-top-right-radius: 0;
+ border-top-right-radius: 0;
+ -moz-border-radius-topleft: 5px !important;
+ -webkit-border-top-left-radius: 5px !important;
+ border-top-left-radius: 5px !important;
+ -moz-border-radius-bottomright: 0;
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomleft: 5px !important;
+ -webkit-border-bottom-left-radius: 5px !important;
+ border-bottom-left-radius: 5px !important;
+}
+
+ .g-buttonset .ui-corner-left,
+ .ui-progressbar .ui-corner-left {
+ -moz-border-radius-topleft: 0;
+ -webkit-border-top-left-radius: 0;
+ border-top-left-radius: 0;
+ -moz-border-radius-topright: 5px !important;
+ -webkit-border-top-right-radius: 5px !important;
+ border-top-right-radius: 5px !important;
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-bottomright: 5px !important;
+ -webkit-border-bottom-right-radius: 5px !important;
+ border-bottom-right-radius: 5px !important;
+}
+
+/* RTL Superfish ~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+ .sf-menu a {
+ border-left: none;
+ border-right:1px solid #= $borderColorHighlight ?>;
+}
+
+ .sf-menu a.sf-with-ul {
+ padding-left: 2.25em;
+ padding-right: 1em;
+}
+
+ .sf-sub-indicator {
+ left: .75em !important;
+ right: auto;
+ background: url("themeroller/images/ui-icons_= $iconColorHighlight ?>_256x240.png") no-repeat -10px -100px; /* 8-bit indexed alpha png. IE6 gets solid image only */
+}
+
+ a > .sf-sub-indicator { /* give all except IE6 the correct values */
+ top: .8em;
+ background-position: -10px -100px; /* use translucent arrow for modern browsers*/
+}
+/* apply hovers to modern browsers */
+ a:focus > .sf-sub-indicator,
+ a:hover > .sf-sub-indicator,
+ a:active > .sf-sub-indicator,
+ li:hover > a > .sf-sub-indicator,
+ li.sfHover > a > .sf-sub-indicator {
+ background-position: 0 -100px; /* arrow hovers for modern browsers*/
+}
+
+/* point right for anchors in subs */
+ .sf-menu ul .sf-sub-indicator { background-position: 0 0; }
+ .sf-menu ul a > .sf-sub-indicator { background-position: -10px 0; }
+/* apply hovers to modern browsers */
+ .sf-menu ul a:focus > .sf-sub-indicator,
+ .sf-menu ul a:hover > .sf-sub-indicator,
+ .sf-menu ul a:active > .sf-sub-indicator,
+ .sf-menu ul li:hover > a > .sf-sub-indicator,
+ .sf-menu ul li.sfHover > a > .sf-sub-indicator {
+ background-position: 0 0; /* arrow hovers for modern browsers*/
+}
+
+ .sf-menu li:hover ul,
+ .sf-menu li.sfHover ul {
+ right: 0;
+ left: auto;
+}
+
+ ul.sf-menu li li:hover ul,
+ ul.sf-menu li li.sfHover ul {
+ right: 12em; /* match ul width */
+ left: auto;
+}
+ ul.sf-menu li li li:hover ul,
+ ul.sf-menu li li li.sfHover ul {
+ right: 12em; /* match ul width */
+ left: auto;
+}
+
+/*** shadows for all but IE6 ***/
+ .sf-shadow ul {
+ background: url('../../../lib/superfish/images/shadow.png') no-repeat bottom left;
+ padding: 0 0 9px 8px;
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-topright: 0;
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-top-right-radius: 0;
+ -webkit-border-bottom-left-radius: 0;
+ -moz-border-radius-topleft: 17px;
+ -moz-border-radius-bottomright: 17px;
+ -webkit-border-top-left-radius: 17px;
+ -webkit-border-bottom-right-radius: 17px;
+ border-top-left-radius: 17px;
+ border-bottom-right-radius: 17px;
+}
+
+/* RTL ThemeRoller ~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+ .ui-dialog .ui-dialog-titlebar {
+ padding: 0.5em 1em 0.3em 0.3em;
+}
+
+ .ui-dialog .ui-dialog-title {
+ float: right;
+}
+
+ .ui-dialog .ui-dialog-titlebar-close {
+ left: 0.3em;
+ right: auto;
+}
+
+/* RTL paginator ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+ .g-paginator .g-info {
+ width: 35%;
+}
+
+ .g-paginator .g-text-right {
+ margin-left: 0;
+}
+
+ .g-paginator .ui-icon-seek-end {
+ background-position: -80px -160px;
+}
+
+ .g-paginator .ui-icon-seek-next {
+ background-position: -48px -160px;
+}
+
+ .g-paginator .ui-icon-seek-prev {
+ background-position: -32px -160px;
+}
+
+ .g-paginator .ui-icon-seek-first {
+ background-position: -64px -160px;
+}
+
+ #g-header #g-login-menu,
+ #g-header #g-quick-search-form {
+ clear: left;
+ float: left;
+}
+
+ #g-header #g-login-menu li {
+ margin-left: 0;
+ padding-left: 0;
+ padding-right: 1.2em;
+}
+
+ #g-site-menu {
+ left: auto;
+ right: 150px;
+}
+
+ #g-view-menu #g-slideshow-link {
+ background-image: url('../images/ico-view-slideshow-rtl.png');
+}
+
+ #g-sidebar .g-block-content {
+ padding-right: 1em;
+ padding-left: 0;
+}
+
+ #g-footer #g-credits li {
+ padding-left: 1.2em !important;
+ padding-right: 0;
+}
diff --git a/3.0/modules/themeroller/views/site_screen.css.php b/3.0/modules/themeroller/views/site_screen.css.php
index 933f8c48..315611f8 100644
--- a/3.0/modules/themeroller/views/site_screen.css.php
+++ b/3.0/modules/themeroller/views/site_screen.css.php
@@ -15,7 +15,6 @@
* 8) jQuery and jQuery UI
* 9) Organize module style
* 10) Tag module styles
- * 11) Right-to-left language styles
*/
/** *******************************************************************
@@ -1217,323 +1216,3 @@ div#g-action-status {
color: #f30;
text-decoration: underline;
}
-
-/** *******************************************************************
- * 11) Right to left language styles
- *********************************************************************/
-
-.rtl {
- direction: rtl;
-}
-
-.rtl #g-header,
-.rtl #g-content,
-.rtl #g-sidebar,
-.rtl #g-footer,
-.rtl caption,
-.rtl th,
-.rtl #g-dialog,
-.rtl .g-context-menu li a,
-.rtl .g-message-box li,
-.rtl #g-site-status li {
- text-align: right;
-}
-
-.rtl .g-text-right {
- text-align: left;
-}
-
-.rtl .g-error,
-.rtl .g-info,
-.rtl .g-success,
-.rtl .g-warning,
-.rtl #g-add-photos-status .g-success,
-.rtl #g-add-photos-status .g-error {
- background-position: center right;
- padding-right: 30px !important;
-}
-
-.rtl form li.g-error,
-.rtl form li.g-info,
-.rtl form li.g-success,
-.rtl form li.g-warning {
- padding-right: 0 !important;
-}
-
-.rtl .g-left,
-.rtl .g-inline li,
-.rtl #g-content #g-album-grid .g-item,
-.rtl .sf-menu li,
-.rtl .g-breadcrumbs li,
-.rtl .g-paginator li,
-.rtl .g-buttonset li,
-.rtl .ui-icon-left .ui-icon,
-.rtl .g-short-form li,
-.rtl form ul ul li,
-.rtl input[type="submit"],
-.rtl input[type="reset"],
-.rtl input.checkbox,
-.rtl input[type=checkbox],
-.rtl input.radio,
-.rtl input[type=radio] {
- float: right;
-}
-
-.rtl .g-right,
-.rtl .ui-icon-right .ui-icon {
- float: left;
-}
-
-.rtl .g-inline li {
- margin-right: 1em;
-}
-
-.rtl .g-inline li.g-first {
- margin-right: 0;
-}
-
-.rtl .g-breadcrumbs li {
- background: transparent url('../images/ico-separator-rtl.png') no-repeat scroll right center;
- padding: 1em 18px 1em 8px;
-}
-
-.rtl .g-breadcrumbs .g-first {
- background: none;
- padding-right: 0;
-}
-
-.rtl input.checkbox {
- margin-left: .4em;
-}
-
-.rtl #g-add-comment {
- right: inherit;
- left: 0;
-}
-
-.rtl .ui-icon-left .ui-icon {
- margin-left: .2em;
-}
-
-.rtl .ui-icon-right .ui-icon {
- margin-right: .2em;
-}
-
-/* RTL Corner radius ~~~~~~~~~~~~~~~~~~~~~~ */
-.rtl .g-buttonset .ui-corner-tl {
- -moz-border-radius-topleft: 0;
- -webkit-border-top-left-radius: 0;
- border-top-left-radius: 0;
- -moz-border-radius-topright: 5px !important;
- -webkit-border-top-right-radius: 5px !important;
- border-top-right-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-tr {
- -moz-border-radius-topright: 0;
- -webkit-border-top-right-radius: 0;
- border-top-right-radius: 0;
- -moz-border-radius-topleft: 5px !important;
- -webkit-border-top-left-radius: 5px !important;
- border-top-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-bl {
- -moz-border-radius-bottomleft: 0;
- -webkit-border-bottom-left-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-bottomright: 5px !important;
- -webkit-border-bottom-right-radius: 5px !important;
- border-bottom-right-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-br {
- -moz-border-radius-bottomright: 0;
- -webkit-border-bottom-right-radius: 0;
- border-bottom-right-radius: 0;
- -moz-border-radius-bottomleft: 5px !important;
- -webkit-border-bottom-left-radius: 5px !important;
- border-bottom-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-right,
-.rtl .ui-progressbar .ui-corner-right {
- -moz-border-radius-topright: 0;
- -webkit-border-top-right-radius: 0;
- border-top-right-radius: 0;
- -moz-border-radius-topleft: 5px !important;
- -webkit-border-top-left-radius: 5px !important;
- border-top-left-radius: 5px !important;
- -moz-border-radius-bottomright: 0;
- -webkit-border-bottom-right-radius: 0;
- border-bottom-right-radius: 0;
- -moz-border-radius-bottomleft: 5px !important;
- -webkit-border-bottom-left-radius: 5px !important;
- border-bottom-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-left,
-.rtl .ui-progressbar .ui-corner-left {
- -moz-border-radius-topleft: 0;
- -webkit-border-top-left-radius: 0;
- border-top-left-radius: 0;
- -moz-border-radius-topright: 5px !important;
- -webkit-border-top-right-radius: 5px !important;
- border-top-right-radius: 5px !important;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-bottom-left-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-bottomright: 5px !important;
- -webkit-border-bottom-right-radius: 5px !important;
- border-bottom-right-radius: 5px !important;
-}
-
-/* RTL Superfish ~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.rtl .sf-menu a {
- border-left: none;
- border-right:1px solid #= $borderColorHighlight ?>;
-}
-
-.rtl .sf-menu a.sf-with-ul {
- padding-left: 2.25em;
- padding-right: 1em;
-}
-
-.rtl .sf-sub-indicator {
- left: .75em !important;
- right: auto;
- background: url("themeroller/images/ui-icons_= $iconColorHighlight ?>_256x240.png") no-repeat -10px -100px; /* 8-bit indexed alpha png. IE6 gets solid image only */
-}
-
-.rtl a > .sf-sub-indicator { /* give all except IE6 the correct values */
- top: .8em;
- background-position: -10px -100px; /* use translucent arrow for modern browsers*/
-}
-/* apply hovers to modern browsers */
-.rtl a:focus > .sf-sub-indicator,
-.rtl a:hover > .sf-sub-indicator,
-.rtl a:active > .sf-sub-indicator,
-.rtl li:hover > a > .sf-sub-indicator,
-.rtl li.sfHover > a > .sf-sub-indicator {
- background-position: 0 -100px; /* arrow hovers for modern browsers*/
-}
-
-/* point right for anchors in subs */
-.rtl .sf-menu ul .sf-sub-indicator { background-position: 0 0; }
-.rtl .sf-menu ul a > .sf-sub-indicator { background-position: -10px 0; }
-/* apply hovers to modern browsers */
-.rtl .sf-menu ul a:focus > .sf-sub-indicator,
-.rtl .sf-menu ul a:hover > .sf-sub-indicator,
-.rtl .sf-menu ul a:active > .sf-sub-indicator,
-.rtl .sf-menu ul li:hover > a > .sf-sub-indicator,
-.rtl .sf-menu ul li.sfHover > a > .sf-sub-indicator {
- background-position: 0 0; /* arrow hovers for modern browsers*/
-}
-
-.rtl .sf-menu li:hover ul,
-.rtl .sf-menu li.sfHover ul {
- right: 0;
- left: auto;
-}
-
-.rtl ul.sf-menu li li:hover ul,
-.rtl ul.sf-menu li li.sfHover ul {
- right: 12em; /* match ul width */
- left: auto;
-}
-.rtl ul.sf-menu li li li:hover ul,
-.rtl ul.sf-menu li li li.sfHover ul {
- right: 12em; /* match ul width */
- left: auto;
-}
-
-/*** shadows for all but IE6 ***/
-.rtl .sf-shadow ul {
- background: url('../../../lib/superfish/images/shadow.png') no-repeat bottom left;
- padding: 0 0 9px 8px;
- border-top-right-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-topright: 0;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-top-right-radius: 0;
- -webkit-border-bottom-left-radius: 0;
- -moz-border-radius-topleft: 17px;
- -moz-border-radius-bottomright: 17px;
- -webkit-border-top-left-radius: 17px;
- -webkit-border-bottom-right-radius: 17px;
- border-top-left-radius: 17px;
- border-bottom-right-radius: 17px;
-}
-
-/* RTL ThemeRoller ~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.rtl .ui-dialog .ui-dialog-titlebar {
- padding: 0.5em 1em 0.3em 0.3em;
-}
-
-.rtl .ui-dialog .ui-dialog-title {
- float: right;
-}
-
-.rtl .ui-dialog .ui-dialog-titlebar-close {
- left: 0.3em;
- right: auto;
-}
-
-/* RTL paginator ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.rtl .g-paginator .g-info {
- width: 35%;
-}
-
-.rtl .g-paginator .g-text-right {
- margin-left: 0;
-}
-
-.rtl .g-paginator .ui-icon-seek-end {
- background-position: -80px -160px;
-}
-
-.rtl .g-paginator .ui-icon-seek-next {
- background-position: -48px -160px;
-}
-
-.rtl .g-paginator .ui-icon-seek-prev {
- background-position: -32px -160px;
-}
-
-.rtl .g-paginator .ui-icon-seek-first {
- background-position: -64px -160px;
-}
-
-.rtl #g-header #g-login-menu,
-.rtl #g-header #g-quick-search-form {
- clear: left;
- float: left;
-}
-
-.rtl #g-header #g-login-menu li {
- margin-left: 0;
- padding-left: 0;
- padding-right: 1.2em;
-}
-
-.rtl #g-site-menu {
- left: auto;
- right: 150px;
-}
-
-.rtl #g-view-menu #g-slideshow-link {
- background-image: url('../images/ico-view-slideshow-rtl.png');
-}
-
-.rtl #g-sidebar .g-block-content {
- padding-right: 1em;
- padding-left: 0;
-}
-
-.rtl #g-footer #g-credits li {
- padding-left: 1.2em !important;
- padding-right: 0;
-}
diff --git a/3.0/modules/themeroller/views/theme.info.php b/3.0/modules/themeroller/views/theme.info.php
index eb8ead8f..ba061661 100644
--- a/3.0/modules/themeroller/views/theme.info.php
+++ b/3.0/modules/themeroller/views/theme.info.php
@@ -1,9 +1,12 @@
-name = "= $display_name ?>"
-description = "= $description ?>"
+name = = $display_name->for_js() . "\n" ?>
+description = = $description->for_js() . "\n" ?>
version = 1
-author = "= $user_name ?>"
-site = "= !$is_admin ? 1 : 0?>"
-admin = "= $is_admin ? 1 : 0?>"
+author = = $user_name->for_js() . "\n" ?>
+site = = (!$is_admin ? 1 : 0) . "\n"?>
+admin = = ($is_admin ? 1 : 0) . "\n"?>
+author_url = = $user_name->for_js() . "\n" ?>
+info_url = = $info_url->for_js() . "\n" ?>
+discuss_url = = $discuss_url->for_js() . "\n" ?>
; definition = = $definition ?>
diff --git a/3.0/modules/transcode/module.info b/3.0/modules/transcode/module.info
index 4c9f4033..cc8dbc09 100644
--- a/3.0/modules/transcode/module.info
+++ b/3.0/modules/transcode/module.info
@@ -1,3 +1,7 @@
name = "Transcode"
description = "Transcode videos automatically to given format(s) after upload"
version = 10
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:transcode"
+discuss_url = "http://gallery.menalto.com/forum_module_transcode"
diff --git a/3.0/modules/transliterate/helpers/transliterate.php b/3.0/modules/transliterate/helpers/transliterate.php
new file mode 100644
index 00000000..fb15cf26
--- /dev/null
+++ b/3.0/modules/transliterate/helpers/transliterate.php
@@ -0,0 +1,6515 @@
+ "C", "£" => "PS", "¥" => "Y=", "§" => "SS", "©" => "(c)", "ª" => "a",
+ "®" => "(r)", "°" => "deg", "²" => "2", "³" => "3", "µ" => "u", "¶" => "P",
+ "¹" => "1", "º" => "o", "¼" => "1/4", "½" => "1/2", "¾" => "3/4", "Ă€" => "A",
+ "Ă" => "A", "Ă‚" => "A", "Ăƒ" => "A", "Ă„" => "A", "Ă…" => "A", "Æ" => "AE",
+ "Ç" => "C", "Ăˆ" => "E", "É" => "E", "Ă" => "E", "Ă‹" => "E", "ĂŒ" => "I",
+ "Ă" => "I", "Ă" => "I", "Ă" => "I", "Ă" => "D", "Ă‘" => "N", "Ă’" => "O",
+ "Ă“" => "O", "Ă”" => "O", "Ă•" => "O", "Ă–" => "O", "Ă—" => "x", "Ă˜" => "O",
+ "Ă™" => "U", "Ă" => "U", "Ă›" => "U", "Ăœ" => "U", "Ă" => "U", "Ă" => "Th",
+ "ĂŸ" => "ss", "Ă " => "a", "Ă¡" => "a", "Ă¢" => "a", "Ă£" => "a", "ä" => "a",
+ "Ă¥" => "a", "æ" => "ae", "ç" => "c", "è" => "e", "Ă©" => "e", "Ăª" => "e",
+ "Ă«" => "e", "ì" => "i", "Ă" => "i", "Ă®" => "i", "Ă¯" => "i", "Ă°" => "d",
+ "ñ" => "n", "Ă²" => "o", "Ă³" => "o", "Ă´" => "o", "õ" => "o", "ö" => "o",
+ "ø" => "o", "Ă¹" => "u", "Ăº" => "u", "Ă»" => "u", "Ă¼" => "u", "Ă½" => "y",
+ "Ă¾" => "th", "Ă¿" => "y", "Ä" => "a", "Ä‚" => "A", "ă" => "a", "Ä„" => "A",
+ "Ä…" => "a", "Ć" => "C", "ć" => "c", "Ĉ" => "C", "ĉ" => "c", "Ä" => "C",
+ "Ä‹" => "c", "ÄŒ" => "C", "Ä" => "c", "Ä" => "D", "Ä" => "d", "Ä" => "D",
+ "Ä‘" => "d", "Ä’" => "E", "Ä“" => "e", "Ä”" => "E", "Ä•" => "e", "Ä–" => "E",
+ "Ä—" => "e", "Ę" => "E", "Ä™" => "e", "Ä" => "E", "Ä›" => "e", "Äœ" => "G",
+ "Ä" => "g", "Ä" => "G", "ÄŸ" => "g", "Ä " => "G", "Ä¡" => "g", "Ä¢" => "G",
+ "ģ" => "g", "Ĥ" => "H", "ĥ" => "h", "Ħ" => "H", "ħ" => "h", "Ĩ" => "I",
+ "Ä©" => "i", "Ī" => "I", "Ä«" => "i", "Ĭ" => "I", "Ä" => "i", "Ä®" => "I",
+ "į" => "i", "İ" => "I", "ı" => "i", "IJ" => "IJ", "Ĵ" => "J", "ĵ" => "j",
+ "Ķ" => "K", "ķ" => "k", "ĸ" => "k", "Ĺ" => "L", "ĺ" => "l", "Ļ" => "L",
+ "ļ" => "l", "Ľ" => "L", "ľ" => "l", "Ä¿" => "L", "Å€" => "l", "Å" => "L",
+ "ł" => "l", "Ń" => "N", "ń" => "n", "Ņ" => "N", "ņ" => "n", "Ň" => "N",
+ "ň" => "n", "ʼn" => "'n", "Å" => "ng", "Å‹" => "NG", "ÅŒ" => "O", "Å" => "o",
+ "Å" => "O", "Å" => "o", "Å" => "O", "Å‘" => "o", "Å’" => "OE", "Å“" => "oe",
+ "Ŕ" => "R", "ŕ" => "r", "Ŗ" => "R", "ŗ" => "r", "Ř" => "R", "ř" => "r",
+ "Å" => "S", "Å›" => "s", "Åœ" => "S", "Å" => "s", "Å" => "S", "ÅŸ" => "s",
+ "Š" => "S", "š" => "s", "Ţ" => "T", "ţ" => "t", "Ť" => "T", "ť" => "t",
+ "Ŧ" => "T", "ŧ" => "t", "Ũ" => "U", "ũ" => "u", "Ū" => "U", "ū" => "u",
+ "Ŭ" => "U", "Å" => "u", "Å®" => "U", "ů" => "u", "Å°" => "U", "ű" => "u",
+ "Ų" => "U", "ų" => "u", "Ŵ" => "W", "ŵ" => "w", "Ŷ" => "Y", "ŷ" => "y",
+ "Ÿ" => "Y", "Ź" => "Z", "ź" => "z", "Ż" => "Z", "ż" => "z", "Ž" => "Z",
+ "ž" => "z", "Å¿" => "s", "Æ€" => "b", "Æ" => "B", "Æ‚" => "B", "ƃ" => "b",
+ "Ƅ" => "6", "ƅ" => "6", "Ɔ" => "O", "Ƈ" => "C", "ƈ" => "c", "Ɖ" => "D",
+ "Æ" => "D", "Æ‹" => "D", "ÆŒ" => "d", "Æ" => "d", "Æ" => "3", "Æ" => "E",
+ "Æ‘" => "F", "Æ’" => "f", "Æ“" => "G", "Æ”" => "G", "Æ•" => "hv", "Æ–" => "I",
+ "Æ—" => "I", "Ƙ" => "K", "Æ™" => "k", "Æ" => "l", "Æ›" => "l", "Æœ" => "W",
+ "Æ" => "N", "Æ" => "n", "ÆŸ" => "O", "Æ " => "O", "Æ¡" => "o", "Æ¢" => "OI",
+ "ƣ" => "oi", "Ƥ" => "P", "ƥ" => "p", "Ʀ" => "YR", "Ƨ" => "2", "ƨ" => "2",
+ "Æ©" => "SH", "ƪ" => "sh", "Æ«" => "t", "Ƭ" => "T", "Æ" => "t", "Æ®" => "T",
+ "Ư" => "U", "ư" => "u", "Ʊ" => "Y", "Ʋ" => "V", "Ƴ" => "Y", "ƴ" => "y",
+ "Ƶ" => "Z", "ƶ" => "z", "Ʒ" => "ZH", "Ƹ" => "ZH", "ƹ" => "zh", "ƺ" => "zh",
+ "ƻ" => "2", "Ƽ" => "5", "ƽ" => "5", "ƾ" => "ts", "ƿ" => "w", "DŽ" => "DZ",
+ "Ç…" => "Dz", "dž" => "dz", "LJ" => "LJ", "Lj" => "Lj", "lj" => "lj", "Ç" => "NJ",
+ "Ç‹" => "Nj", "ÇŒ" => "nj", "Ç" => "A", "Ç" => "a", "Ç" => "I", "Ç" => "i",
+ "Ç‘" => "O", "Ç’" => "o", "Ç“" => "U", "Ç”" => "u", "Ç•" => "U", "Ç–" => "u",
+ "Ç—" => "U", "ǘ" => "u", "Ç™" => "U", "Ç" => "u", "Ç›" => "U", "Çœ" => "u",
+ "Ç" => "A", "ÇŸ" => "a", "Ç " => "A", "Ç¡" => "a", "Ç¢" => "AE", "Ç£" => "ae",
+ "Ǥ" => "G", "ǥ" => "g", "Ǧ" => "G", "ǧ" => "g", "Ǩ" => "K", "ǩ" => "k",
+ "Ǫ" => "O", "Ç«" => "o", "Ǭ" => "O", "Ç" => "o", "Ç®" => "ZH", "ǯ" => "zh",
+ "ǰ" => "j", "DZ" => "DZ", "Dz" => "D", "dz" => "dz", "Ǵ" => "G", "ǵ" => "g",
+ "Ƕ" => "HV", "Ƿ" => "W", "Ǹ" => "N", "ǹ" => "n", "Ǻ" => "A", "ǻ" => "a",
+ "Ǽ" => "AE", "ǽ" => "ae", "Ǿ" => "O", "Ç¿" => "o", "È" => "a", "È‚" => "A",
+ "ȃ" => "a", "Ȅ" => "E", "ȅ" => "e", "Ȇ" => "E", "ȇ" => "e", "Ȉ" => "I",
+ "ȉ" => "i", "È" => "I", "È‹" => "i", "ÈŒ" => "O", "È" => "o", "È" => "O",
+ "È" => "o", "È" => "R", "È‘" => "r", "È’" => "R", "È“" => "r", "È”" => "U",
+ "È•" => "u", "È–" => "U", "È—" => "u", "Ș" => "S", "È™" => "s", "È" => "T",
+ "È›" => "t", "Èœ" => "Y", "È" => "y", "È" => "H", "ÈŸ" => "h", "È¢" => "OU",
+ "ȣ" => "ou", "Ȥ" => "Z", "ȥ" => "z", "Ȧ" => "A", "ȧ" => "a", "Ȩ" => "E",
+ "È©" => "e", "Ȫ" => "O", "È«" => "o", "Ȭ" => "O", "È" => "o", "È®" => "O",
+ "ȯ" => "o", "È°" => "O", "ȱ" => "o", "Ȳ" => "Y", "ȳ" => "y", "É" => "a",
+ "É‘" => "a", "É’" => "a", "É“" => "b", "É”" => "o", "É•" => "c", "É–" => "d",
+ "É—" => "d", "ɘ" => "e", "É›" => "e", "Éœ" => "e", "É" => "e", "É" => "e",
+ "ÉŸ" => "j", "É " => "g", "É¡" => "g", "É¢" => "g", "É£" => "g", "ɤ" => "u",
+ "ɥ" => "Y", "ɦ" => "h", "ɧ" => "h", "ɨ" => "i", "ɩ" => "i", "ɪ" => "I",
+ "É«" => "l", "ɬ" => "l", "É" => "l", "É®" => "lZ", "ɯ" => "W", "É°" => "W",
+ "ɱ" => "m", "ɲ" => "n", "ɳ" => "n", "ɴ" => "n", "ɵ" => "o", "ɶ" => "OE",
+ "ɷ" => "O", "ɸ" => "F", "ɹ" => "R", "ɺ" => "R", "ɻ" => "R", "ɼ" => "R",
+ "ɽ" => "r", "ɾ" => "r", "É¿" => "R", "Ê€" => "R", "Ê" => "R", "Ê‚" => "s",
+ "ʃ" => "S", "ʄ" => "j", "ʅ" => "S", "ʆ" => "S", "ʇ" => "t", "ʈ" => "t",
+ "ʉ" => "U", "Ê" => "U", "Ê‹" => "v", "Ê" => "W", "Ê" => "Y", "Ê" => "Y",
+ "Ê" => "z", "Ê‘" => "z", "Ê’" => "Z", "Ê“" => "Z", "Ê—" => "C", "Ê™" => "B",
+ "Ê" => "E", "Ê›" => "G", "Êœ" => "H", "Ê" => "j", "Ê" => "k", "ÊŸ" => "L",
+ "Ê " => "q", "Ê£" => "dz", "ʤ" => "dZ", "Ê¥" => "dz", "ʦ" => "ts", "ʧ" => "tS",
+ "ʨ" => "tC", "ʩ" => "fN", "ʪ" => "ls", "ʫ" => "lz", "ʬ" => "WW", "ʰ" => "k",
+ "ʱ" => "h", "ʲ" => "j", "ʳ" => "r", "ʴ" => "r", "ʵ" => "r", "ʶ" => "r",
+ "ʷ" => "w", "ʸ" => "y", "˅" => "V", "ˇ" => "V", "˕" => "V", "˘" => "V",
+ "Ë" => "R", "ËŸ" => "X", "Ë " => "G", "Ë¡" => "l", "Ë¢" => "s", "Ë£" => "x",
+ "ˬ" => "V", "Ά" => "A", "Έ" => "E", "Ή" => "E", "Î" => "I", "ÎŒ" => "O",
+ "Î" => "U", "Î" => "O", "Î" => "I", "Α" => "A", "Î’" => "B", "Γ" => "G",
+ "Δ" => "D", "Ε" => "E", "Ζ" => "Z", "Η" => "E", "Θ" => "Th", "Ι" => "I",
+ "Î" => "K", "Λ" => "L", "Îœ" => "M", "Î" => "N", "Î" => "Ks", "Ο" => "O",
+ "Π" => "P", "Ρ" => "R", "Σ" => "S", "Τ" => "T", "Υ" => "U", "Φ" => "Ph",
+ "Χ" => "Kh", "Ψ" => "Ps", "Ω" => "O", "Ϊ" => "I", "Ϋ" => "U", "ά" => "a",
+ "Î" => "e", "ή" => "e", "ί" => "i", "ΰ" => "u", "α" => "a", "β" => "b",
+ "γ" => "g", "δ" => "d", "ε" => "e", "ζ" => "z", "η" => "e", "θ" => "th",
+ "ι" => "i", "κ" => "k", "λ" => "l", "μ" => "m", "ν" => "n", "ξ" => "x",
+ "ο" => "o", "Ï€" => "p", "Ï" => "r", "Ï‚" => "s", "σ" => "s", "Ï„" => "t",
+ "Ï…" => "u", "φ" => "ph", "χ" => "kh", "ψ" => "ps", "ω" => "o", "Ï" => "i",
+ "Ï‹" => "u", "ÏŒ" => "o", "Ï" => "u", "Ï" => "o", "Ï" => "b", "Ï‘" => "th",
+ "Ï’" => "U", "Ï“" => "U", "Ï”" => "U", "Ï•" => "ph", "Ï–" => "p", "Ï" => "St",
+ "Ï›" => "st", "Ïœ" => "W", "Ï" => "w", "Ï" => "Q", "ÏŸ" => "q", "Ï " => "Sp",
+ "ϡ" => "sp", "Ϣ" => "Sh", "ϣ" => "sh", "Ϥ" => "F", "ϥ" => "f", "Ϧ" => "Kh",
+ "ϧ" => "kh", "Ϩ" => "H", "ϩ" => "h", "Ϫ" => "G", "ϫ" => "g", "Ϭ" => "CH",
+ "Ï" => "ch", "Ï®" => "Ti", "ϯ" => "ti", "Ï°" => "k", "ϱ" => "r", "ϲ" => "c",
+ "ϳ" => "j", "Đ" => "Io", "Đ‚" => "Dj", "Đƒ" => "Gj", "Đ„" => "Ie", "Đ…" => "Dz",
+ "І" => "I", "Ї" => "Yi", "Đˆ" => "J", "Љ" => "Lj", "Đ" => "Nj", "Đ‹" => "Tsh",
+ "ĐŒ" => "Kj", "Đ" => "I", "Đ" => "U", "Đ" => "Dzh", "Đ" => "A", "Đ‘" => "B",
+ "Đ’" => "V", "Đ“" => "G", "Đ”" => "D", "Đ•" => "Ie", "Đ–" => "Zh", "Đ—" => "Z",
+ "Đ˜" => "I", "Đ™" => "I", "Đ" => "K", "Đ›" => "L", "Đœ" => "M", "Đ" => "N",
+ "Đ" => "O", "ĐŸ" => "P", "Đ " => "R", "Đ¡" => "S", "Đ¢" => "T", "Đ£" => "U",
+ "Ф" => "F", "Đ¥" => "Kh", "Ц" => "Ts", "Ч" => "Ch", "Ш" => "Sh", "Đ©" => "Shch",
+ "Đ«" => "Y", "Đ" => "E", "Đ®" => "Iu", "Đ¯" => "Ia", "Đ°" => "a", "б" => "b",
+ "Đ²" => "v", "Đ³" => "gh", "Đ´" => "d", "е" => "ie", "ж" => "zh", "Đ·" => "z",
+ "и" => "i", "Đ¹" => "i", "Đº" => "k", "Đ»" => "l", "Đ¼" => "m", "Đ½" => "n",
+ "Đ¾" => "o", "Đ¿" => "p", "Ñ€" => "r", "Ñ" => "s", "Ñ‚" => "t", "у" => "u",
+ "ф" => "f", "х" => "kh", "ц" => "ts", "ч" => "ch", "ш" => "sh", "щ" => "shch",
+ "Ñ‹" => "y", "Ñ" => "e", "Ñ" => "iu", "Ñ" => "ia", "Ñ" => "ie", "Ñ‘" => "io",
+ "Ñ’" => "dj", "Ñ“" => "gj", "Ñ”" => "ie", "Ñ•" => "dz", "Ñ–" => "i", "Ñ—" => "yi",
+ "ј" => "j", "Ñ™" => "lj", "Ñ" => "nj", "Ñ›" => "tsh", "Ñœ" => "kj", "Ñ" => "i",
+ "Ñ" => "u", "ÑŸ" => "dzh", "Ñ " => "O", "Ñ¡" => "o", "Ñ¢" => "E", "Ñ£" => "e",
+ "Ѥ" => "Ie", "ѥ" => "ie", "Ѧ" => "E", "ѧ" => "e", "Ѩ" => "Ie", "ѩ" => "ie",
+ "Ѫ" => "O", "Ñ«" => "o", "Ѭ" => "Io", "Ñ" => "io", "Ñ®" => "Ks", "ѯ" => "ks",
+ "Ѱ" => "Ps", "ѱ" => "ps", "Ѳ" => "F", "ѳ" => "f", "Ѵ" => "Y", "ѵ" => "y",
+ "Ѷ" => "Y", "ѷ" => "y", "Ѹ" => "u", "ѹ" => "u", "Ѻ" => "O", "ѻ" => "o",
+ "Ѽ" => "O", "ѽ" => "o", "Ѿ" => "Ot", "Ñ¿" => "ot", "̉€" => "Q", "̉" => "q",
+ "̉‚" => "*1000*", "̉ˆ" => "*100.000*", "̉‰" => "*1.000.000*", "̉" => "R'", "̉" => "r'", "̉" => "G'",
+ "̉‘" => "g'", "̉’" => "G'", "̉“" => "g'", "̉”" => "G'", "̉•" => "g'", "̉–" => "Zh'",
+ "̉—" => "zh'", "̉˜" => "Z'", "̉™" => "z'", "̉" => "K'", "̉›" => "k'", "̉œ" => "K'",
+ "̉" => "k'", "̉" => "K'", "̉Ÿ" => "k'", "̉ " => "K'", "̉¡" => "k'", "̉¢" => "N'",
+ "̉£" => "n'", "̉¤" => "Ng", "̉¥" => "ng", "̉¦" => "P'", "̉§" => "p'", "̉¨" => "Kh",
+ "̉©" => "kh", "̉ª" => "S'", "̉«" => "s'", "̉¬" => "T'", "̉" => "t'", "̉®" => "U",
+ "̉¯" => "u", "̉°" => "U'", "̉±" => "u'", "̉²" => "Kh'", "̉³" => "kh'", "̉´" => "Tts",
+ "̉µ" => "tts", "̉¶" => "Ch'", "̉·" => "ch'", "̉¸" => "Ch'", "̉¹" => "ch'", "̉º" => "H",
+ "̉»" => "h", "̉¼" => "Ch", "̉½" => "ch", "̉¾" => "Ch'", "̉¿" => "ch'", "Ó" => "Zh",
+ "Ó‚" => "zh", "Óƒ" => "K'", "Ó„" => "k'", "Ó‡" => "N'", "Óˆ" => "n'", "Ó‹" => "Ch",
+ "ÓŒ" => "ch", "Ó" => "a", "Ó‘" => "a", "Ó’" => "A", "Ó“" => "a", "Ó”" => "Ae",
+ "Ó•" => "ae", "Ó–" => "Ie", "Ó—" => "ie", "Óœ" => "Zh", "Ó" => "zh", "Ó" => "Z",
+ "ÓŸ" => "z", "Ó " => "Dz", "Ó¡" => "dz", "Ó¢" => "I", "Ó£" => "i", "Ó¤" => "I",
+ "Ó¥" => "i", "Ó¦" => "O", "Ó§" => "o", "Ó¨" => "O", "Ó©" => "o", "Óª" => "O",
+ "Ó«" => "o", "Ó¬" => "E", "Ó" => "e", "Ó®" => "U", "Ó¯" => "u", "Ó°" => "U",
+ "Ó±" => "u", "Ó²" => "U", "Ó³" => "u", "Ó´" => "Ch", "Óµ" => "ch", "Ó¸" => "Y",
+ "Ó¹" => "y", "Ô±" => "A", "Ô²" => "B", "Ô³" => "G", "Ô´" => "D", "Ôµ" => "E",
+ "Ô¶" => "Z", "Ô·" => "E", "Ô¸" => "E", "Ô¹" => "T`", "Ôº" => "Zh", "Ô»" => "I",
+ "Ô¼" => "L", "Ô½" => "Kh", "Ô¾" => "Ts", "Ô¿" => "K", "Ơ€" => "H", "Ơ" => "Dz",
+ "Ơ‚" => "Gh", "Ơƒ" => "Ch", "Ơ„" => "M", "Ơ…" => "Y", "Ơ†" => "N", "Ơ‡" => "Sh",
+ "Ơˆ" => "O", "Ơ‰" => "Ch`", "Ơ" => "P", "Ơ‹" => "J", "ƠŒ" => "Rh", "Ơ" => "S",
+ "Ơ" => "V", "Ơ" => "T", "Ơ" => "R", "Ơ‘" => "Ts`", "Ơ’" => "W", "Ơ“" => "P`",
+ "Ơ”" => "K`", "Ơ•" => "O", "Ơ–" => "F", "Ơ¡" => "a", "Ơ¢" => "b", "Ơ£" => "g",
+ "Ơ¤" => "d", "Ơ¥" => "e", "Ơ¦" => "z", "Ơ§" => "e", "Ơ¨" => "e", "Ơ©" => "t`",
+ "Ơª" => "zh", "Ơ«" => "i", "Ơ¬" => "l", "Ơ" => "kh", "Ơ®" => "ts", "Ơ¯" => "k",
+ "Ơ°" => "h", "Ơ±" => "dz", "Ơ²" => "gh", "Ơ³" => "ch", "Ơ´" => "m", "Ơµ" => "y",
+ "Ơ¶" => "n", "Ơ·" => "sh", "Ơ¸" => "o", "Ơ¹" => "ch`", "Ơº" => "p", "Ơ»" => "j",
+ "Ơ¼" => "rh", "Ơ½" => "s", "Ơ¾" => "v", "Ơ¿" => "t", "Ö€" => "r", "Ö" => "ts`",
+ "Ö‚" => "w", "Öƒ" => "p`", "Ö„" => "k`", "Ö…" => "o", "Ö†" => "f", "Ö‡" => "ew",
+ "Ö±" => "e", "Ö²" => "a", "Ö³" => "o", "Ö´" => "i", "Öµ" => "e", "Ö¶" => "e",
+ "ַ" => "a", "ָ" => "a", "ֹ" => "o", "ֻ" => "u", "ב" => "b", "ג" => "g",
+ "ד" => "d", "ה" => "h", "ו" => "v", "ז" => "z", "ח" => "kh", "ט" => "t",
+ "×™" => "y", "×" => "k", "×›" => "k", "ל" => "l", "×" => "m", "×" => "m",
+ "ן" => "n", "× " => "n", "ס" => "s", "×£" => "p", "פ" => "p", "×¥" => "ts",
+ "צ" => "ts", "ק" => "q", "ר" => "r", "ש" => "sh", "ת" => "t", "װ" => "V",
+ "ױ" => "oy", "ײ" => "i", "آ" => "a", "ؤ" => "w'", "ئ" => "y'", "ب" => "b",
+ "ت" => "t", "Ø«" => "th", "ج" => "j", "Ø" => "H", "Ø®" => "kh", "د" => "d",
+ "ذ" => "dh", "ر" => "r", "ز" => "z", "س" => "s", "ش" => "sh", "ص" => "S",
+ "ض" => "D", "Ø·" => "T", "ظ" => "Z", "غ" => "G", "Ù" => "f", "Ù‚" => "q",
+ "Ùƒ" => "k", "Ù„" => "l", "Ù…" => "m", "Ù†" => "n", "Ù‡" => "h", "Ùˆ" => "w",
+ "Ù" => "y", "Ù‹" => "an", "ÙŒ" => "un", "Ù" => "in", "Ù" => "a", "Ù" => "u",
+ "Ù" => "i", "Ù‘" => "W", "Ù¡" => "1", "Ù¢" => "2", "Ù£" => "3", "Ù¤" => "4",
+ "Ù¥" => "5", "Ù¦" => "6", "Ù§" => "7", "Ù¨" => "8", "Ù©" => "9", "Ù¶" => "'w",
+ "Ù·" => "'u", "Ù¸" => "'y", "Ù¹" => "tt", "Ùº" => "tth", "Ù»" => "b", "Ù¼" => "t",
+ "Ù½" => "T", "Ù¾" => "p", "Ù¿" => "th", "Ú€" => "bh", "Ú" => "'h", "Ú‚" => "H",
+ "Úƒ" => "ny", "Ú„" => "dy", "Ú…" => "H", "Ú†" => "ch", "Ú‡" => "cch", "Úˆ" => "dd",
+ "Ú‰" => "D", "Ú" => "D", "Ú‹" => "Dt", "ÚŒ" => "dh", "Ú" => "ddh", "Ú" => "d",
+ "Ú" => "D", "Ú" => "D", "Ú‘" => "rr", "Ú’" => "R", "Ú“" => "R", "Ú”" => "R",
+ "Ú•" => "R", "Ú–" => "R", "Ú—" => "R", "Ú˜" => "j", "Ú™" => "R", "Ú" => "S",
+ "Ú›" => "S", "Úœ" => "S", "Ú" => "S", "Ú" => "S", "ÚŸ" => "T", "Ú " => "GH",
+ "Ú¡" => "F", "Ú¢" => "F", "Ú£" => "F", "Ú¤" => "v", "Ú¥" => "f", "Ú¦" => "ph",
+ "Ú§" => "Q", "Ú¨" => "Q", "Ú©" => "kh", "Úª" => "k", "Ú«" => "K", "Ú¬" => "K",
+ "Ú" => "ng", "Ú®" => "K", "Ú¯" => "g", "Ú°" => "G", "Ú±" => "N", "Ú²" => "G",
+ "Ú³" => "G", "Ú´" => "G", "Úµ" => "L", "Ú¶" => "L", "Ú·" => "L", "Ú¸" => "L",
+ "Ú¹" => "N", "Úº" => "N", "Ú»" => "N", "Ú¼" => "N", "Ú½" => "N", "Ú¾" => "h",
+ "Ú¿" => "Ch", "Û€" => "hy", "Û" => "h", "Û‚" => "H", "Û„" => "W", "Û…" => "oe",
+ "Û†" => "oe", "Û‡" => "u", "Ûˆ" => "yu", "Û‰" => "yu", "Û" => "W", "Û‹" => "v",
+ "ÛŒ" => "y", "Û" => "Y", "Û" => "Y", "Û" => "W", "Û’" => "y", "Û“" => "y'",
+ "Û•" => "ae", "Û±" => "1", "Û²" => "2", "Û³" => "3", "Û´" => "4", "Ûµ" => "5",
+ "Û¶" => "6", "Û·" => "7", "Û¸" => "8", "Û¹" => "9", "Ûº" => "Sh", "Û»" => "D",
+ "Û¼" => "Gh", "Û¾" => "+m", "Ü’" => "b", "Ü“" => "g", "Ü”" => "g", "Ü•" => "d",
+ "Ü–" => "d", "Ü—" => "h", "ܘ" => "w", "Ü™" => "z", "Ü" => "H", "Ü›" => "t",
+ "Üœ" => "t", "Ü" => "y", "Ü" => "yh", "ÜŸ" => "k", "Ü " => "l", "Ü¡" => "m",
+ "ܢ" => "n", "ܣ" => "s", "ܤ" => "s", "ܦ" => "p", "ܧ" => "p", "ܨ" => "S",
+ "ܩ" => "q", "ܪ" => "r", "ܫ" => "sh", "ܬ" => "t", "ܰ" => "a", "ܱ" => "a",
+ "ܲ" => "a", "ܳ" => "A", "ܴ" => "A", "ܵ" => "A", "ܶ" => "e", "ܷ" => "e",
+ "ܸ" => "e", "ܹ" => "E", "ܺ" => "i", "ܻ" => "i", "ܼ" => "u", "ܽ" => "u",
+ "ܾ" => "u", "Ü¿" => "o", "Ư…" => "X", "Ư†" => "Q", "̃€" => "h", "̃" => "sh",
+ "̃‚" => "n", "̃ƒ" => "r", "̃„" => "b", "̃…" => "L", "̃†" => "k", "̃ˆ" => "v",
+ "̃‰" => "m", "̃" => "f", "̃‹" => "dh", "̃Œ" => "th", "̃" => "l", "̃" => "g",
+ "̃" => "ny", "̃" => "s", "̃‘" => "d", "̃’" => "z", "̃“" => "t", "̃”" => "y",
+ "̃•" => "p", "̃–" => "j", "̃—" => "ch", "̃˜" => "tt", "̃™" => "hh", "̃" => "kh",
+ "̃›" => "th", "̃œ" => "z", "̃" => "sh", "̃" => "s", "̃Ÿ" => "d", "̃ " => "t",
+ "̃¡" => "z", "̃£" => "gh", "̃¤" => "q", "̃¥" => "w", "̃¦" => "a", "̃§" => "aa",
+ "̃¨" => "i", "̃©" => "ee", "̃ª" => "u", "̃«" => "oo", "̃¬" => "e", "̃" => "ey",
+ "̃®" => "o", "̃¯" => "oa", "à¤" => "N", "ं" => "N", "ः" => "H", "अ" => "a",
+ "आ" => "aa", "इ" => "i", "ई" => "ii", "उ" => "u", "à¤" => "uu", "ऋ" => "R",
+ "ऌ" => "L", "à¤" => "eN", "à¤" => "e", "à¤" => "e", "à¤" => "ai", "ऑ" => "oN",
+ "ऒ" => "o", "ओ" => "o", "औ" => "au", "क" => "k", "ख" => "kh", "ग" => "g",
+ "घ" => "gh", "ङ" => "ng", "à¤" => "c", "छ" => "ch", "ज" => "j", "à¤" => "jh",
+ "à¤" => "ny", "ट" => "tt", "ठ" => "tth", "ड" => "dd", "ढ" => "ddh", "ण" => "nn",
+ "त" => "t", "थ" => "th", "द" => "d", "ध" => "dh", "न" => "n", "ऩ" => "nnn",
+ "प" => "p", "फ" => "ph", "ब" => "b", "à¤" => "bh", "म" => "m", "य" => "y",
+ "र" => "r", "ऱ" => "rr", "ल" => "l", "ळ" => "l", "ऴ" => "lll", "व" => "v",
+ "श" => "sh", "ष" => "ss", "स" => "s", "ह" => "h", "ा" => "aa", "ि" => "i",
+ "ी" => "ii", "à¥" => "u", "ू" => "uu", "ृ" => "R", "ॄ" => "RR", "ॅ" => "eN",
+ "ॆ" => "e", "े" => "e", "ै" => "ai", "ॉ" => "oN", "à¥" => "o", "ो" => "o",
+ "ौ" => "au", "à¥" => "AUM", "क़" => "q", "ख़" => "khh", "à¥" => "ghh", "ज़" => "z",
+ "ड़" => "dddh", "à¥" => "rh", "à¥" => "f", "य़" => "yy", "ॠ" => "RR", "ॡ" => "LL",
+ "ॢ" => "L", "ॣ" => "LL", "१" => "1", "२" => "2", "३" => "3", "४" => "4",
+ "५" => "5", "६" => "6", "à¥" => "7", "८" => "8", "९" => "9", "à¦" => "N",
+ "ং" => "N", "ঃ" => "H", "অ" => "a", "আ" => "aa", "ই" => "i", "ঈ" => "ii",
+ "উ" => "u", "à¦" => "uu", "ঋ" => "R", "ঌ" => "RR", "à¦" => "e", "à¦" => "ai",
+ "ও" => "o", "ঔ" => "au", "ক" => "k", "খ" => "kh", "গ" => "g", "ঘ" => "gh",
+ "ঙ" => "ng", "à¦" => "c", "ছ" => "ch", "জ" => "j", "à¦" => "jh", "à¦" => "ny",
+ "ট" => "tt", "ঠ" => "tth", "ড" => "dd", "ঢ" => "ddh", "ণ" => "nn", "ত" => "t",
+ "থ" => "th", "দ" => "d", "ধ" => "dh", "ন" => "n", "প" => "p", "ফ" => "ph",
+ "ব" => "b", "à¦" => "bh", "ম" => "m", "য" => "y", "র" => "r", "ল" => "l",
+ "শ" => "sh", "ষ" => "ss", "স" => "s", "হ" => "h", "া" => "aa", "ি" => "i",
+ "ী" => "ii", "à§" => "u", "ূ" => "uu", "ৃ" => "R", "ৄ" => "RR", "ে" => "e",
+ "ৈ" => "ai", "ো" => "o", "ৌ" => "au", "ড়" => "rr", "à§" => "rh", "য়" => "yy",
+ "ৠ" => "RR", "ৡ" => "LL", "ৢ" => "L", "ৣ" => "LL", "১" => "1", "২" => "2",
+ "৩" => "3", "৪" => "4", "৫" => "5", "৬" => "6", "à§" => "7", "৮" => "8",
+ "৯" => "9", "ৰ" => "r'", "ৱ" => "r`", "৲" => "Rs", "৳" => "Rs", "৴" => "1",
+ "৵" => "2", "৶" => "3", "৷" => "4", "৹" => "16", "ਂ" => "N", "ਅ" => "a",
+ "ਆ" => "aa", "ਇ" => "i", "ਈ" => "ii", "ਉ" => "u", "à¨" => "uu", "à¨" => "ee",
+ "à¨" => "ai", "ਓ" => "oo", "ਔ" => "au", "ਕ" => "k", "ਖ" => "kh", "ਗ" => "g",
+ "ਘ" => "gh", "ਙ" => "ng", "à¨" => "c", "ਛ" => "ch", "ਜ" => "j", "à¨" => "jh",
+ "à¨" => "ny", "ਟ" => "tt", "ਠ" => "tth", "ਡ" => "dd", "ਢ" => "ddh", "ਣ" => "nn",
+ "ਤ" => "t", "ਥ" => "th", "ਦ" => "d", "ਧ" => "dh", "ਨ" => "n", "ਪ" => "p",
+ "ਫ" => "ph", "ਬ" => "b", "à¨" => "bb", "ਮ" => "m", "ਯ" => "y", "ਰ" => "r",
+ "ਲ" => "l", "ਲ਼" => "ll", "ਵ" => "v", "ਸ਼" => "sh", "ਸ" => "s", "ਹ" => "h",
+ "ਾ" => "aa", "ਿ" => "i", "à©€" => "ii", "à©" => "u", "à©‚" => "uu", "ੇ" => "ee",
+ "ੈ" => "ai", "à©‹" => "oo", "à©Œ" => "au", "à©™" => "khh", "à©" => "ghh", "à©›" => "z",
+ "à©œ" => "rr", "à©" => "f", "੧" => "1", "੨" => "2", "à©©" => "3", "੪" => "4",
+ "à©«" => "5", "੬" => "6", "à©" => "7", "à©®" => "8", "੯" => "9", "à©°" => "N",
+ "ੱ" => "H", "à©´" => "G.E.O.", "àª" => "N", "ં" => "N", "ઃ" => "H", "અ" => "a",
+ "આ" => "aa", "ઇ" => "i", "ઈ" => "ii", "ઉ" => "u", "àª" => "uu", "ઋ" => "R",
+ "àª" => "eN", "àª" => "e", "àª" => "ai", "ઑ" => "oN", "ઓ" => "o", "ઔ" => "au",
+ "ક" => "k", "ખ" => "kh", "ગ" => "g", "ઘ" => "gh", "ઙ" => "ng", "àª" => "c",
+ "છ" => "ch", "જ" => "j", "àª" => "jh", "àª" => "ny", "ટ" => "tt", "ઠ" => "tth",
+ "ડ" => "dd", "ઢ" => "ddh", "ણ" => "nn", "ત" => "t", "થ" => "th", "દ" => "d",
+ "ધ" => "dh", "ન" => "n", "પ" => "p", "ફ" => "ph", "બ" => "b", "àª" => "bh",
+ "મ" => "m", "ય" => "ya", "ર" => "r", "લ" => "l", "ળ" => "ll", "વ" => "v",
+ "શ" => "sh", "ષ" => "ss", "સ" => "s", "હ" => "h", "ા" => "aa", "િ" => "i",
+ "à«€" => "ii", "à«" => "u", "à«‚" => "uu", "ૃ" => "R", "à«„" => "RR", "à«…" => "eN",
+ "ે" => "e", "ૈ" => "ai", "ૉ" => "oN", "à«‹" => "o", "à«Œ" => "au", "à«" => "AUM",
+ "ૠ" => "RR", "૧" => "1", "૨" => "2", "૩" => "3", "૪" => "4", "૫" => "5",
+ "૬" => "6", "à«" => "7", "à«®" => "8", "૯" => "9", "à¬" => "N", "ଂ" => "N",
+ "ଃ" => "H", "ଅ" => "a", "ଆ" => "aa", "ଇ" => "i", "ଈ" => "ii", "ଉ" => "u",
+ "à¬" => "uu", "ଋ" => "R", "ଌ" => "L", "à¬" => "e", "à¬" => "ai", "ଓ" => "o",
+ "ଔ" => "au", "କ" => "k", "ଖ" => "kh", "ଗ" => "g", "ଘ" => "gh", "ଙ" => "ng",
+ "à¬" => "c", "ଛ" => "ch", "ଜ" => "j", "à¬" => "jh", "à¬" => "ny", "ଟ" => "tt",
+ "ଠ" => "tth", "ଡ" => "dd", "ଢ" => "ddh", "ଣ" => "nn", "ତ" => "t", "ଥ" => "th",
+ "ଦ" => "d", "ଧ" => "dh", "ନ" => "n", "ପ" => "p", "ଫ" => "ph", "ବ" => "b",
+ "à¬" => "bh", "ମ" => "m", "ଯ" => "y", "ର" => "r", "ଲ" => "l", "ଳ" => "ll",
+ "ଶ" => "sh", "ଷ" => "ss", "ସ" => "s", "ହ" => "h", "ା" => "aa", "ି" => "i",
+ "à€" => "ii", "à" => "u", "à‚" => "uu", "àƒ" => "R", "à‡" => "e", "àˆ" => "ai",
+ "à‹" => "o", "àŒ" => "au", "àœ" => "rr", "à" => "rh", "àŸ" => "yy", "à " => "RR",
+ "à¡" => "LL", "à§" => "1", "à¨" => "2", "à©" => "3", "àª" => "4", "à«" => "5",
+ "à¬" => "6", "à" => "7", "à®" => "8", "à¯" => "9", "ஂ" => "N", "ஃ" => "H",
+ "à®…" => "a", "ஆ" => "aa", "இ" => "i", "ஈ" => "ii", "உ" => "u", "à®" => "uu",
+ "à®" => "e", "à®" => "ee", "à®" => "ai", "à®’" => "o", "ஓ" => "oo", "à®”" => "au",
+ "க" => "k", "à®™" => "ng", "à®" => "c", "ஜ" => "j", "à®" => "ny", "ட" => "tt",
+ "ண" => "nn", "த" => "t", "ந" => "n", "ன" => "nnn", "ப" => "p", "ம" => "m",
+ "ய" => "y", "ர" => "r", "ற" => "rr", "ல" => "l", "ள" => "ll", "ழ" => "lll",
+ "வ" => "v", "ஷ" => "ss", "ஸ" => "s", "ஹ" => "h", "ா" => "aa", "ி" => "i",
+ "ீ" => "ii", "à¯" => "u", "ூ" => "uu", "ெ" => "e", "ே" => "ee", "ை" => "ai",
+ "à¯" => "o", "ோ" => "oo", "ௌ" => "au", "௧" => "1", "௨" => "2", "௩" => "3",
+ "௪" => "4", "௫" => "5", "௬" => "6", "à¯" => "7", "௮" => "8", "௯" => "9",
+ "௰" => "+10+", "௱" => "+100+", "௲" => "+1000+", "à°" => "N", "à°‚" => "N", "à°ƒ" => "H",
+ "à°…" => "a", "à°†" => "aa", "à°‡" => "i", "à°ˆ" => "ii", "à°‰" => "u", "à°" => "uu",
+ "à°‹" => "R", "à°Œ" => "L", "à°" => "e", "à°" => "ee", "à°" => "ai", "à°’" => "o",
+ "à°“" => "oo", "à°”" => "au", "à°•" => "k", "à°–" => "kh", "à°—" => "g", "à°˜" => "gh",
+ "à°™" => "ng", "à°" => "c", "à°›" => "ch", "à°œ" => "j", "à°" => "jh", "à°" => "ny",
+ "à°Ÿ" => "tt", "à° " => "tth", "à°¡" => "dd", "à°¢" => "ddh", "à°£" => "nn", "à°¤" => "t",
+ "à°¥" => "th", "à°¦" => "d", "à°§" => "dh", "à°¨" => "n", "à°ª" => "p", "à°«" => "ph",
+ "à°¬" => "b", "à°" => "bh", "à°®" => "m", "à°¯" => "y", "à°°" => "r", "à°±" => "rr",
+ "à°²" => "l", "à°³" => "ll", "à°µ" => "v", "à°¶" => "sh", "à°·" => "ss", "à°¸" => "s",
+ "à°¹" => "h", "à°¾" => "aa", "à°¿" => "i", "à±€" => "ii", "à±" => "u", "ూ" => "uu",
+ "ృ" => "R", "ౄ" => "RR", "ె" => "e", "ే" => "ee", "ై" => "ai", "à±" => "o",
+ "ో" => "oo", "ౌ" => "au", "ౠ" => "RR", "ౡ" => "LL", "౧" => "1", "౨" => "2",
+ "౩" => "3", "౪" => "4", "౫" => "5", "౬" => "6", "à±" => "7", "à±®" => "8",
+ "౯" => "9", "ಂ" => "N", "ಃ" => "H", "ಅ" => "a", "ಆ" => "aa", "ಇ" => "i",
+ "ಈ" => "ii", "ಉ" => "u", "à²" => "uu", "ಋ" => "R", "ಌ" => "L", "à²" => "e",
+ "à²" => "ee", "à²" => "ai", "ಒ" => "o", "ಓ" => "oo", "ಔ" => "au", "ಕ" => "k",
+ "ಖ" => "kh", "ಗ" => "g", "ಘ" => "gh", "ಙ" => "ng", "à²" => "c", "ಛ" => "ch",
+ "ಜ" => "j", "à²" => "jh", "à²" => "ny", "ಟ" => "tt", "ಠ" => "tth", "ಡ" => "dd",
+ "ಢ" => "ddh", "ಣ" => "nn", "ತ" => "t", "ಥ" => "th", "ದ" => "d", "ಧ" => "dh",
+ "ನ" => "n", "ಪ" => "p", "ಫ" => "ph", "ಬ" => "b", "à²" => "bh", "ಮ" => "m",
+ "ಯ" => "y", "ರ" => "r", "ಱ" => "rr", "ಲ" => "l", "ಳ" => "ll", "ವ" => "v",
+ "ಶ" => "sh", "ಷ" => "ss", "ಸ" => "s", "ಹ" => "h", "ಾ" => "aa", "ಿ" => "i",
+ "à³€" => "ii", "à³" => "u", "ೂ" => "uu", "ೃ" => "R", "ೄ" => "RR", "ೆ" => "e",
+ "ೇ" => "ee", "ೈ" => "ai", "à³" => "o", "ೋ" => "oo", "ೌ" => "au", "à³" => "lll",
+ "ೠ" => "RR", "ೡ" => "LL", "೧" => "1", "೨" => "2", "೩" => "3", "೪" => "4",
+ "೫" => "5", "೬" => "6", "à³" => "7", "à³®" => "8", "೯" => "9", "à´‚" => "N",
+ "à´ƒ" => "H", "à´…" => "a", "à´†" => "aa", "à´‡" => "i", "à´ˆ" => "ii", "à´‰" => "u",
+ "à´" => "uu", "à´‹" => "R", "à´Œ" => "L", "à´" => "e", "à´" => "ee", "à´" => "ai",
+ "à´’" => "o", "à´“" => "oo", "à´”" => "au", "à´•" => "k", "à´–" => "kh", "à´—" => "g",
+ "à´˜" => "gh", "à´™" => "ng", "à´" => "c", "à´›" => "ch", "à´œ" => "j", "à´" => "jh",
+ "à´" => "ny", "à´Ÿ" => "tt", "à´ " => "tth", "à´¡" => "dd", "à´¢" => "ddh", "à´£" => "nn",
+ "à´¤" => "t", "à´¥" => "th", "à´¦" => "d", "à´§" => "dh", "à´¨" => "n", "à´ª" => "p",
+ "à´«" => "ph", "à´¬" => "b", "à´" => "bh", "à´®" => "m", "à´¯" => "y", "à´°" => "r",
+ "à´±" => "rr", "à´²" => "l", "à´³" => "ll", "à´´" => "lll", "à´µ" => "v", "à´¶" => "sh",
+ "ഷ" => "ss", "സ" => "s", "ഹ" => "h", "ാ" => "aa", "ി" => "i", "ീ" => "ii",
+ "àµ" => "u", "ൂ" => "uu", "ൃ" => "R", "െ" => "e", "േ" => "ee", "ൈ" => "ai",
+ "àµ" => "o", "ോ" => "oo", "ൌ" => "au", "ൠ" => "RR", "ൡ" => "LL", "൧" => "1",
+ "൨" => "2", "൩" => "3", "൪" => "4", "൫" => "5", "൬" => "6", "àµ" => "7",
+ "൮" => "8", "൯" => "9", "ං" => "N", "ඃ" => "H", "අ" => "a", "ආ" => "aa",
+ "ඇ" => "ae", "ඈ" => "aae", "ඉ" => "i", "à¶" => "ii", "උ" => "u", "ඌ" => "uu",
+ "à¶" => "R", "à¶" => "RR", "à¶" => "L", "à¶" => "LL", "එ" => "e", "ඒ" => "ee",
+ "ඓ" => "ai", "ඔ" => "o", "ඕ" => "oo", "ඖ" => "au", "à¶" => "k", "ඛ" => "kh",
+ "ග" => "g", "à¶" => "gh", "à¶" => "ng", "ඟ" => "nng", "ච" => "c", "ඡ" => "ch",
+ "ජ" => "j", "ඣ" => "jh", "ඤ" => "ny", "ඥ" => "jny", "ඦ" => "nyj", "ට" => "tt",
+ "ඨ" => "tth", "ඩ" => "dd", "ඪ" => "ddh", "ණ" => "nn", "ඬ" => "nndd", "à¶" => "t",
+ "ථ" => "th", "ද" => "d", "ධ" => "dh", "න" => "n", "ඳ" => "nd", "ප" => "p",
+ "ඵ" => "ph", "බ" => "b", "භ" => "bh", "ම" => "m", "ඹ" => "mb", "ය" => "y",
+ "ර" => "r", "ල" => "l", "à·€" => "v", "à·" => "sh", "à·‚" => "ss", "à·ƒ" => "s",
+ "à·„" => "h", "à·…" => "ll", "à·†" => "f", "à·" => "aa", "à·" => "ae", "à·‘" => "aae",
+ "à·’" => "i", "à·“" => "ii", "à·”" => "u", "à·–" => "uu", "à·˜" => "R", "à·™" => "e",
+ "à·" => "ee", "à·›" => "ai", "à·œ" => "o", "à·" => "oo", "à·" => "au", "à·Ÿ" => "L",
+ "à·²" => "RR", "à·³" => "LL", "à¸" => "k", "ข" => "kh", "ฃ" => "kh", "ค" => "kh",
+ "ฅ" => "kh", "ฆ" => "kh", "ง" => "ng", "จ" => "cch", "ฉ" => "ch", "à¸" => "ch",
+ "ซ" => "ch", "ฌ" => "ch", "à¸" => "y", "à¸" => "d", "à¸" => "t", "à¸" => "th",
+ "ฑ" => "th", "ฒ" => "th", "ณ" => "n", "ด" => "d", "ต" => "t", "ถ" => "th",
+ "ท" => "th", "ธ" => "th", "น" => "n", "à¸" => "b", "ป" => "p", "ผ" => "ph",
+ "à¸" => "f", "à¸" => "ph", "ฟ" => "f", "ภ" => "ph", "ม" => "m", "ย" => "y",
+ "ร" => "r", "ฤ" => "R", "ล" => "l", "ฦ" => "L", "ว" => "w", "ศ" => "s",
+ "ษ" => "s", "ส" => "s", "ห" => "h", "ฬ" => "l", "ฮ" => "h", "ะ" => "a",
+ "ั" => "a", "า" => "aa", "ำ" => "am", "ิ" => "i", "ี" => "ii", "ึ" => "ue",
+ "ื" => "uue", "ุ" => "u", "ู" => "uu", "฿" => "Bh.", "เ" => "e", "à¹" => "ae",
+ "โ" => "o", "ใ" => "ai", "ไ" => "ai", "ๅ" => "ao", "à¹" => "M", "๑" => "1",
+ "๒" => "2", "๓" => "3", "๔" => "4", "๕" => "5", "๖" => "6", "๗" => "7",
+ "๘" => "8", "๙" => "9", "àº" => "k", "ຂ" => "kh", "ຄ" => "kh", "ງ" => "ng",
+ "ຈ" => "ch", "àº" => "s", "àº" => "ny", "ດ" => "d", "ຕ" => "h", "ຖ" => "th",
+ "ທ" => "th", "ນ" => "n", "àº" => "b", "ປ" => "p", "ຜ" => "ph", "àº" => "f",
+ "àº" => "ph", "ຟ" => "f", "ມ" => "m", "ຢ" => "y", "ຣ" => "r", "ລ" => "l",
+ "ວ" => "w", "ສ" => "s", "ຫ" => "h", "ະ" => "a", "າ" => "aa", "ຳ" => "am",
+ "ິ" => "i", "ີ" => "ii", "ຶ" => "y", "ື" => "yy", "ຸ" => "u", "ູ" => "uu",
+ "ົ" => "o", "ຼ" => "l", "ຽ" => "ny", "ເ" => "e", "à»" => "ei", "ໂ" => "o",
+ "ໃ" => "ay", "ໄ" => "ai", "à»" => "M", "໑" => "1", "à»’" => "2", "໓" => "3",
+ "໔" => "4", "໕" => "5", "໖" => "6", "໗" => "7", "໘" => "8", "໙" => "9",
+ "ໜ" => "hn", "à»" => "hm", "༑" => "X", "༒" => "XX", "༓" => "X", "༡" => "1",
+ "༢" => "2", "༣" => "3", "༤" => "4", "༥" => "5", "༦" => "6", "༧" => "7",
+ "༨" => "8", "༩" => "9", "༪" => ".5", "༫" => "1.5", "༬" => "2.5", "à¼" => "3.5",
+ "༮" => "4.5", "༯" => "5.5", "༰" => "6.5", "༱" => "7.5", "༲" => "8.5", "༳" => "-.5",
+ "ཀ" => "k", "à½" => "kh", "ག" => "g", "གྷ" => "gh", "ང" => "ng", "ཅ" => "c",
+ "ཆ" => "ch", "ཇ" => "j", "ཉ" => "ny", "à½" => "tt", "ཋ" => "tth", "ཌ" => "dd",
+ "à½" => "ddh", "à½" => "nn", "à½" => "t", "à½" => "th", "ད" => "d", "དྷ" => "dh",
+ "ན" => "n", "པ" => "p", "ཕ" => "ph", "བ" => "b", "བྷ" => "bh", "མ" => "m",
+ "ཙ" => "ts", "à½" => "tsh", "ཛ" => "dz", "ཛྷ" => "dzh", "à½" => "w", "à½" => "zh",
+ "ཟ" => "z", "ཡ" => "y", "ར" => "r", "ལ" => "l", "ཤ" => "sh", "ཥ" => "ssh",
+ "ས" => "s", "ཧ" => "h", "ཨ" => "a", "ཀྵ" => "kss", "ཪ" => "r", "ཱ" => "aa",
+ "ི" => "i", "ཱི" => "ii", "ུ" => "u", "ཱུ" => "uu", "ྲྀ" => "R", "ཷ" => "RR",
+ "ླྀ" => "L", "ཹ" => "LL", "ེ" => "e", "ཻ" => "ee", "ོ" => "o", "ཽ" => "oo",
+ "ཾ" => "M", "ཿ" => "H", "ྀ" => "i", "à¾" => "ii", "à¾" => "k", "ྑ" => "kh",
+ "ྒ" => "g", "ྒྷ" => "gh", "ྔ" => "ng", "ྕ" => "c", "ྖ" => "ch", "ྗ" => "j",
+ "ྙ" => "ny", "à¾" => "tt", "ྛ" => "tth", "ྜ" => "dd", "à¾" => "ddh", "à¾" => "nn",
+ "ྟ" => "t", "ྠ" => "th", "ྡ" => "d", "ྡྷ" => "dh", "ྣ" => "n", "ྤ" => "p",
+ "ྥ" => "ph", "ྦ" => "b", "ྦྷ" => "bh", "ྨ" => "m", "ྩ" => "ts", "ྪ" => "tsh",
+ "ྫ" => "dz", "ྫྷ" => "dzh", "à¾" => "w", "ྮ" => "zh", "ྯ" => "z", "ྱ" => "y",
+ "ྲ" => "r", "ླ" => "l", "ྴ" => "sh", "ྵ" => "ss", "ྶ" => "s", "ྷ" => "h",
+ "ྸ" => "a", "ྐྵ" => "kss", "ྺ" => "w", "ྻ" => "y", "ྼ" => "r", "྾" => "X",
+ "྿" => ":X:", "à¿€" => "O", "à¿" => "o", "à¿‚" => "o", "࿃" => "(O)", "á€" => "kh",
+ "ဂ" => "g", "ဃ" => "gh", "င" => "ng", "စ" => "c", "ဆ" => "ch", "ဇ" => "j",
+ "ဈ" => "jh", "ဉ" => "ny", "á€" => "nny", "ဋ" => "tt", "ဌ" => "tth", "á€" => "dd",
+ "á€" => "ddh", "á€" => "nn", "á€" => "tt", "ထ" => "th", "ဒ" => "d", "ဓ" => "dh",
+ "န" => "n", "ပ" => "p", "ဖ" => "ph", "ဗ" => "b", "ဘ" => "bh", "မ" => "m",
+ "á€" => "y", "ရ" => "r", "လ" => "l", "á€" => "w", "á€" => "s", "ဟ" => "h",
+ "ဠ" => "ll", "အ" => "a", "ဣ" => "i", "ဤ" => "ii", "ဥ" => "u", "ဦ" => "uu",
+ "ဧ" => "e", "ဩ" => "o", "ဪ" => "au", "ာ" => "aa", "á€" => "i", "ီ" => "ii",
+ "ု" => "u", "ူ" => "uu", "ေ" => "e", "ဲ" => "ai", "ံ" => "N", "á" => "1",
+ "á‚" => "2", "áƒ" => "3", "á„" => "4", "á…" => "5", "á†" => "6", "á‡" => "7",
+ "áˆ" => "8", "á‰" => "9", "áŒ" => "n*", "á" => "r*", "á" => "l*", "á" => "e*",
+ "á" => "sh", "á‘" => "ss", "á’" => "R", "á“" => "RR", "á”" => "L", "á•" => "LL",
+ "á–" => "R", "á—" => "RR", "á˜" => "L", "á™" => "LL", "á‚ " => "A", "á‚¡" => "B",
+ "Ⴂ" => "G", "Ⴃ" => "D", "Ⴄ" => "E", "Ⴅ" => "V", "Ⴆ" => "Z", "Ⴇ" => "T`",
+ "Ⴈ" => "I", "á‚©" => "K", "Ⴊ" => "L", "á‚«" => "M", "Ⴌ" => "N", "á‚" => "O",
+ "Ⴎ" => "P", "Ⴏ" => "Zh", "Ⴐ" => "R", "Ⴑ" => "S", "Ⴒ" => "T", "Ⴓ" => "U",
+ "Ⴔ" => "P`", "Ⴕ" => "K`", "Ⴖ" => "G'", "Ⴗ" => "Q", "Ⴘ" => "Sh", "Ⴙ" => "Ch`",
+ "Ⴚ" => "C`", "Ⴛ" => "Z'", "Ⴜ" => "C", "Ⴝ" => "Ch", "Ⴞ" => "X", "Ⴟ" => "J",
+ "Ⴠ" => "H", "áƒ" => "E", "Ⴢ" => "Y", "Ⴣ" => "W", "Ⴤ" => "Xh", "Ⴥ" => "OE",
+ "áƒ" => "a", "ბ" => "b", "გ" => "g", "დ" => "d", "ე" => "e", "ვ" => "v",
+ "ზ" => "z", "თ" => "t`", "ი" => "i", "კ" => "k", "áƒ" => "l", "მ" => "m",
+ "ნ" => "n", "áƒ" => "o", "áƒ" => "p", "ჟ" => "zh", "რ" => "r", "ს" => "s",
+ "ტ" => "t", "უ" => "u", "ფ" => "p`", "ქ" => "k`", "ღ" => "g'", "ყ" => "q",
+ "შ" => "sh", "ჩ" => "ch`", "ც" => "c`", "ძ" => "z'", "წ" => "c", "áƒ" => "ch",
+ "ხ" => "x", "ჯ" => "j", "ჰ" => "h", "ჱ" => "e", "ჲ" => "y", "ჳ" => "w",
+ "ჴ" => "xh", "ჵ" => "oe", "ჶ" => "f", "á„" => "gg", "á„‚" => "n", "ᄃ" => "d",
+ "ᄄ" => "dd", "ᄅ" => "r", "ᄆ" => "m", "ᄇ" => "b", "ᄈ" => "bb", "ᄉ" => "s",
+ "á„" => "ss", "á„Œ" => "j", "á„" => "jj", "á„" => "c", "á„" => "k", "á„" => "t",
+ "á„‘" => "p", "á„’" => "h", "á„“" => "ng", "á„”" => "nn", "á„•" => "nd", "á„–" => "nb",
+ "á„—" => "dg", "ᄘ" => "rn", "á„™" => "rr", "á„" => "rh", "á„›" => "rN", "á„œ" => "mb",
+ "á„" => "mN", "á„" => "bg", "á„Ÿ" => "bn", "á„¡" => "bs", "á„¢" => "bsg", "á„£" => "bst",
+ "ᄤ" => "bsb", "ᄥ" => "bss", "ᄦ" => "bsj", "ᄧ" => "bj", "ᄨ" => "bc", "ᄩ" => "bt",
+ "ᄪ" => "bp", "á„«" => "bN", "ᄬ" => "bbN", "á„" => "sg", "á„®" => "sn", "ᄯ" => "sd",
+ "ᄰ" => "sr", "ᄱ" => "sm", "ᄲ" => "sb", "ᄳ" => "sbg", "ᄴ" => "sss", "ᄵ" => "s",
+ "ᄶ" => "sj", "ᄷ" => "sc", "ᄸ" => "sk", "ᄹ" => "st", "ᄺ" => "sp", "ᄻ" => "sh",
+ "á…€" => "Z", "á…" => "g", "á…‚" => "d", "á…ƒ" => "m", "á…„" => "b", "á……" => "s",
+ "á…†" => "Z", "á…ˆ" => "j", "á…‰" => "c", "á…" => "t", "á…‹" => "p", "á…Œ" => "N",
+ "á…" => "j", "á…’" => "ck", "á…“" => "ch", "á…–" => "pb", "á…—" => "pN", "á…˜" => "hh",
+ "á…™" => "Q", "á…¡" => "a", "á…¢" => "ae", "á…£" => "ya", "á…¤" => "yae", "á…¥" => "eo",
+ "á…¦" => "e", "á…§" => "yeo", "á…¨" => "ye", "á…©" => "o", "á…ª" => "wa", "á…«" => "wae",
+ "á…¬" => "oe", "á…" => "yo", "á…®" => "u", "á…¯" => "weo", "á…°" => "we", "á…±" => "wi",
+ "á…²" => "yu", "á…³" => "eu", "á…´" => "yi", "á…µ" => "i", "á…¶" => "a-o", "á…·" => "a-u",
+ "á…¸" => "ya-o", "á…¹" => "ya-yo", "á…º" => "eo-o", "á…»" => "eo-u", "á…¼" => "eo-eu", "á…½" => "yeo-o",
+ "á…¾" => "yeo-u", "á…¿" => "o-eo", "ᆀ" => "o-e", "á†" => "o-ye", "ᆂ" => "o-o", "ᆃ" => "o-u",
+ "ᆄ" => "yo-ya", "ᆅ" => "yo-yae", "ᆆ" => "yo-yeo", "ᆇ" => "yo-o", "ᆈ" => "yo-i", "ᆉ" => "u-a",
+ "á†" => "u-ae", "ᆋ" => "u-eo-eu", "ᆌ" => "u-ye", "á†" => "u-u", "á†" => "yu-a", "á†" => "yu-eo",
+ "á†" => "yu-e", "ᆑ" => "yu-yeo", "ᆒ" => "yu-ye", "ᆓ" => "yu-u", "ᆔ" => "yu-i", "ᆕ" => "eu-u",
+ "ᆖ" => "eu-eu", "ᆗ" => "yi-u", "ᆘ" => "i-a", "ᆙ" => "i-ya", "á†" => "i-o", "ᆛ" => "i-u",
+ "ᆜ" => "i-eu", "á†" => "i-U", "á†" => "U", "ᆟ" => "U-eo", "ᆠ" => "U-u", "ᆡ" => "U-i",
+ "ᆢ" => "UU", "ᆨ" => "g", "ᆩ" => "gg", "ᆪ" => "gs", "ᆫ" => "n", "ᆬ" => "nj",
+ "á†" => "nh", "ᆮ" => "d", "ᆯ" => "l", "ᆰ" => "lg", "ᆱ" => "lm", "ᆲ" => "lb",
+ "ᆳ" => "ls", "ᆴ" => "lt", "ᆵ" => "lp", "ᆶ" => "lh", "ᆷ" => "m", "ᆸ" => "b",
+ "ᆹ" => "bs", "ᆺ" => "s", "ᆻ" => "ss", "ᆼ" => "ng", "ᆽ" => "j", "ᆾ" => "c",
+ "ᆿ" => "k", "ᇀ" => "t", "á‡" => "p", "ᇂ" => "h", "ᇃ" => "gl", "ᇄ" => "gsg",
+ "ᇅ" => "ng", "ᇆ" => "nd", "ᇇ" => "ns", "ᇈ" => "nZ", "ᇉ" => "nt", "á‡" => "dg",
+ "ᇋ" => "tl", "ᇌ" => "lgs", "á‡" => "ln", "á‡" => "ld", "á‡" => "lth", "á‡" => "ll",
+ "ᇑ" => "lmg", "ᇒ" => "lms", "ᇓ" => "lbs", "ᇔ" => "lbh", "ᇕ" => "rNp", "ᇖ" => "lss",
+ "ᇗ" => "lZ", "ᇘ" => "lk", "ᇙ" => "lQ", "á‡" => "mg", "ᇛ" => "ml", "ᇜ" => "mb",
+ "á‡" => "ms", "á‡" => "mss", "ᇟ" => "mZ", "ᇠ" => "mc", "ᇡ" => "mh", "ᇢ" => "mN",
+ "ᇣ" => "bl", "ᇤ" => "bp", "ᇥ" => "ph", "ᇦ" => "pN", "ᇧ" => "sg", "ᇨ" => "sd",
+ "ᇩ" => "sl", "ᇪ" => "sb", "ᇫ" => "Z", "ᇬ" => "g", "á‡" => "ss", "ᇯ" => "kh",
+ "ᇰ" => "N", "ᇱ" => "Ns", "ᇲ" => "NZ", "ᇳ" => "pb", "ᇴ" => "pN", "ᇵ" => "hn",
+ "ᇶ" => "hl", "ᇷ" => "hm", "ᇸ" => "hb", "ᇹ" => "Q", "áˆ" => "hu", "ሂ" => "hi",
+ "ሃ" => "haa", "ሄ" => "hee", "ህ" => "he", "ሆ" => "ho", "ለ" => "la", "ሉ" => "lu",
+ "áˆ" => "li", "ላ" => "laa", "ሌ" => "lee", "áˆ" => "le", "áˆ" => "lo", "áˆ" => "lwa",
+ "áˆ" => "hha", "ሑ" => "hhu", "ሒ" => "hhi", "ሓ" => "hhaa", "ሔ" => "hhee", "ሕ" => "hhe",
+ "ሖ" => "hho", "ሗ" => "hhwa", "መ" => "ma", "ሙ" => "mu", "áˆ" => "mi", "ማ" => "maa",
+ "ሜ" => "mee", "áˆ" => "me", "áˆ" => "mo", "ሟ" => "mwa", "ሠ" => "sza", "ሡ" => "szu",
+ "ሢ" => "szi", "ሣ" => "szaa", "ሤ" => "szee", "ሥ" => "sze", "ሦ" => "szo", "ሧ" => "szwa",
+ "ረ" => "ra", "ሩ" => "ru", "ሪ" => "ri", "ራ" => "raa", "ሬ" => "ree", "áˆ" => "re",
+ "ሮ" => "ro", "ሯ" => "rwa", "ሰ" => "sa", "ሱ" => "su", "ሲ" => "si", "ሳ" => "saa",
+ "ሴ" => "see", "ስ" => "se", "ሶ" => "so", "ሷ" => "swa", "ሸ" => "sha", "ሹ" => "shu",
+ "ሺ" => "shi", "ሻ" => "shaa", "ሼ" => "shee", "ሽ" => "she", "ሾ" => "sho", "ሿ" => "shwa",
+ "ቀ" => "qa", "á‰" => "qu", "ቂ" => "qi", "ቃ" => "qaa", "ቄ" => "qee", "ቅ" => "qe",
+ "ቆ" => "qo", "ቈ" => "qwa", "á‰" => "qwi", "ቋ" => "qwaa", "ቌ" => "qwee", "á‰" => "qwe",
+ "á‰" => "qha", "ቑ" => "qhu", "ቒ" => "qhi", "ቓ" => "qhaa", "ቔ" => "qhee", "ቕ" => "qhe",
+ "ቖ" => "qho", "ቘ" => "qhwa", "á‰" => "qhwi", "ቛ" => "qhwaa", "ቜ" => "qhwee", "á‰" => "qhwe",
+ "በ" => "ba", "ቡ" => "bu", "ቢ" => "bi", "ባ" => "baa", "ቤ" => "bee", "ብ" => "be",
+ "ቦ" => "bo", "ቧ" => "bwa", "ቨ" => "va", "ቩ" => "vu", "ቪ" => "vi", "ቫ" => "vaa",
+ "ቬ" => "vee", "á‰" => "ve", "ቮ" => "vo", "ቯ" => "vwa", "ተ" => "ta", "ቱ" => "tu",
+ "ቲ" => "ti", "ታ" => "taa", "ቴ" => "tee", "ት" => "te", "ቶ" => "to", "ቷ" => "twa",
+ "ቸ" => "ca", "ቹ" => "cu", "ቺ" => "ci", "ቻ" => "caa", "ቼ" => "cee", "ች" => "ce",
+ "ቾ" => "co", "ቿ" => "cwa", "á€" => "xa", "á" => "xu", "á‚" => "xi", "áƒ" => "xaa",
+ "á„" => "xee", "á…" => "xe", "á†" => "xo", "áˆ" => "xwa", "á" => "xwi", "á‹" => "xwaa",
+ "áŒ" => "xwee", "á" => "xwe", "á" => "na", "á‘" => "nu", "á’" => "ni", "á“" => "naa",
+ "á”" => "nee", "á•" => "ne", "á–" => "no", "á—" => "nwa", "á˜" => "nya", "á™" => "nyu",
+ "á" => "nyi", "á›" => "nyaa", "áœ" => "nyee", "á" => "nye", "á" => "nyo", "áŸ" => "nywa",
+ "á " => "'a", "á¡" => "'u", "á£" => "'aa", "á¤" => "'ee", "á¥" => "'e", "á¦" => "'o",
+ "á§" => "'wa", "á¨" => "ka", "á©" => "ku", "áª" => "ki", "á«" => "kaa", "á¬" => "kee",
+ "á" => "ke", "á®" => "ko", "á°" => "kwa", "á²" => "kwi", "á³" => "kwaa", "á´" => "kwee",
+ "áµ" => "kwe", "á¸" => "kxa", "á¹" => "kxu", "áº" => "kxi", "á»" => "kxaa", "á¼" => "kxee",
+ "á½" => "kxe", "á¾" => "kxo", "á‹€" => "kxwa", "á‹‚" => "kxwi", "ዃ" => "kxwaa", "á‹„" => "kxwee",
+ "á‹…" => "kxwe", "ወ" => "wa", "ዉ" => "wu", "á‹" => "wi", "á‹‹" => "waa", "á‹Œ" => "wee",
+ "á‹" => "we", "á‹" => "wo", "á‹" => "`a", "á‹‘" => "`u", "á‹’" => "`i", "á‹“" => "`aa",
+ "á‹”" => "`ee", "á‹•" => "`e", "á‹–" => "`o", "ዘ" => "za", "á‹™" => "zu", "á‹" => "zi",
+ "á‹›" => "zaa", "á‹œ" => "zee", "á‹" => "ze", "á‹" => "zo", "á‹Ÿ" => "zwa", "á‹ " => "zha",
+ "ዡ" => "zhu", "ዢ" => "zhi", "ዣ" => "zhaa", "ዤ" => "zhee", "ዥ" => "zhe", "ዦ" => "zho",
+ "ዧ" => "zhwa", "የ" => "ya", "ዩ" => "yu", "ዪ" => "yi", "ያ" => "yaa", "ዬ" => "yee",
+ "á‹" => "ye", "á‹®" => "yo", "á‹°" => "da", "ዱ" => "du", "ዲ" => "di", "ዳ" => "daa",
+ "ዴ" => "dee", "ድ" => "de", "ዶ" => "do", "ዷ" => "dwa", "ዸ" => "dda", "ዹ" => "ddu",
+ "ዺ" => "ddi", "ዻ" => "ddaa", "ዼ" => "ddee", "ዽ" => "dde", "ዾ" => "ddo", "ዿ" => "ddwa",
+ "áŒ" => "ju", "ጂ" => "ji", "ጃ" => "jaa", "ጄ" => "jee", "ጅ" => "je", "ጆ" => "jo",
+ "ጇ" => "jwa", "ገ" => "ga", "ጉ" => "gu", "áŒ" => "gi", "ጋ" => "gaa", "ጌ" => "gee",
+ "áŒ" => "ge", "áŒ" => "go", "áŒ" => "gwa", "ጒ" => "gwi", "ጓ" => "gwaa", "ጔ" => "gwee",
+ "ጕ" => "gwe", "ጘ" => "gga", "ጙ" => "ggu", "áŒ" => "ggi", "ጛ" => "ggaa", "ጜ" => "ggee",
+ "áŒ" => "gge", "áŒ" => "ggo", "ጠ" => "tha", "ጡ" => "thu", "ጢ" => "thi", "ጣ" => "thaa",
+ "ጤ" => "thee", "ጥ" => "the", "ጦ" => "tho", "ጧ" => "thwa", "ጨ" => "cha", "ጩ" => "chu",
+ "ጪ" => "chi", "ጫ" => "chaa", "ጬ" => "chee", "áŒ" => "che", "ጮ" => "cho", "ጯ" => "chwa",
+ "ጰ" => "pha", "ጱ" => "phu", "ጲ" => "phi", "ጳ" => "phaa", "ጴ" => "phee", "ጵ" => "phe",
+ "ጶ" => "pho", "ጷ" => "phwa", "ጸ" => "tsa", "ጹ" => "tsu", "ጺ" => "tsi", "ጻ" => "tsaa",
+ "ጼ" => "tsee", "ጽ" => "tse", "ጾ" => "tso", "ጿ" => "tswa", "á€" => "tza", "á" => "tzu",
+ "á‚" => "tzi", "áƒ" => "tzaa", "á„" => "tzee", "á…" => "tze", "á†" => "tzo", "áˆ" => "fa",
+ "á‰" => "fu", "á" => "fi", "á‹" => "faa", "áŒ" => "fee", "á" => "fe", "á" => "fo",
+ "á" => "fwa", "á" => "pa", "á‘" => "pu", "á’" => "pi", "á“" => "paa", "á”" => "pee",
+ "á•" => "pe", "á–" => "po", "á—" => "pwa", "á˜" => "rya", "á™" => "mya", "á" => "fya",
+ "á©" => "1", "áª" => "2", "á«" => "3", "á¬" => "4", "á" => "5", "á®" => "6",
+ "á¯" => "7", "á°" => "8", "á±" => "9", "á²" => "10+", "á³" => "20+", "á´" => "30+",
+ "áµ" => "40+", "á¶" => "50+", "á·" => "60+", "á¸" => "70+", "á¹" => "80+", "áº" => "90+",
+ "á»" => "100+", "á¼" => "10,000+", "á " => "a", "á¡" => "e", "á¢" => "i", "á£" => "o",
+ "á¤" => "u", "á¥" => "v", "á¦" => "ga", "á§" => "ka", "á¨" => "ge", "á©" => "gi",
+ "áª" => "go", "á«" => "gu", "á¬" => "gv", "á" => "ha", "á®" => "he", "á¯" => "hi",
+ "á°" => "ho", "á±" => "hu", "á²" => "hv", "á³" => "la", "á´" => "le", "áµ" => "li",
+ "á¶" => "lo", "á·" => "lu", "á¸" => "lv", "á¹" => "ma", "áº" => "me", "á»" => "mi",
+ "á¼" => "mo", "á½" => "mu", "á¾" => "na", "á¿" => "hna", "á€" => "nah", "á" => "ne",
+ "á‚" => "ni", "áƒ" => "no", "á„" => "nu", "á…" => "nv", "á†" => "qua", "á‡" => "que",
+ "áˆ" => "qui", "á‰" => "quo", "á" => "quu", "á‹" => "quv", "áŒ" => "sa", "á" => "s",
+ "á" => "se", "á" => "si", "á" => "so", "á‘" => "su", "á’" => "sv", "á“" => "da",
+ "á”" => "ta", "á•" => "de", "á–" => "te", "á—" => "di", "á˜" => "ti", "á™" => "do",
+ "á" => "du", "á›" => "dv", "áœ" => "dla", "á" => "tla", "á" => "tle", "áŸ" => "tli",
+ "á " => "tlo", "á¡" => "tlu", "á¢" => "tlv", "á£" => "tsa", "á¤" => "tse", "á¥" => "tsi",
+ "á¦" => "tso", "á§" => "tsu", "á¨" => "tsv", "á©" => "wa", "áª" => "we", "á«" => "wi",
+ "á¬" => "wo", "á" => "wu", "á®" => "wv", "á¯" => "ya", "á°" => "ye", "á±" => "yi",
+ "á²" => "yo", "á³" => "yu", "á´" => "yv", "á" => "e", "á‚" => "aai", "áƒ" => "i",
+ "á„" => "ii", "á…" => "o", "á†" => "oo", "á‡" => "oo", "áˆ" => "ee", "á‰" => "i",
+ "á" => "a", "á‹" => "aa", "áŒ" => "we", "á" => "we", "á" => "wi", "á" => "wi",
+ "á" => "wii", "á‘" => "wii", "á’" => "wo", "á“" => "wo", "á”" => "woo", "á•" => "woo",
+ "á–" => "woo", "á—" => "wa", "á˜" => "wa", "á™" => "waa", "á" => "waa", "á›" => "waa",
+ "áœ" => "ai", "á" => "w", "áŸ" => "t", "á " => "k", "á¡" => "sh", "á¢" => "s",
+ "á£" => "n", "á¤" => "w", "á¥" => "n", "á§" => "w", "á¨" => "c", "áª" => "l",
+ "á«" => "en", "á¬" => "in", "á" => "on", "á®" => "an", "á¯" => "pe", "á°" => "paai",
+ "á±" => "pi", "á²" => "pii", "á³" => "po", "á´" => "poo", "áµ" => "poo", "á¶" => "hee",
+ "á·" => "hi", "á¸" => "pa", "á¹" => "paa", "áº" => "pwe", "á»" => "pwe", "á¼" => "pwi",
+ "á½" => "pwi", "á¾" => "pwii", "á¿" => "pwii", "á‘€" => "pwo", "á‘" => "pwo", "á‘‚" => "pwoo",
+ "ᑃ" => "pwoo", "ᑄ" => "pwa", "ᑅ" => "pwa", "ᑆ" => "pwaa", "ᑇ" => "pwaa", "ᑈ" => "pwaa",
+ "ᑉ" => "p", "á‘" => "p", "á‘‹" => "h", "á‘Œ" => "te", "á‘" => "taai", "á‘" => "ti",
+ "á‘" => "tii", "á‘" => "to", "á‘‘" => "too", "á‘’" => "too", "á‘“" => "dee", "á‘”" => "di",
+ "á‘•" => "ta", "á‘–" => "taa", "á‘—" => "twe", "ᑘ" => "twe", "á‘™" => "twi", "á‘" => "twi",
+ "á‘›" => "twii", "á‘œ" => "twii", "á‘" => "two", "á‘" => "two", "á‘Ÿ" => "twoo", "á‘ " => "twoo",
+ "ᑡ" => "twa", "ᑢ" => "twa", "ᑣ" => "twaa", "ᑤ" => "twaa", "ᑥ" => "twaa", "ᑦ" => "t",
+ "ᑧ" => "tte", "ᑨ" => "tti", "ᑩ" => "tto", "ᑪ" => "tta", "ᑫ" => "ke", "ᑬ" => "kaai",
+ "á‘" => "ki", "á‘®" => "kii", "ᑯ" => "ko", "á‘°" => "koo", "ᑱ" => "koo", "ᑲ" => "ka",
+ "ᑳ" => "kaa", "ᑴ" => "kwe", "ᑵ" => "kwe", "ᑶ" => "kwi", "ᑷ" => "kwi", "ᑸ" => "kwii",
+ "ᑹ" => "kwii", "ᑺ" => "kwo", "ᑻ" => "kwo", "ᑼ" => "kwoo", "ᑽ" => "kwoo", "ᑾ" => "kwa",
+ "á‘¿" => "kwa", "á’€" => "kwaa", "á’" => "kwaa", "á’‚" => "kwaa", "á’ƒ" => "k", "á’„" => "kw",
+ "á’…" => "keh", "á’†" => "kih", "á’‡" => "koh", "á’ˆ" => "kah", "á’‰" => "ce", "á’" => "caai",
+ "á’‹" => "ci", "á’Œ" => "cii", "á’" => "co", "á’" => "coo", "á’" => "coo", "á’" => "ca",
+ "á’‘" => "caa", "á’’" => "cwe", "á’“" => "cwe", "á’”" => "cwi", "á’•" => "cwi", "á’–" => "cwii",
+ "á’—" => "cwii", "á’˜" => "cwo", "á’™" => "cwo", "á’" => "cwoo", "á’›" => "cwoo", "á’œ" => "cwa",
+ "á’" => "cwa", "á’" => "cwaa", "á’Ÿ" => "cwaa", "á’ " => "cwaa", "á’¡" => "c", "á’¢" => "th",
+ "á’£" => "me", "á’¤" => "maai", "á’¥" => "mi", "á’¦" => "mii", "á’§" => "mo", "á’¨" => "moo",
+ "á’©" => "moo", "á’ª" => "ma", "á’«" => "maa", "á’¬" => "mwe", "á’" => "mwe", "á’®" => "mwi",
+ "á’¯" => "mwi", "á’°" => "mwii", "á’±" => "mwii", "á’²" => "mwo", "á’³" => "mwo", "á’´" => "mwoo",
+ "á’µ" => "mwoo", "á’¶" => "mwa", "á’·" => "mwa", "á’¸" => "mwaa", "á’¹" => "mwaa", "á’º" => "mwaa",
+ "á’»" => "m", "á’¼" => "m", "á’½" => "mh", "á’¾" => "m", "á’¿" => "m", "á“€" => "ne",
+ "á“" => "naai", "á“‚" => "ni", "ᓃ" => "nii", "á“„" => "no", "á“…" => "noo", "ᓆ" => "noo",
+ "ᓇ" => "na", "ᓈ" => "naa", "ᓉ" => "nwe", "á“" => "nwe", "á“‹" => "nwa", "á“Œ" => "nwa",
+ "á“" => "nwaa", "á“" => "nwaa", "á“" => "nwaa", "á“" => "n", "á“‘" => "ng", "á“’" => "nh",
+ "ᓓ" => "le", "ᓔ" => "laai", "ᓕ" => "li", "ᓖ" => "lii", "ᓗ" => "lo", "ᓘ" => "loo",
+ "á“™" => "loo", "á“" => "la", "á“›" => "laa", "á“œ" => "lwe", "á“" => "lwe", "á“" => "lwi",
+ "ᓟ" => "lwi", "ᓠ" => "lwii", "ᓡ" => "lwii", "ᓢ" => "lwo", "ᓣ" => "lwo", "ᓤ" => "lwoo",
+ "ᓥ" => "lwoo", "ᓦ" => "lwa", "ᓧ" => "lwa", "ᓨ" => "lwaa", "ᓩ" => "lwaa", "ᓪ" => "l",
+ "á“«" => "l", "ᓬ" => "l", "á“" => "se", "á“®" => "saai", "ᓯ" => "si", "á“°" => "sii",
+ "ᓱ" => "so", "ᓲ" => "soo", "ᓳ" => "soo", "ᓴ" => "sa", "ᓵ" => "saa", "ᓶ" => "swe",
+ "ᓷ" => "swe", "ᓸ" => "swi", "ᓹ" => "swi", "ᓺ" => "swii", "ᓻ" => "swii", "ᓼ" => "swo",
+ "ᓽ" => "swo", "ᓾ" => "swoo", "á“¿" => "swoo", "á”" => "swa", "ᔂ" => "swaa", "ᔃ" => "swaa",
+ "ᔄ" => "swaa", "ᔅ" => "s", "ᔆ" => "s", "ᔇ" => "sw", "ᔈ" => "s", "ᔉ" => "sk",
+ "á”" => "skw", "ᔋ" => "sW", "ᔌ" => "spwa", "á”" => "stwa", "á”" => "skwa", "á”" => "scwa",
+ "á”" => "she", "ᔑ" => "shi", "á”’" => "shii", "ᔓ" => "sho", "á””" => "shoo", "ᔕ" => "sha",
+ "á”–" => "shaa", "á”—" => "shwe", "ᔘ" => "shwe", "á”™" => "shwi", "á”" => "shwi", "á”›" => "shwii",
+ "ᔜ" => "shwii", "á”" => "shwo", "á”" => "shwo", "ᔟ" => "shwoo", "á” " => "shwoo", "ᔡ" => "shwa",
+ "ᔢ" => "shwa", "ᔣ" => "shwaa", "ᔤ" => "shwaa", "ᔥ" => "sh", "ᔦ" => "ye", "ᔧ" => "yaai",
+ "ᔨ" => "yi", "ᔩ" => "yii", "ᔪ" => "yo", "ᔫ" => "yoo", "ᔬ" => "yoo", "á”" => "ya",
+ "ᔮ" => "yaa", "ᔯ" => "ywe", "ᔰ" => "ywe", "ᔱ" => "ywi", "ᔲ" => "ywi", "ᔳ" => "ywii",
+ "ᔴ" => "ywii", "ᔵ" => "ywo", "ᔶ" => "ywo", "ᔷ" => "ywoo", "ᔸ" => "ywoo", "ᔹ" => "ywa",
+ "ᔺ" => "ywa", "ᔻ" => "ywaa", "ᔼ" => "ywaa", "ᔽ" => "ywaa", "ᔾ" => "y", "ᔿ" => "y",
+ "á•€" => "y", "á•" => "yi", "á•‚" => "re", "ᕃ" => "re", "á•„" => "le", "á•…" => "raai",
+ "ᕆ" => "ri", "ᕇ" => "rii", "ᕈ" => "ro", "ᕉ" => "roo", "á•" => "lo", "á•‹" => "ra",
+ "á•Œ" => "raa", "á•" => "la", "á•" => "rwaa", "á•" => "rwaa", "á•" => "r", "á•‘" => "r",
+ "á•’" => "r", "á•“" => "fe", "á•”" => "faai", "á••" => "fi", "á•–" => "fii", "á•—" => "fo",
+ "ᕘ" => "foo", "á•™" => "fa", "á•" => "faa", "á•›" => "fwaa", "á•œ" => "fwaa", "á•" => "f",
+ "á•" => "the", "á•Ÿ" => "the", "á• " => "thi", "á•¡" => "thi", "á•¢" => "thii", "á•£" => "thii",
+ "ᕤ" => "tho", "ᕥ" => "thoo", "ᕦ" => "tha", "ᕧ" => "thaa", "ᕨ" => "thwaa", "ᕩ" => "thwaa",
+ "ᕪ" => "th", "á•«" => "tthe", "ᕬ" => "tthi", "á•" => "ttho", "á•®" => "ttha", "ᕯ" => "tth",
+ "ᕰ" => "tye", "ᕱ" => "tyi", "ᕲ" => "tyo", "ᕳ" => "tya", "ᕴ" => "he", "ᕵ" => "hi",
+ "ᕶ" => "hii", "ᕷ" => "ho", "ᕸ" => "hoo", "ᕹ" => "ha", "ᕺ" => "haa", "ᕻ" => "h",
+ "ᕼ" => "h", "ᕽ" => "hk", "ᕾ" => "qaai", "á•¿" => "qi", "á–€" => "qii", "á–" => "qo",
+ "á–‚" => "qoo", "á–ƒ" => "qa", "á–„" => "qaa", "á–…" => "q", "á–†" => "tlhe", "á–‡" => "tlhi",
+ "á–ˆ" => "tlho", "á–‰" => "tlha", "á–" => "re", "á–‹" => "ri", "á–Œ" => "ro", "á–" => "ra",
+ "á–" => "ngaai", "á–" => "ngi", "á–" => "ngii", "á–‘" => "ngo", "á–’" => "ngoo", "á–“" => "nga",
+ "á–”" => "ngaa", "á–•" => "ng", "á––" => "nng", "á–—" => "she", "á–˜" => "shi", "á–™" => "sho",
+ "á–" => "sha", "á–›" => "the", "á–œ" => "thi", "á–" => "tho", "á–" => "tha", "á–Ÿ" => "th",
+ "á– " => "lhi", "á–¡" => "lhii", "á–¢" => "lho", "á–£" => "lhoo", "á–¤" => "lha", "á–¥" => "lhaa",
+ "á–¦" => "lh", "á–§" => "the", "á–¨" => "thi", "á–©" => "thii", "á–ª" => "tho", "á–«" => "thoo",
+ "á–¬" => "tha", "á–" => "thaa", "á–®" => "th", "á–¯" => "b", "á–°" => "e", "á–±" => "i",
+ "á–²" => "o", "á–³" => "a", "á–´" => "we", "á–µ" => "wi", "á–¶" => "wo", "á–·" => "wa",
+ "á–¸" => "ne", "á–¹" => "ni", "á–º" => "no", "á–»" => "na", "á–¼" => "ke", "á–½" => "ki",
+ "á–¾" => "ko", "á–¿" => "ka", "á—€" => "he", "á—" => "hi", "á—‚" => "ho", "á—ƒ" => "ha",
+ "á—„" => "ghu", "á—…" => "gho", "á—†" => "ghe", "á—‡" => "ghee", "á—ˆ" => "ghi", "á—‰" => "gha",
+ "á—" => "ru", "á—‹" => "ro", "á—Œ" => "re", "á—" => "ree", "á—" => "ri", "á—" => "ra",
+ "á—" => "wu", "á—‘" => "wo", "á—’" => "we", "á—“" => "wee", "á—”" => "wi", "á—•" => "wa",
+ "á—–" => "hwu", "á——" => "hwo", "á—˜" => "hwe", "á—™" => "hwee", "á—" => "hwi", "á—›" => "hwa",
+ "á—œ" => "thu", "á—" => "tho", "á—" => "the", "á—Ÿ" => "thee", "á— " => "thi", "á—¡" => "tha",
+ "á—¢" => "ttu", "á—£" => "tto", "á—¤" => "tte", "á—¥" => "ttee", "á—¦" => "tti", "á—§" => "tta",
+ "á—¨" => "pu", "á—©" => "po", "á—ª" => "pe", "á—«" => "pee", "á—¬" => "pi", "á—" => "pa",
+ "á—®" => "p", "á—¯" => "gu", "á—°" => "go", "á—±" => "ge", "á—²" => "gee", "á—³" => "gi",
+ "á—´" => "ga", "á—µ" => "khu", "á—¶" => "kho", "á—·" => "khe", "á—¸" => "khee", "á—¹" => "khi",
+ "á—º" => "kha", "á—»" => "kku", "á—¼" => "kko", "á—½" => "kke", "á—¾" => "kkee", "á—¿" => "kki",
+ "á˜" => "kk", "ᘂ" => "nu", "ᘃ" => "no", "ᘄ" => "ne", "ᘅ" => "nee", "ᘆ" => "ni",
+ "ᘇ" => "na", "ᘈ" => "mu", "ᘉ" => "mo", "á˜" => "me", "ᘋ" => "mee", "ᘌ" => "mi",
+ "á˜" => "ma", "á˜" => "yu", "á˜" => "yo", "á˜" => "ye", "ᘑ" => "yee", "ᘒ" => "yi",
+ "ᘓ" => "ya", "ᘔ" => "ju", "ᘕ" => "ju", "ᘖ" => "jo", "ᘗ" => "je", "ᘘ" => "jee",
+ "ᘙ" => "ji", "á˜" => "ji", "ᘛ" => "ja", "ᘜ" => "jju", "á˜" => "jjo", "á˜" => "jje",
+ "ᘟ" => "jjee", "ᘠ" => "jji", "ᘡ" => "jja", "ᘢ" => "lu", "ᘣ" => "lo", "ᘤ" => "le",
+ "ᘥ" => "lee", "ᘦ" => "li", "ᘧ" => "la", "ᘨ" => "dlu", "ᘩ" => "dlo", "ᘪ" => "dle",
+ "ᘫ" => "dlee", "ᘬ" => "dli", "á˜" => "dla", "ᘮ" => "lhu", "ᘯ" => "lho", "ᘰ" => "lhe",
+ "ᘱ" => "lhee", "ᘲ" => "lhi", "ᘳ" => "lha", "ᘴ" => "tlhu", "ᘵ" => "tlho", "ᘶ" => "tlhe",
+ "ᘷ" => "tlhee", "ᘸ" => "tlhi", "ᘹ" => "tlha", "ᘺ" => "tlu", "ᘻ" => "tlo", "ᘼ" => "tle",
+ "ᘽ" => "tlee", "ᘾ" => "tli", "ᘿ" => "tla", "ᙀ" => "zu", "á™" => "zo", "ᙂ" => "ze",
+ "ᙃ" => "zee", "ᙄ" => "zi", "ᙅ" => "za", "ᙆ" => "z", "ᙇ" => "z", "ᙈ" => "dzu",
+ "ᙉ" => "dzo", "á™" => "dze", "ᙋ" => "dzee", "ᙌ" => "dzi", "á™" => "dza", "á™" => "su",
+ "á™" => "so", "á™" => "se", "ᙑ" => "see", "á™’" => "si", "ᙓ" => "sa", "á™”" => "shu",
+ "ᙕ" => "sho", "á™–" => "she", "á™—" => "shee", "ᙘ" => "shi", "á™™" => "sha", "á™" => "sh",
+ "á™›" => "tsu", "ᙜ" => "tso", "á™" => "tse", "á™" => "tsee", "ᙟ" => "tsi", "á™ " => "tsa",
+ "ᙡ" => "chu", "ᙢ" => "cho", "ᙣ" => "che", "ᙤ" => "chee", "ᙥ" => "chi", "ᙦ" => "cha",
+ "ᙧ" => "ttsu", "ᙨ" => "ttso", "ᙩ" => "ttse", "ᙪ" => "ttsee", "ᙫ" => "ttsi", "ᙬ" => "ttsa",
+ "á™" => "X", "ᙯ" => "qai", "á™°" => "ngai", "á™±" => "nngi", "ᙲ" => "nngii", "ᙳ" => "nngo",
+ "á™´" => "nngoo", "ᙵ" => "nnga", "ᙶ" => "nngaa", "á" => "b", "á‚" => "l", "áƒ" => "f",
+ "á„" => "s", "á…" => "n", "á†" => "h", "á‡" => "d", "áˆ" => "t", "á‰" => "c",
+ "á" => "q", "á‹" => "m", "áŒ" => "g", "á" => "ng", "á" => "z", "á" => "r",
+ "á" => "a", "á‘" => "o", "á’" => "u", "á“" => "e", "á”" => "i", "á•" => "ch",
+ "á–" => "th", "á—" => "ph", "á˜" => "p", "á™" => "x", "á" => "p", "á " => "f",
+ "á¡" => "v", "á¢" => "u", "á£" => "yr", "á¤" => "y", "á¥" => "w", "á¦" => "th",
+ "á§" => "th", "á¨" => "a", "á©" => "o", "áª" => "ac", "á«" => "ae", "á¬" => "o",
+ "á" => "o", "á®" => "o", "á¯" => "oe", "á°" => "on", "á±" => "r", "á²" => "k",
+ "á³" => "c", "á´" => "k", "áµ" => "g", "á¶" => "ng", "á·" => "g", "á¸" => "g",
+ "á¹" => "w", "áº" => "h", "á»" => "h", "á¼" => "h", "á½" => "h", "á¾" => "n",
+ "á¿" => "n", "ᛀ" => "n", "á›" => "i", "ᛂ" => "e", "ᛃ" => "j", "ᛄ" => "g",
+ "á›…" => "ae", "ᛆ" => "a", "ᛇ" => "eo", "ᛈ" => "p", "ᛉ" => "z", "á›" => "s",
+ "ᛋ" => "s", "ᛌ" => "s", "á›" => "c", "á›" => "z", "á›" => "t", "á›" => "t",
+ "ᛑ" => "d", "ᛒ" => "b", "ᛓ" => "b", "ᛔ" => "p", "ᛕ" => "p", "ᛖ" => "e",
+ "á›—" => "m", "ᛘ" => "m", "á›™" => "m", "á›" => "l", "á››" => "l", "ᛜ" => "ng",
+ "á›" => "ng", "á›" => "d", "ᛟ" => "o", "á› " => "ear", "ᛡ" => "ior", "ᛢ" => "qu",
+ "ᛣ" => "qu", "ᛤ" => "qu", "ᛥ" => "s", "ᛦ" => "yr", "ᛧ" => "yr", "ᛨ" => "yr",
+ "ᛩ" => "q", "ᛪ" => "x", "á›®" => "17", "ᛯ" => "18", "á›°" => "19", "á€" => "k",
+ "á" => "kh", "á‚" => "g", "áƒ" => "gh", "á„" => "ng", "á…" => "c", "á†" => "ch",
+ "á‡" => "j", "áˆ" => "jh", "á‰" => "ny", "á" => "t", "á‹" => "tth", "áŒ" => "d",
+ "á" => "ddh", "á" => "nn", "á" => "t", "á" => "th", "á‘" => "d", "á’" => "dh",
+ "á“" => "n", "á”" => "p", "á•" => "ph", "á–" => "b", "á—" => "bh", "á˜" => "m",
+ "á™" => "y", "á" => "r", "á›" => "l", "áœ" => "v", "á" => "sh", "á" => "ss",
+ "áŸ" => "s", "á " => "h", "á¡" => "l", "á¢" => "q", "á£" => "a", "á¤" => "aa",
+ "á¥" => "i", "á¦" => "ii", "á§" => "u", "á¨" => "uk", "á©" => "uu", "áª" => "uuv",
+ "á«" => "ry", "á¬" => "ryy", "á" => "ly", "á®" => "lyy", "á¯" => "e", "á°" => "ai",
+ "á±" => "oo", "á²" => "oo", "á³" => "au", "á´" => "a", "áµ" => "aa", "á¶" => "aa",
+ "á·" => "i", "á¸" => "ii", "á¹" => "y", "áº" => "yy", "á»" => "u", "á¼" => "uu",
+ "á½" => "ua", "á¾" => "oe", "á¿" => "ya", "ៀ" => "ie", "áŸ" => "e", "ែ" => "ae",
+ "ៃ" => "ai", "ោ" => "oo", "ៅ" => "au", "ំ" => "M", "ះ" => "H", "ៈ" => "a`",
+ "៌" => "r", "៛" => "KR", "១" => "1", "២" => "2", "៣" => "3", "៤" => "4",
+ "៥" => "5", "៦" => "6", "៧" => "7", "៨" => "8", "៩" => "9", "á ‘" => "1",
+ "á ’" => "2", "á “" => "3", "á ”" => "4", "á •" => "5", "á –" => "6", "á —" => "7",
+ "á ˜" => "8", "á ™" => "9", "á " => "a", "á ¡" => "e", "á ¢" => "i", "á £" => "o",
+ "á ¤" => "u", "á ¥" => "O", "á ¦" => "U", "á §" => "ee", "á ¨" => "n", "á ©" => "ng",
+ "á ª" => "b", "á «" => "p", "á ¬" => "q", "á " => "g", "á ®" => "m", "á ¯" => "l",
+ "á °" => "s", "á ±" => "sh", "á ²" => "t", "á ³" => "d", "á ´" => "ch", "á µ" => "j",
+ "á ¶" => "y", "á ·" => "r", "á ¸" => "w", "á ¹" => "f", "á º" => "k", "á »" => "kha",
+ "á ¼" => "ts", "á ½" => "z", "á ¾" => "h", "á ¿" => "zr", "á¡€" => "lh", "á¡" => "zh",
+ "ᡂ" => "ch", "ᡄ" => "e", "ᡅ" => "i", "ᡆ" => "o", "ᡇ" => "u", "ᡈ" => "O",
+ "ᡉ" => "U", "á¡" => "ng", "á¡‹" => "b", "á¡Œ" => "p", "á¡" => "q", "á¡" => "g",
+ "á¡" => "m", "á¡" => "t", "á¡‘" => "d", "á¡’" => "ch", "á¡“" => "j", "á¡”" => "ts",
+ "á¡•" => "y", "á¡–" => "w", "á¡—" => "k", "ᡘ" => "g", "á¡™" => "h", "á¡" => "jy",
+ "á¡›" => "ny", "á¡œ" => "dz", "á¡" => "e", "á¡" => "i", "á¡Ÿ" => "iy", "á¡ " => "U",
+ "ᡡ" => "u", "ᡢ" => "ng", "ᡣ" => "k", "ᡤ" => "g", "ᡥ" => "h", "ᡦ" => "p",
+ "ᡧ" => "sh", "ᡨ" => "t", "ᡩ" => "d", "ᡪ" => "j", "ᡫ" => "f", "ᡬ" => "g",
+ "á¡" => "h", "á¡®" => "ts", "ᡯ" => "z", "á¡°" => "r", "ᡱ" => "ch", "ᡲ" => "zh",
+ "ᡳ" => "i", "á¡´" => "k", "ᡵ" => "r", "ᡶ" => "f", "á¡·" => "zh", "á¢" => "H",
+ "ᢂ" => "X", "ᢃ" => "W", "ᢄ" => "M", "ᢅ" => "3", "ᢆ" => "333", "ᢇ" => "a",
+ "ᢈ" => "i", "ᢉ" => "k", "á¢" => "ng", "ᢋ" => "c", "ᢌ" => "tt", "á¢" => "tth",
+ "á¢" => "dd", "á¢" => "nn", "á¢" => "t", "ᢑ" => "d", "ᢒ" => "p", "ᢓ" => "ph",
+ "ᢔ" => "ss", "ᢕ" => "zh", "ᢖ" => "z", "ᢗ" => "a", "ᢘ" => "t", "ᢙ" => "zh",
+ "á¢" => "gh", "ᢛ" => "ng", "ᢜ" => "c", "á¢" => "jh", "á¢" => "tta", "ᢟ" => "ddh",
+ "ᢠ" => "t", "ᢡ" => "dh", "ᢢ" => "ss", "ᢣ" => "cy", "ᢤ" => "zh", "ᢥ" => "z",
+ "ᢦ" => "u", "ᢧ" => "y", "ᢨ" => "bh", "á¸" => "a", "Ḃ" => "B", "ḃ" => "b",
+ "Ḅ" => "B", "ḅ" => "b", "Ḇ" => "B", "ḇ" => "b", "Ḉ" => "C", "ḉ" => "c",
+ "á¸" => "D", "ḋ" => "d", "Ḍ" => "D", "á¸" => "d", "á¸" => "D", "á¸" => "d",
+ "á¸" => "D", "ḑ" => "d", "Ḓ" => "D", "ḓ" => "d", "Ḕ" => "E", "ḕ" => "e",
+ "Ḗ" => "E", "ḗ" => "e", "Ḙ" => "E", "ḙ" => "e", "á¸" => "E", "ḛ" => "e",
+ "Ḝ" => "E", "á¸" => "e", "á¸" => "F", "ḟ" => "f", "Ḡ" => "G", "ḡ" => "g",
+ "Ḣ" => "H", "ḣ" => "h", "Ḥ" => "H", "ḥ" => "h", "Ḧ" => "H", "ḧ" => "h",
+ "Ḩ" => "H", "ḩ" => "h", "Ḫ" => "H", "ḫ" => "h", "Ḭ" => "I", "á¸" => "i",
+ "Ḯ" => "I", "ḯ" => "i", "Ḱ" => "K", "ḱ" => "k", "Ḳ" => "K", "ḳ" => "k",
+ "Ḵ" => "K", "ḵ" => "k", "Ḷ" => "L", "ḷ" => "l", "Ḹ" => "L", "ḹ" => "l",
+ "Ḻ" => "L", "ḻ" => "l", "Ḽ" => "L", "ḽ" => "l", "Ḿ" => "M", "ḿ" => "m",
+ "á¹€" => "M", "á¹" => "m", "Ṃ" => "M", "ṃ" => "m", "Ṅ" => "N", "á¹…" => "n",
+ "Ṇ" => "N", "ṇ" => "n", "Ṉ" => "N", "ṉ" => "n", "á¹" => "N", "ṋ" => "n",
+ "Ṍ" => "O", "á¹" => "o", "á¹" => "O", "á¹" => "o", "á¹" => "O", "ṑ" => "o",
+ "Ṓ" => "O", "ṓ" => "o", "Ṕ" => "P", "ṕ" => "p", "Ṗ" => "P", "ṗ" => "p",
+ "Ṙ" => "R", "á¹™" => "r", "á¹" => "R", "á¹›" => "r", "Ṝ" => "R", "á¹" => "r",
+ "á¹" => "R", "ṟ" => "r", "á¹ " => "S", "ṡ" => "s", "á¹¢" => "S", "á¹£" => "s",
+ "Ṥ" => "S", "ṥ" => "s", "Ṧ" => "S", "ṧ" => "s", "Ṩ" => "S", "ṩ" => "s",
+ "Ṫ" => "T", "ṫ" => "t", "Ṭ" => "T", "á¹" => "t", "á¹®" => "T", "ṯ" => "t",
+ "á¹°" => "T", "á¹±" => "t", "á¹²" => "U", "á¹³" => "u", "á¹´" => "U", "á¹µ" => "u",
+ "Ṷ" => "U", "ṷ" => "u", "Ṹ" => "U", "ṹ" => "u", "Ṻ" => "U", "ṻ" => "u",
+ "á¹¼" => "V", "á¹½" => "v", "á¹¾" => "V", "ṿ" => "v", "Ẁ" => "W", "áº" => "w",
+ "Ẃ" => "W", "ẃ" => "w", "Ẅ" => "W", "ẅ" => "w", "Ẇ" => "W", "ẇ" => "w",
+ "Ẉ" => "W", "ẉ" => "w", "áº" => "X", "ẋ" => "x", "Ẍ" => "X", "áº" => "x",
+ "áº" => "Y", "áº" => "y", "áº" => "Z", "ẑ" => "z", "Ẓ" => "Z", "ẓ" => "z",
+ "Ẕ" => "Z", "ẕ" => "z", "ẖ" => "h", "ẗ" => "t", "ẘ" => "w", "ẙ" => "y",
+ "áº" => "a", "ẛ" => "S", "Ạ" => "A", "ạ" => "a", "Ả" => "A", "ả" => "a",
+ "Ấ" => "A", "ấ" => "a", "Ầ" => "A", "ầ" => "a", "Ẩ" => "A", "ẩ" => "a",
+ "Ẫ" => "A", "ẫ" => "a", "Ậ" => "A", "áº" => "a", "Ắ" => "A", "ắ" => "a",
+ "Ằ" => "A", "ằ" => "a", "Ẳ" => "A", "ẳ" => "a", "Ẵ" => "A", "ẵ" => "a",
+ "Ặ" => "A", "ặ" => "a", "Ẹ" => "E", "ẹ" => "e", "Ẻ" => "E", "ẻ" => "e",
+ "Ẽ" => "E", "ẽ" => "e", "Ế" => "E", "ế" => "e", "Ề" => "E", "á»" => "e",
+ "Ể" => "E", "ể" => "e", "Ễ" => "E", "ễ" => "e", "Ệ" => "E", "ệ" => "e",
+ "Ỉ" => "I", "ỉ" => "i", "á»" => "I", "ị" => "i", "Ọ" => "O", "á»" => "o",
+ "á»" => "O", "á»" => "o", "á»" => "O", "ố" => "o", "á»’" => "O", "ồ" => "o",
+ "Ổ" => "O", "ổ" => "o", "Ỗ" => "O", "ỗ" => "o", "Ộ" => "O", "ộ" => "o",
+ "á»" => "O", "á»›" => "o", "Ờ" => "O", "á»" => "o", "á»" => "O", "ở" => "o",
+ "Ỡ" => "O", "ỡ" => "o", "Ợ" => "O", "ợ" => "o", "Ụ" => "U", "ụ" => "u",
+ "Ủ" => "U", "ủ" => "u", "Ứ" => "U", "ứ" => "u", "Ừ" => "U", "ừ" => "u",
+ "Ử" => "U", "á»" => "u", "á»®" => "U", "ữ" => "u", "á»°" => "U", "á»±" => "u",
+ "Ỳ" => "Y", "ỳ" => "y", "Ỵ" => "Y", "ỵ" => "y", "Ỷ" => "Y", "ỷ" => "y",
+ "Ỹ" => "Y", "ỹ" => "y", "á¼" => "a", "ἂ" => "a", "ἃ" => "a", "ἄ" => "a",
+ "á¼…" => "a", "ἆ" => "a", "ἇ" => "a", "Ἀ" => "A", "Ἁ" => "A", "á¼" => "A",
+ "Ἃ" => "A", "Ἄ" => "A", "á¼" => "A", "á¼" => "A", "á¼" => "A", "á¼" => "e",
+ "ἑ" => "e", "ἒ" => "e", "ἓ" => "e", "ἔ" => "e", "ἕ" => "e", "Ἐ" => "E",
+ "á¼™" => "E", "á¼" => "E", "á¼›" => "E", "Ἔ" => "E", "á¼" => "E", "á¼ " => "e",
+ "ἡ" => "e", "ἢ" => "e", "ἣ" => "e", "ἤ" => "e", "ἥ" => "e", "ἦ" => "e",
+ "ἧ" => "e", "Ἠ" => "E", "Ἡ" => "E", "Ἢ" => "E", "Ἣ" => "E", "Ἤ" => "E",
+ "á¼" => "E", "á¼®" => "E", "Ἧ" => "E", "á¼°" => "i", "á¼±" => "i", "á¼²" => "i",
+ "ἳ" => "i", "ἴ" => "i", "ἵ" => "i", "ἶ" => "i", "ἷ" => "i", "Ἰ" => "I",
+ "Ἱ" => "I", "Ἲ" => "I", "Ἳ" => "I", "Ἴ" => "I", "Ἵ" => "I", "Ἶ" => "I",
+ "Ἷ" => "I", "á½€" => "o", "á½" => "o", "ὂ" => "o", "ὃ" => "o", "ὄ" => "o",
+ "á½…" => "o", "Ὀ" => "O", "Ὁ" => "O", "á½" => "O", "Ὃ" => "O", "Ὄ" => "O",
+ "á½" => "O", "á½" => "u", "ὑ" => "u", "á½’" => "u", "ὓ" => "u", "á½”" => "u",
+ "ὕ" => "u", "á½–" => "u", "á½—" => "u", "á½™" => "U", "á½›" => "U", "á½" => "U",
+ "Ὗ" => "U", "ὠ" => "o", "ὡ" => "o", "ὢ" => "o", "ὣ" => "o", "ὤ" => "o",
+ "ὥ" => "o", "ὦ" => "o", "ὧ" => "o", "Ὠ" => "O", "Ὡ" => "O", "Ὢ" => "O",
+ "Ὣ" => "O", "Ὤ" => "O", "á½" => "O", "á½®" => "O", "Ὧ" => "O", "á½°" => "a",
+ "ά" => "a", "ὲ" => "e", "έ" => "e", "ὴ" => "e", "ή" => "e", "ὶ" => "i",
+ "ί" => "i", "ὸ" => "o", "ό" => "o", "ὺ" => "u", "ύ" => "u", "ὼ" => "o",
+ "á½½" => "o", "á¾€" => "a", "á¾" => "a", "ᾂ" => "a", "ᾃ" => "a", "ᾄ" => "a",
+ "á¾…" => "a", "ᾆ" => "a", "ᾇ" => "a", "ᾈ" => "A", "ᾉ" => "A", "á¾" => "A",
+ "ᾋ" => "A", "ᾌ" => "A", "á¾" => "A", "á¾" => "A", "á¾" => "A", "á¾" => "e",
+ "ᾑ" => "e", "ᾒ" => "e", "ᾓ" => "e", "ᾔ" => "e", "ᾕ" => "e", "ᾖ" => "e",
+ "á¾—" => "e", "ᾘ" => "E", "á¾™" => "E", "á¾" => "E", "á¾›" => "E", "ᾜ" => "E",
+ "á¾" => "E", "á¾" => "E", "ᾟ" => "E", "á¾ " => "o", "ᾡ" => "o", "á¾¢" => "o",
+ "ᾣ" => "o", "ᾤ" => "o", "ᾥ" => "o", "ᾦ" => "o", "ᾧ" => "o", "ᾨ" => "O",
+ "ᾩ" => "O", "ᾪ" => "O", "ᾫ" => "O", "ᾬ" => "O", "á¾" => "O", "á¾®" => "O",
+ "ᾯ" => "O", "ᾰ" => "a", "ᾱ" => "a", "ᾲ" => "a", "ᾳ" => "a", "ᾴ" => "a",
+ "ᾶ" => "a", "ᾷ" => "a", "Ᾰ" => "A", "Ᾱ" => "A", "Ὰ" => "A", "Ά" => "A",
+ "ᾼ" => "A", "ι" => "i", "ῂ" => "e", "ῃ" => "e", "ῄ" => "e", "ῆ" => "e",
+ "ῇ" => "e", "Ὲ" => "E", "Έ" => "E", "á¿" => "E", "á¿‹" => "E", "á¿Œ" => "E",
+ "á¿" => "i", "á¿‘" => "i", "á¿’" => "i", "á¿“" => "i", "á¿–" => "i", "á¿—" => "i",
+ "Ῐ" => "I", "á¿™" => "I", "á¿" => "I", "á¿›" => "I", "á¿ " => "u", "á¿¡" => "u",
+ "ῢ" => "u", "ΰ" => "u", "ῤ" => "R", "ῥ" => "R", "ῦ" => "u", "ῧ" => "u",
+ "Ῠ" => "U", "Ῡ" => "U", "Ὺ" => "U", "Ύ" => "U", "Ῥ" => "R", "ῲ" => "o",
+ "ῳ" => "o", "ῴ" => "o", "ῶ" => "o", "ῷ" => "o", "Ὸ" => "O", "Ό" => "O",
+ "Ὼ" => "O", "á¿»" => "O", "ῼ" => "O", "‰" => "%0", "‱" => "%00", "â" => "7",
+ "â‹" => "PP", "â´" => "4", "âµ" => "5", "â¶" => "6", "â·" => "7", "â¸" => "8",
+ "â¹" => "9", "â¿" => "n", "â‚" => "1", "â‚‚" => "2", "₃" => "3", "â‚„" => "4",
+ "₅" => "5", "₆" => "6", "₇" => "7", "₈" => "8", "₉" => "9", "₠" => "ECU",
+ "₡" => "CL", "₢" => "Cr", "₣" => "FF", "₤" => "L", "₥" => "mil", "₦" => "N",
+ "₧" => "Pts", "₨" => "Rs", "₩" => "W", "₪" => "NS", "₫" => "D", "€" => "EU",
+ "â‚" => "K", "â‚®" => "T", "₯" => "Dr", "â…“" => "1/3", "â…”" => "2/3", "â…•" => "1/5",
+ "â…–" => "2/5", "â…—" => "3/5", "â…˜" => "4/5", "â…™" => "1/6", "â…" => "5/6", "â…›" => "1/8",
+ "â…œ" => "3/8", "â…" => "5/8", "â…" => "7/8", "â…Ÿ" => "1", "â… " => "I", "â…¡" => "II",
+ "â…¢" => "III", "â…£" => "IV", "â…¤" => "V", "â…¥" => "VI", "â…¦" => "VII", "â…§" => "VIII",
+ "â…¨" => "IX", "â…©" => "X", "â…ª" => "XI", "â…«" => "XII", "â…¬" => "L", "â…" => "C",
+ "â…®" => "D", "â…¯" => "M", "â…°" => "i", "â…±" => "ii", "â…²" => "iii", "â…³" => "iv",
+ "â…´" => "v", "â…µ" => "vi", "â…¶" => "vii", "â…·" => "viii", "â…¸" => "ix", "â…¹" => "x",
+ "â…º" => "xi", "â…»" => "xii", "â…¼" => "l", "â…½" => "c", "â…¾" => "d", "â…¿" => "m",
+ "ↀ" => "(D", "â†" => "D)", "↷" => "V", "↺" => "V", "╳" => "X", "â–¼" => "V",
+ "â–½" => "V", "â–¾" => "V", "â–¿" => "V", "â—¯" => "O", "â " => "a", "â ‚" => "1",
+ "â ƒ" => "b", "â …" => "k", "â †" => "2", "â ‡" => "l", "â ‰" => "c", "â " => "i",
+ "â ‹" => "f", "â " => "m", "â " => "s", "â " => "p", "â ‘" => "e", "â ’" => "3",
+ "â “" => "h", "â ”" => "9", "â •" => "o", "â –" => "6", "â —" => "r", "â ™" => "d",
+ "â " => "j", "â ›" => "g", "â " => "n", "â " => "t", "â Ÿ" => "q", "â ¢" => "5",
+ "â ¥" => "u", "â ¦" => "8", "â §" => "v", "â " => "x", "â ²" => "4", "â µ" => "z",
+ "â ¶" => "7", "â º" => "w", "â ½" => "y", "â¡€" => "d7", "â¡" => "d17", "â¡‚" => "d27",
+ "⡃" => "d127", "⡄" => "d37", "⡅" => "d137", "⡆" => "d237", "⡇" => "d1237", "⡈" => "d47",
+ "⡉" => "d147", "â¡" => "d247", "â¡‹" => "d1247", "â¡Œ" => "d347", "â¡" => "d1347", "â¡" => "d2347",
+ "â¡" => "d12347", "â¡" => "d57", "â¡‘" => "d157", "â¡’" => "d257", "â¡“" => "d1257", "â¡”" => "d357",
+ "â¡•" => "d1357", "â¡–" => "d2357", "â¡—" => "d12357", "⡘" => "d457", "â¡™" => "d1457", "â¡" => "d2457",
+ "â¡›" => "d12457", "â¡œ" => "d3457", "â¡" => "d13457", "â¡" => "d23457", "â¡Ÿ" => "d123457", "â¡ " => "d67",
+ "⡡" => "d167", "⡢" => "d267", "⡣" => "d1267", "⡤" => "d367", "⡥" => "d1367", "⡦" => "d2367",
+ "⡧" => "d12367", "⡨" => "d467", "⡩" => "d1467", "⡪" => "d2467", "⡫" => "d12467", "⡬" => "d3467",
+ "â¡" => "d13467", "â¡®" => "d23467", "⡯" => "d123467", "â¡°" => "d567", "⡱" => "d1567", "⡲" => "d2567",
+ "⡳" => "d12567", "⡴" => "d3567", "⡵" => "d13567", "⡶" => "d23567", "⡷" => "d123567", "⡸" => "d4567",
+ "⡹" => "d14567", "⡺" => "d24567", "⡻" => "d124567", "⡼" => "d34567", "⡽" => "d134567", "⡾" => "d234567",
+ "â¡¿" => "d1234567", "⢀" => "d8", "â¢" => "d18", "⢂" => "d28", "⢃" => "d128", "⢄" => "d38",
+ "⢅" => "d138", "⢆" => "d238", "⢇" => "d1238", "⢈" => "d48", "⢉" => "d148", "â¢" => "d248",
+ "⢋" => "d1248", "⢌" => "d348", "â¢" => "d1348", "â¢" => "d2348", "â¢" => "d12348", "â¢" => "d58",
+ "⢑" => "d158", "⢒" => "d258", "⢓" => "d1258", "⢔" => "d358", "⢕" => "d1358", "⢖" => "d2358",
+ "⢗" => "d12358", "⢘" => "d458", "⢙" => "d1458", "â¢" => "d2458", "⢛" => "d12458", "⢜" => "d3458",
+ "â¢" => "d13458", "â¢" => "d23458", "⢟" => "d123458", "⢠" => "d68", "⢡" => "d168", "⢢" => "d268",
+ "⢣" => "d1268", "⢤" => "d368", "⢥" => "d1368", "⢦" => "d2368", "⢧" => "d12368", "⢨" => "d468",
+ "⢩" => "d1468", "⢪" => "d2468", "⢫" => "d12468", "⢬" => "d3468", "â¢" => "d13468", "⢮" => "d23468",
+ "⢯" => "d123468", "⢰" => "d568", "⢱" => "d1568", "⢲" => "d2568", "⢳" => "d12568", "⢴" => "d3568",
+ "⢵" => "d13568", "⢶" => "d23568", "⢷" => "d123568", "⢸" => "d4568", "⢹" => "d14568", "⢺" => "d24568",
+ "⢻" => "d124568", "⢼" => "d34568", "⢽" => "d134568", "⢾" => "d234568", "⢿" => "d1234568", "⣀" => "d78",
+ "â£" => "d178", "⣂" => "d278", "⣃" => "d1278", "⣄" => "d378", "⣅" => "d1378", "⣆" => "d2378",
+ "⣇" => "d12378", "⣈" => "d478", "⣉" => "d1478", "â£" => "d2478", "⣋" => "d12478", "⣌" => "d3478",
+ "â£" => "d13478", "â£" => "d23478", "â£" => "d123478", "â£" => "d578", "⣑" => "d1578", "⣒" => "d2578",
+ "⣓" => "d12578", "⣔" => "d3578", "⣕" => "d13578", "⣖" => "d23578", "⣗" => "d123578", "⣘" => "d4578",
+ "⣙" => "d14578", "â£" => "d24578", "⣛" => "d124578", "⣜" => "d34578", "â£" => "d134578", "â£" => "d234578",
+ "⣟" => "d1234578", "⣠" => "d678", "⣡" => "d1678", "⣢" => "d2678", "⣣" => "d12678", "⣤" => "d3678",
+ "⣥" => "d13678", "⣦" => "d23678", "⣧" => "d123678", "⣨" => "d4678", "⣩" => "d14678", "⣪" => "d24678",
+ "⣫" => "d124678", "⣬" => "d34678", "â£" => "d134678", "⣮" => "d234678", "⣯" => "d1234678", "⣰" => "d5678",
+ "⣱" => "d15678", "⣲" => "d25678", "⣳" => "d125678", "⣴" => "d35678", "⣵" => "d135678", "⣶" => "d235678",
+ "⣷" => "d1235678", "⣸" => "d45678", "⣹" => "d145678", "⣺" => "d245678", "⣻" => "d1245678", "⣼" => "d345678",
+ "⣽" => "d1345678", "⣾" => "d2345678", "⣿" => "d12345678", "〄" => "JIS", "〓" => "X", "ă€¡" => "1",
+ "ă€¢" => "2", "ă€£" => "3", "〤" => "4", "ă€¥" => "5", "〦" => "6", "〧" => "7",
+ "〨" => "8", "〩" => "9", "〸" => "+10+", "ă€¹" => "+20+", "ă€º" => "+30+", "ă" => "a",
+ "ă‚" => "a", "ăƒ" => "i", "ă„" => "i", "ă…" => "u", "ă†" => "u", "ă‡" => "e",
+ "ăˆ" => "e", "ă‰" => "o", "ă" => "o", "ă‹" => "ka", "ăŒ" => "ga", "ă" => "ki",
+ "ă" => "gi", "ă" => "ku", "ă" => "gu", "ă‘" => "ke", "ă’" => "ge", "ă“" => "ko",
+ "ă”" => "go", "ă•" => "sa", "ă–" => "za", "ă—" => "si", "ă˜" => "zi", "ă™" => "su",
+ "ă" => "zu", "ă›" => "se", "ăœ" => "ze", "ă" => "so", "ă" => "zo", "ăŸ" => "ta",
+ "ă " => "da", "ă¡" => "ti", "ă¢" => "di", "ă£" => "tu", "ă¤" => "tu", "ă¥" => "du",
+ "ă¦" => "te", "ă§" => "de", "ă¨" => "to", "ă©" => "do", "ăª" => "na", "ă«" => "ni",
+ "ă¬" => "nu", "ă" => "ne", "ă®" => "no", "ă¯" => "ha", "ă°" => "ba", "ă±" => "pa",
+ "ă²" => "hi", "ă³" => "bi", "ă´" => "pi", "ăµ" => "hu", "ă¶" => "bu", "ă·" => "pu",
+ "ă¸" => "he", "ă¹" => "be", "ăº" => "pe", "ă»" => "ho", "ă¼" => "bo", "ă½" => "po",
+ "ă¾" => "ma", "ă¿" => "mi", "ă‚€" => "mu", "ă‚" => "me", "ă‚‚" => "mo", "ă‚ƒ" => "ya",
+ "ă‚„" => "ya", "ă‚…" => "yu", "ゆ" => "yu", "ょ" => "yo", "ă‚ˆ" => "yo", "ら" => "ra",
+ "ă‚" => "ri", "ă‚‹" => "ru", "ă‚Œ" => "re", "ă‚" => "ro", "ă‚" => "wa", "ă‚" => "wa",
+ "ă‚" => "wi", "ă‚‘" => "we", "ă‚’" => "wo", "ă‚“" => "n", "ă‚”" => "vu", "ă‚¡" => "a",
+ "ă‚¢" => "a", "ă‚£" => "i", "イ" => "i", "ă‚¥" => "u", "ウ" => "u", "ェ" => "e",
+ "エ" => "e", "ă‚©" => "o", "ă‚ª" => "o", "ă‚«" => "ka", "ガ" => "ga", "ă‚" => "ki",
+ "ă‚®" => "gi", "ă‚¯" => "ku", "ă‚°" => "gu", "ケ" => "ke", "ă‚²" => "ge", "ă‚³" => "ko",
+ "ă‚´" => "go", "サ" => "sa", "ザ" => "za", "ă‚·" => "si", "ジ" => "zi", "ă‚¹" => "su",
+ "ă‚º" => "zu", "ă‚»" => "se", "ă‚¼" => "ze", "ă‚½" => "so", "ă‚¾" => "zo", "ă‚¿" => "ta",
+ "ăƒ€" => "da", "ăƒ" => "ti", "ăƒ‚" => "di", "ăƒƒ" => "tu", "ăƒ„" => "tu", "ăƒ…" => "du",
+ "ăƒ†" => "te", "ăƒ‡" => "de", "ăƒˆ" => "to", "ăƒ‰" => "do", "ăƒ" => "na", "ăƒ‹" => "ni",
+ "ăƒŒ" => "nu", "ăƒ" => "ne", "ăƒ" => "no", "ăƒ" => "ha", "ăƒ" => "ba", "ăƒ‘" => "pa",
+ "ăƒ’" => "hi", "ăƒ“" => "bi", "ăƒ”" => "pi", "ăƒ•" => "hu", "ăƒ–" => "bu", "ăƒ—" => "pu",
+ "ăƒ˜" => "he", "ăƒ™" => "be", "ăƒ" => "pe", "ăƒ›" => "ho", "ăƒœ" => "bo", "ăƒ" => "po",
+ "ăƒ" => "ma", "ăƒŸ" => "mi", "ăƒ " => "mu", "ăƒ¡" => "me", "ăƒ¢" => "mo", "ăƒ£" => "ya",
+ "ăƒ¤" => "ya", "ăƒ¥" => "yu", "ăƒ¦" => "yu", "ăƒ§" => "yo", "ăƒ¨" => "yo", "ăƒ©" => "ra",
+ "ăƒª" => "ri", "ăƒ«" => "ru", "ăƒ¬" => "re", "ăƒ" => "ro", "ăƒ®" => "wa", "ăƒ¯" => "wa",
+ "ăƒ°" => "wi", "ăƒ±" => "we", "ăƒ²" => "wo", "ăƒ³" => "n", "ăƒ´" => "vu", "ăƒµ" => "ka",
+ "ăƒ¶" => "ke", "ăƒ·" => "va", "ăƒ¸" => "vi", "ăƒ¹" => "ve", "ăƒº" => "vo", "ă„…" => "B",
+ "ㄆ" => "P", "ㄇ" => "M", "ă„ˆ" => "F", "ㄉ" => "D", "ă„" => "T", "ă„‹" => "N",
+ "ă„Œ" => "L", "ă„" => "G", "ă„" => "K", "ă„" => "H", "ă„" => "J", "ă„‘" => "Q",
+ "ă„’" => "X", "ă„“" => "ZH", "ă„”" => "CH", "ă„•" => "SH", "ă„–" => "R", "ă„—" => "Z",
+ "ă„˜" => "C", "ă„™" => "S", "ă„" => "A", "ă„›" => "O", "ă„œ" => "E", "ă„" => "EH",
+ "ă„" => "AI", "ă„Ÿ" => "EI", "ă„ " => "AU", "ă„¡" => "OU", "ă„¢" => "AN", "ă„£" => "EN",
+ "ㄤ" => "ANG", "ă„¥" => "ENG", "ㄦ" => "ER", "ㄧ" => "I", "ㄨ" => "U", "ă„©" => "IU",
+ "ă„ª" => "V", "ă„«" => "NG", "ㄬ" => "GN", "ㄱ" => "g", "ă„²" => "gg", "ă„³" => "gs",
+ "ă„´" => "n", "ㄵ" => "nj", "ㄶ" => "nh", "ă„·" => "d", "ㄸ" => "dd", "ă„¹" => "r",
+ "ă„º" => "lg", "ă„»" => "lm", "ă„¼" => "lb", "ă„½" => "ls", "ă„¾" => "lt", "ă„¿" => "lp",
+ "ă…€" => "rh", "ă…" => "m", "ă…‚" => "b", "ă…ƒ" => "bb", "ă…„" => "bs", "ă……" => "s",
+ "ă…†" => "ss", "ă…ˆ" => "j", "ă…‰" => "jj", "ă…" => "c", "ă…‹" => "k", "ă…Œ" => "t",
+ "ă…" => "p", "ă…" => "h", "ă…" => "a", "ă…" => "ae", "ă…‘" => "ya", "ă…’" => "yae",
+ "ă…“" => "eo", "ă…”" => "e", "ă…•" => "yeo", "ă…–" => "ye", "ă…—" => "o", "ă…˜" => "wa",
+ "ă…™" => "wae", "ă…" => "oe", "ă…›" => "yo", "ă…œ" => "u", "ă…" => "weo", "ă…" => "we",
+ "ă…Ÿ" => "wi", "ă… " => "yu", "ă…¡" => "eu", "ă…¢" => "yi", "ă…£" => "i", "ă…¥" => "nn",
+ "ă…¦" => "nd", "ă…§" => "ns", "ă…¨" => "nZ", "ă…©" => "lgs", "ă…ª" => "ld", "ă…«" => "lbs",
+ "ă…¬" => "lZ", "ă…" => "lQ", "ă…®" => "mb", "ă…¯" => "ms", "ă…°" => "mZ", "ă…±" => "mN",
+ "ă…²" => "bg", "ă…´" => "bsg", "ă…µ" => "bst", "ă…¶" => "bj", "ă…·" => "bt", "ă…¸" => "bN",
+ "ă…¹" => "bbN", "ă…º" => "sg", "ă…»" => "sn", "ă…¼" => "sd", "ă…½" => "sb", "ă…¾" => "sj",
+ "ă…¿" => "Z", "ă†" => "N", "ㆂ" => "Ns", "ă†ƒ" => "NZ", "ㆄ" => "pN", "ㆅ" => "hh",
+ "ㆆ" => "Q", "ㆇ" => "yo-ya", "ă†ˆ" => "yo-yae", "ㆉ" => "yo-i", "ă†" => "yu-yeo", "ㆋ" => "yu-ye",
+ "ă†Œ" => "yu-i", "ă†" => "U", "ă†" => "U-i", "ㆠ" => "BU", "ă†¡" => "ZI", "ă†¢" => "JI",
+ "ă†£" => "GU", "ㆤ" => "EE", "ă†¥" => "ENN", "ㆦ" => "OO", "ㆧ" => "ONN", "ㆨ" => "IR",
+ "ㆩ" => "ANN", "ă†ª" => "INN", "ㆫ" => "UNN", "ㆬ" => "IM", "ă†" => "NGG", "ㆮ" => "AINN",
+ "ă†¯" => "AUNN", "ㆰ" => "AM", "ㆱ" => "OM", "ă†²" => "ONG", "ă†³" => "INNN", "ㆴ" => "P",
+ "ㆵ" => "T", "ㆶ" => "K", "ㆷ" => "H", "ăˆ" => "(n)", "ăˆ‚" => "(d)", "ăˆƒ" => "(r)",
+ "ăˆ„" => "(m)", "ăˆ…" => "(b)", "ăˆ†" => "(s)", "ăˆˆ" => "(j)", "ăˆ‰" => "(c)", "ăˆ" => "(k)",
+ "ăˆ‹" => "(t)", "ăˆŒ" => "(p)", "ăˆ" => "(h)", "ăˆ" => "(ga)", "ăˆ" => "(na)", "ăˆ" => "(da)",
+ "ăˆ‘" => "(ra)", "ăˆ’" => "(ma)", "ăˆ“" => "(ba)", "ăˆ”" => "(sa)", "ăˆ•" => "(a)", "ăˆ–" => "(ja)",
+ "ăˆ—" => "(ca)", "ăˆ˜" => "(ka)", "ăˆ™" => "(ta)", "ăˆ" => "(pa)", "ăˆ›" => "(ha)", "ăˆœ" => "(ju)",
+ "ăˆ " => "(1)", "ăˆ¡" => "(2)", "ăˆ¢" => "(3)", "ăˆ£" => "(4)", "ăˆ¤" => "(5)", "ăˆ¥" => "(6)",
+ "ăˆ¦" => "(7)", "ăˆ§" => "(8)", "ăˆ¨" => "(9)", "ăˆ©" => "(10)", "ăˆª" => "(Yue)", "ăˆ«" => "(Huo)",
+ "ăˆ¬" => "(Shui)", "ăˆ" => "(Mu)", "ăˆ®" => "(Jin)", "ăˆ¯" => "(Tu)", "ăˆ°" => "(Ri)", "ăˆ±" => "(Zhu)",
+ "ăˆ²" => "(You)", "ăˆ³" => "(She)", "ăˆ´" => "(Ming)", "ăˆµ" => "(Te)", "ăˆ¶" => "(Cai)", "ăˆ·" => "(Zhu)",
+ "ăˆ¸" => "(Lao)", "ăˆ¹" => "(Dai)", "ăˆº" => "(Hu)", "ăˆ»" => "(Xue)", "ăˆ¼" => "(Jian)", "ăˆ½" => "(Qi)",
+ "ăˆ¾" => "(Zi)", "ăˆ¿" => "(Xie)", "㉀" => "(Ji)", "ă‰" => "(Xiu)", "㉠" => "(g)", "ă‰¡" => "(n)",
+ "ă‰¢" => "(d)", "ă‰£" => "(r)", "㉤" => "(m)", "ă‰¥" => "(b)", "㉦" => "(s)", "㉨" => "(j)",
+ "㉩" => "(c)", "ă‰ª" => "(k)", "㉫" => "(t)", "㉬" => "(p)", "ă‰" => "(h)", "㉮" => "(ga)",
+ "ă‰¯" => "(na)", "㉰" => "(da)", "㉱" => "(ra)", "ă‰²" => "(ma)", "ă‰³" => "(ba)", "㉴" => "(sa)",
+ "㉵" => "(a)", "㉶" => "(ja)", "㉷" => "(ca)", "㉸" => "(ka)", "ă‰¹" => "(ta)", "ă‰º" => "(pa)",
+ "㉻" => "(ha)", "ă‰¿" => "KIS", "ă€" => "(1)", "ă" => "(2)", "ă‚" => "(3)", "ăƒ" => "(4)",
+ "ă„" => "(5)", "ă…" => "(6)", "ă†" => "(7)", "ă‡" => "(8)", "ăˆ" => "(9)", "ă‰" => "(10)",
+ "ă" => "(Yue)", "ă‹" => "(Huo)", "ăŒ" => "(Shui)", "ă" => "(Mu)", "ă" => "(Jin)", "ă" => "(Tu)",
+ "ă" => "(Ri)", "ă‘" => "(Zhu)", "ă’" => "(You)", "ă“" => "(She)", "ă”" => "(Ming)", "ă•" => "(Te)",
+ "ă–" => "(Cai)", "ă—" => "(Zhu)", "ă˜" => "(Lao)", "ă™" => "(Mi)", "ă" => "(Nan)", "ă›" => "(Nu)",
+ "ăœ" => "(Shi)", "ă" => "(You)", "ă" => "(Yin)", "ăŸ" => "(Zhu)", "ă " => "(Xiang)", "ă¡" => "(Xiu)",
+ "ă¢" => "(Xie)", "ă£" => "(Zheng)", "ă¤" => "(Shang)", "ă¥" => "(Zhong)", "ă¦" => "(Xia)", "ă§" => "(Zuo)",
+ "ă¨" => "(You)", "ă©" => "(Yi)", "ăª" => "(Zong)", "ă«" => "(Xue)", "ă¬" => "(Jian)", "ă" => "(Qi)",
+ "ă®" => "(Zi)", "ă¯" => "(Xie)", "ă°" => "(Ye)", "ă‹€" => "1M", "ă‹" => "2M", "ă‹‚" => "3M",
+ "ă‹ƒ" => "4M", "ă‹„" => "5M", "ă‹…" => "6M", "㋆" => "7M", "㋇" => "8M", "ă‹ˆ" => "9M",
+ "㋉" => "10M", "ă‹" => "11M", "ă‹‹" => "12M", "ă‹" => "a", "ă‹‘" => "i", "ă‹’" => "u",
+ "ă‹“" => "u", "ă‹”" => "o", "ă‹•" => "ka", "ă‹–" => "ki", "ă‹—" => "ku", "ă‹˜" => "ke",
+ "ă‹™" => "ko", "ă‹" => "sa", "ă‹›" => "si", "ă‹œ" => "su", "ă‹" => "se", "ă‹" => "so",
+ "ă‹Ÿ" => "ta", "ă‹ " => "ti", "ă‹¡" => "tu", "ă‹¢" => "te", "ă‹£" => "to", "㋤" => "na",
+ "ă‹¥" => "ni", "㋦" => "nu", "㋧" => "ne", "㋨" => "no", "ă‹©" => "ha", "ă‹ª" => "hi",
+ "ă‹«" => "hu", "㋬" => "he", "ă‹" => "ho", "ă‹®" => "ma", "ă‹¯" => "mi", "ă‹°" => "mu",
+ "㋱" => "me", "ă‹²" => "mo", "ă‹³" => "ya", "ă‹´" => "yu", "㋵" => "yo", "㋶" => "ra",
+ "ă‹·" => "ri", "㋸" => "ru", "ă‹¹" => "re", "ă‹º" => "ro", "ă‹»" => "wa", "ă‹¼" => "wi",
+ "ă‹½" => "we", "ă‹¾" => "wo", "ăŒ" => "alpha", "ăŒ‚" => "ampere", "ăŒƒ" => "are", "ăŒ„" => "inning",
+ "ăŒ…" => "inch", "ăŒ†" => "won", "ăŒ‡" => "escudo", "ăŒˆ" => "acre", "ăŒ‰" => "ounce", "ăŒ" => "ohm",
+ "ăŒ‹" => "kai-ri", "ăŒŒ" => "carat", "ăŒ" => "calorie", "ăŒ" => "gallon", "ăŒ" => "gamma", "ăŒ" => "giga",
+ "ăŒ‘" => "guinea", "ăŒ’" => "curie", "ăŒ“" => "guilder", "ăŒ”" => "kilo", "ăŒ•" => "kilogram", "ăŒ–" => "kilometer",
+ "ăŒ—" => "kilowatt", "ăŒ˜" => "gram", "ăŒ" => "cruzeiro", "ăŒ›" => "krone", "ăŒœ" => "case", "ăŒ" => "koruna",
+ "ăŒ" => "co-op", "ăŒŸ" => "cycle", "ăŒ " => "centime", "ăŒ¡" => "shilling", "ăŒ¢" => "centi", "ăŒ£" => "cent",
+ "ăŒ¤" => "dozen", "ăŒ¥" => "desi", "ăŒ¦" => "dollar", "ăŒ§" => "ton", "ăŒ¨" => "nano", "ăŒ©" => "knot",
+ "ăŒª" => "heights", "ăŒ«" => "percent", "ăŒ¬" => "parts", "ăŒ" => "barrel", "ăŒ®" => "piaster", "ăŒ¯" => "picul",
+ "ăŒ°" => "pico", "ăŒ±" => "building", "ăŒ²" => "farad", "ăŒ³" => "feet", "ăŒ´" => "bushel", "ăŒµ" => "franc",
+ "ăŒ¶" => "hectare", "ăŒ·" => "peso", "ăŒ¸" => "pfennig", "ăŒ¹" => "hertz", "ăŒº" => "pence", "ăŒ»" => "page",
+ "ăŒ¼" => "beta", "ăŒ½" => "point", "ăŒ¾" => "volt", "ăŒ¿" => "hon", "ă€" => "pound", "ă" => "hall",
+ "ă‚" => "horn", "ăƒ" => "micro", "ă„" => "mile", "ă…" => "mach", "ă†" => "mark", "ă‡" => "mansion",
+ "ăˆ" => "micron", "ă‰" => "milli", "ă" => "millibar", "ă‹" => "mega", "ăŒ" => "megaton", "ă" => "meter",
+ "ă" => "yard", "ă" => "yard", "ă" => "yuan", "ă‘" => "liter", "ă’" => "lira", "ă“" => "rupee",
+ "ă”" => "ruble", "ă•" => "rem", "ă–" => "roentgen", "ă—" => "watt", "ă˜" => "0h", "ă™" => "1h",
+ "ă" => "2h", "ă›" => "3h", "ăœ" => "4h", "ă" => "5h", "ă" => "6h", "ăŸ" => "7h",
+ "ă " => "8h", "ă¡" => "9h", "ă¢" => "10h", "ă£" => "11h", "ă¤" => "12h", "ă¥" => "13h",
+ "ă¦" => "14h", "ă§" => "15h", "ă¨" => "16h", "ă©" => "17h", "ăª" => "18h", "ă«" => "19h",
+ "ă¬" => "20h", "ă" => "21h", "ă®" => "22h", "ă¯" => "23h", "ă°" => "24h", "ă±" => "HPA",
+ "ă²" => "da", "ă³" => "AU", "ă´" => "bar", "ăµ" => "oV", "ă¶" => "pc", "ă»" => "Heisei",
+ "ă¼" => "Syouwa", "ă½" => "Taisyou", "ă¾" => "Meiji", "ă¿" => "Inc.", "ă€" => "pA", "ă" => "nA",
+ "ă‚" => "microamp", "ăƒ" => "mA", "ă„" => "kA", "ă…" => "kB", "ă†" => "MB", "ă‡" => "GB",
+ "ăˆ" => "cal", "ă‰" => "kcal", "ă" => "pF", "ă‹" => "nF", "ăŒ" => "microFarad", "ă" => "microgram",
+ "ă" => "mg", "ă" => "kg", "ă" => "Hz", "ă‘" => "kHz", "ă’" => "MHz", "ă“" => "GHz",
+ "ă”" => "THz", "ă•" => "microliter", "ă–" => "ml", "ă—" => "dl", "ă˜" => "kl", "ă™" => "fm",
+ "ă" => "nm", "ă›" => "micrometer", "ăœ" => "mm", "ă" => "cm", "ă" => "km", "ăŸ" => "mm^2",
+ "ă " => "cm^2", "ă¡" => "m^2", "ă¢" => "km^2", "ă£" => "mm^4", "ă¤" => "cm^3", "ă¥" => "m^3",
+ "ă¦" => "km^3", "ă§" => "m/s", "ă¨" => "m/s^2", "ă©" => "Pa", "ăª" => "kPa", "ă«" => "MPa",
+ "ă¬" => "GPa", "ă" => "rad", "ă®" => "rad/s", "ă¯" => "rad/s^2", "ă°" => "ps", "ă±" => "ns",
+ "ă²" => "microsecond", "ă³" => "ms", "ă´" => "pV", "ăµ" => "nV", "ă¶" => "microvolt", "ă·" => "mV",
+ "ă¸" => "kV", "ă¹" => "MV", "ăº" => "pW", "ă»" => "nW", "ă¼" => "microwatt", "ă½" => "mW",
+ "ă¾" => "kW", "ă¿" => "MW", "ă€" => "kOhm", "ă" => "MOhm", "ă‚" => "a.m.", "ăƒ" => "Bq",
+ "ă„" => "cc", "ă…" => "cd", "ă†" => "C/kg", "ă‡" => "Co.", "ăˆ" => "dB", "ă‰" => "Gy",
+ "ă" => "ha", "ă‹" => "HP", "ăŒ" => "in", "ă" => "K.K.", "ă" => "KM", "ă" => "kt",
+ "ă" => "lm", "ă‘" => "ln", "ă’" => "log", "ă“" => "lx", "ă”" => "mb", "ă•" => "mil",
+ "ă–" => "mol", "ă—" => "pH", "ă˜" => "p.m.", "ă™" => "PPM", "ă" => "PR", "ă›" => "sr",
+ "ăœ" => "Sv", "ă" => "Wb", "ă " => "1d", "ă¡" => "2d", "ă¢" => "3d", "ă£" => "4d",
+ "ă¤" => "5d", "ă¥" => "6d", "ă¦" => "7d", "ă§" => "8d", "ă¨" => "9d", "ă©" => "10d",
+ "ăª" => "11d", "ă«" => "12d", "ă¬" => "13d", "ă" => "14d", "ă®" => "15d", "ă¯" => "16d",
+ "ă°" => "17d", "ă±" => "18d", "ă²" => "19d", "ă³" => "20d", "ă´" => "21d", "ăµ" => "22d",
+ "ă¶" => "23d", "ă·" => "24d", "ă¸" => "25d", "ă¹" => "26d", "ăº" => "27d", "ă»" => "28d",
+ "ă¼" => "29d", "ă½" => "30d", "ă¾" => "31d", "ä¸" => "Ding", "丂" => "Kao", "七" => "Qi",
+ "丄" => "Shang", "丅" => "Xia", "万" => "Mo", "丈" => "Zhang", "三" => "San", "ä¸" => "Shang",
+ "下" => "Xia", "丌" => "Ji", "ä¸" => "Bu", "ä¸" => "Yu", "ä¸" => "Mian", "ä¸" => "Gai",
+ "丑" => "Chou", "丒" => "Chou", "专" => "Zhuan", "且" => "Qie", "丕" => "Pi", "世" => "Shi",
+ "丗" => "Shi", "丘" => "Qiu", "丙" => "Bing", "ä¸" => "Ye", "丛" => "Cong", "东" => "Dong",
+ "ä¸" => "Si", "ä¸" => "Cheng", "丟" => "Diu", "ä¸ " => "Qiu", "両" => "Liang", "丢" => "Diu",
+ "丣" => "You", "两" => "Liang", "严" => "Yan", "並" => "Bing", "丧" => "Sang", "丨" => "Gun",
+ "丩" => "Jiu", "个" => "Ge", "丫" => "Ya", "丬" => "Qiang", "ä¸" => "Zhong", "丮" => "Ji",
+ "丯" => "Jie", "丰" => "Feng", "丱" => "Guan", "串" => "Chuan", "丳" => "Chan", "临" => "Lin",
+ "丵" => "Zhuo", "丶" => "Zhu", "丷" => "Ha", "丸" => "Wan", "丹" => "Dan", "为" => "Wei",
+ "主" => "Zhu", "丼" => "Jing", "丽" => "Li", "举" => "Ju", "丿" => "Pie", "乀" => "Fu",
+ "ä¹" => "Yi", "乂" => "Yi", "乃" => "Nai", "乄" => "Shime", "ä¹…" => "Jiu", "乆" => "Jiu",
+ "乇" => "Zhe", "么" => "Yao", "义" => "Yi", "之" => "Zhi", "乌" => "Wu", "ä¹" => "Zha",
+ "ä¹" => "Hu", "ä¹" => "Fa", "ä¹" => "Le", "乑" => "Zhong", "ä¹’" => "Ping", "乓" => "Pang",
+ "乔" => "Qiao", "乕" => "Hu", "乖" => "Guai", "乗" => "Cheng", "乘" => "Cheng", "乙" => "Yi",
+ "ä¹" => "Yin", "乜" => "Mie", "ä¹" => "Jiu", "ä¹" => "Qi", "也" => "Ye", "ä¹ " => "Xi",
+ "乡" => "Xiang", "乢" => "Gai", "乣" => "Diu", "乤" => "Hal", "书" => "Shu", "乧" => "Twul",
+ "乨" => "Shi", "乩" => "Ji", "乪" => "Nang", "乫" => "Jia", "乬" => "Kel", "ä¹" => "Shi",
+ "乯" => "Ol", "买" => "Mai", "乱" => "Luan", "乲" => "Cal", "乳" => "Ru", "乴" => "Xue",
+ "乵" => "Yan", "乶" => "Fu", "乷" => "Sha", "乸" => "Na", "乹" => "Gan", "乺" => "Sol",
+ "ä¹»" => "El", "ä¹¼" => "Cwul", "ä¹¾" => "Gan", "乿" => "Chi", "亀" => "Gui", "äº" => "Gan",
+ "亂" => "Luan", "亃" => "Lin", "亄" => "Yi", "亅" => "Jue", "了" => "Liao", "亇" => "Ma",
+ "予" => "Yu", "争" => "Zheng", "äº" => "Shi", "事" => "Shi", "二" => "Er", "äº" => "Chu",
+ "äº" => "Yu", "äº" => "Yu", "äº" => "Yu", "云" => "Yun", "互" => "Hu", "亓" => "Qi",
+ "五" => "Wu", "井" => "Jing", "亖" => "Si", "亗" => "Sui", "亘" => "Gen", "亙" => "Gen",
+ "äº" => "Ya", "些" => "Xie", "亜" => "Ya", "äº" => "Qi", "äº" => "Ya", "亟" => "Ji",
+ "äº " => "Tou", "亡" => "Wang", "亢" => "Kang", "亣" => "Ta", "交" => "Jiao", "亥" => "Hai",
+ "亦" => "Yi", "产" => "Chan", "亨" => "Heng", "亩" => "Mu", "享" => "Xiang", "京" => "Jing",
+ "äº" => "Ting", "亮" => "Liang", "亯" => "Xiang", "亰" => "Jing", "亱" => "Ye", "亲" => "Qin",
+ "亳" => "Bo", "亴" => "You", "亵" => "Xie", "亶" => "Dan", "亷" => "Lian", "亸" => "Duo",
+ "亹" => "Wei", "人" => "Ren", "亻" => "Ren", "亼" => "Ji", "亽" => "La", "亾" => "Wang",
+ "亿" => "Yi", "什" => "Shi", "ä»" => "Ren", "仂" => "Le", "仃" => "Ding", "仄" => "Ze",
+ "ä»…" => "Jin", "仆" => "Pu", "仇" => "Chou", "仈" => "Ba", "仉" => "Zhang", "ä»" => "Jin",
+ "介" => "Jie", "仌" => "Bing", "ä»" => "Reng", "ä»" => "Cong", "ä»" => "Fo", "ä»" => "San",
+ "仑" => "Lun", "仒" => "Sya", "仓" => "Cang", "仔" => "Zi", "仕" => "Shi", "他" => "Ta",
+ "ä»—" => "Zhang", "付" => "Fu", "ä»™" => "Xian", "ä»" => "Xian", "ä»›" => "Tuo", "仜" => "Hong",
+ "ä»" => "Tong", "ä»" => "Ren", "仟" => "Qian", "ä» " => "Gan", "仡" => "Yi", "仢" => "Di",
+ "代" => "Dai", "令" => "Ling", "以" => "Yi", "仦" => "Chao", "仧" => "Chang", "仨" => "Sa",
+ "仪" => "Yi", "仫" => "Mu", "们" => "Men", "ä»" => "Ren", "ä»®" => "Jia", "仯" => "Chao",
+ "仰" => "Yang", "仱" => "Qian", "仲" => "Zhong", "仳" => "Pi", "仴" => "Wan", "仵" => "Wu",
+ "件" => "Jian", "价" => "Jie", "仸" => "Yao", "仹" => "Feng", "仺" => "Cang", "任" => "Ren",
+ "仼" => "Wang", "份" => "Fen", "仾" => "Di", "仿" => "Fang", "ä¼" => "Qi", "伂" => "Pei",
+ "伃" => "Yu", "伄" => "Diao", "伅" => "Dun", "伆" => "Wen", "伇" => "Yi", "伈" => "Xin",
+ "伉" => "Kang", "ä¼" => "Yi", "伋" => "Ji", "伌" => "Ai", "ä¼" => "Wu", "ä¼" => "Ji",
+ "ä¼" => "Fu", "ä¼" => "Fa", "休" => "Xiu", "ä¼’" => "Jin", "伓" => "Bei", "ä¼”" => "Dan",
+ "伕" => "Fu", "ä¼–" => "Tang", "ä¼—" => "Zhong", "优" => "You", "ä¼™" => "Huo", "ä¼" => "Hui",
+ "ä¼›" => "Yu", "伜" => "Cui", "ä¼" => "Chuan", "ä¼" => "San", "伟" => "Wei", "ä¼ " => "Chuan",
+ "伡" => "Che", "伢" => "Ya", "伣" => "Xian", "伤" => "Shang", "伥" => "Chang", "伦" => "Lun",
+ "伧" => "Cang", "伨" => "Xun", "伩" => "Xin", "伪" => "Wei", "伫" => "Zhu", "ä¼" => "Xuan",
+ "伮" => "Nu", "伯" => "Bo", "估" => "Gu", "伱" => "Ni", "伲" => "Ni", "伳" => "Xie",
+ "伴" => "Ban", "伵" => "Xu", "伶" => "Ling", "伷" => "Zhou", "伸" => "Shen", "伹" => "Qu",
+ "伺" => "Si", "伻" => "Beng", "似" => "Si", "伽" => "Jia", "伾" => "Pi", "伿" => "Yi",
+ "ä½€" => "Si", "ä½" => "Ai", "佂" => "Zheng", "佃" => "Dian", "佄" => "Han", "ä½…" => "Mai",
+ "但" => "Dan", "佇" => "Zhu", "佈" => "Bu", "佉" => "Qu", "ä½" => "Bi", "佋" => "Shao",
+ "佌" => "Ci", "ä½" => "Wei", "ä½" => "Di", "ä½" => "Zhu", "ä½" => "Zuo", "佑" => "You",
+ "佒" => "Yang", "体" => "Ti", "佔" => "Zhan", "何" => "He", "佖" => "Bi", "佗" => "Tuo",
+ "佘" => "She", "ä½™" => "Yu", "ä½" => "Yi", "ä½›" => "Fo", "作" => "Zuo", "ä½" => "Kou",
+ "ä½" => "Ning", "佟" => "Tong", "ä½ " => "Ni", "佡" => "Xuan", "ä½¢" => "Qu", "ä½£" => "Yong",
+ "佤" => "Wa", "佥" => "Qian", "佧" => "Ka", "佩" => "Pei", "佪" => "Huai", "佫" => "He",
+ "佬" => "Lao", "ä½" => "Xiang", "ä½®" => "Ge", "佯" => "Yang", "ä½°" => "Bai", "ä½±" => "Fa",
+ "佲" => "Ming", "佳" => "Jia", "佴" => "Er", "併" => "Bing", "佶" => "Ji", "佷" => "Hen",
+ "佸" => "Huo", "佹" => "Gui", "佺" => "Quan", "佻" => "Tiao", "佼" => "Jiao", "佽" => "Ci",
+ "ä½¾" => "Yi", "使" => "Shi", "ä¾€" => "Xing", "ä¾" => "Shen", "侂" => "Tuo", "侃" => "Kan",
+ "侄" => "Zhi", "侅" => "Gai", "來" => "Lai", "侇" => "Yi", "侈" => "Chi", "侉" => "Kua",
+ "ä¾" => "Guang", "例" => "Li", "侌" => "Yin", "ä¾" => "Shi", "ä¾" => "Mi", "ä¾" => "Zhu",
+ "ä¾" => "Xu", "侑" => "You", "ä¾’" => "An", "侓" => "Lu", "ä¾”" => "Mou", "侕" => "Er",
+ "ä¾–" => "Lun", "ä¾—" => "Tong", "侘" => "Cha", "ä¾™" => "Chi", "ä¾" => "Xun", "ä¾›" => "Gong",
+ "侜" => "Zhou", "ä¾" => "Yi", "ä¾" => "Ru", "侟" => "Jian", "ä¾ " => "Xia", "価" => "Jia",
+ "侢" => "Zai", "侣" => "Lu", "侤" => "Ko", "侥" => "Jiao", "侦" => "Zhen", "侧" => "Ce",
+ "侨" => "Qiao", "侩" => "Kuai", "侪" => "Chai", "侫" => "Ning", "侬" => "Nong", "ä¾" => "Jin",
+ "侮" => "Wu", "侯" => "Hou", "侰" => "Jiong", "侱" => "Cheng", "侲" => "Zhen", "侳" => "Zuo",
+ "侴" => "Chou", "侵" => "Qin", "侶" => "Lu", "侷" => "Ju", "侸" => "Shu", "侹" => "Ting",
+ "侺" => "Shen", "侻" => "Tuo", "侼" => "Bo", "侽" => "Nan", "侾" => "Hao", "便" => "Bian",
+ "ä¿€" => "Tui", "ä¿" => "Yu", "ä¿‚" => "Xi", "促" => "Cu", "ä¿„" => "E", "ä¿…" => "Qiu",
+ "俆" => "Xu", "俇" => "Kuang", "俈" => "Ku", "俉" => "Wu", "ä¿" => "Jun", "ä¿‹" => "Yi",
+ "ä¿Œ" => "Fu", "ä¿" => "Lang", "ä¿" => "Zu", "ä¿" => "Qiao", "ä¿" => "Li", "ä¿‘" => "Yong",
+ "ä¿’" => "Hun", "ä¿“" => "Jing", "ä¿”" => "Xian", "ä¿•" => "San", "ä¿–" => "Pai", "ä¿—" => "Su",
+ "俘" => "Fu", "ä¿™" => "Xi", "ä¿" => "Li", "ä¿›" => "Fu", "ä¿œ" => "Ping", "ä¿" => "Bao",
+ "ä¿" => "Yu", "ä¿Ÿ" => "Si", "ä¿ " => "Xia", "ä¿¡" => "Xin", "ä¿¢" => "Xiu", "ä¿£" => "Yu",
+ "俤" => "Ti", "俥" => "Che", "俦" => "Chou", "俨" => "Yan", "俩" => "Lia", "俪" => "Li",
+ "ä¿«" => "Lai", "ä¿" => "Jian", "ä¿®" => "Xiu", "俯" => "Fu", "ä¿°" => "He", "俱" => "Ju",
+ "俲" => "Xiao", "俳" => "Pai", "俴" => "Jian", "俵" => "Biao", "俶" => "Chu", "俷" => "Fei",
+ "俸" => "Feng", "俹" => "Ya", "俺" => "An", "俻" => "Bei", "俼" => "Yu", "俽" => "Xin",
+ "俾" => "Bi", "ä¿¿" => "Jian", "å€" => "Chi", "倂" => "Bing", "倃" => "Zan", "倄" => "Yao",
+ "倅" => "Cui", "倆" => "Lia", "倇" => "Wan", "倈" => "Lai", "倉" => "Cang", "å€" => "Zong",
+ "個" => "Ge", "倌" => "Guan", "å€" => "Bei", "å€" => "Tian", "å€" => "Shu", "å€" => "Shu",
+ "們" => "Men", "倒" => "Dao", "倓" => "Tan", "倔" => "Jue", "倕" => "Chui", "倖" => "Xing",
+ "倗" => "Peng", "倘" => "Tang", "候" => "Hou", "å€" => "Yi", "倛" => "Qi", "倜" => "Ti",
+ "å€" => "Gan", "å€" => "Jing", "借" => "Jie", "å€ " => "Sui", "倡" => "Chang", "倢" => "Jie",
+ "倣" => "Fang", "値" => "Zhi", "倥" => "Kong", "倦" => "Juan", "倧" => "Zong", "倨" => "Ju",
+ "倩" => "Qian", "倪" => "Ni", "倫" => "Lun", "倬" => "Zhuo", "å€" => "Wei", "倮" => "Luo",
+ "倯" => "Song", "倰" => "Leng", "倱" => "Hun", "倲" => "Dong", "倳" => "Zi", "倴" => "Ben",
+ "倵" => "Wu", "倶" => "Ju", "倷" => "Nai", "倸" => "Cai", "倹" => "Jian", "债" => "Zhai",
+ "倻" => "Ye", "值" => "Zhi", "倽" => "Sha", "倾" => "Qing", "å€" => "Ying", "å" => "Cheng",
+ "å‚" => "Jian", "åƒ" => "Yan", "å„" => "Nuan", "å…" => "Zhong", "å†" => "Chun", "å‡" => "Jia",
+ "åˆ" => "Jie", "å‰" => "Wei", "å" => "Yu", "å‹" => "Bing", "åŒ" => "Ruo", "å" => "Ti",
+ "å" => "Wei", "å" => "Pian", "å" => "Yan", "å‘" => "Feng", "å’" => "Tang", "å“" => "Wo",
+ "å”" => "E", "å•" => "Xie", "å–" => "Che", "å—" => "Sheng", "å˜" => "Kan", "å™" => "Di",
+ "å" => "Zuo", "å›" => "Cha", "åœ" => "Ting", "å" => "Bei", "å" => "Ye", "åŸ" => "Huang",
+ "å " => "Yao", "å¡" => "Zhan", "å¢" => "Chou", "å£" => "Yan", "å¤" => "You", "å¥" => "Jian",
+ "å¦" => "Xu", "å§" => "Zha", "å¨" => "Ci", "å©" => "Fu", "åª" => "Bi", "å«" => "Zhi",
+ "å¬" => "Zong", "å" => "Mian", "å®" => "Ji", "å¯" => "Yi", "å°" => "Xie", "å±" => "Xun",
+ "å²" => "Si", "å³" => "Duan", "å´" => "Ce", "åµ" => "Zhen", "å¶" => "Ou", "å·" => "Tou",
+ "å¸" => "Tou", "å¹" => "Bei", "åº" => "Za", "å»" => "Lu", "å¼" => "Jie", "å½" => "Wei",
+ "å¾" => "Fen", "å¿" => "Chang", "å‚€" => "Gui", "å‚" => "Sou", "å‚‚" => "Zhi", "傃" => "Su",
+ "傄" => "Xia", "傅" => "Fu", "傆" => "Yuan", "傇" => "Rong", "傈" => "Li", "傉" => "Ru",
+ "å‚" => "Yun", "å‚‹" => "Gou", "å‚Œ" => "Ma", "å‚" => "Bang", "å‚" => "Dian", "å‚" => "Tang",
+ "å‚" => "Hao", "å‚‘" => "Jie", "å‚’" => "Xi", "å‚“" => "Shan", "å‚”" => "Qian", "å‚•" => "Jue",
+ "å‚–" => "Cang", "å‚—" => "Chu", "傘" => "San", "å‚™" => "Bei", "å‚" => "Xiao", "å‚›" => "Yong",
+ "å‚œ" => "Yao", "å‚" => "Tan", "å‚" => "Suo", "å‚Ÿ" => "Yang", "å‚ " => "Fa", "å‚¡" => "Bing",
+ "傢" => "Jia", "傣" => "Dai", "傤" => "Zai", "傥" => "Tang", "傧" => "Bin", "储" => "Chu",
+ "å‚©" => "Nuo", "傪" => "Can", "å‚«" => "Lei", "催" => "Cui", "å‚" => "Yong", "å‚®" => "Zao",
+ "傯" => "Zong", "傰" => "Peng", "傱" => "Song", "傲" => "Ao", "傳" => "Chuan", "傴" => "Yu",
+ "債" => "Zhai", "傶" => "Cou", "傷" => "Shang", "傸" => "Qiang", "傹" => "Jing", "傺" => "Chi",
+ "傻" => "Sha", "傼" => "Han", "傽" => "Zhang", "傾" => "Qing", "傿" => "Yan", "僀" => "Di",
+ "åƒ" => "Xi", "僂" => "Lu", "僃" => "Bei", "僄" => "Piao", "僅" => "Jin", "僆" => "Lian",
+ "僇" => "Lu", "僈" => "Man", "僉" => "Qian", "åƒ" => "Xian", "僋" => "Tan", "僌" => "Ying",
+ "åƒ" => "Dong", "åƒ" => "Zhuan", "åƒ" => "Xiang", "åƒ" => "Shan", "僑" => "Qiao", "僒" => "Jiong",
+ "僓" => "Tui", "僔" => "Zun", "僕" => "Pu", "僖" => "Xi", "僗" => "Lao", "僘" => "Chang",
+ "僙" => "Guang", "åƒ" => "Liao", "僛" => "Qi", "僜" => "Deng", "åƒ" => "Chan", "åƒ" => "Wei",
+ "僟" => "Ji", "åƒ " => "Fan", "僡" => "Hui", "僢" => "Chuan", "僣" => "Jian", "僤" => "Dan",
+ "僥" => "Jiao", "僦" => "Jiu", "僧" => "Seng", "僨" => "Fen", "僩" => "Xian", "僪" => "Jue",
+ "僫" => "E", "僬" => "Jiao", "åƒ" => "Jian", "僮" => "Tong", "僯" => "Lin", "僰" => "Bo",
+ "僱" => "Gu", "僳" => "Su", "僴" => "Xian", "僵" => "Jiang", "僶" => "Min", "僷" => "Ye",
+ "僸" => "Jin", "價" => "Jia", "僺" => "Qiao", "僻" => "Pi", "僼" => "Feng", "僽" => "Zhou",
+ "僾" => "Ai", "僿" => "Sai", "å„" => "Jun", "å„‚" => "Nong", "儃" => "Chan", "å„„" => "Yi",
+ "å„…" => "Dang", "儆" => "Jing", "儇" => "Xuan", "儈" => "Kuai", "儉" => "Jian", "å„" => "Chu",
+ "å„‹" => "Dan", "å„Œ" => "Jiao", "å„" => "Sha", "å„" => "Zai", "å„" => "Bin", "å„‘" => "An",
+ "å„’" => "Ru", "å„“" => "Tai", "å„”" => "Chou", "å„•" => "Chai", "å„–" => "Lan", "å„—" => "Ni",
+ "儘" => "Jin", "å„™" => "Qian", "å„" => "Meng", "å„›" => "Wu", "å„œ" => "Ning", "å„" => "Qiong",
+ "å„" => "Ni", "å„Ÿ" => "Chang", "å„ " => "Lie", "å„¡" => "Lei", "å„¢" => "Lu", "å„£" => "Kuang",
+ "儤" => "Bao", "儥" => "Du", "儦" => "Biao", "儧" => "Zan", "儨" => "Zhi", "儩" => "Si",
+ "優" => "You", "å„«" => "Hao", "儬" => "Chen", "å„" => "Chen", "å„®" => "Li", "儯" => "Teng",
+ "儰" => "Wei", "儱" => "Long", "儲" => "Chu", "儳" => "Chan", "儴" => "Rang", "儵" => "Shu",
+ "儶" => "Hui", "儷" => "Li", "儸" => "Luo", "儹" => "Zan", "儺" => "Nuo", "儻" => "Tang",
+ "儼" => "Yan", "儽" => "Lei", "儾" => "Nang", "å„¿" => "Er", "å…€" => "Wu", "å…" => "Yun",
+ "å…‚" => "Zan", "å…ƒ" => "Yuan", "å…„" => "Xiong", "å……" => "Chong", "å…†" => "Zhao", "å…‡" => "Xiong",
+ "å…ˆ" => "Xian", "å…‰" => "Guang", "å…" => "Dui", "å…‹" => "Ke", "å…Œ" => "Dui", "å…" => "Mian",
+ "å…" => "Tu", "å…" => "Chang", "å…" => "Er", "å…‘" => "Dui", "å…’" => "Er", "å…“" => "Xin",
+ "å…”" => "Tu", "å…•" => "Si", "å…–" => "Yan", "å…—" => "Yan", "å…˜" => "Shi", "å…™" => "Shi",
+ "å…" => "Dang", "å…›" => "Qian", "å…œ" => "Dou", "å…" => "Fen", "å…" => "Mao", "å…Ÿ" => "Shen",
+ "å… " => "Dou", "å…¡" => "Bai", "å…¢" => "Jing", "å…£" => "Li", "å…¤" => "Huang", "å…¥" => "Ru",
+ "å…¦" => "Wang", "å…§" => "Nei", "å…¨" => "Quan", "å…©" => "Liang", "å…ª" => "Yu", "å…«" => "Ba",
+ "å…¬" => "Gong", "å…" => "Liu", "å…®" => "Xi", "å…°" => "Lan", "å…±" => "Gong", "å…²" => "Tian",
+ "å…³" => "Guan", "å…´" => "Xing", "å…µ" => "Bing", "å…¶" => "Qi", "å…·" => "Ju", "å…¸" => "Dian",
+ "å…¹" => "Zi", "å…º" => "Ppwun", "å…»" => "Yang", "å…¼" => "Jian", "å…½" => "Shou", "å…¾" => "Ji",
+ "å…¿" => "Yi", "冀" => "Ji", "å†" => "Chan", "冂" => "Jiong", "冃" => "Mao", "冄" => "Ran",
+ "内" => "Nei", "円" => "Yuan", "冇" => "Mao", "冈" => "Gang", "冉" => "Ran", "å†" => "Ce",
+ "冋" => "Jiong", "册" => "Ce", "å†" => "Zai", "å†" => "Gua", "å†" => "Jiong", "å†" => "Mao",
+ "冑" => "Zhou", "冒" => "Mou", "冓" => "Gou", "冔" => "Xu", "冕" => "Mian", "冖" => "Mi",
+ "冗" => "Rong", "冘" => "Yin", "写" => "Xie", "å†" => "Kan", "军" => "Jun", "农" => "Nong",
+ "å†" => "Yi", "å†" => "Mi", "冟" => "Shi", "å† " => "Guan", "冡" => "Meng", "冢" => "Zhong",
+ "冣" => "Ju", "冤" => "Yuan", "冥" => "Ming", "冦" => "Kou", "冧" => "Lam", "冨" => "Fu",
+ "冩" => "Xie", "冪" => "Mi", "冫" => "Bing", "冬" => "Dong", "å†" => "Tai", "冮" => "Gang",
+ "冯" => "Feng", "冰" => "Bing", "冱" => "Hu", "冲" => "Chong", "决" => "Jue", "冴" => "Hu",
+ "况" => "Kuang", "冶" => "Ye", "冷" => "Leng", "冸" => "Pan", "冹" => "Fu", "冺" => "Min",
+ "冻" => "Dong", "冼" => "Xian", "冽" => "Lie", "冾" => "Xia", "冿" => "Jian", "净" => "Jing",
+ "å‡" => "Shu", "凂" => "Mei", "凃" => "Tu", "凄" => "Qi", "凅" => "Gu", "准" => "Zhun",
+ "凇" => "Song", "凈" => "Jing", "凉" => "Liang", "å‡" => "Qing", "凋" => "Diao", "凌" => "Ling",
+ "å‡" => "Dong", "å‡" => "Gan", "å‡" => "Jian", "å‡" => "Yin", "凑" => "Cou", "凒" => "Yi",
+ "凓" => "Li", "凔" => "Cang", "凕" => "Ming", "凖" => "Zhuen", "凗" => "Cui", "凘" => "Si",
+ "凙" => "Duo", "å‡" => "Jin", "凛" => "Lin", "凜" => "Lin", "å‡" => "Ning", "å‡" => "Xi",
+ "凟" => "Du", "å‡ " => "Ji", "凡" => "Fan", "凢" => "Fan", "凣" => "Fan", "凤" => "Feng",
+ "凥" => "Ju", "処" => "Chu", "凧" => "Tako", "凨" => "Feng", "凩" => "Mok", "凪" => "Ci",
+ "凫" => "Fu", "凬" => "Feng", "å‡" => "Ping", "凮" => "Feng", "凯" => "Kai", "凰" => "Huang",
+ "凱" => "Kai", "凲" => "Gan", "凳" => "Deng", "凴" => "Ping", "凵" => "Qu", "凶" => "Xiong",
+ "凷" => "Kuai", "凸" => "Tu", "凹" => "Ao", "出" => "Chu", "击" => "Ji", "凼" => "Dang",
+ "函" => "Han", "凾" => "Han", "凿" => "Zao", "åˆ" => "Diao", "刂" => "Dao", "刃" => "Ren",
+ "刄" => "Ren", "刅" => "Chuang", "分" => "Fen", "切" => "Qie", "刈" => "Yi", "刉" => "Ji",
+ "åˆ" => "Kan", "刋" => "Qian", "刌" => "Cun", "åˆ" => "Chu", "åˆ" => "Wen", "åˆ" => "Ji",
+ "åˆ" => "Dan", "刑" => "Xing", "划" => "Hua", "刓" => "Wan", "刔" => "Jue", "刕" => "Li",
+ "刖" => "Yue", "列" => "Lie", "刘" => "Liu", "则" => "Ze", "åˆ" => "Gang", "创" => "Chuang",
+ "刜" => "Fu", "åˆ" => "Chu", "åˆ" => "Qu", "刟" => "Ju", "åˆ " => "Shan", "刡" => "Min",
+ "刢" => "Ling", "刣" => "Zhong", "判" => "Pan", "別" => "Bie", "刦" => "Jie", "刧" => "Jie",
+ "刨" => "Bao", "利" => "Li", "刪" => "Shan", "别" => "Bie", "刬" => "Chan", "åˆ" => "Jing",
+ "刮" => "Gua", "刯" => "Gen", "到" => "Dao", "刱" => "Chuang", "刲" => "Kui", "刳" => "Ku",
+ "刴" => "Duo", "刵" => "Er", "制" => "Zhi", "刷" => "Shua", "券" => "Quan", "刹" => "Cha",
+ "刺" => "Ci", "刻" => "Ke", "刼" => "Jie", "刽" => "Gui", "刾" => "Ci", "刿" => "Gui",
+ "剀" => "Kai", "å‰" => "Duo", "剂" => "Ji", "剃" => "Ti", "剄" => "Jing", "剅" => "Lou",
+ "剆" => "Gen", "則" => "Ze", "剈" => "Yuan", "剉" => "Cuo", "å‰" => "Xue", "剋" => "Ke",
+ "剌" => "La", "å‰" => "Qian", "å‰" => "Cha", "å‰" => "Chuang", "å‰" => "Gua", "剑" => "Jian",
+ "剒" => "Cuo", "剓" => "Li", "剔" => "Ti", "剕" => "Fei", "剖" => "Pou", "剗" => "Chan",
+ "剘" => "Qi", "剙" => "Chuang", "å‰" => "Zi", "剛" => "Gang", "剜" => "Wan", "å‰" => "Bo",
+ "å‰" => "Ji", "剟" => "Duo", "å‰ " => "Qing", "剡" => "Yan", "剢" => "Zhuo", "剣" => "Jian",
+ "剤" => "Ji", "剥" => "Bo", "剦" => "Yan", "剧" => "Ju", "剨" => "Huo", "剩" => "Sheng",
+ "剪" => "Jian", "剫" => "Duo", "剬" => "Duan", "å‰" => "Wu", "剮" => "Gua", "副" => "Fu",
+ "剰" => "Sheng", "剱" => "Jian", "割" => "Ge", "剳" => "Zha", "剴" => "Kai", "創" => "Chuang",
+ "剶" => "Juan", "剷" => "Chan", "剸" => "Tuan", "剹" => "Lu", "剺" => "Li", "剻" => "Fou",
+ "剼" => "Shan", "剽" => "Piao", "剾" => "Kou", "剿" => "Jiao", "å€" => "Gua", "å" => "Qiao",
+ "å‚" => "Jue", "åƒ" => "Hua", "å„" => "Zha", "å…" => "Zhuo", "å†" => "Lian", "å‡" => "Ju",
+ "åˆ" => "Pi", "å‰" => "Liu", "å" => "Gui", "å‹" => "Jiao", "åŒ" => "Gui", "å" => "Jian",
+ "å" => "Jian", "å" => "Tang", "å" => "Huo", "å‘" => "Ji", "å’" => "Jian", "å“" => "Yi",
+ "å”" => "Jian", "å•" => "Zhi", "å–" => "Chan", "å—" => "Cuan", "å˜" => "Mo", "å™" => "Li",
+ "å" => "Zhu", "å›" => "Li", "åœ" => "Ya", "å" => "Quan", "å" => "Ban", "åŸ" => "Gong",
+ "å " => "Jia", "å¡" => "Wu", "å¢" => "Mai", "å£" => "Lie", "å¤" => "Jin", "å¥" => "Keng",
+ "å¦" => "Xie", "å§" => "Zhi", "å¨" => "Dong", "å©" => "Zhu", "åª" => "Nu", "å«" => "Jie",
+ "å¬" => "Qu", "å" => "Shao", "å®" => "Yi", "å¯" => "Zhu", "å°" => "Miao", "å±" => "Li",
+ "å²" => "Jing", "å³" => "Lao", "å´" => "Lao", "åµ" => "Juan", "å¶" => "Kou", "å·" => "Yang",
+ "å¸" => "Wa", "å¹" => "Xiao", "åº" => "Mou", "å»" => "Kuang", "å¼" => "Jie", "å½" => "Lie",
+ "å¾" => "He", "å¿" => "Shi", "å‹€" => "Ke", "å‹" => "Jing", "å‹‚" => "Hao", "勃" => "Bo",
+ "勄" => "Min", "勅" => "Chi", "勆" => "Lang", "勇" => "Yong", "勈" => "Yong", "勉" => "Mian",
+ "å‹" => "Ke", "å‹‹" => "Xun", "å‹Œ" => "Juan", "å‹" => "Qing", "å‹" => "Lu", "å‹" => "Pou",
+ "å‹" => "Meng", "å‹‘" => "Lai", "å‹’" => "Le", "å‹“" => "Kai", "å‹”" => "Mian", "å‹•" => "Dong",
+ "å‹–" => "Xu", "å‹—" => "Xu", "勘" => "Kan", "å‹™" => "Wu", "å‹" => "Yi", "å‹›" => "Xun",
+ "å‹œ" => "Weng", "å‹" => "Sheng", "å‹" => "Lao", "å‹Ÿ" => "Mu", "å‹ " => "Lu", "å‹¡" => "Piao",
+ "勢" => "Shi", "勣" => "Ji", "勤" => "Qin", "勥" => "Qiang", "勦" => "Jiao", "勧" => "Quan",
+ "勨" => "Yang", "å‹©" => "Yi", "勪" => "Jue", "å‹«" => "Fan", "勬" => "Juan", "å‹" => "Tong",
+ "勮" => "Ju", "勯" => "Dan", "勰" => "Xie", "勱" => "Mai", "勲" => "Xun", "勳" => "Xun",
+ "勴" => "Lu", "勵" => "Li", "勶" => "Che", "勷" => "Rang", "勸" => "Quan", "勹" => "Bao",
+ "勺" => "Shao", "勻" => "Yun", "勼" => "Jiu", "勽" => "Bao", "勾" => "Gou", "勿" => "Wu",
+ "åŒ" => "Mwun", "匂" => "Nay", "匃" => "Gai", "匄" => "Gai", "包" => "Bao", "匆" => "Cong",
+ "匈" => "Xiong", "匉" => "Peng", "åŒ" => "Ju", "匋" => "Tao", "匌" => "Ge", "åŒ" => "Pu",
+ "åŒ" => "An", "åŒ" => "Pao", "åŒ" => "Fu", "匑" => "Gong", "匒" => "Da", "匓" => "Jiu",
+ "匔" => "Qiong", "匕" => "Bi", "化" => "Hua", "北" => "Bei", "匘" => "Nao", "匙" => "Chi",
+ "åŒ" => "Fang", "匛" => "Jiu", "匜" => "Yi", "åŒ" => "Za", "åŒ" => "Jiang", "匟" => "Kang",
+ "åŒ " => "Jiang", "匡" => "Kuang", "匢" => "Hu", "匣" => "Xia", "匤" => "Qu", "匥" => "Bian",
+ "匦" => "Gui", "匧" => "Qie", "匨" => "Zang", "匩" => "Kuang", "匪" => "Fei", "匫" => "Hu",
+ "匬" => "Tou", "åŒ" => "Gui", "匮" => "Gui", "匯" => "Hui", "匰" => "Dan", "匱" => "Gui",
+ "匲" => "Lian", "匳" => "Lian", "匴" => "Suan", "匵" => "Du", "匶" => "Jiu", "匷" => "Qu",
+ "匸" => "Xi", "匹" => "Pi", "区" => "Qu", "医" => "Yi", "匼" => "Qia", "匽" => "Yan",
+ "匾" => "Bian", "匿" => "Ni", "å€" => "Qu", "å" => "Shi", "å‚" => "Xin", "åƒ" => "Qian",
+ "å„" => "Nian", "å…" => "Sa", "å†" => "Zu", "å‡" => "Sheng", "åˆ" => "Wu", "å‰" => "Hui",
+ "å" => "Ban", "å‹" => "Shi", "åŒ" => "Xi", "å" => "Wan", "å" => "Hua", "å" => "Xie",
+ "å" => "Wan", "å‘" => "Bei", "å’" => "Zu", "å“" => "Zhuo", "å”" => "Xie", "å•" => "Dan",
+ "å–" => "Mai", "å—" => "Nan", "å˜" => "Dan", "å™" => "Ji", "å" => "Bo", "å›" => "Shuai",
+ "åœ" => "Bu", "å" => "Kuang", "å" => "Bian", "åŸ" => "Bu", "å " => "Zhan", "å¡" => "Qia",
+ "å¢" => "Lu", "å£" => "You", "å¤" => "Lu", "å¥" => "Xi", "å¦" => "Gua", "å§" => "Wo",
+ "å¨" => "Xie", "å©" => "Jie", "åª" => "Jie", "å«" => "Wei", "å¬" => "Ang", "å" => "Qiong",
+ "å®" => "Zhi", "å¯" => "Mao", "å°" => "Yin", "å±" => "Wei", "å²" => "Shao", "å³" => "Ji",
+ "å´" => "Que", "åµ" => "Luan", "å¶" => "Shi", "å·" => "Juan", "å¸" => "Xie", "å¹" => "Xu",
+ "åº" => "Jin", "å»" => "Que", "å¼" => "Wu", "å½" => "Ji", "å¾" => "E", "å¿" => "Qing",
+ "å€" => "Xi", "å‚" => "Han", "åƒ" => "Zhan", "å„" => "E", "å…" => "Ting", "å†" => "Li",
+ "å‡" => "Zhe", "åˆ" => "Han", "å‰" => "Li", "å" => "Ya", "å‹" => "Ya", "åŒ" => "Yan",
+ "å" => "She", "å" => "Zhi", "å" => "Zha", "å" => "Pang", "å’" => "He", "å“" => "Ya",
+ "å”" => "Zhi", "å•" => "Ce", "å–" => "Pang", "å—" => "Ti", "å˜" => "Li", "å™" => "She",
+ "å" => "Hou", "å›" => "Ting", "åœ" => "Zui", "å" => "Cuo", "å" => "Fei", "åŸ" => "Yuan",
+ "å " => "Ce", "å¡" => "Yuan", "å¢" => "Xiang", "å£" => "Yan", "å¤" => "Li", "å¥" => "Jue",
+ "å¦" => "Sha", "å§" => "Dian", "å¨" => "Chu", "å©" => "Jiu", "åª" => "Qin", "å«" => "Ao",
+ "å¬" => "Gui", "å" => "Yan", "å®" => "Si", "å¯" => "Li", "å°" => "Chang", "å±" => "Lan",
+ "å²" => "Li", "å³" => "Yan", "å´" => "Yan", "åµ" => "Yuan", "å¶" => "Si", "å·" => "Gong",
+ "å¸" => "Lin", "å¹" => "Qiu", "åº" => "Qu", "å»" => "Qu", "å¼" => "Uk", "å½" => "Lei",
+ "å¾" => "Du", "å¿" => "Xian", "å€" => "Zhuan", "å" => "San", "å‚" => "Can", "åƒ" => "Can",
+ "å„" => "Can", "å…" => "Can", "å†" => "Ai", "å‡" => "Dai", "åˆ" => "You", "å‰" => "Cha",
+ "å" => "Ji", "å‹" => "You", "åŒ" => "Shuang", "å" => "Fan", "å" => "Shou", "å" => "Guai",
+ "å" => "Ba", "å‘" => "Fa", "å’" => "Ruo", "å“" => "Shi", "å”" => "Shu", "å•" => "Zhuo",
+ "å–" => "Qu", "å—" => "Shou", "å˜" => "Bian", "å™" => "Xu", "å" => "Jia", "å›" => "Pan",
+ "åœ" => "Sou", "å" => "Gao", "å" => "Wei", "åŸ" => "Sou", "å " => "Die", "å¡" => "Rui",
+ "å¢" => "Cong", "å£" => "Kou", "å¤" => "Gu", "å¥" => "Ju", "å¦" => "Ling", "å§" => "Gua",
+ "å¨" => "Tao", "å©" => "Kou", "åª" => "Zhi", "å«" => "Jiao", "å¬" => "Zhao", "å" => "Ba",
+ "å®" => "Ding", "å¯" => "Ke", "å°" => "Tai", "å±" => "Chi", "å²" => "Shi", "å³" => "You",
+ "å´" => "Qiu", "åµ" => "Po", "å¶" => "Xie", "å·" => "Hao", "å¸" => "Si", "å¹" => "Tan",
+ "åº" => "Chi", "å»" => "Le", "å¼" => "Diao", "å½" => "Ji", "å¿" => "Hong", "å" => "Xu",
+ "å‚" => "Mang", "åƒ" => "Chi", "å„" => "Ge", "å…" => "Xuan", "å†" => "Yao", "å‡" => "Zi",
+ "åˆ" => "He", "å‰" => "Ji", "å" => "Diao", "å‹" => "Cun", "åŒ" => "Tong", "å" => "Ming",
+ "å" => "Hou", "å" => "Li", "å" => "Tu", "å‘" => "Xiang", "å’" => "Zha", "å“" => "Xia",
+ "å”" => "Ye", "å•" => "Lu", "å–" => "A", "å—" => "Ma", "å˜" => "Ou", "å™" => "Xue",
+ "å" => "Yi", "å›" => "Jun", "åœ" => "Chou", "å" => "Lin", "å" => "Tun", "åŸ" => "Yin",
+ "å " => "Fei", "å¡" => "Bi", "å¢" => "Qin", "å£" => "Qin", "å¤" => "Jie", "å¥" => "Bu",
+ "å¦" => "Fou", "å§" => "Ba", "å¨" => "Dun", "å©" => "Fen", "åª" => "E", "å«" => "Han",
+ "å¬" => "Ting", "å" => "Hang", "å®" => "Shun", "å¯" => "Qi", "å°" => "Hong", "å±" => "Zhi",
+ "å²" => "Shen", "å³" => "Wu", "å´" => "Wu", "åµ" => "Chao", "å¶" => "Ne", "å·" => "Xue",
+ "å¸" => "Xi", "å¹" => "Chui", "åº" => "Dou", "å»" => "Wen", "å¼" => "Hou", "å½" => "Ou",
+ "å¾" => "Wu", "å¿" => "Gao", "å‘€" => "Ya", "å‘" => "Jun", "å‘‚" => "Lu", "呃" => "E",
+ "呄" => "Ge", "呅" => "Mei", "呆" => "Ai", "呇" => "Qi", "呈" => "Cheng", "呉" => "Wu",
+ "å‘" => "Gao", "å‘‹" => "Fu", "å‘Œ" => "Jiao", "å‘" => "Hong", "å‘" => "Chi", "å‘" => "Sheng",
+ "å‘" => "Ne", "å‘‘" => "Tun", "å‘’" => "Fu", "å‘“" => "Yi", "å‘”" => "Dai", "å‘•" => "Ou",
+ "呖" => "Li", "呗" => "Bai", "员" => "Yuan", "呙" => "Kuai", "呛" => "Qiang", "呜" => "Wu",
+ "å‘" => "E", "å‘" => "Shi", "å‘Ÿ" => "Quan", "å‘ " => "Pen", "å‘¡" => "Wen", "å‘¢" => "Ni",
+ "呣" => "M", "呤" => "Ling", "呥" => "Ran", "呦" => "You", "呧" => "Di", "周" => "Zhou",
+ "å‘©" => "Shi", "呪" => "Zhou", "å‘«" => "Tie", "呬" => "Xi", "å‘" => "Yi", "å‘®" => "Qi",
+ "呯" => "Ping", "呰" => "Zi", "呱" => "Gu", "呲" => "Zi", "味" => "Wei", "呴" => "Xu",
+ "呵" => "He", "呶" => "Nao", "呷" => "Xia", "呸" => "Pei", "呹" => "Yi", "呺" => "Xiao",
+ "呻" => "Shen", "呼" => "Hu", "命" => "Ming", "呾" => "Da", "呿" => "Qu", "咀" => "Ju",
+ "å’" => "Gem", "å’‚" => "Za", "å’ƒ" => "Tuo", "å’„" => "Duo", "å’…" => "Pou", "å’†" => "Pao",
+ "å’‡" => "Bi", "å’ˆ" => "Fu", "å’‰" => "Yang", "å’" => "He", "å’‹" => "Zha", "å’Œ" => "He",
+ "å’" => "Hai", "å’" => "Jiu", "å’" => "Yong", "å’" => "Fu", "å’‘" => "Que", "å’’" => "Zhou",
+ "å’“" => "Wa", "å’”" => "Ka", "å’•" => "Gu", "å’–" => "Ka", "å’—" => "Zuo", "å’˜" => "Bu",
+ "å’™" => "Long", "å’" => "Dong", "å’›" => "Ning", "å’œ" => "Tha", "å’" => "Si", "å’" => "Xian",
+ "å’Ÿ" => "Huo", "å’ " => "Qi", "å’¡" => "Er", "å’¢" => "E", "å’£" => "Guang", "å’¤" => "Zha",
+ "å’¥" => "Xi", "å’¦" => "Yi", "å’§" => "Lie", "å’¨" => "Zi", "å’©" => "Mie", "å’ª" => "Mi",
+ "å’«" => "Zhi", "å’¬" => "Yao", "å’" => "Ji", "å’®" => "Zhou", "å’¯" => "Ge", "å’°" => "Shuai",
+ "å’±" => "Zan", "å’²" => "Xiao", "å’³" => "Ke", "å’´" => "Hui", "å’µ" => "Kua", "å’¶" => "Huai",
+ "å’·" => "Tao", "å’¸" => "Xian", "å’¹" => "E", "å’º" => "Xuan", "å’»" => "Xiu", "å’¼" => "Wai",
+ "å’½" => "Yan", "å’¾" => "Lao", "å’¿" => "Yi", "å“€" => "Ai", "å“" => "Pin", "å“‚" => "Shen",
+ "哃" => "Tong", "哄" => "Hong", "哅" => "Xiong", "哆" => "Chi", "哇" => "Wa", "哈" => "Ha",
+ "哉" => "Zai", "å“" => "Yu", "å“‹" => "Di", "å“Œ" => "Pai", "å“" => "Xiang", "å“" => "Ai",
+ "å“" => "Hen", "å“" => "Kuang", "å“‘" => "Ya", "å“’" => "Da", "å““" => "Xiao", "å“”" => "Bi",
+ "å“•" => "Yue", "å“—" => "Hua", "哘" => "Sasou", "å“™" => "Kuai", "å“" => "Duo", "å“œ" => "Ji",
+ "å“" => "Nong", "å“" => "Mou", "å“Ÿ" => "Yo", "å“ " => "Hao", "å“¡" => "Yuan", "å“¢" => "Long",
+ "哣" => "Pou", "哤" => "Mang", "哥" => "Ge", "哦" => "E", "哧" => "Chi", "哨" => "Shao",
+ "å“©" => "Li", "哪" => "Na", "å“«" => "Zu", "哬" => "He", "å“" => "Ku", "å“®" => "Xiao",
+ "哯" => "Xian", "哰" => "Lao", "哱" => "Bo", "哲" => "Zhe", "哳" => "Zha", "哴" => "Liang",
+ "哵" => "Ba", "哶" => "Mie", "哷" => "Le", "哸" => "Sui", "哹" => "Fou", "哺" => "Bu",
+ "å“»" => "Han", "哼" => "Heng", "哽" => "Geng", "哾" => "Shuo", "å“¿" => "Ge", "å”" => "Yan",
+ "唂" => "Gu", "唃" => "Gu", "唄" => "Bai", "唅" => "Han", "唆" => "Suo", "唇" => "Chun",
+ "唈" => "Yi", "唉" => "Ai", "å”" => "Jia", "唋" => "Tu", "唌" => "Xian", "å”" => "Huan",
+ "å”" => "Li", "å”" => "Xi", "å”" => "Tang", "唑" => "Zuo", "å”’" => "Qiu", "唓" => "Che",
+ "唔" => "Wu", "唕" => "Zao", "唖" => "Ya", "唗" => "Dou", "唘" => "Qi", "唙" => "Di",
+ "å”" => "Qin", "å”›" => "Ma", "唜" => "Mal", "å”" => "Hong", "å”" => "Dou", "唟" => "Kes",
+ "å” " => "Lao", "唡" => "Liang", "唢" => "Suo", "唣" => "Zao", "唤" => "Huan", "唥" => "Lang",
+ "唦" => "Sha", "唧" => "Ji", "唨" => "Zuo", "唩" => "Wo", "唪" => "Feng", "唫" => "Yin",
+ "唬" => "Hu", "å”" => "Qi", "å”®" => "Shou", "唯" => "Wei", "å”°" => "Shua", "å”±" => "Chang",
+ "唲" => "Er", "唳" => "Li", "唴" => "Qiang", "唵" => "An", "唶" => "Jie", "唷" => "Yo",
+ "唸" => "Nian", "唹" => "Yu", "唺" => "Tian", "唻" => "Lai", "唼" => "Sha", "唽" => "Xi",
+ "唾" => "Tuo", "唿" => "Hu", "å•€" => "Ai", "å•" => "Zhou", "å•‚" => "Nou", "啃" => "Ken",
+ "啄" => "Zhuo", "啅" => "Zhuo", "商" => "Shang", "啇" => "Di", "啈" => "Heng", "啉" => "Lan",
+ "å•" => "A", "å•‹" => "Xiao", "å•Œ" => "Xiang", "å•" => "Tun", "å•" => "Wu", "å•" => "Wen",
+ "å•" => "Cui", "å•‘" => "Sha", "å•’" => "Hu", "å•“" => "Qi", "å•”" => "Qi", "å••" => "Tao",
+ "å•–" => "Dan", "å•—" => "Dan", "啘" => "Ye", "å•™" => "Zi", "å•" => "Bi", "å•›" => "Cui",
+ "å•œ" => "Chuo", "å•" => "He", "å•" => "Ya", "å•Ÿ" => "Qi", "å• " => "Zhe", "å•¡" => "Pei",
+ "啢" => "Liang", "啣" => "Xian", "啤" => "Pi", "啥" => "Sha", "啦" => "La", "啧" => "Ze",
+ "啨" => "Qing", "å•©" => "Gua", "啪" => "Pa", "å•«" => "Zhe", "啬" => "Se", "å•" => "Zhuan",
+ "啮" => "Nie", "啯" => "Guo", "啰" => "Luo", "啱" => "Yan", "啲" => "Di", "啳" => "Quan",
+ "啴" => "Tan", "啵" => "Bo", "啶" => "Ding", "啷" => "Lang", "啸" => "Xiao", "啺" => "Tang",
+ "啻" => "Chi", "啼" => "Ti", "啽" => "An", "啾" => "Jiu", "啿" => "Dan", "喀" => "Ke",
+ "å–" => "Yong", "å–‚" => "Wei", "å–ƒ" => "Nan", "å–„" => "Shan", "å–…" => "Yu", "å–†" => "Zhe",
+ "å–‡" => "La", "å–ˆ" => "Jie", "å–‰" => "Hou", "å–" => "Han", "å–‹" => "Die", "å–Œ" => "Zhou",
+ "å–" => "Chai", "å–" => "Wai", "å–" => "Re", "å–" => "Yu", "å–‘" => "Yin", "å–’" => "Zan",
+ "å–“" => "Yao", "å–”" => "Wo", "å–•" => "Mian", "å––" => "Hu", "å–—" => "Yun", "å–˜" => "Chuan",
+ "å–™" => "Hui", "å–" => "Huan", "å–›" => "Huan", "å–œ" => "Xi", "å–" => "He", "å–" => "Ji",
+ "å–Ÿ" => "Kui", "å– " => "Zhong", "å–¡" => "Wei", "å–¢" => "Sha", "å–£" => "Xu", "å–¤" => "Huang",
+ "å–¥" => "Du", "å–¦" => "Nie", "å–§" => "Xuan", "å–¨" => "Liang", "å–©" => "Yu", "å–ª" => "Sang",
+ "å–«" => "Chi", "å–¬" => "Qiao", "å–" => "Yan", "å–®" => "Dan", "å–¯" => "Pen", "å–°" => "Can",
+ "å–±" => "Li", "å–²" => "Yo", "å–³" => "Zha", "å–´" => "Wei", "å–µ" => "Miao", "å–¶" => "Ying",
+ "å–·" => "Pen", "å–¸" => "Phos", "å–¹" => "Kui", "å–º" => "Xi", "å–»" => "Yu", "å–¼" => "Jie",
+ "å–½" => "Lou", "å–¾" => "Ku", "å–¿" => "Sao", "å—€" => "Huo", "å—" => "Ti", "å—‚" => "Yao",
+ "å—ƒ" => "He", "å—„" => "A", "å—…" => "Xiu", "å—†" => "Qiang", "å—‡" => "Se", "å—ˆ" => "Yong",
+ "å—‰" => "Su", "å—" => "Hong", "å—‹" => "Xie", "å—Œ" => "Yi", "å—" => "Suo", "å—" => "Ma",
+ "å—" => "Cha", "å—" => "Hai", "å—‘" => "Ke", "å—’" => "Ta", "å—“" => "Sang", "å—”" => "Tian",
+ "å—•" => "Ru", "å—–" => "Sou", "å——" => "Wa", "å—˜" => "Ji", "å—™" => "Pang", "å—" => "Wu",
+ "å—›" => "Xian", "å—œ" => "Shi", "å—" => "Ge", "å—" => "Zi", "å—Ÿ" => "Jie", "å— " => "Luo",
+ "å—¡" => "Weng", "å—¢" => "Wa", "å—£" => "Si", "å—¤" => "Chi", "å—¥" => "Hao", "å—¦" => "Suo",
+ "å—§" => "Jia", "å—¨" => "Hai", "å—©" => "Suo", "å—ª" => "Qin", "å—«" => "Nie", "å—¬" => "He",
+ "å—" => "Cis", "å—®" => "Sai", "å—¯" => "Ng", "å—°" => "Ge", "å—±" => "Na", "å—²" => "Dia",
+ "å—³" => "Ai", "å—µ" => "Tong", "å—¶" => "Bi", "å—·" => "Ao", "å—¸" => "Ao", "å—¹" => "Lian",
+ "å—º" => "Cui", "å—»" => "Zhe", "å—¼" => "Mo", "å—½" => "Sou", "å—¾" => "Sou", "å—¿" => "Tan",
+ "å˜" => "Qi", "嘂" => "Jiao", "嘃" => "Chong", "嘄" => "Jiao", "嘅" => "Kai", "嘆" => "Tan",
+ "嘇" => "San", "嘈" => "Cao", "嘉" => "Jia", "å˜" => "Ai", "嘋" => "Xiao", "嘌" => "Piao",
+ "å˜" => "Lou", "å˜" => "Ga", "å˜" => "Gu", "å˜" => "Xiao", "嘑" => "Hu", "嘒" => "Hui",
+ "嘓" => "Guo", "嘔" => "Ou", "嘕" => "Xian", "嘖" => "Ze", "嘗" => "Chang", "嘘" => "Xu",
+ "嘙" => "Po", "å˜" => "De", "嘛" => "Ma", "嘜" => "Ma", "å˜" => "Hu", "å˜" => "Lei",
+ "嘟" => "Du", "å˜ " => "Ga", "嘡" => "Tang", "嘢" => "Ye", "嘣" => "Beng", "嘤" => "Ying",
+ "嘥" => "Saai", "嘦" => "Jiao", "嘧" => "Mi", "嘨" => "Xiao", "嘩" => "Hua", "嘪" => "Mai",
+ "嘫" => "Ran", "嘬" => "Zuo", "å˜" => "Peng", "嘮" => "Lao", "嘯" => "Xiao", "嘰" => "Ji",
+ "嘱" => "Zhu", "嘲" => "Chao", "嘳" => "Kui", "嘴" => "Zui", "嘵" => "Xiao", "嘶" => "Si",
+ "嘷" => "Hao", "嘸" => "Fu", "嘹" => "Liao", "嘺" => "Qiao", "嘻" => "Xi", "嘼" => "Xiu",
+ "嘽" => "Tan", "嘾" => "Tan", "嘿" => "Mo", "噀" => "Xun", "å™" => "E", "噂" => "Zun",
+ "噃" => "Fan", "噄" => "Chi", "噅" => "Hui", "噆" => "Zan", "噇" => "Chuang", "噈" => "Cu",
+ "噉" => "Dan", "å™" => "Yu", "噋" => "Tun", "噌" => "Cheng", "å™" => "Jiao", "å™" => "Ye",
+ "å™" => "Xi", "å™" => "Qi", "噑" => "Hao", "å™’" => "Lian", "噓" => "Xu", "å™”" => "Deng",
+ "噕" => "Hui", "å™–" => "Yin", "å™—" => "Pu", "噘" => "Jue", "å™™" => "Qin", "å™" => "Xun",
+ "å™›" => "Nie", "噜" => "Lu", "å™" => "Si", "å™" => "Yan", "噟" => "Ying", "å™ " => "Da",
+ "噡" => "Dan", "噢" => "Yu", "噣" => "Zhou", "噤" => "Jin", "噥" => "Nong", "噦" => "Yue",
+ "噧" => "Hui", "器" => "Qi", "噩" => "E", "噪" => "Zao", "噫" => "Yi", "噬" => "Shi",
+ "å™" => "Jiao", "å™®" => "Yuan", "噯" => "Ai", "å™°" => "Yong", "å™±" => "Jue", "噲" => "Kuai",
+ "噳" => "Yu", "噴" => "Pen", "噵" => "Dao", "噶" => "Ge", "噷" => "Xin", "噸" => "Dun",
+ "噹" => "Dang", "噺" => "Sin", "噻" => "Sai", "噼" => "Pi", "噽" => "Pi", "噾" => "Yin",
+ "噿" => "Zui", "å€" => "Ning", "å" => "Di", "å‚" => "Lan", "åƒ" => "Ta", "å„" => "Huo",
+ "å…" => "Ru", "å†" => "Hao", "å‡" => "Xia", "åˆ" => "Ya", "å‰" => "Duo", "å" => "Xi",
+ "å‹" => "Chou", "åŒ" => "Ji", "å" => "Jin", "å" => "Hao", "å" => "Ti", "å" => "Chang",
+ "å“" => "Ca", "å”" => "Ti", "å•" => "Lu", "å–" => "Hui", "å—" => "Bo", "å˜" => "You",
+ "å™" => "Nie", "å" => "Yin", "å›" => "Hu", "åœ" => "Mo", "å" => "Huang", "å" => "Zhe",
+ "åŸ" => "Li", "å " => "Liu", "å¡" => "Haai", "å¢" => "Nang", "å£" => "Xiao", "å¤" => "Mo",
+ "å¥" => "Yan", "å¦" => "Li", "å§" => "Lu", "å¨" => "Long", "å©" => "Fu", "åª" => "Dan",
+ "å«" => "Chen", "å¬" => "Pin", "å" => "Pi", "å®" => "Xiang", "å¯" => "Huo", "å°" => "Mo",
+ "å±" => "Xi", "å²" => "Duo", "å³" => "Ku", "å´" => "Yan", "åµ" => "Chan", "å¶" => "Ying",
+ "å·" => "Rang", "å¸" => "Dian", "å¹" => "La", "åº" => "Ta", "å»" => "Xiao", "å¼" => "Jiao",
+ "å½" => "Chuo", "å¾" => "Huan", "å¿" => "Huo", "囀" => "Zhuan", "å›" => "Nie", "囂" => "Xiao",
+ "囃" => "Ca", "囄" => "Li", "囅" => "Chan", "囆" => "Chai", "囇" => "Li", "囈" => "Yi",
+ "囉" => "Luo", "å›" => "Nang", "囋" => "Zan", "囌" => "Su", "å›" => "Xi", "å›" => "So",
+ "å›" => "Jian", "å›" => "Za", "囑" => "Zhu", "å›’" => "Lan", "囓" => "Nie", "å›”" => "Nang",
+ "å›—" => "Wei", "囘" => "Hui", "å›™" => "Yin", "å›" => "Qiu", "å››" => "Si", "囜" => "Nin",
+ "å›" => "Jian", "å›" => "Hui", "囟" => "Xin", "å› " => "Yin", "囡" => "Nan", "团" => "Tuan",
+ "団" => "Tuan", "囤" => "Dun", "囥" => "Kang", "囦" => "Yuan", "囧" => "Jiong", "囨" => "Pian",
+ "囩" => "Yun", "囪" => "Cong", "囫" => "Hu", "囬" => "Hui", "å›" => "Yuan", "å›®" => "You",
+ "囯" => "Guo", "困" => "Kun", "囱" => "Cong", "囲" => "Wei", "図" => "Tu", "围" => "Wei",
+ "囵" => "Lun", "囶" => "Guo", "囷" => "Qun", "囸" => "Ri", "囹" => "Ling", "固" => "Gu",
+ "å›»" => "Guo", "囼" => "Tai", "国" => "Guo", "图" => "Tu", "囿" => "You", "åœ" => "Yin",
+ "圂" => "Hun", "圃" => "Pu", "圄" => "Yu", "圅" => "Han", "圆" => "Yuan", "圇" => "Lun",
+ "圈" => "Quan", "圉" => "Yu", "åœ" => "Qing", "國" => "Guo", "圌" => "Chuan", "åœ" => "Wei",
+ "åœ" => "Yuan", "åœ" => "Quan", "åœ" => "Ku", "圑" => "Fu", "園" => "Yuan", "圓" => "Yuan",
+ "圔" => "E", "圕" => "Tu", "圖" => "Tu", "圗" => "Tu", "團" => "Tuan", "圙" => "Lue",
+ "åœ" => "Hui", "圛" => "Yi", "圜" => "Yuan", "åœ" => "Luan", "åœ" => "Luan", "土" => "Tu",
+ "åœ " => "Ya", "圡" => "Tu", "圢" => "Ting", "圣" => "Sheng", "圤" => "Pu", "圥" => "Lu",
+ "圦" => "Iri", "圧" => "Ya", "在" => "Zai", "圩" => "Wei", "圪" => "Ge", "圫" => "Yu",
+ "圬" => "Wu", "åœ" => "Gui", "圮" => "Pi", "圯" => "Yi", "地" => "Di", "圱" => "Qian",
+ "圲" => "Qian", "圳" => "Zhen", "圴" => "Zhuo", "圵" => "Dang", "圶" => "Qia", "圷" => "Akutsu",
+ "圸" => "Yama", "圹" => "Kuang", "场" => "Chang", "圻" => "Qi", "圼" => "Nie", "圽" => "Mo",
+ "圾" => "Ji", "圿" => "Jia", "å€" => "Zhi", "å" => "Zhi", "å‚" => "Ban", "åƒ" => "Xun",
+ "å„" => "Tou", "å…" => "Qin", "å†" => "Fen", "å‡" => "Jun", "åˆ" => "Keng", "å‰" => "Tun",
+ "å" => "Fang", "å‹" => "Fen", "åŒ" => "Ben", "å" => "Tan", "å" => "Kan", "å" => "Pi",
+ "å" => "Zuo", "å‘" => "Keng", "å’" => "Bi", "å“" => "Xing", "å”" => "Di", "å•" => "Jing",
+ "å–" => "Ji", "å—" => "Kuai", "å˜" => "Di", "å™" => "Jing", "å" => "Jian", "å›" => "Tan",
+ "åœ" => "Li", "å" => "Ba", "å" => "Wu", "åŸ" => "Fen", "å " => "Zhui", "å¡" => "Po",
+ "å¢" => "Pan", "å£" => "Tang", "å¤" => "Kun", "å¥" => "Qu", "å¦" => "Tan", "å§" => "Zhi",
+ "å¨" => "Tuo", "å©" => "Gan", "åª" => "Ping", "å«" => "Dian", "å¬" => "Gua", "å" => "Ni",
+ "å®" => "Tai", "å¯" => "Pi", "å°" => "Jiong", "å±" => "Yang", "å²" => "Fo", "å³" => "Ao",
+ "å´" => "Liu", "åµ" => "Qiu", "å¶" => "Mu", "å·" => "Ke", "å¸" => "Gou", "å¹" => "Xue",
+ "åº" => "Ba", "å»" => "Chi", "å¼" => "Che", "å½" => "Ling", "å¾" => "Zhu", "å¿" => "Fu",
+ "å€" => "Hu", "å" => "Zhi", "å‚" => "Chui", "åƒ" => "La", "å„" => "Long", "å…" => "Long",
+ "å†" => "Lu", "å‡" => "Ao", "åˆ" => "Tay", "å‰" => "Pao", "å‹" => "Xing", "åŒ" => "Dong",
+ "å" => "Ji", "å" => "Ke", "å" => "Lu", "å" => "Ci", "å‘" => "Chi", "å’" => "Lei",
+ "å“" => "Gai", "å”" => "Yin", "å•" => "Hou", "å–" => "Dui", "å—" => "Zhao", "å˜" => "Fu",
+ "å™" => "Guang", "å" => "Yao", "å›" => "Duo", "åœ" => "Duo", "å" => "Gui", "å" => "Cha",
+ "åŸ" => "Yang", "å " => "Yin", "å¡" => "Fa", "å¢" => "Gou", "å£" => "Yuan", "å¤" => "Die",
+ "å¥" => "Xie", "å¦" => "Ken", "å§" => "Jiong", "å¨" => "Shou", "å©" => "E", "åª" => "Ha",
+ "å«" => "Dian", "å¬" => "Hong", "å" => "Wu", "å®" => "Kua", "å°" => "Tao", "å±" => "Dang",
+ "å²" => "Kai", "å³" => "Gake", "å´" => "Nao", "åµ" => "An", "å¶" => "Xing", "å·" => "Xian",
+ "å¸" => "Huan", "å¹" => "Bang", "åº" => "Pei", "å»" => "Ba", "å¼" => "Yi", "å½" => "Yin",
+ "å¾" => "Han", "å¿" => "Xu", "埀" => "Chui", "åŸ" => "Cen", "埂" => "Geng", "埃" => "Ai",
+ "埄" => "Peng", "埅" => "Fang", "埆" => "Que", "埇" => "Yong", "埈" => "Xun", "埉" => "Jia",
+ "åŸ" => "Di", "埋" => "Mai", "埌" => "Lang", "åŸ" => "Xuan", "åŸ" => "Cheng", "åŸ" => "Yan",
+ "åŸ" => "Jin", "埑" => "Zhe", "埒" => "Lei", "埓" => "Lie", "埔" => "Bu", "埕" => "Cheng",
+ "埖" => "Gomi", "埗" => "Bu", "埘" => "Shi", "埙" => "Xun", "åŸ" => "Guo", "埛" => "Jiong",
+ "埜" => "Ye", "åŸ" => "Nian", "åŸ" => "Di", "域" => "Yu", "åŸ " => "Bu", "埡" => "Ya",
+ "埢" => "Juan", "埣" => "Sui", "埤" => "Pi", "埥" => "Cheng", "埦" => "Wan", "埧" => "Ju",
+ "埨" => "Lun", "埩" => "Zheng", "埪" => "Kong", "埫" => "Chong", "埬" => "Dong", "åŸ" => "Dai",
+ "埮" => "Tan", "埯" => "An", "埰" => "Cai", "埱" => "Shu", "埲" => "Beng", "埳" => "Kan",
+ "埴" => "Zhi", "埵" => "Duo", "埶" => "Yi", "執" => "Zhi", "埸" => "Yi", "培" => "Pei",
+ "基" => "Ji", "埻" => "Zhun", "埼" => "Qi", "埽" => "Sao", "埾" => "Ju", "埿" => "Ni",
+ "å " => "Ke", "å ‚" => "Tang", "å ƒ" => "Kun", "å „" => "Ni", "å …" => "Jian", "å †" => "Dui",
+ "å ‡" => "Jin", "å ˆ" => "Gang", "å ‰" => "Yu", "å " => "E", "å ‹" => "Peng", "å Œ" => "Gu",
+ "å " => "Tu", "å " => "Leng", "å " => "Ya", "å ‘" => "Qian", "å “" => "An", "å •" => "Duo",
+ "å –" => "Nao", "å —" => "Tu", "å ˜" => "Cheng", "å ™" => "Yin", "å " => "Hun", "å ›" => "Bi",
+ "å œ" => "Lian", "å " => "Guo", "å " => "Die", "å Ÿ" => "Zhuan", "å " => "Hou", "å ¡" => "Bao",
+ "å ¢" => "Bao", "å £" => "Yu", "å ¤" => "Di", "å ¥" => "Mao", "å ¦" => "Jie", "å §" => "Ruan",
+ "å ¨" => "E", "å ©" => "Geng", "å ª" => "Kan", "å «" => "Zong", "å ¬" => "Yu", "å " => "Huang",
+ "å ®" => "E", "å ¯" => "Yao", "å °" => "Yan", "å ±" => "Bao", "å ²" => "Ji", "å ³" => "Mei",
+ "å ´" => "Chang", "å µ" => "Du", "å ¶" => "Tuo", "å ·" => "Yin", "å ¸" => "Feng", "å ¹" => "Zhong",
+ "å º" => "Jie", "å »" => "Zhen", "å ¼" => "Feng", "å ½" => "Gang", "å ¾" => "Chuan", "å ¿" => "Jian",
+ "å¡€" => "Pyeng", "å¡" => "Toride", "å¡‚" => "Xiang", "塃" => "Huang", "å¡„" => "Leng", "å¡…" => "Duan",
+ "塇" => "Xuan", "塈" => "Ji", "塉" => "Ji", "å¡" => "Kuai", "å¡‹" => "Ying", "å¡Œ" => "Ta",
+ "å¡" => "Cheng", "å¡" => "Yong", "å¡" => "Kai", "å¡" => "Su", "å¡‘" => "Su", "å¡’" => "Shi",
+ "塓" => "Mi", "塔" => "Ta", "塕" => "Weng", "塖" => "Cheng", "塗" => "Tu", "塘" => "Tang",
+ "å¡™" => "Que", "å¡" => "Zhong", "å¡›" => "Li", "å¡œ" => "Peng", "å¡" => "Bang", "å¡" => "Sai",
+ "å¡Ÿ" => "Zang", "å¡ " => "Dui", "å¡¡" => "Tian", "å¡¢" => "Wu", "å¡£" => "Cheng", "塤" => "Xun",
+ "塥" => "Ge", "塦" => "Zhen", "塧" => "Ai", "塨" => "Gong", "塩" => "Yan", "塪" => "Kan",
+ "å¡«" => "Tian", "塬" => "Yuan", "å¡" => "Wen", "å¡®" => "Xie", "塯" => "Liu", "å¡°" => "Ama",
+ "塱" => "Lang", "塲" => "Chang", "塳" => "Peng", "塴" => "Beng", "塵" => "Chen", "塶" => "Cu",
+ "塷" => "Lu", "塸" => "Ou", "塹" => "Qian", "塺" => "Mei", "塻" => "Mo", "塼" => "Zhuan",
+ "塽" => "Shuang", "塾" => "Shu", "å¡¿" => "Lou", "墀" => "Chi", "å¢" => "Man", "墂" => "Biao",
+ "境" => "Jing", "墄" => "Qi", "墅" => "Shu", "墆" => "Di", "墇" => "Zhang", "墈" => "Kan",
+ "墉" => "Yong", "å¢" => "Dian", "墋" => "Chen", "墌" => "Zhi", "å¢" => "Xi", "å¢" => "Guo",
+ "å¢" => "Qiang", "å¢" => "Jin", "墑" => "Di", "墒" => "Shang", "墓" => "Mu", "墔" => "Cui",
+ "墕" => "Yan", "墖" => "Ta", "増" => "Zeng", "墘" => "Qi", "墙" => "Qiang", "å¢" => "Liang",
+ "墜" => "Zhui", "å¢" => "Qiao", "å¢" => "Zeng", "墟" => "Xu", "å¢ " => "Shan", "墡" => "Shan",
+ "墢" => "Ba", "墣" => "Pu", "墤" => "Kuai", "墥" => "Dong", "墦" => "Fan", "墧" => "Que",
+ "墨" => "Mo", "墩" => "Dun", "墪" => "Dun", "墫" => "Dun", "墬" => "Di", "å¢" => "Sheng",
+ "墮" => "Duo", "墯" => "Duo", "墰" => "Tan", "墱" => "Deng", "墲" => "Wu", "墳" => "Fen",
+ "墴" => "Huang", "墵" => "Tan", "墶" => "Da", "墷" => "Ye", "墸" => "Sho", "墹" => "Mama",
+ "墺" => "Yu", "墻" => "Qiang", "墼" => "Ji", "墽" => "Qiao", "墾" => "Ken", "墿" => "Yi",
+ "壀" => "Pi", "å£" => "Bi", "壂" => "Dian", "壃" => "Jiang", "壄" => "Ye", "壅" => "Yong",
+ "壆" => "Bo", "壇" => "Tan", "壈" => "Lan", "壉" => "Ju", "å£" => "Huai", "壋" => "Dang",
+ "壌" => "Rang", "å£" => "Qian", "å£" => "Xun", "å£" => "Lan", "å£" => "Xi", "壑" => "He",
+ "壒" => "Ai", "壓" => "Ya", "壔" => "Dao", "壕" => "Hao", "壖" => "Ruan", "壗" => "Mama",
+ "壘" => "Lei", "壙" => "Kuang", "å£" => "Lu", "壛" => "Yan", "壜" => "Tan", "å£" => "Wei",
+ "å£" => "Huai", "壟" => "Long", "å£ " => "Long", "壡" => "Rui", "壢" => "Li", "壣" => "Lin",
+ "壤" => "Rang", "壥" => "Ten", "壦" => "Xun", "壧" => "Yan", "壨" => "Lei", "壩" => "Ba",
+ "士" => "Shi", "壬" => "Ren", "壮" => "Zhuang", "壯" => "Zhuang", "声" => "Sheng", "壱" => "Yi",
+ "売" => "Mai", "壳" => "Ke", "壴" => "Zhu", "壵" => "Zhuang", "壶" => "Hu", "壷" => "Hu",
+ "壸" => "Kun", "壹" => "Yi", "壺" => "Hu", "壻" => "Xu", "壼" => "Kun", "壽" => "Shou",
+ "壾" => "Mang", "壿" => "Zun", "å¤" => "Yi", "夂" => "Zhi", "夃" => "Gu", "处" => "Chu",
+ "夅" => "Jiang", "夆" => "Feng", "备" => "Bei", "夈" => "Cay", "変" => "Bian", "å¤" => "Sui",
+ "夋" => "Qun", "夌" => "Ling", "å¤" => "Fu", "å¤" => "Zuo", "å¤" => "Xia", "å¤" => "Xiong",
+ "夒" => "Nao", "夓" => "Xia", "夔" => "Kui", "夕" => "Xi", "外" => "Wai", "夗" => "Yuan",
+ "夘" => "Mao", "夙" => "Su", "å¤" => "Duo", "夛" => "Duo", "夜" => "Ye", "å¤" => "Qing",
+ "å¤" => "Uys", "够" => "Gou", "å¤ " => "Gou", "夡" => "Qi", "夢" => "Meng", "夣" => "Meng",
+ "夤" => "Yin", "夥" => "Huo", "夦" => "Chen", "大" => "Da", "夨" => "Ze", "天" => "Tian",
+ "太" => "Tai", "夫" => "Fu", "夬" => "Guai", "å¤" => "Yao", "央" => "Yang", "夯" => "Hang",
+ "夰" => "Gao", "失" => "Shi", "夲" => "Ben", "夳" => "Tai", "头" => "Tou", "夵" => "Yan",
+ "夶" => "Bi", "夷" => "Yi", "夸" => "Kua", "夹" => "Jia", "夺" => "Duo", "夻" => "Kwu",
+ "夼" => "Kuang", "夽" => "Yun", "夾" => "Jia", "夿" => "Pa", "奀" => "En", "å¥" => "Lian",
+ "奂" => "Huan", "奃" => "Di", "奄" => "Yan", "奅" => "Pao", "奆" => "Quan", "奇" => "Qi",
+ "奈" => "Nai", "奉" => "Feng", "å¥" => "Xie", "奋" => "Fen", "奌" => "Dian", "å¥" => "Kui",
+ "å¥" => "Zou", "å¥" => "Huan", "契" => "Qi", "奒" => "Kai", "奓" => "Zha", "奔" => "Ben",
+ "奕" => "Yi", "奖" => "Jiang", "套" => "Tao", "奘" => "Zang", "奙" => "Ben", "å¥" => "Xi",
+ "奛" => "Xiang", "奜" => "Fei", "å¥" => "Diao", "å¥" => "Xun", "奟" => "Keng", "å¥ " => "Dian",
+ "奡" => "Ao", "奢" => "She", "奣" => "Weng", "奤" => "Pan", "奥" => "Ao", "奦" => "Wu",
+ "奧" => "Ao", "奨" => "Jiang", "奩" => "Lian", "奪" => "Duo", "奫" => "Yun", "奬" => "Jiang",
+ "å¥" => "Shi", "奮" => "Fen", "奯" => "Huo", "奰" => "Bi", "奱" => "Lian", "奲" => "Duo",
+ "女" => "Nu", "奴" => "Nu", "奵" => "Ding", "奶" => "Nai", "奷" => "Qian", "奸" => "Jian",
+ "她" => "Ta", "奺" => "Jiu", "奻" => "Nan", "奼" => "Cha", "好" => "Hao", "奾" => "Xian",
+ "奿" => "Fan", "妀" => "Ji", "å¦" => "Shuo", "如" => "Ru", "妃" => "Fei", "妄" => "Wang",
+ "妅" => "Hong", "妆" => "Zhuang", "妇" => "Fu", "妈" => "Ma", "妉" => "Dan", "å¦" => "Ren",
+ "妋" => "Fu", "妌" => "Jing", "å¦" => "Yan", "å¦" => "Xie", "å¦" => "Wen", "å¦" => "Zhong",
+ "妑" => "Pa", "妒" => "Du", "妓" => "Ji", "妔" => "Keng", "妕" => "Zhong", "妖" => "Yao",
+ "妗" => "Jin", "妘" => "Yun", "妙" => "Miao", "å¦" => "Pei", "妛" => "Shi", "妜" => "Yue",
+ "å¦" => "Zhuang", "å¦" => "Niu", "妟" => "Yan", "å¦ " => "Na", "妡" => "Xin", "妢" => "Fen",
+ "妣" => "Bi", "妤" => "Yu", "妥" => "Tuo", "妦" => "Feng", "妧" => "Yuan", "妨" => "Fang",
+ "妩" => "Wu", "妪" => "Yu", "妫" => "Gui", "妬" => "Du", "å¦" => "Ba", "妮" => "Ni",
+ "妯" => "Zhou", "妰" => "Zhuo", "妱" => "Zhao", "妲" => "Da", "妳" => "Nai", "妴" => "Yuan",
+ "妵" => "Tou", "妶" => "Xuan", "妷" => "Zhi", "妸" => "E", "妹" => "Mei", "妺" => "Mo",
+ "妻" => "Qi", "妼" => "Bi", "妽" => "Shen", "妾" => "Qie", "妿" => "E", "姀" => "He",
+ "å§" => "Xu", "姂" => "Fa", "姃" => "Zheng", "姄" => "Min", "姅" => "Ban", "姆" => "Mu",
+ "姇" => "Fu", "姈" => "Ling", "姉" => "Zi", "å§" => "Zi", "始" => "Shi", "姌" => "Ran",
+ "å§" => "Shan", "å§" => "Yang", "å§" => "Man", "å§" => "Jie", "姑" => "Gu", "姒" => "Si",
+ "姓" => "Xing", "委" => "Wei", "姕" => "Zi", "姖" => "Ju", "姗" => "Shan", "姘" => "Pin",
+ "姙" => "Ren", "å§" => "Yao", "姛" => "Tong", "姜" => "Jiang", "å§" => "Shu", "å§" => "Ji",
+ "姟" => "Gai", "å§ " => "Shang", "姡" => "Kuo", "姢" => "Juan", "姣" => "Jiao", "姤" => "Gou",
+ "姥" => "Mu", "姦" => "Jian", "姧" => "Jian", "姨" => "Yi", "姩" => "Nian", "姪" => "Zhi",
+ "姫" => "Ji", "姬" => "Ji", "å§" => "Xian", "姮" => "Heng", "姯" => "Guang", "姰" => "Jun",
+ "姱" => "Kua", "姲" => "Yan", "姳" => "Ming", "姴" => "Lie", "姵" => "Pei", "姶" => "Yan",
+ "姷" => "You", "姸" => "Yan", "姹" => "Cha", "姺" => "Shen", "姻" => "Yin", "姼" => "Chi",
+ "姽" => "Gui", "姾" => "Quan", "姿" => "Zi", "å¨" => "Wei", "娂" => "Hong", "娃" => "Wa",
+ "娄" => "Lou", "娅" => "Ya", "娆" => "Rao", "娇" => "Jiao", "娈" => "Luan", "娉" => "Ping",
+ "å¨" => "Xian", "娋" => "Shao", "娌" => "Li", "å¨" => "Cheng", "å¨" => "Xiao", "å¨" => "Mang",
+ "å¨" => "Fu", "娑" => "Suo", "娒" => "Wu", "娓" => "Wei", "娔" => "Ke", "娕" => "Lai",
+ "娖" => "Chuo", "娗" => "Ding", "娘" => "Niang", "娙" => "Xing", "å¨" => "Nan", "娛" => "Yu",
+ "娜" => "Nuo", "å¨" => "Pei", "å¨" => "Nei", "娟" => "Juan", "å¨ " => "Shen", "娡" => "Zhi",
+ "娢" => "Han", "娣" => "Di", "娤" => "Zhuang", "娥" => "E", "娦" => "Pin", "娧" => "Tui",
+ "娨" => "Han", "娩" => "Mian", "娪" => "Wu", "娫" => "Yan", "娬" => "Wu", "å¨" => "Xi",
+ "娮" => "Yan", "娯" => "Yu", "娰" => "Si", "娱" => "Yu", "娲" => "Wa", "娴" => "Xian",
+ "娵" => "Ju", "娶" => "Qu", "娷" => "Shui", "娸" => "Qi", "娹" => "Xian", "娺" => "Zhui",
+ "娻" => "Dong", "娼" => "Chang", "娽" => "Lu", "娾" => "Ai", "娿" => "E", "婀" => "E",
+ "å©" => "Lou", "å©‚" => "Mian", "婃" => "Cong", "å©„" => "Pou", "å©…" => "Ju", "婆" => "Po",
+ "婇" => "Cai", "婈" => "Ding", "婉" => "Wan", "å©" => "Biao", "å©‹" => "Xiao", "å©Œ" => "Shu",
+ "å©" => "Qi", "å©" => "Hui", "å©" => "Fu", "å©" => "E", "å©‘" => "Wo", "å©’" => "Tan",
+ "婓" => "Fei", "婔" => "Wei", "婕" => "Jie", "婖" => "Tian", "婗" => "Ni", "婘" => "Quan",
+ "å©™" => "Jing", "å©" => "Hun", "å©›" => "Jing", "å©œ" => "Qian", "å©" => "Dian", "å©" => "Xing",
+ "å©Ÿ" => "Hu", "å© " => "Wa", "å©¡" => "Lai", "å©¢" => "Bi", "å©£" => "Yin", "婤" => "Chou",
+ "婥" => "Chuo", "婦" => "Fu", "婧" => "Jing", "婨" => "Lun", "婩" => "Yan", "婪" => "Lan",
+ "å©«" => "Kun", "婬" => "Yin", "å©" => "Ya", "å©®" => "Ju", "婯" => "Li", "å©°" => "Dian",
+ "婱" => "Xian", "婲" => "Hwa", "婳" => "Hua", "婴" => "Ying", "婵" => "Chan", "婶" => "Shen",
+ "婷" => "Ting", "婸" => "Dang", "婹" => "Yao", "婺" => "Wu", "婻" => "Nan", "婼" => "Ruo",
+ "婽" => "Jia", "婾" => "Tou", "å©¿" => "Xu", "媀" => "Yu", "åª" => "Wei", "媂" => "Ti",
+ "媃" => "Rou", "媄" => "Mei", "媅" => "Dan", "媆" => "Ruan", "媇" => "Qin", "媈" => "Hui",
+ "媉" => "Wu", "åª" => "Qian", "媋" => "Chun", "媌" => "Mao", "åª" => "Fu", "åª" => "Jie",
+ "åª" => "Duan", "åª" => "Xi", "媑" => "Zhong", "媒" => "Mei", "媓" => "Huang", "媔" => "Mian",
+ "媕" => "An", "媖" => "Ying", "媗" => "Xuan", "媘" => "Jie", "媙" => "Wei", "åª" => "Mei",
+ "媛" => "Yuan", "媜" => "Zhen", "åª" => "Qiu", "åª" => "Ti", "媟" => "Xie", "åª " => "Tuo",
+ "媡" => "Lian", "媢" => "Mao", "媣" => "Ran", "媤" => "Si", "媥" => "Pian", "媦" => "Wei",
+ "媧" => "Wa", "媨" => "Jiu", "媩" => "Hu", "媪" => "Ao", "媬" => "Bou", "åª" => "Xu",
+ "媮" => "Tou", "媯" => "Gui", "媰" => "Zou", "媱" => "Yao", "媲" => "Pi", "媳" => "Xi",
+ "媴" => "Yuan", "媵" => "Ying", "媶" => "Rong", "媷" => "Ru", "媸" => "Chi", "媹" => "Liu",
+ "媺" => "Mei", "媻" => "Pan", "媼" => "Ao", "媽" => "Ma", "媾" => "Gou", "媿" => "Kui",
+ "å«€" => "Qin", "å«" => "Jia", "å«‚" => "Sao", "嫃" => "Zhen", "å«„" => "Yuan", "å«…" => "Cha",
+ "嫆" => "Yong", "嫇" => "Ming", "嫈" => "Ying", "嫉" => "Ji", "å«" => "Su", "å«‹" => "Niao",
+ "å«Œ" => "Xian", "å«" => "Tao", "å«" => "Pang", "å«" => "Lang", "å«" => "Nao", "å«‘" => "Bao",
+ "å«’" => "Ai", "å«“" => "Pi", "å«”" => "Pin", "å«•" => "Yi", "å«–" => "Piao", "å«—" => "Yu",
+ "嫘" => "Lei", "å«™" => "Xuan", "å«" => "Man", "å«›" => "Yi", "å«œ" => "Zhang", "å«" => "Kang",
+ "å«" => "Yong", "å«Ÿ" => "Ni", "å« " => "Li", "å«¡" => "Di", "å«¢" => "Gui", "å«£" => "Yan",
+ "嫤" => "Jin", "嫥" => "Zhuan", "嫦" => "Chang", "嫧" => "Ce", "嫨" => "Han", "嫩" => "Nen",
+ "嫪" => "Lao", "å««" => "Mo", "嫬" => "Zhe", "å«" => "Hu", "å«®" => "Hu", "嫯" => "Ao",
+ "嫰" => "Nen", "嫱" => "Qiang", "嫲" => "Ma", "嫳" => "Pie", "嫴" => "Gu", "嫵" => "Wu",
+ "嫶" => "Jiao", "嫷" => "Tuo", "嫸" => "Zhan", "嫹" => "Mao", "嫺" => "Xian", "嫻" => "Xian",
+ "嫼" => "Mo", "嫽" => "Liao", "嫾" => "Lian", "å«¿" => "Hua", "å¬" => "Deng", "嬂" => "Zhi",
+ "嬃" => "Xu", "嬄" => "Yi", "嬅" => "Hua", "嬆" => "Xi", "嬇" => "Hui", "嬈" => "Rao",
+ "嬉" => "Xi", "å¬" => "Yan", "嬋" => "Chan", "嬌" => "Jiao", "å¬" => "Mei", "å¬" => "Fan",
+ "å¬" => "Fan", "å¬" => "Xian", "嬑" => "Yi", "嬒" => "Wei", "嬓" => "Jiao", "嬔" => "Fu",
+ "嬕" => "Shi", "嬖" => "Bi", "嬗" => "Shan", "嬘" => "Sui", "嬙" => "Qiang", "å¬" => "Lian",
+ "嬛" => "Huan", "嬜" => "Xin", "å¬" => "Niao", "å¬" => "Dong", "嬟" => "Yi", "å¬ " => "Can",
+ "嬡" => "Ai", "嬢" => "Niang", "嬣" => "Neng", "嬤" => "Ma", "嬥" => "Tiao", "嬦" => "Chou",
+ "嬧" => "Jin", "嬨" => "Ci", "嬩" => "Yu", "嬪" => "Pin", "嬫" => "Yong", "嬬" => "Xu",
+ "å¬" => "Nai", "嬮" => "Yan", "嬯" => "Tai", "嬰" => "Ying", "嬱" => "Can", "嬲" => "Niao",
+ "嬳" => "Wo", "嬴" => "Ying", "嬵" => "Mian", "嬶" => "Kaka", "嬷" => "Ma", "嬸" => "Shen",
+ "嬹" => "Xing", "嬺" => "Ni", "嬻" => "Du", "嬼" => "Liu", "嬽" => "Yuan", "嬾" => "Lan",
+ "嬿" => "Yan", "å€" => "Shuang", "å" => "Ling", "å‚" => "Jiao", "åƒ" => "Niang", "å„" => "Lan",
+ "å…" => "Xian", "å†" => "Ying", "å‡" => "Shuang", "åˆ" => "Shuai", "å‰" => "Quan", "å" => "Mi",
+ "å‹" => "Li", "åŒ" => "Luan", "å" => "Yan", "å" => "Zhu", "å" => "Lan", "å" => "Zi",
+ "å‘" => "Jie", "å’" => "Jue", "å“" => "Jue", "å”" => "Kong", "å•" => "Yun", "å–" => "Zi",
+ "å—" => "Zi", "å˜" => "Cun", "å™" => "Sun", "å" => "Fu", "å›" => "Bei", "åœ" => "Zi",
+ "å" => "Xiao", "å" => "Xin", "åŸ" => "Meng", "å " => "Si", "å¡" => "Tai", "å¢" => "Bao",
+ "å£" => "Ji", "å¤" => "Gu", "å¥" => "Nu", "å¦" => "Xue", "å¨" => "Zhuan", "å©" => "Hai",
+ "åª" => "Luan", "å«" => "Sun", "å¬" => "Huai", "å" => "Mie", "å®" => "Cong", "å¯" => "Qian",
+ "å°" => "Shu", "å±" => "Chan", "å²" => "Ya", "å³" => "Zi", "å´" => "Ni", "åµ" => "Fu",
+ "å¶" => "Zi", "å·" => "Li", "å¸" => "Xue", "å¹" => "Bo", "åº" => "Ru", "å»" => "Lai",
+ "å¼" => "Nie", "å½" => "Nie", "å¾" => "Ying", "å¿" => "Luan", "宀" => "Mian", "å®" => "Zhu",
+ "宂" => "Rong", "它" => "Ta", "宄" => "Gui", "宅" => "Zhai", "宆" => "Qiong", "宇" => "Yu",
+ "守" => "Shou", "安" => "An", "å®" => "Tu", "宋" => "Song", "完" => "Wan", "å®" => "Rou",
+ "å®" => "Yao", "å®" => "Hong", "å®" => "Yi", "宑" => "Jing", "å®’" => "Zhun", "宓" => "Mi",
+ "宔" => "Zhu", "宕" => "Dang", "宖" => "Hong", "宗" => "Zong", "官" => "Guan", "宙" => "Zhou",
+ "å®" => "Ding", "å®›" => "Wan", "宜" => "Yi", "å®" => "Bao", "å®" => "Shi", "実" => "Shi",
+ "å® " => "Chong", "审" => "Shen", "客" => "Ke", "宣" => "Xuan", "室" => "Shi", "宥" => "You",
+ "宦" => "Huan", "宧" => "Yi", "宨" => "Tiao", "宩" => "Shi", "宪" => "Xian", "宫" => "Gong",
+ "宬" => "Cheng", "å®" => "Qun", "å®®" => "Gong", "宯" => "Xiao", "å®°" => "Zai", "å®±" => "Zha",
+ "宲" => "Bao", "害" => "Hai", "宴" => "Yan", "宵" => "Xiao", "家" => "Jia", "宷" => "Shen",
+ "宸" => "Chen", "容" => "Rong", "宺" => "Huang", "宻" => "Mi", "宼" => "Kou", "宽" => "Kuan",
+ "宾" => "Bin", "宿" => "Su", "寀" => "Cai", "å¯" => "Zan", "寂" => "Ji", "寃" => "Yuan",
+ "寄" => "Ji", "寅" => "Yin", "密" => "Mi", "寇" => "Kou", "寈" => "Qing", "寉" => "Que",
+ "å¯" => "Zhen", "寋" => "Jian", "富" => "Fu", "å¯" => "Ning", "å¯" => "Bing", "å¯" => "Huan",
+ "å¯" => "Mei", "寑" => "Qin", "寒" => "Han", "寓" => "Yu", "寔" => "Shi", "寕" => "Ning",
+ "寖" => "Qin", "寗" => "Ning", "寘" => "Zhi", "寙" => "Yu", "å¯" => "Bao", "寛" => "Kuan",
+ "寜" => "Ning", "å¯" => "Qin", "å¯" => "Mo", "察" => "Cha", "å¯ " => "Ju", "寡" => "Gua",
+ "寢" => "Qin", "寣" => "Hu", "寤" => "Wu", "寥" => "Liao", "實" => "Shi", "寧" => "Zhu",
+ "寨" => "Zhai", "審" => "Shen", "寪" => "Wei", "寫" => "Xie", "寬" => "Kuan", "å¯" => "Hui",
+ "寮" => "Liao", "寯" => "Jun", "寰" => "Huan", "寱" => "Yi", "寲" => "Yi", "寳" => "Bao",
+ "寴" => "Qin", "寵" => "Chong", "寶" => "Bao", "寷" => "Feng", "寸" => "Cun", "对" => "Dui",
+ "寺" => "Si", "寻" => "Xun", "导" => "Dao", "寽" => "Lu", "対" => "Dui", "寿" => "Shou",
+ "å°" => "Feng", "å°‚" => "Zhuan", "å°ƒ" => "Fu", "å°„" => "She", "å°…" => "Ke", "å°†" => "Jiang",
+ "å°‡" => "Jiang", "å°ˆ" => "Zhuan", "å°‰" => "Wei", "å°" => "Zun", "å°‹" => "Xun", "å°Œ" => "Shu",
+ "å°" => "Dui", "å°" => "Dao", "å°" => "Xiao", "å°" => "Ji", "å°‘" => "Shao", "å°’" => "Er",
+ "å°“" => "Er", "å°”" => "Er", "å°•" => "Ga", "å°–" => "Jian", "å°—" => "Shu", "å°˜" => "Chen",
+ "å°™" => "Shang", "å°" => "Shang", "å°›" => "Mo", "å°œ" => "Ga", "å°" => "Chang", "å°" => "Liao",
+ "å°Ÿ" => "Xian", "å° " => "Xian", "å°¢" => "Wang", "å°£" => "Wang", "å°¤" => "You", "å°¥" => "Liao",
+ "å°¦" => "Liao", "å°§" => "Yao", "å°¨" => "Mang", "å°©" => "Wang", "å°ª" => "Wang", "å°«" => "Wang",
+ "å°¬" => "Ga", "å°" => "Yao", "å°®" => "Duo", "å°¯" => "Kui", "å°°" => "Zhong", "å°±" => "Jiu",
+ "å°²" => "Gan", "å°³" => "Gu", "å°´" => "Gan", "å°µ" => "Tui", "å°¶" => "Gan", "å°·" => "Gan",
+ "å°¸" => "Shi", "å°¹" => "Yin", "å°º" => "Chi", "å°»" => "Kao", "å°¼" => "Ni", "å°½" => "Jin",
+ "å°¾" => "Wei", "å°¿" => "Niao", "å±€" => "Ju", "å±" => "Pi", "层" => "Ceng", "屃" => "Xi",
+ "屄" => "Bi", "居" => "Ju", "屆" => "Jie", "屇" => "Tian", "屈" => "Qu", "屉" => "Ti",
+ "å±" => "Jie", "屋" => "Wu", "屌" => "Diao", "å±" => "Shi", "å±" => "Shi", "å±" => "Ping",
+ "å±" => "Ji", "屑" => "Xie", "å±’" => "Chen", "屓" => "Xi", "å±”" => "Ni", "展" => "Zhan",
+ "å±–" => "Xi", "屘" => "Man", "å±™" => "E", "å±" => "Lou", "å±›" => "Ping", "屜" => "Ti",
+ "å±" => "Fei", "å±" => "Shu", "屟" => "Xie", "å± " => "Tu", "屡" => "Lu", "å±¢" => "Lu",
+ "屣" => "Xi", "層" => "Ceng", "履" => "Lu", "屦" => "Ju", "屧" => "Xie", "屨" => "Ju",
+ "屩" => "Jue", "屪" => "Liao", "屫" => "Jue", "屬" => "Shu", "å±" => "Xi", "å±®" => "Che",
+ "屯" => "Tun", "屰" => "Ni", "山" => "Shan", "屳" => "Xian", "屴" => "Li", "屵" => "Xue",
+ "屶" => "Nata", "屸" => "Long", "屹" => "Yi", "屺" => "Qi", "屻" => "Ren", "屼" => "Wu",
+ "å±½" => "Han", "å±¾" => "Shen", "屿" => "Yu", "å²€" => "Chu", "å²" => "Sui", "岂" => "Qi",
+ "岄" => "Yue", "岅" => "Ban", "岆" => "Yao", "岇" => "Ang", "岈" => "Ya", "岉" => "Wu",
+ "å²" => "Jie", "岋" => "E", "岌" => "Ji", "å²" => "Qian", "å²" => "Fen", "å²" => "Yuan",
+ "å²" => "Qi", "岑" => "Cen", "å²’" => "Qian", "岓" => "Qi", "å²”" => "Cha", "岕" => "Jie",
+ "å²–" => "Qu", "å²—" => "Gang", "岘" => "Xian", "å²™" => "Ao", "å²" => "Lan", "å²›" => "Dao",
+ "岜" => "Ba", "å²" => "Zuo", "å²" => "Zuo", "岟" => "Yang", "å² " => "Ju", "岡" => "Gang",
+ "岢" => "Ke", "岣" => "Gou", "岤" => "Xue", "岥" => "Bei", "岦" => "Li", "岧" => "Tiao",
+ "岨" => "Ju", "岩" => "Yan", "岪" => "Fu", "岫" => "Xiu", "岬" => "Jia", "å²" => "Ling",
+ "岮" => "Tuo", "岯" => "Pei", "岰" => "You", "岱" => "Dai", "岲" => "Kuang", "岳" => "Yue",
+ "岴" => "Qu", "岵" => "Hu", "岶" => "Po", "岷" => "Min", "岸" => "An", "岹" => "Tiao",
+ "岺" => "Ling", "岻" => "Chi", "岼" => "Yuri", "岽" => "Dong", "岾" => "Cem", "岿" => "Kui",
+ "å³€" => "Xiu", "å³" => "Mao", "峂" => "Tong", "峃" => "Xue", "峄" => "Yi", "å³…" => "Kura",
+ "峆" => "He", "峇" => "Ke", "峈" => "Luo", "峉" => "E", "å³" => "Fu", "峋" => "Xun",
+ "峌" => "Die", "å³" => "Lu", "å³" => "An", "å³" => "Er", "å³" => "Gai", "峑" => "Quan",
+ "峒" => "Tong", "峓" => "Yi", "峔" => "Mu", "峕" => "Shi", "峖" => "An", "峗" => "Wei",
+ "峘" => "Hu", "å³™" => "Zhi", "å³" => "Mi", "å³›" => "Li", "峜" => "Ji", "å³" => "Tong",
+ "å³" => "Wei", "峟" => "You", "å³ " => "Sang", "峡" => "Xia", "å³¢" => "Li", "å³£" => "Yao",
+ "峤" => "Jiao", "峥" => "Zheng", "峦" => "Luan", "峧" => "Jiao", "峨" => "E", "峩" => "E",
+ "峪" => "Yu", "峫" => "Ye", "峬" => "Bu", "å³" => "Qiao", "å³®" => "Qun", "峯" => "Feng",
+ "å³°" => "Feng", "å³±" => "Nao", "å³²" => "Li", "å³³" => "You", "å³´" => "Xian", "å³µ" => "Hong",
+ "島" => "Dao", "峷" => "Shen", "峸" => "Cheng", "峹" => "Tu", "峺" => "Geng", "峻" => "Jun",
+ "å³¼" => "Hao", "å³½" => "Xia", "å³¾" => "Yin", "峿" => "Yu", "å´" => "Kan", "å´‚" => "Lao",
+ "å´ƒ" => "Lai", "å´„" => "Xian", "å´…" => "Que", "å´†" => "Kong", "å´‡" => "Chong", "å´ˆ" => "Chong",
+ "å´‰" => "Ta", "å´" => "Lin", "å´‹" => "Hua", "å´Œ" => "Ju", "å´" => "Lai", "å´" => "Qi",
+ "å´" => "Min", "å´" => "Kun", "å´‘" => "Kun", "å´’" => "Zu", "å´“" => "Gu", "å´”" => "Cui",
+ "å´•" => "Ya", "å´–" => "Ya", "å´—" => "Gang", "å´˜" => "Lun", "å´™" => "Lun", "å´" => "Leng",
+ "å´›" => "Jue", "å´œ" => "Duo", "å´" => "Zheng", "å´" => "Guo", "å´Ÿ" => "Yin", "å´ " => "Dong",
+ "å´¡" => "Han", "å´¢" => "Zheng", "å´£" => "Wei", "å´¤" => "Yao", "å´¥" => "Pi", "å´¦" => "Yan",
+ "å´§" => "Song", "å´¨" => "Jie", "å´©" => "Beng", "å´ª" => "Zu", "å´«" => "Jue", "å´¬" => "Dong",
+ "å´" => "Zhan", "å´®" => "Gu", "å´¯" => "Yin", "å´±" => "Ze", "å´²" => "Huang", "å´³" => "Yu",
+ "å´´" => "Wei", "å´µ" => "Yang", "å´¶" => "Feng", "å´·" => "Qiu", "å´¸" => "Dun", "å´¹" => "Ti",
+ "å´º" => "Yi", "å´»" => "Zhi", "å´¼" => "Shi", "å´½" => "Zai", "å´¾" => "Yao", "å´¿" => "E",
+ "åµ€" => "Zhu", "åµ" => "Kan", "嵂" => "Lu", "嵃" => "Yan", "嵄" => "Mei", "åµ…" => "Gan",
+ "嵆" => "Ji", "嵇" => "Ji", "嵈" => "Huan", "嵉" => "Ting", "åµ" => "Sheng", "嵋" => "Mei",
+ "嵌" => "Qian", "åµ" => "Wu", "åµ" => "Yu", "åµ" => "Zong", "åµ" => "Lan", "嵑" => "Jue",
+ "嵒" => "Yan", "嵓" => "Yan", "嵔" => "Wei", "嵕" => "Zong", "嵖" => "Cha", "嵗" => "Sui",
+ "嵘" => "Rong", "åµ™" => "Yamashina", "åµ" => "Qin", "åµ›" => "Yu", "嵜" => "Kewashii", "åµ" => "Lou",
+ "åµ" => "Tu", "嵟" => "Dui", "åµ " => "Xi", "嵡" => "Weng", "åµ¢" => "Cang", "åµ£" => "Dang",
+ "嵤" => "Hong", "嵥" => "Jie", "嵦" => "Ai", "嵧" => "Liu", "嵨" => "Wu", "嵩" => "Song",
+ "嵪" => "Qiao", "嵫" => "Zi", "嵬" => "Wei", "åµ" => "Beng", "åµ®" => "Dian", "嵯" => "Cuo",
+ "嵰" => "Qian", "嵱" => "Yong", "嵲" => "Nie", "嵳" => "Cuo", "嵴" => "Ji", "嵶" => "Tao",
+ "嵷" => "Song", "嵸" => "Zong", "嵹" => "Jiang", "嵺" => "Liao", "嵻" => "Kang", "嵼" => "Chan",
+ "åµ½" => "Die", "åµ¾" => "Cen", "嵿" => "Ding", "嶀" => "Tu", "å¶" => "Lou", "嶂" => "Zhang",
+ "嶃" => "Zhan", "嶄" => "Zhan", "嶅" => "Ao", "嶆" => "Cao", "嶇" => "Qu", "嶈" => "Qiang",
+ "嶉" => "Zui", "å¶" => "Zui", "嶋" => "Dao", "嶌" => "Dao", "å¶" => "Xi", "å¶" => "Yu",
+ "å¶" => "Bo", "å¶" => "Long", "嶑" => "Xiang", "嶒" => "Ceng", "嶓" => "Bo", "嶔" => "Qin",
+ "嶕" => "Jiao", "嶖" => "Yan", "嶗" => "Lao", "嶘" => "Zhan", "嶙" => "Lin", "å¶" => "Liao",
+ "嶛" => "Liao", "嶜" => "Jin", "å¶" => "Deng", "å¶" => "Duo", "嶟" => "Zun", "å¶ " => "Jiao",
+ "嶡" => "Gui", "嶢" => "Yao", "嶣" => "Qiao", "嶤" => "Yao", "嶥" => "Jue", "嶦" => "Zhan",
+ "嶧" => "Yi", "嶨" => "Xue", "嶩" => "Nao", "嶪" => "Ye", "嶫" => "Ye", "嶬" => "Yi",
+ "å¶" => "E", "嶮" => "Xian", "嶯" => "Ji", "嶰" => "Xie", "嶱" => "Ke", "嶲" => "Xi",
+ "嶳" => "Di", "嶴" => "Ao", "嶵" => "Zui", "嶷" => "Ni", "嶸" => "Rong", "嶹" => "Dao",
+ "嶺" => "Ling", "嶻" => "Za", "嶼" => "Yu", "嶽" => "Yue", "嶾" => "Yin", "巀" => "Jie",
+ "å·" => "Li", "å·‚" => "Sui", "å·ƒ" => "Long", "å·„" => "Long", "å·…" => "Dian", "å·†" => "Ying",
+ "å·‡" => "Xi", "å·ˆ" => "Ju", "å·‰" => "Chan", "å·" => "Ying", "å·‹" => "Kui", "å·Œ" => "Yan",
+ "å·" => "Wei", "å·" => "Nao", "å·" => "Quan", "å·" => "Chao", "å·‘" => "Cuan", "å·’" => "Luan",
+ "å·“" => "Dian", "å·”" => "Dian", "å·–" => "Yan", "å·—" => "Yan", "å·˜" => "Yan", "å·™" => "Nao",
+ "å·" => "Yan", "å·›" => "Chuan", "å·œ" => "Gui", "å·" => "Chuan", "å·" => "Zhou", "å·Ÿ" => "Huang",
+ "å· " => "Jing", "å·¡" => "Xun", "å·¢" => "Chao", "å·£" => "Chao", "å·¤" => "Lie", "å·¥" => "Gong",
+ "å·¦" => "Zuo", "å·§" => "Qiao", "å·¨" => "Ju", "å·©" => "Gong", "å·ª" => "Kek", "å·«" => "Wu",
+ "å·¬" => "Pwu", "å·" => "Pwu", "å·®" => "Chai", "å·¯" => "Qiu", "å·°" => "Qiu", "å·±" => "Ji",
+ "å·²" => "Yi", "å·³" => "Si", "å·´" => "Ba", "å·µ" => "Zhi", "å·¶" => "Zhao", "å··" => "Xiang",
+ "å·¸" => "Yi", "å·¹" => "Jin", "å·º" => "Xun", "å·»" => "Juan", "å·¼" => "Phas", "å·½" => "Xun",
+ "å·¾" => "Jin", "å·¿" => "Fu", "å¸" => "Bi", "市" => "Shi", "布" => "Bu", "帄" => "Ding",
+ "帅" => "Shuai", "帆" => "Fan", "帇" => "Nie", "师" => "Shi", "帉" => "Fen", "å¸" => "Pa",
+ "帋" => "Zhi", "希" => "Xi", "å¸" => "Hu", "å¸" => "Dan", "å¸" => "Wei", "å¸" => "Zhang",
+ "帑" => "Tang", "帒" => "Dai", "帓" => "Ma", "帔" => "Pei", "帕" => "Pa", "帖" => "Tie",
+ "帗" => "Fu", "帘" => "Lian", "帙" => "Zhi", "å¸" => "Zhou", "帛" => "Bo", "帜" => "Zhi",
+ "å¸" => "Di", "å¸" => "Mo", "帟" => "Yi", "å¸ " => "Yi", "帡" => "Ping", "帢" => "Qia",
+ "帣" => "Juan", "帤" => "Ru", "帥" => "Shuai", "带" => "Dai", "帧" => "Zheng", "帨" => "Shui",
+ "帩" => "Qiao", "帪" => "Zhen", "師" => "Shi", "帬" => "Qun", "å¸" => "Xi", "帮" => "Bang",
+ "帯" => "Dai", "帰" => "Gui", "帱" => "Chou", "帲" => "Ping", "帳" => "Zhang", "帴" => "Sha",
+ "帵" => "Wan", "帶" => "Dai", "帷" => "Wei", "常" => "Chang", "帹" => "Sha", "帺" => "Qi",
+ "帻" => "Ze", "帼" => "Guo", "帽" => "Mao", "帾" => "Du", "帿" => "Hou", "幀" => "Zheng",
+ "å¹" => "Xu", "幂" => "Mi", "幃" => "Wei", "幄" => "Wo", "å¹…" => "Fu", "幆" => "Yi",
+ "幇" => "Bang", "幈" => "Ping", "幉" => "Tazuna", "å¹" => "Gong", "幋" => "Pan", "幌" => "Huang",
+ "å¹" => "Dao", "å¹" => "Mi", "å¹" => "Jia", "å¹" => "Teng", "幑" => "Hui", "å¹’" => "Zhong",
+ "幓" => "Shan", "幔" => "Man", "幕" => "Mu", "幖" => "Biao", "幗" => "Guo", "幘" => "Ze",
+ "å¹™" => "Mu", "å¹" => "Bang", "å¹›" => "Zhang", "幜" => "Jiong", "å¹" => "Chan", "å¹" => "Fu",
+ "幟" => "Zhi", "å¹ " => "Hu", "幡" => "Fan", "å¹¢" => "Chuang", "å¹£" => "Bi", "幤" => "Hei",
+ "幦" => "Mi", "幧" => "Qiao", "幨" => "Chan", "幩" => "Fen", "幪" => "Meng", "幫" => "Bang",
+ "幬" => "Chou", "å¹" => "Mie", "å¹®" => "Chu", "幯" => "Jie", "å¹°" => "Xian", "å¹±" => "Lan",
+ "干" => "Gan", "平" => "Ping", "年" => "Nian", "幵" => "Qian", "并" => "Bing", "幷" => "Bing",
+ "幸" => "Xing", "幹" => "Gan", "幺" => "Yao", "幻" => "Huan", "幼" => "You", "幽" => "You",
+ "å¹¾" => "Ji", "广" => "Yan", "庀" => "Pi", "åº" => "Ting", "庂" => "Ze", "広" => "Guang",
+ "庄" => "Zhuang", "庅" => "Mo", "庆" => "Qing", "庇" => "Bi", "庈" => "Qin", "庉" => "Dun",
+ "åº" => "Chuang", "庋" => "Gui", "庌" => "Ya", "åº" => "Bai", "åº" => "Jie", "åº" => "Xu",
+ "åº" => "Lu", "庑" => "Wu", "库" => "Ku", "应" => "Ying", "底" => "Di", "庖" => "Pao",
+ "店" => "Dian", "庘" => "Ya", "庙" => "Miao", "åº" => "Geng", "庛" => "Ci", "府" => "Fu",
+ "åº" => "Tong", "åº" => "Pang", "废" => "Fei", "åº " => "Xiang", "庡" => "Yi", "庢" => "Zhi",
+ "庣" => "Tiao", "庤" => "Zhi", "庥" => "Xiu", "度" => "Du", "座" => "Zuo", "庨" => "Xiao",
+ "庩" => "Tu", "庪" => "Gui", "庫" => "Ku", "庬" => "Pang", "åº" => "Ting", "庮" => "You",
+ "庯" => "Bu", "庰" => "Ding", "庱" => "Cheng", "庲" => "Lai", "庳" => "Bei", "庴" => "Ji",
+ "庵" => "An", "庶" => "Shu", "康" => "Kang", "庸" => "Yong", "庹" => "Tuo", "庺" => "Song",
+ "庻" => "Shu", "庼" => "Qing", "庽" => "Yu", "庾" => "Yu", "庿" => "Miao", "廀" => "Sou",
+ "å»" => "Ce", "廂" => "Xiang", "廃" => "Fei", "廄" => "Jiu", "å»…" => "He", "廆" => "Hui",
+ "廇" => "Liu", "廈" => "Sha", "廉" => "Lian", "å»" => "Lang", "廋" => "Sou", "廌" => "Jian",
+ "å»" => "Pou", "å»" => "Qing", "å»" => "Jiu", "å»" => "Jiu", "廑" => "Qin", "å»’" => "Ao",
+ "廓" => "Kuo", "廔" => "Lou", "廕" => "Yin", "廖" => "Liao", "廗" => "Dai", "廘" => "Lu",
+ "å»™" => "Yi", "å»" => "Chu", "å»›" => "Chan", "廜" => "Tu", "å»" => "Si", "å»" => "Xin",
+ "廟" => "Miao", "å» " => "Chang", "廡" => "Wu", "廢" => "Fei", "廣" => "Guang", "廤" => "Koc",
+ "廥" => "Kuai", "廦" => "Bi", "廧" => "Qiang", "廨" => "Xie", "廩" => "Lin", "廪" => "Lin",
+ "廫" => "Liao", "廬" => "Lu", "廮" => "Ying", "廯" => "Xian", "廰" => "Ting", "廱" => "Yong",
+ "廲" => "Li", "廳" => "Ting", "廴" => "Yin", "廵" => "Xun", "延" => "Yan", "廷" => "Ting",
+ "廸" => "Di", "廹" => "Po", "建" => "Jian", "廻" => "Hui", "廼" => "Nai", "廽" => "Hui",
+ "廾" => "Gong", "廿" => "Nian", "å¼" => "Bian", "异" => "Yi", "弃" => "Qi", "弄" => "Nong",
+ "å¼…" => "Fen", "弆" => "Ju", "弇" => "Yan", "弈" => "Yi", "弉" => "Zang", "å¼" => "Bi",
+ "弋" => "Yi", "弌" => "Yi", "å¼" => "Er", "å¼" => "San", "å¼" => "Shi", "å¼" => "Er",
+ "弑" => "Shi", "弒" => "Shi", "弓" => "Gong", "弔" => "Diao", "引" => "Yin", "弖" => "Hu",
+ "å¼—" => "Fu", "弘" => "Hong", "å¼™" => "Wu", "å¼" => "Tui", "å¼›" => "Chi", "弜" => "Jiang",
+ "å¼" => "Ba", "å¼" => "Shen", "弟" => "Di", "å¼ " => "Zhang", "弡" => "Jue", "å¼¢" => "Tao",
+ "弣" => "Fu", "弤" => "Di", "弥" => "Mi", "弦" => "Xian", "弧" => "Hu", "弨" => "Chao",
+ "弩" => "Nu", "弪" => "Jing", "弫" => "Zhen", "弬" => "Yi", "å¼" => "Mi", "å¼®" => "Quan",
+ "弯" => "Wan", "弰" => "Shao", "弱" => "Ruo", "弲" => "Xuan", "弳" => "Jing", "弴" => "Dun",
+ "張" => "Zhang", "弶" => "Jiang", "強" => "Qiang", "弸" => "Peng", "弹" => "Dan", "强" => "Qiang",
+ "弻" => "Bi", "弼" => "Bi", "弽" => "She", "弾" => "Dan", "弿" => "Jian", "彀" => "Gou",
+ "å½" => "Sei", "彂" => "Fa", "彃" => "Bi", "彄" => "Kou", "å½…" => "Nagi", "彆" => "Bie",
+ "彇" => "Xiao", "彈" => "Dan", "彉" => "Kuo", "å½" => "Qiang", "彋" => "Hong", "彌" => "Mi",
+ "å½" => "Kuo", "å½" => "Wan", "å½" => "Jue", "å½" => "Ji", "彑" => "Ji", "å½’" => "Gui",
+ "当" => "Dang", "彔" => "Lu", "录" => "Lu", "彖" => "Tuan", "彗" => "Hui", "彘" => "Zhi",
+ "å½™" => "Hui", "å½" => "Hui", "å½›" => "Yi", "彜" => "Yi", "å½" => "Yi", "å½" => "Yi",
+ "彟" => "Huo", "å½ " => "Huo", "彡" => "Shan", "å½¢" => "Xing", "å½£" => "Wen", "彤" => "Tong",
+ "彥" => "Yan", "彦" => "Yan", "彧" => "Yu", "彨" => "Chi", "彩" => "Cai", "彪" => "Biao",
+ "彫" => "Diao", "彬" => "Bin", "å½" => "Peng", "å½®" => "Yong", "彯" => "Piao", "å½°" => "Zhang",
+ "影" => "Ying", "彲" => "Chi", "彳" => "Chi", "彴" => "Zhuo", "彵" => "Tuo", "彶" => "Ji",
+ "彷" => "Pang", "彸" => "Zhong", "役" => "Yi", "彺" => "Wang", "彻" => "Che", "彼" => "Bi",
+ "å½½" => "Chi", "å½¾" => "Ling", "彿" => "Fu", "å¾€" => "Wang", "å¾" => "Zheng", "徂" => "Cu",
+ "徃" => "Wang", "径" => "Jing", "待" => "Dai", "徆" => "Xi", "徇" => "Xun", "很" => "Hen",
+ "徉" => "Yang", "å¾" => "Huai", "律" => "Lu", "後" => "Hou", "å¾" => "Wa", "å¾" => "Cheng",
+ "å¾" => "Zhi", "å¾" => "Xu", "徑" => "Jing", "å¾’" => "Tu", "従" => "Cong", "徕" => "Lai",
+ "徖" => "Cong", "得" => "De", "徘" => "Pai", "徙" => "Xi", "徛" => "Qi", "徜" => "Chang",
+ "å¾" => "Zhi", "å¾" => "Cong", "徟" => "Zhou", "å¾ " => "Lai", "御" => "Yu", "å¾¢" => "Xie",
+ "徣" => "Jie", "徤" => "Jian", "徥" => "Chi", "徦" => "Jia", "徧" => "Bian", "徨" => "Huang",
+ "復" => "Fu", "循" => "Xun", "徫" => "Wei", "徬" => "Pang", "å¾" => "Yao", "å¾®" => "Wei",
+ "徯" => "Xi", "徰" => "Zheng", "徱" => "Piao", "徲" => "Chi", "徳" => "De", "徴" => "Zheng",
+ "徵" => "Zheng", "徶" => "Bie", "德" => "De", "徸" => "Chong", "徹" => "Che", "徺" => "Jiao",
+ "徻" => "Wei", "徼" => "Jiao", "徽" => "Hui", "徾" => "Mei", "徿" => "Long", "忀" => "Xiang",
+ "å¿" => "Bao", "å¿‚" => "Qu", "心" => "Xin", "å¿„" => "Shu", "å¿…" => "Bi", "忆" => "Yi",
+ "忇" => "Le", "忈" => "Ren", "忉" => "Dao", "å¿" => "Ding", "å¿‹" => "Gai", "å¿Œ" => "Ji",
+ "å¿" => "Ren", "å¿" => "Ren", "å¿" => "Chan", "å¿" => "Tan", "å¿‘" => "Te", "å¿’" => "Te",
+ "忓" => "Gan", "忔" => "Qi", "忕" => "Shi", "忖" => "Cun", "志" => "Zhi", "忘" => "Wang",
+ "å¿™" => "Mang", "å¿" => "Xi", "å¿›" => "Fan", "å¿œ" => "Ying", "å¿" => "Tian", "å¿" => "Min",
+ "å¿Ÿ" => "Min", "å¿ " => "Zhong", "å¿¡" => "Chong", "å¿¢" => "Wu", "å¿£" => "Ji", "忤" => "Wu",
+ "忥" => "Xi", "忦" => "Ye", "忧" => "You", "忨" => "Wan", "忩" => "Cong", "忪" => "Zhong",
+ "å¿«" => "Kuai", "忬" => "Yu", "å¿" => "Bian", "å¿®" => "Zhi", "忯" => "Qi", "å¿°" => "Cui",
+ "忱" => "Chen", "忲" => "Tai", "忳" => "Tun", "忴" => "Qian", "念" => "Nian", "忶" => "Hun",
+ "忷" => "Xiong", "忸" => "Niu", "忹" => "Wang", "忺" => "Xian", "忻" => "Xin", "忼" => "Kang",
+ "忽" => "Hu", "忾" => "Kai", "å¿¿" => "Fen", "æ€" => "Tai", "怂" => "Song", "怃" => "Wu",
+ "怄" => "Ou", "怅" => "Chang", "怆" => "Chuang", "怇" => "Ju", "怈" => "Yi", "怉" => "Bao",
+ "æ€" => "Chao", "怋" => "Min", "怌" => "Pei", "æ€" => "Zuo", "æ€" => "Zen", "æ€" => "Yang",
+ "æ€" => "Kou", "怑" => "Ban", "怒" => "Nu", "怓" => "Nao", "怔" => "Zheng", "怕" => "Pa",
+ "怖" => "Bu", "怗" => "Tie", "怘" => "Gu", "怙" => "Hu", "æ€" => "Ju", "怛" => "Da",
+ "怜" => "Lian", "æ€" => "Si", "æ€" => "Chou", "怟" => "Di", "æ€ " => "Dai", "怡" => "Yi",
+ "怢" => "Tu", "怣" => "You", "怤" => "Fu", "急" => "Ji", "怦" => "Peng", "性" => "Xing",
+ "怨" => "Yuan", "怩" => "Ni", "怪" => "Guai", "怫" => "Fu", "怬" => "Xi", "æ€" => "Bi",
+ "怮" => "You", "怯" => "Qie", "怰" => "Xuan", "怱" => "Cong", "怲" => "Bing", "怳" => "Huang",
+ "怴" => "Xu", "怵" => "Chu", "怶" => "Pi", "怷" => "Xi", "怸" => "Xi", "怹" => "Tan",
+ "怺" => "Koraeru", "总" => "Zong", "怼" => "Dui", "怾" => "Ki", "怿" => "Yi", "æ€" => "Chi",
+ "æ" => "Ren", "æ‚" => "Xun", "æƒ" => "Shi", "æ„" => "Xi", "æ…" => "Lao", "æ†" => "Heng",
+ "æ‡" => "Kuang", "æˆ" => "Mu", "æ‰" => "Zhi", "æ" => "Xie", "æ‹" => "Lian", "æŒ" => "Tiao",
+ "æ" => "Huang", "æ" => "Die", "æ" => "Hao", "æ" => "Kong", "æ‘" => "Gui", "æ’" => "Heng",
+ "æ“" => "Xi", "æ”" => "Xiao", "æ•" => "Shu", "æ–" => "S", "æ—" => "Kua", "æ˜" => "Qiu",
+ "æ™" => "Yang", "æ" => "Hui", "æ›" => "Hui", "æœ" => "Chi", "æ" => "Jia", "æ" => "Yi",
+ "æŸ" => "Xiong", "æ " => "Guai", "æ¡" => "Lin", "æ¢" => "Hui", "æ£" => "Zi", "æ¤" => "Xu",
+ "æ¥" => "Chi", "æ¦" => "Xiang", "æ§" => "Nu", "æ¨" => "Hen", "æ©" => "En", "æª" => "Ke",
+ "æ«" => "Tong", "æ¬" => "Tian", "æ" => "Gong", "æ®" => "Quan", "æ¯" => "Xi", "æ°" => "Qia",
+ "æ±" => "Yue", "æ²" => "Peng", "æ³" => "Ken", "æ´" => "De", "æµ" => "Hui", "æ¶" => "E",
+ "æ·" => "Kyuu", "æ¸" => "Tong", "æ¹" => "Yan", "æº" => "Kai", "æ»" => "Ce", "æ¼" => "Nao",
+ "æ½" => "Yun", "æ¾" => "Mang", "æ¿" => "Yong", "æ‚€" => "Yong", "æ‚" => "Yuan", "æ‚‚" => "Pi",
+ "悃" => "Kun", "悄" => "Qiao", "悅" => "Yue", "悆" => "Yu", "悇" => "Yu", "悈" => "Jie",
+ "悉" => "Xi", "æ‚" => "Zhe", "æ‚‹" => "Lin", "æ‚Œ" => "Ti", "æ‚" => "Han", "æ‚" => "Hao",
+ "æ‚" => "Qie", "æ‚" => "Ti", "æ‚‘" => "Bu", "æ‚’" => "Yi", "æ‚“" => "Qian", "æ‚”" => "Hui",
+ "æ‚•" => "Xi", "æ‚–" => "Bei", "æ‚—" => "Man", "悘" => "Yi", "æ‚™" => "Heng", "æ‚" => "Song",
+ "æ‚›" => "Quan", "æ‚œ" => "Cheng", "æ‚" => "Hui", "æ‚" => "Wu", "æ‚Ÿ" => "Wu", "æ‚ " => "You",
+ "悡" => "Li", "悢" => "Liang", "患" => "Huan", "悤" => "Cong", "悥" => "Yi", "悦" => "Yue",
+ "悧" => "Li", "您" => "Nin", "悩" => "Nao", "悪" => "E", "悫" => "Que", "悬" => "Xuan",
+ "æ‚" => "Qian", "æ‚®" => "Wu", "悯" => "Min", "æ‚°" => "Cong", "悱" => "Fei", "悲" => "Bei",
+ "悳" => "Duo", "悴" => "Cui", "悵" => "Chang", "悶" => "Men", "悷" => "Li", "悸" => "Ji",
+ "悹" => "Guan", "悺" => "Guan", "悻" => "Xing", "悼" => "Dao", "悽" => "Qi", "悾" => "Kong",
+ "æ‚¿" => "Tian", "惀" => "Lun", "æƒ" => "Xi", "惂" => "Kan", "惃" => "Kun", "惄" => "Ni",
+ "情" => "Qing", "惆" => "Chou", "惇" => "Dun", "惈" => "Guo", "惉" => "Chan", "æƒ" => "Liang",
+ "惋" => "Wan", "惌" => "Yuan", "æƒ" => "Jin", "æƒ" => "Ji", "æƒ" => "Lin", "æƒ" => "Yu",
+ "惑" => "Huo", "惒" => "He", "惓" => "Quan", "惔" => "Tan", "惕" => "Ti", "惖" => "Ti",
+ "惗" => "Nie", "惘" => "Wang", "惙" => "Chuo", "æƒ" => "Bu", "惛" => "Hun", "惜" => "Xi",
+ "æƒ" => "Tang", "æƒ" => "Xin", "惟" => "Wei", "æƒ " => "Hui", "惡" => "E", "惢" => "Rui",
+ "惣" => "Zong", "惤" => "Jian", "惥" => "Yong", "惦" => "Dian", "惧" => "Ju", "惨" => "Can",
+ "惩" => "Cheng", "惪" => "De", "惫" => "Bei", "惬" => "Qie", "æƒ" => "Can", "惮" => "Dan",
+ "惯" => "Guan", "惰" => "Duo", "惱" => "Nao", "惲" => "Yun", "想" => "Xiang", "惴" => "Zhui",
+ "惵" => "Die", "惶" => "Huang", "惷" => "Chun", "惸" => "Qiong", "惹" => "Re", "惺" => "Xing",
+ "惻" => "Ce", "惼" => "Bian", "惽" => "Hun", "惾" => "Zong", "惿" => "Ti", "æ„" => "Chou",
+ "愂" => "Bei", "愃" => "Xuan", "愄" => "Wei", "愅" => "Ge", "愆" => "Qian", "愇" => "Wei",
+ "愈" => "Yu", "愉" => "Yu", "æ„" => "Bi", "æ„‹" => "Xuan", "æ„Œ" => "Huan", "æ„" => "Min",
+ "æ„" => "Bi", "æ„" => "Yi", "æ„" => "Mian", "æ„‘" => "Yong", "æ„’" => "Kai", "æ„“" => "Dang",
+ "愔" => "Yin", "愕" => "E", "愖" => "Chen", "愗" => "Mou", "愘" => "Ke", "愙" => "Ke",
+ "æ„" => "Yu", "æ„›" => "Ai", "æ„œ" => "Qie", "æ„" => "Yan", "æ„" => "Nuo", "æ„Ÿ" => "Gan",
+ "æ„ " => "Yun", "æ„¡" => "Zong", "æ„¢" => "Sai", "æ„£" => "Leng", "愤" => "Fen", "愦" => "Kui",
+ "愧" => "Kui", "愨" => "Que", "愩" => "Gong", "愪" => "Yun", "愫" => "Su", "愬" => "Su",
+ "æ„" => "Qi", "æ„®" => "Yao", "愯" => "Song", "æ„°" => "Huang", "愱" => "Ji", "愲" => "Gu",
+ "愳" => "Ju", "愴" => "Chuang", "愵" => "Ni", "愶" => "Xie", "愷" => "Kai", "愸" => "Zheng",
+ "愹" => "Yong", "愺" => "Cao", "愻" => "Sun", "愼" => "Shen", "愽" => "Bo", "愾" => "Kai",
+ "æ„¿" => "Yuan", "æ…€" => "Xie", "æ…" => "Hun", "æ…‚" => "Yong", "æ…ƒ" => "Yang", "æ…„" => "Li",
+ "æ……" => "Sao", "æ…†" => "Tao", "æ…‡" => "Yin", "æ…ˆ" => "Ci", "æ…‰" => "Xu", "æ…" => "Qian",
+ "æ…‹" => "Tai", "æ…Œ" => "Huang", "æ…" => "Yun", "æ…" => "Shen", "æ…" => "Ming", "æ…‘" => "She",
+ "æ…’" => "Cong", "æ…“" => "Piao", "æ…”" => "Mo", "æ…•" => "Mu", "æ…–" => "Guo", "æ…—" => "Chi",
+ "æ…˜" => "Can", "æ…™" => "Can", "æ…" => "Can", "æ…›" => "Cui", "æ…œ" => "Min", "æ…" => "Te",
+ "æ…" => "Zhang", "æ…Ÿ" => "Tong", "æ… " => "Ao", "æ…¡" => "Shuang", "æ…¢" => "Man", "æ…£" => "Guan",
+ "æ…¤" => "Que", "æ…¥" => "Zao", "æ…¦" => "Jiu", "æ…§" => "Hui", "æ…¨" => "Kai", "æ…©" => "Lian",
+ "æ…ª" => "Ou", "æ…«" => "Song", "æ…¬" => "Jin", "æ…" => "Yin", "æ…®" => "Lu", "æ…¯" => "Shang",
+ "æ…°" => "Wei", "æ…±" => "Tuan", "æ…²" => "Man", "æ…³" => "Qian", "æ…´" => "She", "æ…µ" => "Yong",
+ "æ…¶" => "Qing", "æ…·" => "Kang", "æ…¸" => "Di", "æ…¹" => "Zhi", "æ…º" => "Lou", "æ…»" => "Juan",
+ "æ…¼" => "Qi", "æ…½" => "Qi", "æ…¾" => "Yu", "æ…¿" => "Ping", "憀" => "Liao", "æ†" => "Cong",
+ "憂" => "You", "憃" => "Chong", "憄" => "Zhi", "憅" => "Tong", "憆" => "Cheng", "憇" => "Qi",
+ "憈" => "Qu", "憉" => "Peng", "æ†" => "Bei", "憋" => "Bie", "憌" => "Chun", "æ†" => "Jiao",
+ "æ†" => "Zeng", "æ†" => "Chi", "æ†" => "Lian", "憑" => "Ping", "憒" => "Kui", "憓" => "Hui",
+ "憔" => "Qiao", "憕" => "Cheng", "憖" => "Yin", "憗" => "Yin", "憘" => "Xi", "憙" => "Xi",
+ "æ†" => "Dan", "憛" => "Tan", "憜" => "Duo", "æ†" => "Dui", "æ†" => "Dui", "憟" => "Su",
+ "æ† " => "Jue", "憡" => "Ce", "憢" => "Xiao", "憣" => "Fan", "憤" => "Fen", "憥" => "Lao",
+ "憦" => "Lao", "憧" => "Chong", "憨" => "Han", "憩" => "Qi", "憪" => "Xian", "憫" => "Min",
+ "憬" => "Jing", "æ†" => "Liao", "憮" => "Wu", "憯" => "Can", "憰" => "Jue", "憱" => "Cu",
+ "憲" => "Xian", "憳" => "Tan", "憴" => "Sheng", "憵" => "Pi", "憶" => "Yi", "憷" => "Chu",
+ "憸" => "Xian", "憹" => "Nao", "憺" => "Dan", "憻" => "Tan", "憼" => "Jing", "憽" => "Song",
+ "憾" => "Han", "憿" => "Jiao", "懀" => "Wai", "æ‡" => "Huan", "懂" => "Dong", "懃" => "Qin",
+ "懄" => "Qin", "懅" => "Qu", "懆" => "Cao", "懇" => "Ken", "懈" => "Xie", "應" => "Ying",
+ "æ‡" => "Ao", "懋" => "Mao", "懌" => "Yi", "æ‡" => "Lin", "æ‡" => "Se", "æ‡" => "Jun",
+ "æ‡" => "Huai", "懑" => "Men", "懒" => "Lan", "懓" => "Ai", "懔" => "Lin", "懕" => "Yan",
+ "懖" => "Gua", "懗" => "Xia", "懘" => "Chi", "懙" => "Yu", "æ‡" => "Yin", "懛" => "Dai",
+ "懜" => "Meng", "æ‡" => "Ai", "æ‡" => "Meng", "懟" => "Dui", "æ‡ " => "Qi", "懡" => "Mo",
+ "懢" => "Lan", "懣" => "Men", "懤" => "Chou", "懥" => "Zhi", "懦" => "Nuo", "懧" => "Nuo",
+ "懨" => "Yan", "懩" => "Yang", "懪" => "Bo", "懫" => "Zhi", "懬" => "Kuang", "æ‡" => "Kuang",
+ "懮" => "You", "懯" => "Fu", "懰" => "Liu", "懱" => "Mie", "懲" => "Cheng", "懴" => "Chan",
+ "懵" => "Meng", "懶" => "Lan", "懷" => "Huai", "懸" => "Xuan", "懹" => "Rang", "懺" => "Chan",
+ "懻" => "Ji", "懼" => "Ju", "懽" => "Huan", "懾" => "She", "懿" => "Yi", "æˆ" => "Nan",
+ "戂" => "Mi", "戃" => "Tang", "戄" => "Jue", "戅" => "Gang", "戆" => "Gang", "戇" => "Gang",
+ "戈" => "Ge", "戉" => "Yue", "æˆ" => "Wu", "戋" => "Jian", "戌" => "Xu", "æˆ" => "Shu",
+ "æˆ" => "Rong", "æˆ" => "Xi", "æˆ" => "Cheng", "我" => "Wo", "戒" => "Jie", "戓" => "Ge",
+ "戔" => "Jian", "戕" => "Qiang", "或" => "Huo", "戗" => "Qiang", "战" => "Zhan", "戙" => "Dong",
+ "æˆ" => "Qi", "戛" => "Jia", "戜" => "Die", "æˆ" => "Zei", "æˆ" => "Jia", "戟" => "Ji",
+ "æˆ " => "Shi", "戡" => "Kan", "戢" => "Ji", "戣" => "Kui", "戤" => "Gai", "戥" => "Deng",
+ "戦" => "Zhan", "戧" => "Chuang", "戨" => "Ge", "戩" => "Jian", "截" => "Jie", "戫" => "Yu",
+ "戬" => "Jian", "æˆ" => "Yan", "戮" => "Lu", "戯" => "Xi", "戰" => "Zhan", "戱" => "Xi",
+ "戲" => "Xi", "戳" => "Chuo", "戴" => "Dai", "戵" => "Qu", "戶" => "Hu", "户" => "Hu",
+ "戸" => "Hu", "戹" => "E", "戺" => "Shi", "戻" => "Li", "戼" => "Mao", "戽" => "Hu",
+ "戾" => "Li", "房" => "Fang", "所" => "Suo", "æ‰" => "Bian", "扂" => "Dian", "扃" => "Jiong",
+ "扄" => "Shang", "扅" => "Yi", "扆" => "Yi", "扇" => "Shan", "扈" => "Hu", "扉" => "Fei",
+ "æ‰" => "Yan", "手" => "Shou", "扌" => "T", "æ‰" => "Cai", "æ‰" => "Zha", "æ‰" => "Qiu",
+ "æ‰" => "Le", "扑" => "Bu", "扒" => "Ba", "打" => "Da", "扔" => "Reng", "払" => "Fu",
+ "扖" => "Hameru", "扗" => "Zai", "托" => "Tuo", "扙" => "Zhang", "æ‰" => "Diao", "扛" => "Kang",
+ "扜" => "Yu", "æ‰" => "Ku", "æ‰" => "Han", "扟" => "Shen", "æ‰ " => "Cha", "扡" => "Yi",
+ "扢" => "Gu", "扣" => "Kou", "扤" => "Wu", "扥" => "Tuo", "扦" => "Qian", "执" => "Zhi",
+ "扨" => "Ren", "扩" => "Kuo", "扪" => "Men", "扫" => "Sao", "扬" => "Yang", "æ‰" => "Niu",
+ "扮" => "Ban", "扯" => "Che", "扰" => "Rao", "扱" => "Xi", "扲" => "Qian", "扳" => "Ban",
+ "扴" => "Jia", "扵" => "Yu", "扶" => "Fu", "扷" => "Ao", "扸" => "Xi", "批" => "Pi",
+ "扺" => "Zhi", "扻" => "Zi", "扼" => "E", "扽" => "Dun", "找" => "Zhao", "承" => "Cheng",
+ "æ€" => "Ji", "æ" => "Yan", "æ‚" => "Kuang", "æƒ" => "Bian", "æ„" => "Chao", "æ…" => "Ju",
+ "æ†" => "Wen", "æ‡" => "Hu", "æˆ" => "Yue", "æ‰" => "Jue", "æ" => "Ba", "æ‹" => "Qin",
+ "æŒ" => "Zhen", "æ" => "Zheng", "æ" => "Yun", "æ" => "Wan", "æ" => "Nu", "æ‘" => "Yi",
+ "æ’" => "Shu", "æ“" => "Zhua", "æ”" => "Pou", "æ•" => "Tou", "æ–" => "Dou", "æ—" => "Kang",
+ "æ˜" => "Zhe", "æ™" => "Pou", "æ" => "Fu", "æ›" => "Pao", "æœ" => "Ba", "æ" => "Ao",
+ "æ" => "Ze", "æŸ" => "Tuan", "æ " => "Kou", "æ¡" => "Lun", "æ¢" => "Qiang", "æ¤" => "Hu",
+ "æ¥" => "Bao", "æ¦" => "Bing", "æ§" => "Zhi", "æ¨" => "Peng", "æ©" => "Tan", "æª" => "Pu",
+ "æ«" => "Pi", "æ¬" => "Tai", "æ" => "Yao", "æ®" => "Zhen", "æ¯" => "Zha", "æ°" => "Yang",
+ "æ±" => "Bao", "æ²" => "He", "æ³" => "Ni", "æ´" => "Yi", "æµ" => "Di", "æ¶" => "Chi",
+ "æ·" => "Pi", "æ¸" => "Za", "æ¹" => "Mo", "æº" => "Mo", "æ»" => "Shen", "æ¼" => "Ya",
+ "æ½" => "Chou", "æ¾" => "Qu", "æ¿" => "Min", "æ‹€" => "Chu", "æ‹" => "Jia", "æ‹‚" => "Fu",
+ "拃" => "Zhan", "拄" => "Zhu", "担" => "Dan", "拆" => "Chai", "拇" => "Mu", "拈" => "Nian",
+ "拉" => "La", "æ‹" => "Fu", "æ‹‹" => "Pao", "æ‹Œ" => "Ban", "æ‹" => "Pai", "æ‹" => "Ling",
+ "æ‹" => "Na", "æ‹" => "Guai", "æ‹‘" => "Qian", "æ‹’" => "Ju", "æ‹“" => "Tuo", "æ‹”" => "Ba",
+ "æ‹•" => "Tuo", "æ‹–" => "Tuo", "æ‹—" => "Ao", "拘" => "Ju", "æ‹™" => "Zhuo", "æ‹" => "Pan",
+ "æ‹›" => "Zhao", "æ‹œ" => "Bai", "æ‹" => "Bai", "æ‹" => "Di", "æ‹Ÿ" => "Ni", "æ‹ " => "Ju",
+ "拡" => "Kuo", "拢" => "Long", "拣" => "Jian", "拥" => "Yong", "拦" => "Lan", "拧" => "Ning",
+ "拨" => "Bo", "æ‹©" => "Ze", "拪" => "Qian", "æ‹«" => "Hen", "括" => "Gua", "æ‹" => "Shi",
+ "拮" => "Jie", "拯" => "Zheng", "拰" => "Nin", "拱" => "Gong", "拲" => "Gong", "拳" => "Quan",
+ "拴" => "Shuan", "拵" => "Cun", "拶" => "Zan", "拷" => "Kao", "拸" => "Chi", "拹" => "Xie",
+ "拺" => "Ce", "拻" => "Hui", "拼" => "Pin", "拽" => "Zhuai", "拾" => "Shi", "拿" => "Na",
+ "æŒ" => "Chi", "挂" => "Gua", "挃" => "Zhi", "挄" => "Kuo", "挅" => "Duo", "挆" => "Duo",
+ "指" => "Zhi", "挈" => "Qie", "按" => "An", "æŒ" => "Nong", "挋" => "Zhen", "挌" => "Ge",
+ "æŒ" => "Jiao", "æŒ" => "Ku", "æŒ" => "Dong", "æŒ" => "Ru", "挑" => "Tiao", "挒" => "Lie",
+ "挓" => "Zha", "挔" => "Lu", "挕" => "Die", "挖" => "Wa", "挗" => "Jue", "挘" => "Mushiru",
+ "挙" => "Ju", "æŒ" => "Zhi", "挛" => "Luan", "挜" => "Ya", "æŒ" => "Zhua", "æŒ" => "Ta",
+ "挟" => "Xie", "æŒ " => "Nao", "挡" => "Dang", "挢" => "Jiao", "挣" => "Zheng", "挤" => "Ji",
+ "挥" => "Hui", "挦" => "Xun", "挧" => "Ku", "挨" => "Ai", "挩" => "Tuo", "挪" => "Nuo",
+ "挫" => "Cuo", "挬" => "Bo", "æŒ" => "Geng", "挮" => "Ti", "振" => "Zhen", "挰" => "Cheng",
+ "挱" => "Suo", "挲" => "Suo", "挳" => "Keng", "挴" => "Mei", "挵" => "Long", "挶" => "Ju",
+ "挷" => "Peng", "挸" => "Jian", "挹" => "Yi", "挺" => "Ting", "挻" => "Shan", "挼" => "Nuo",
+ "挽" => "Wan", "挾" => "Xie", "挿" => "Cha", "æ€" => "Feng", "æ" => "Jiao", "æ‚" => "Wu",
+ "æƒ" => "Jun", "æ„" => "Jiu", "æ…" => "Tong", "æ†" => "Kun", "æ‡" => "Huo", "æˆ" => "Tu",
+ "æ‰" => "Zhuo", "æ" => "Pou", "æ‹" => "Le", "æŒ" => "Ba", "æ" => "Han", "æ" => "Shao",
+ "æ" => "Nie", "æ" => "Juan", "æ‘" => "Ze", "æ’" => "Song", "æ“" => "Ye", "æ”" => "Jue",
+ "æ•" => "Bu", "æ–" => "Huan", "æ—" => "Bu", "æ˜" => "Zun", "æ™" => "Yi", "æ" => "Zhai",
+ "æ›" => "Lu", "æœ" => "Sou", "æ" => "Tuo", "æ" => "Lao", "æŸ" => "Sun", "æ " => "Bang",
+ "æ¡" => "Jian", "æ¢" => "Huan", "æ£" => "Dao", "æ¥" => "Wan", "æ¦" => "Qin", "æ§" => "Peng",
+ "æ¨" => "She", "æ©" => "Lie", "æª" => "Min", "æ«" => "Men", "æ¬" => "Fu", "æ" => "Bai",
+ "æ®" => "Ju", "æ¯" => "Dao", "æ°" => "Wo", "æ±" => "Ai", "æ²" => "Juan", "æ³" => "Yue",
+ "æ´" => "Zong", "æµ" => "Chen", "æ¶" => "Chui", "æ·" => "Jie", "æ¸" => "Tu", "æ¹" => "Ben",
+ "æº" => "Na", "æ»" => "Nian", "æ¼" => "Nuo", "æ½" => "Zu", "æ¾" => "Wo", "æ¿" => "Xi",
+ "æ€" => "Xian", "æ" => "Cheng", "æ‚" => "Dian", "æƒ" => "Sao", "æ„" => "Lun", "æ…" => "Qing",
+ "æ†" => "Gang", "æ‡" => "Duo", "æˆ" => "Shou", "æ‰" => "Diao", "æ" => "Pou", "æ‹" => "Di",
+ "æŒ" => "Zhang", "æ" => "Gun", "æ" => "Ji", "æ" => "Tao", "æ" => "Qia", "æ‘" => "Qi",
+ "æ’" => "Pai", "æ“" => "Shu", "æ”" => "Qian", "æ•" => "Ling", "æ–" => "Yi", "æ—" => "Ya",
+ "æ˜" => "Jue", "æ™" => "Zheng", "æ" => "Liang", "æ›" => "Gua", "æœ" => "Yi", "æ" => "Huo",
+ "æ" => "Shan", "æŸ" => "Zheng", "æ " => "Lue", "æ¡" => "Cai", "æ¢" => "Tan", "æ£" => "Che",
+ "æ¤" => "Bing", "æ¥" => "Jie", "æ¦" => "Ti", "æ§" => "Kong", "æ¨" => "Tui", "æ©" => "Yan",
+ "æª" => "Cuo", "æ«" => "Zou", "æ¬" => "Ju", "æ" => "Tian", "æ®" => "Qian", "æ¯" => "Ken",
+ "æ°" => "Bai", "æ±" => "Shou", "æ²" => "Jie", "æ³" => "Lu", "æ´" => "Guo", "æµ" => "Haba",
+ "æ·" => "Zhi", "æ¸" => "Dan", "æ¹" => "Mang", "æº" => "Xian", "æ»" => "Sao", "æ¼" => "Guan",
+ "æ½" => "Peng", "æ¾" => "Yuan", "æ¿" => "Nuo", "æ€" => "Jian", "æ" => "Zhen", "æ‚" => "Jiu",
+ "æƒ" => "Jian", "æ„" => "Yu", "æ…" => "Yan", "æ†" => "Kui", "æ‡" => "Nan", "æˆ" => "Hong",
+ "æ‰" => "Rou", "æ" => "Pi", "æ‹" => "Wei", "æŒ" => "Sai", "æ" => "Zou", "æ" => "Xuan",
+ "æ" => "Miao", "æ" => "Ti", "æ‘" => "Nie", "æ’" => "Cha", "æ“" => "Shi", "æ”" => "Zong",
+ "æ•" => "Zhen", "æ–" => "Yi", "æ—" => "Shun", "æ˜" => "Heng", "æ™" => "Bian", "æ" => "Yang",
+ "æ›" => "Huan", "æœ" => "Yan", "æ" => "Zuan", "æ" => "An", "æŸ" => "Xu", "æ " => "Ya",
+ "æ¡" => "Wo", "æ¢" => "Ke", "æ£" => "Chuai", "æ¤" => "Ji", "æ¥" => "Ti", "æ¦" => "La",
+ "æ§" => "La", "æ¨" => "Cheng", "æ©" => "Kai", "æª" => "Jiu", "æ«" => "Jiu", "æ¬" => "Tu",
+ "æ" => "Jie", "æ®" => "Hui", "æ¯" => "Geng", "æ°" => "Chong", "æ±" => "Shuo", "æ²" => "She",
+ "æ³" => "Xie", "æ´" => "Yuan", "æµ" => "Qian", "æ¶" => "Ye", "æ·" => "Cha", "æ¸" => "Zha",
+ "æ¹" => "Bei", "æº" => "Yao", "æ½" => "Lan", "æ¾" => "Wen", "æ¿" => "Qin", "æ" => "Ge",
+ "æ‚" => "Lou", "æƒ" => "Zong", "æ„" => "Geng", "æ…" => "Jiao", "æ†" => "Gou", "æ‡" => "Qin",
+ "æˆ" => "Yong", "æ‰" => "Que", "æ" => "Chou", "æ‹" => "Chi", "æŒ" => "Zhan", "æ" => "Sun",
+ "æ" => "Sun", "æ" => "Bo", "æ" => "Chu", "æ‘" => "Rong", "æ’" => "Beng", "æ“" => "Cuo",
+ "æ”" => "Sao", "æ•" => "Ke", "æ–" => "Yao", "æ—" => "Dao", "æ˜" => "Zhi", "æ™" => "Nu",
+ "æ" => "Xie", "æ›" => "Jian", "æœ" => "Sou", "æ" => "Qiu", "æ" => "Gao", "æŸ" => "Xian",
+ "æ " => "Shuo", "æ¡" => "Sang", "æ¢" => "Jin", "æ£" => "Mie", "æ¤" => "E", "æ¥" => "Chui",
+ "æ¦" => "Nuo", "æ§" => "Shan", "æ¨" => "Ta", "æ©" => "Jie", "æª" => "Tang", "æ«" => "Pan",
+ "æ¬" => "Ban", "æ" => "Da", "æ®" => "Li", "æ¯" => "Tao", "æ°" => "Hu", "æ±" => "Zhi",
+ "æ²" => "Wa", "æ³" => "Xia", "æ´" => "Qian", "æµ" => "Wen", "æ¶" => "Qiang", "æ·" => "Tian",
+ "æ¸" => "Zhen", "æ¹" => "E", "æº" => "Xi", "æ»" => "Nuo", "æ¼" => "Quan", "æ½" => "Cha",
+ "æ¾" => "Zha", "æ¿" => "Ge", "æ‘€" => "Wu", "æ‘" => "En", "æ‘‚" => "She", "摃" => "Kang",
+ "摄" => "She", "摅" => "Shu", "摆" => "Bai", "摇" => "Yao", "摈" => "Bin", "摉" => "Sou",
+ "æ‘" => "Tan", "æ‘‹" => "Sa", "æ‘Œ" => "Chan", "æ‘" => "Suo", "æ‘" => "Liao", "æ‘" => "Chong",
+ "æ‘" => "Chuang", "æ‘‘" => "Guo", "æ‘’" => "Bing", "æ‘“" => "Feng", "æ‘”" => "Shuai", "æ‘•" => "Di",
+ "æ‘–" => "Qi", "æ‘—" => "Sou", "摘" => "Zhai", "æ‘™" => "Lian", "æ‘" => "Tang", "æ‘›" => "Chi",
+ "æ‘œ" => "Guan", "æ‘" => "Lu", "æ‘" => "Luo", "æ‘Ÿ" => "Lou", "æ‘ " => "Zong", "æ‘¡" => "Gai",
+ "摢" => "Hu", "摣" => "Zha", "摤" => "Chuang", "摥" => "Tang", "摦" => "Hua", "摧" => "Cui",
+ "摨" => "Nai", "æ‘©" => "Mo", "摪" => "Jiang", "æ‘«" => "Gui", "摬" => "Ying", "æ‘" => "Zhi",
+ "摮" => "Ao", "摯" => "Zhi", "摰" => "Nie", "摱" => "Man", "摲" => "Shan", "摳" => "Kou",
+ "摴" => "Shu", "摵" => "Suo", "摶" => "Tuan", "摷" => "Jiao", "摸" => "Mo", "摹" => "Mo",
+ "摺" => "Zhe", "摻" => "Xian", "摼" => "Keng", "摽" => "Piao", "摾" => "Jiang", "摿" => "Yin",
+ "æ’€" => "Gou", "æ’" => "Qian", "æ’‚" => "Lue", "æ’ƒ" => "Ji", "æ’„" => "Ying", "æ’…" => "Jue",
+ "æ’†" => "Pie", "æ’‡" => "Pie", "æ’ˆ" => "Lao", "æ’‰" => "Dun", "æ’" => "Xian", "æ’‹" => "Ruan",
+ "æ’Œ" => "Kui", "æ’" => "Zan", "æ’" => "Yi", "æ’" => "Xun", "æ’" => "Cheng", "æ’‘" => "Cheng",
+ "æ’’" => "Sa", "æ’“" => "Nao", "æ’”" => "Heng", "æ’•" => "Si", "æ’–" => "Qian", "æ’—" => "Huang",
+ "æ’˜" => "Da", "æ’™" => "Zun", "æ’" => "Nian", "æ’›" => "Lin", "æ’œ" => "Zheng", "æ’" => "Hui",
+ "æ’" => "Zhuang", "æ’Ÿ" => "Jiao", "æ’ " => "Ji", "æ’¡" => "Cao", "æ’¢" => "Dan", "æ’£" => "Dan",
+ "æ’¤" => "Che", "æ’¥" => "Bo", "æ’¦" => "Che", "æ’§" => "Jue", "æ’¨" => "Xiao", "æ’©" => "Liao",
+ "æ’ª" => "Ben", "æ’«" => "Fu", "æ’¬" => "Qiao", "æ’" => "Bo", "æ’®" => "Cuo", "æ’¯" => "Zhuo",
+ "æ’°" => "Zhuan", "æ’±" => "Tuo", "æ’²" => "Pu", "æ’³" => "Qin", "æ’´" => "Dun", "æ’µ" => "Nian",
+ "æ’·" => "Xie", "æ’¸" => "Lu", "æ’¹" => "Jiao", "æ’º" => "Cuan", "æ’»" => "Ta", "æ’¼" => "Han",
+ "æ’½" => "Qiao", "æ’¾" => "Zhua", "æ’¿" => "Jian", "æ“€" => "Gan", "æ“" => "Yong", "æ“‚" => "Lei",
+ "擃" => "Kuo", "擄" => "Lu", "擅" => "Shan", "擆" => "Zhuo", "擇" => "Ze", "擈" => "Pu",
+ "擉" => "Chuo", "æ“" => "Ji", "æ“‹" => "Dang", "æ“Œ" => "Suo", "æ“" => "Cao", "æ“" => "Qing",
+ "æ“" => "Jing", "æ“" => "Huan", "æ“‘" => "Jie", "æ“’" => "Qin", "æ““" => "Kuai", "æ“”" => "Dan",
+ "æ“•" => "Xi", "æ“–" => "Ge", "æ“—" => "Pi", "擘" => "Bo", "æ“™" => "Ao", "æ“" => "Ju",
+ "æ“›" => "Ye", "æ“" => "Mang", "æ“" => "Sou", "æ“Ÿ" => "Mi", "æ“ " => "Ji", "æ“¡" => "Tai",
+ "擢" => "Zhuo", "擣" => "Dao", "擤" => "Xing", "擥" => "Lan", "擦" => "Ca", "擧" => "Ju",
+ "擨" => "Ye", "æ“©" => "Ru", "擪" => "Ye", "æ“«" => "Ye", "擬" => "Ni", "æ“" => "Hu",
+ "擮" => "Ji", "擯" => "Bin", "擰" => "Ning", "擱" => "Ge", "擲" => "Zhi", "擳" => "Jie",
+ "擴" => "Kuo", "擵" => "Mo", "擶" => "Jian", "擷" => "Xie", "擸" => "Lie", "擹" => "Tan",
+ "擺" => "Bai", "擻" => "Sou", "擼" => "Lu", "擽" => "Lue", "擾" => "Rao", "擿" => "Zhi",
+ "æ”" => "Yang", "攂" => "Lei", "攃" => "Sa", "攄" => "Shu", "æ”…" => "Zan", "攆" => "Nian",
+ "攇" => "Xian", "攈" => "Jun", "攉" => "Huo", "æ”" => "Li", "攋" => "La", "攌" => "Han",
+ "æ”" => "Ying", "æ”" => "Lu", "æ”" => "Long", "æ”" => "Qian", "攑" => "Qian", "æ”’" => "Zan",
+ "攓" => "Qian", "攔" => "Lan", "攕" => "San", "攖" => "Ying", "攗" => "Mei", "攘" => "Rang",
+ "æ”™" => "Chan", "æ”›" => "Cuan", "攜" => "Xi", "æ”" => "She", "æ”" => "Luo", "攟" => "Jun",
+ "æ” " => "Mi", "攡" => "Li", "攢" => "Zan", "攣" => "Luan", "攤" => "Tan", "攥" => "Zuan",
+ "攦" => "Li", "攧" => "Dian", "攨" => "Wa", "攩" => "Dang", "攪" => "Jiao", "攫" => "Jue",
+ "攬" => "Lan", "æ”" => "Li", "æ”®" => "Nang", "支" => "Zhi", "æ”°" => "Gui", "æ”±" => "Gui",
+ "攲" => "Qi", "攳" => "Xin", "攴" => "Pu", "攵" => "Sui", "收" => "Shou", "攷" => "Kao",
+ "攸" => "You", "改" => "Gai", "攺" => "Yi", "攻" => "Gong", "攼" => "Gan", "攽" => "Ban",
+ "放" => "Fang", "政" => "Zheng", "æ•€" => "Bo", "æ•" => "Dian", "æ•‚" => "Kou", "敃" => "Min",
+ "敄" => "Wu", "故" => "Gu", "敆" => "He", "敇" => "Ce", "效" => "Xiao", "敉" => "Mi",
+ "æ•" => "Chu", "æ•‹" => "Ge", "æ•Œ" => "Di", "æ•" => "Xu", "æ•" => "Jiao", "æ•" => "Min",
+ "æ•" => "Chen", "æ•‘" => "Jiu", "æ•’" => "Zhen", "æ•“" => "Duo", "æ•”" => "Yu", "æ••" => "Chi",
+ "æ•–" => "Ao", "æ•—" => "Bai", "敘" => "Xu", "æ•™" => "Jiao", "æ•" => "Duo", "æ•›" => "Lian",
+ "æ•œ" => "Nie", "æ•" => "Bi", "æ•" => "Chang", "æ•Ÿ" => "Dian", "æ• " => "Duo", "æ•¡" => "Yi",
+ "敢" => "Gan", "散" => "San", "敤" => "Ke", "敥" => "Yan", "敦" => "Dun", "敧" => "Qi",
+ "敨" => "Dou", "æ•©" => "Xiao", "敪" => "Duo", "æ•«" => "Jiao", "敬" => "Jing", "æ•" => "Yang",
+ "敮" => "Xia", "敯" => "Min", "数" => "Shu", "敱" => "Ai", "敲" => "Qiao", "敳" => "Ai",
+ "整" => "Zheng", "敵" => "Di", "敶" => "Zhen", "敷" => "Fu", "數" => "Shu", "敹" => "Liao",
+ "敺" => "Qu", "敻" => "Xiong", "敼" => "Xi", "敽" => "Jiao", "敾" => "Sen", "敿" => "Jiao",
+ "æ–€" => "Zhuo", "æ–" => "Yi", "æ–‚" => "Lian", "æ–ƒ" => "Bi", "æ–„" => "Li", "æ–…" => "Xiao",
+ "æ–†" => "Xiao", "æ–‡" => "Wen", "æ–ˆ" => "Xue", "æ–‰" => "Qi", "æ–" => "Qi", "æ–‹" => "Zhai",
+ "æ–Œ" => "Bin", "æ–" => "Jue", "æ–" => "Zhai", "æ–" => "Fei", "æ–‘" => "Ban", "æ–’" => "Ban",
+ "æ–“" => "Lan", "æ–”" => "Yu", "æ–•" => "Lan", "æ––" => "Wei", "æ–—" => "Dou", "æ–˜" => "Sheng",
+ "æ–™" => "Liao", "æ–" => "Jia", "æ–›" => "Hu", "æ–œ" => "Xie", "æ–" => "Jia", "æ–" => "Yu",
+ "æ–Ÿ" => "Zhen", "æ– " => "Jiao", "æ–¡" => "Wo", "æ–¢" => "Tou", "æ–£" => "Chu", "æ–¤" => "Jin",
+ "æ–¥" => "Chi", "æ–¦" => "Yin", "æ–§" => "Fu", "æ–¨" => "Qiang", "æ–©" => "Zhan", "æ–ª" => "Qu",
+ "æ–«" => "Zhuo", "æ–¬" => "Zhan", "æ–" => "Duan", "æ–®" => "Zhuo", "æ–¯" => "Si", "æ–°" => "Xin",
+ "æ–±" => "Zhuo", "æ–²" => "Zhuo", "æ–³" => "Qin", "æ–´" => "Lin", "æ–µ" => "Zhuo", "æ–¶" => "Chu",
+ "æ–·" => "Duan", "æ–¸" => "Zhu", "æ–¹" => "Fang", "æ–º" => "Xie", "æ–»" => "Hang", "æ–¼" => "Yu",
+ "æ–½" => "Shi", "æ–¾" => "Pei", "æ–¿" => "You", "æ—€" => "Mye", "æ—" => "Pang", "æ—‚" => "Qi",
+ "æ—ƒ" => "Zhan", "æ—„" => "Mao", "æ—…" => "Lu", "æ—†" => "Pei", "æ—‡" => "Pi", "æ—ˆ" => "Liu",
+ "æ—‰" => "Fu", "æ—" => "Fang", "æ—‹" => "Xuan", "æ—Œ" => "Jing", "æ—" => "Jing", "æ—" => "Ni",
+ "æ—" => "Zu", "æ—" => "Zhao", "æ—‘" => "Yi", "æ—’" => "Liu", "æ—“" => "Shao", "æ—”" => "Jian",
+ "æ—•" => "Es", "æ—–" => "Yi", "æ——" => "Qi", "æ—˜" => "Zhi", "æ—™" => "Fan", "æ—" => "Piao",
+ "æ—›" => "Fan", "æ—œ" => "Zhan", "æ—" => "Guai", "æ—" => "Sui", "æ—Ÿ" => "Yu", "æ— " => "Wu",
+ "æ—¡" => "Ji", "æ—¢" => "Ji", "æ—£" => "Ji", "æ—¤" => "Huo", "æ—¥" => "Ri", "æ—¦" => "Dan",
+ "æ—§" => "Jiu", "æ—¨" => "Zhi", "æ—©" => "Zao", "æ—ª" => "Xie", "æ—«" => "Tiao", "æ—¬" => "Xun",
+ "æ—" => "Xu", "æ—®" => "Xu", "æ—¯" => "Xu", "æ—°" => "Gan", "æ—±" => "Han", "æ—²" => "Tai",
+ "æ—³" => "Di", "æ—´" => "Xu", "æ—µ" => "Chan", "æ—¶" => "Shi", "æ—·" => "Kuang", "æ—¸" => "Yang",
+ "æ—¹" => "Shi", "æ—º" => "Wang", "æ—»" => "Min", "æ—¼" => "Min", "æ—½" => "Tun", "æ—¾" => "Chun",
+ "æ—¿" => "Wu", "æ˜" => "Bei", "昂" => "Ang", "昃" => "Ze", "昄" => "Ban", "昅" => "Jie",
+ "昆" => "Kun", "昇" => "Sheng", "昈" => "Hu", "昉" => "Fang", "æ˜" => "Hao", "昋" => "Gui",
+ "昌" => "Chang", "æ˜" => "Xuan", "æ˜" => "Ming", "æ˜" => "Hun", "æ˜" => "Fen", "昑" => "Qin",
+ "昒" => "Hu", "易" => "Yi", "昔" => "Xi", "昕" => "Xin", "昖" => "Yan", "昗" => "Ze",
+ "昘" => "Fang", "昙" => "Tan", "æ˜" => "Shen", "昛" => "Ju", "昜" => "Yang", "æ˜" => "Zan",
+ "æ˜" => "Bing", "星" => "Xing", "æ˜ " => "Ying", "昡" => "Xuan", "昢" => "Pei", "昣" => "Zhen",
+ "昤" => "Ling", "春" => "Chun", "昦" => "Hao", "昧" => "Mei", "昨" => "Zuo", "昩" => "Mo",
+ "昪" => "Bian", "昫" => "Xu", "昬" => "Hun", "æ˜" => "Zhao", "昮" => "Zong", "是" => "Shi",
+ "昰" => "Shi", "昱" => "Yu", "昲" => "Fei", "昳" => "Die", "昴" => "Mao", "昵" => "Ni",
+ "昶" => "Chang", "昷" => "Wen", "昸" => "Dong", "昹" => "Ai", "昺" => "Bing", "昻" => "Ang",
+ "昼" => "Zhou", "昽" => "Long", "显" => "Xian", "昿" => "Kuang", "晀" => "Tiao", "æ™" => "Chao",
+ "時" => "Shi", "晃" => "Huang", "晄" => "Huang", "晅" => "Xuan", "晆" => "Kui", "晇" => "Xu",
+ "晈" => "Jiao", "晉" => "Jin", "æ™" => "Zhi", "晋" => "Jin", "晌" => "Shang", "æ™" => "Tong",
+ "æ™" => "Hong", "æ™" => "Yan", "æ™" => "Gai", "晑" => "Xiang", "æ™’" => "Shai", "晓" => "Xiao",
+ "晔" => "Ye", "晕" => "Yun", "晖" => "Hui", "晗" => "Han", "晘" => "Han", "晙" => "Jun",
+ "æ™" => "Wan", "æ™›" => "Xian", "晜" => "Kun", "æ™" => "Zhou", "æ™" => "Xi", "晟" => "Cheng",
+ "æ™ " => "Sheng", "晡" => "Bu", "晢" => "Zhe", "晣" => "Zhe", "晤" => "Wu", "晥" => "Han",
+ "晦" => "Hui", "晧" => "Hao", "晨" => "Chen", "晩" => "Wan", "晪" => "Tian", "晫" => "Zhuo",
+ "晬" => "Zui", "æ™" => "Zhou", "æ™®" => "Pu", "景" => "Jing", "æ™°" => "Xi", "æ™±" => "Shan",
+ "晲" => "Yi", "晳" => "Xi", "晴" => "Qing", "晵" => "Qi", "晶" => "Jing", "晷" => "Gui",
+ "晸" => "Zhen", "晹" => "Yi", "智" => "Zhi", "晻" => "An", "晼" => "Wan", "晽" => "Lin",
+ "晾" => "Liang", "晿" => "Chang", "æ€" => "Wang", "æ" => "Xiao", "æ‚" => "Zan", "æƒ" => "Hi",
+ "æ„" => "Xuan", "æ…" => "Xuan", "æ†" => "Yi", "æ‡" => "Xia", "æˆ" => "Yun", "æ‰" => "Hui",
+ "æ" => "Fu", "æ‹" => "Min", "æŒ" => "Kui", "æ" => "He", "æ" => "Ying", "æ" => "Du",
+ "æ" => "Wei", "æ‘" => "Shu", "æ’" => "Qing", "æ“" => "Mao", "æ”" => "Nan", "æ•" => "Jian",
+ "æ–" => "Nuan", "æ—" => "An", "æ˜" => "Yang", "æ™" => "Chun", "æ" => "Yao", "æ›" => "Suo",
+ "æœ" => "Jin", "æ" => "Ming", "æ" => "Jiao", "æŸ" => "Kai", "æ " => "Gao", "æ¡" => "Weng",
+ "æ¢" => "Chang", "æ£" => "Qi", "æ¤" => "Hao", "æ¥" => "Yan", "æ¦" => "Li", "æ§" => "Ai",
+ "æ¨" => "Ji", "æ©" => "Gui", "æª" => "Men", "æ«" => "Zan", "æ¬" => "Xie", "æ" => "Hao",
+ "æ®" => "Mu", "æ¯" => "Mo", "æ°" => "Cong", "æ±" => "Ni", "æ²" => "Zhang", "æ³" => "Hui",
+ "æ´" => "Bao", "æµ" => "Han", "æ¶" => "Xuan", "æ·" => "Chuan", "æ¸" => "Liao", "æ¹" => "Xian",
+ "æº" => "Dan", "æ»" => "Jing", "æ¼" => "Pie", "æ½" => "Lin", "æ¾" => "Tun", "æ¿" => "Xi",
+ "曀" => "Yi", "æ›" => "Ji", "曂" => "Huang", "曃" => "Tai", "曄" => "Ye", "æ›…" => "Ye",
+ "曆" => "Li", "曇" => "Tan", "曈" => "Tong", "曉" => "Xiao", "æ›" => "Fei", "曋" => "Qin",
+ "曌" => "Zhao", "æ›" => "Hao", "æ›" => "Yi", "æ›" => "Xiang", "æ›" => "Xing", "曑" => "Sen",
+ "曒" => "Jiao", "曓" => "Bao", "曔" => "Jing", "曕" => "Yian", "曖" => "Ai", "曗" => "Ye",
+ "曘" => "Ru", "æ›™" => "Shu", "æ›" => "Meng", "æ››" => "Xun", "曜" => "Yao", "æ›" => "Pu",
+ "æ›" => "Li", "曟" => "Chen", "æ› " => "Kuang", "曡" => "Die", "曣" => "Yan", "曤" => "Huo",
+ "曥" => "Lu", "曦" => "Xi", "曧" => "Rong", "曨" => "Long", "曩" => "Nang", "曪" => "Luo",
+ "曫" => "Luan", "曬" => "Shai", "æ›" => "Tang", "æ›®" => "Yan", "曯" => "Chu", "æ›°" => "Yue",
+ "曱" => "Yue", "曲" => "Qu", "曳" => "Yi", "更" => "Geng", "曵" => "Ye", "曶" => "Hu",
+ "曷" => "He", "書" => "Shu", "曹" => "Cao", "曺" => "Cao", "曻" => "Noboru", "曼" => "Man",
+ "曽" => "Ceng", "曾" => "Ceng", "替" => "Ti", "æœ" => "Can", "朂" => "Xu", "會" => "Hui",
+ "朄" => "Yin", "朅" => "Qie", "朆" => "Fen", "朇" => "Pi", "月" => "Yue", "有" => "You",
+ "æœ" => "Ruan", "朋" => "Peng", "朌" => "Ban", "æœ" => "Fu", "æœ" => "Ling", "æœ" => "Fei",
+ "æœ" => "Qu", "朒" => "Nu", "朓" => "Tiao", "朔" => "Shuo", "朕" => "Zhen", "朖" => "Lang",
+ "朗" => "Lang", "朘" => "Juan", "朙" => "Ming", "æœ" => "Huang", "望" => "Wang", "朜" => "Tun",
+ "æœ" => "Zhao", "æœ" => "Ji", "期" => "Qi", "æœ " => "Ying", "朡" => "Zong", "朢" => "Wang",
+ "朣" => "Tong", "朤" => "Lang", "朦" => "Meng", "朧" => "Long", "木" => "Mu", "朩" => "Deng",
+ "未" => "Wei", "末" => "Mo", "本" => "Ben", "æœ" => "Zha", "朮" => "Zhu", "术" => "Zhu",
+ "朱" => "Zhu", "朲" => "Ren", "朳" => "Ba", "朴" => "Po", "朵" => "Duo", "朶" => "Duo",
+ "朷" => "Dao", "朸" => "Li", "朹" => "Qiu", "机" => "Ji", "朻" => "Jiu", "朼" => "Bi",
+ "朽" => "Xiu", "朾" => "Ting", "朿" => "Ci", "æ€" => "Sha", "æ" => "Eburi", "æ‚" => "Za",
+ "æƒ" => "Quan", "æ„" => "Qian", "æ…" => "Yu", "æ†" => "Gan", "æ‡" => "Wu", "æˆ" => "Cha",
+ "æ‰" => "Shan", "æ" => "Xun", "æ‹" => "Fan", "æŒ" => "Wu", "æ" => "Zi", "æ" => "Li",
+ "æ" => "Xing", "æ" => "Cai", "æ‘" => "Cun", "æ’" => "Ren", "æ“" => "Shao", "æ”" => "Tuo",
+ "æ•" => "Di", "æ–" => "Zhang", "æ—" => "Mang", "æ˜" => "Chi", "æ™" => "Yi", "æ" => "Gu",
+ "æ›" => "Gong", "æœ" => "Du", "æ" => "Yi", "æ" => "Qi", "æŸ" => "Shu", "æ " => "Gang",
+ "æ¡" => "Tiao", "æ¢" => "Moku", "æ£" => "Soma", "æ¤" => "Tochi", "æ¥" => "Lai", "æ¦" => "Sugi",
+ "æ§" => "Mang", "æ¨" => "Yang", "æ©" => "Ma", "æª" => "Miao", "æ«" => "Si", "æ¬" => "Yuan",
+ "æ" => "Hang", "æ®" => "Fei", "æ¯" => "Bei", "æ°" => "Jie", "æ±" => "Dong", "æ²" => "Gao",
+ "æ³" => "Yao", "æ´" => "Xian", "æµ" => "Chu", "æ¶" => "Qun", "æ·" => "Pa", "æ¸" => "Shu",
+ "æ¹" => "Hua", "æº" => "Xin", "æ»" => "Chou", "æ¼" => "Zhu", "æ½" => "Chou", "æ¾" => "Song",
+ "æ¿" => "Ban", "æ€" => "Song", "æ" => "Ji", "æ‚" => "Yue", "æƒ" => "Jin", "æ„" => "Gou",
+ "æ…" => "Ji", "æ†" => "Mao", "æ‡" => "Pi", "æˆ" => "Bi", "æ‰" => "Wang", "æ" => "Ang",
+ "æ‹" => "Fang", "æŒ" => "Fen", "æ" => "Yi", "æ" => "Fu", "æ" => "Nan", "æ" => "Xi",
+ "æ‘" => "Hu", "æ’" => "Ya", "æ“" => "Dou", "æ”" => "Xun", "æ•" => "Zhen", "æ–" => "Yao",
+ "æ—" => "Lin", "æ˜" => "Rui", "æ™" => "E", "æ" => "Mei", "æ›" => "Zhao", "æœ" => "Guo",
+ "æ" => "Zhi", "æ" => "Cong", "æŸ" => "Yun", "æ " => "Waku", "æ¡" => "Dou", "æ¢" => "Shu",
+ "æ£" => "Zao", "æ¥" => "Li", "æ¦" => "Haze", "æ§" => "Jian", "æ¨" => "Cheng", "æ©" => "Matsu",
+ "æª" => "Qiang", "æ«" => "Feng", "æ¬" => "Nan", "æ" => "Xiao", "æ®" => "Xian", "æ¯" => "Ku",
+ "æ°" => "Ping", "æ±" => "Yi", "æ²" => "Xi", "æ³" => "Zhi", "æ´" => "Guai", "æµ" => "Xiao",
+ "æ¶" => "Jia", "æ·" => "Jia", "æ¸" => "Gou", "æ¹" => "Fu", "æº" => "Mo", "æ»" => "Yi",
+ "æ¼" => "Ye", "æ½" => "Ye", "æ¾" => "Shi", "æ¿" => "Nie", "柀" => "Bi", "æŸ" => "Duo",
+ "柂" => "Yi", "柃" => "Ling", "柄" => "Bing", "柅" => "Ni", "柆" => "La", "柇" => "He",
+ "柈" => "Pan", "柉" => "Fan", "æŸ" => "Zhong", "柋" => "Dai", "柌" => "Ci", "æŸ" => "Yang",
+ "æŸ" => "Fu", "æŸ" => "Bo", "æŸ" => "Mou", "柑" => "Gan", "柒" => "Qi", "染" => "Ran",
+ "柔" => "Rou", "柕" => "Mao", "柖" => "Zhao", "柗" => "Song", "柘" => "Zhe", "柙" => "Xia",
+ "æŸ" => "You", "柛" => "Shen", "柜" => "Ju", "æŸ" => "Tuo", "æŸ" => "Zuo", "柟" => "Nan",
+ "æŸ " => "Ning", "柡" => "Yong", "柢" => "Di", "柣" => "Zhi", "柤" => "Zha", "查" => "Cha",
+ "柦" => "Dan", "柧" => "Gu", "柨" => "Pu", "柩" => "Jiu", "柪" => "Ao", "柫" => "Fu",
+ "柬" => "Jian", "æŸ" => "Bo", "柮" => "Duo", "柯" => "Ke", "柰" => "Nai", "柱" => "Zhu",
+ "柲" => "Bi", "柳" => "Liu", "柴" => "Chai", "柵" => "Zha", "柶" => "Si", "柷" => "Zhu",
+ "柸" => "Pei", "柹" => "Shi", "柺" => "Guai", "査" => "Cha", "柼" => "Yao", "柽" => "Jue",
+ "柾" => "Jiu", "柿" => "Shi", "æ " => "Liu", "æ ‚" => "Mei", "æ ƒ" => "Hoy", "æ „" => "Rong",
+ "æ …" => "Zha", "æ ‡" => "Biao", "æ ˆ" => "Zhan", "æ ‰" => "Jie", "æ " => "Long", "æ ‹" => "Dong",
+ "æ Œ" => "Lu", "æ " => "Sayng", "æ " => "Li", "æ " => "Lan", "æ " => "Yong", "æ ‘" => "Shu",
+ "æ ’" => "Xun", "æ “" => "Shuan", "æ ”" => "Qi", "æ •" => "Zhen", "æ –" => "Qi", "æ —" => "Li",
+ "æ ˜" => "Yi", "æ ™" => "Xiang", "æ " => "Zhen", "æ ›" => "Li", "æ œ" => "Su", "æ " => "Gua",
+ "æ " => "Kan", "æ Ÿ" => "Bing", "æ " => "Ren", "æ ¡" => "Xiao", "æ ¢" => "Bo", "æ £" => "Ren",
+ "æ ¤" => "Bing", "æ ¥" => "Zi", "æ ¦" => "Chou", "æ §" => "Yi", "æ ¨" => "Jie", "æ ©" => "Xu",
+ "æ ª" => "Zhu", "æ «" => "Jian", "æ ¬" => "Zui", "æ " => "Er", "æ ®" => "Er", "æ ¯" => "You",
+ "æ °" => "Fa", "æ ±" => "Gong", "æ ²" => "Kao", "æ ³" => "Lao", "æ ´" => "Zhan", "æ µ" => "Li",
+ "æ ¶" => "Yin", "æ ·" => "Yang", "æ ¸" => "He", "æ ¹" => "Gen", "æ º" => "Zhi", "æ »" => "Chi",
+ "æ ¼" => "Ge", "æ ½" => "Zai", "æ ¾" => "Luan", "æ ¿" => "Fu", "æ¡€" => "Jie", "æ¡" => "Hang",
+ "桂" => "Gui", "桃" => "Tao", "桄" => "Guang", "桅" => "Wei", "框" => "Kuang", "桇" => "Ru",
+ "案" => "An", "桉" => "An", "æ¡" => "Juan", "æ¡‹" => "Yi", "æ¡Œ" => "Zhuo", "æ¡" => "Ku",
+ "æ¡" => "Zhi", "æ¡" => "Qiong", "æ¡" => "Tong", "æ¡‘" => "Sang", "æ¡’" => "Sang", "æ¡“" => "Huan",
+ "桔" => "Jie", "桕" => "Jiu", "桖" => "Xue", "桗" => "Duo", "桘" => "Zhui", "桙" => "Yu",
+ "æ¡" => "Zan", "æ¡›" => "Kasei", "æ¡œ" => "Ying", "æ¡" => "Masu", "æ¡Ÿ" => "Zhan", "æ¡ " => "Ya",
+ "桡" => "Nao", "桢" => "Zhen", "档" => "Dang", "桤" => "Qi", "桥" => "Qiao", "桦" => "Hua",
+ "桧" => "Kuai", "桨" => "Jiang", "桩" => "Zhuang", "桪" => "Xun", "桫" => "Suo", "桬" => "Sha",
+ "æ¡" => "Zhen", "æ¡®" => "Bei", "桯" => "Ting", "æ¡°" => "Gua", "桱" => "Jing", "桲" => "Bo",
+ "桳" => "Ben", "桴" => "Fu", "桵" => "Rui", "桶" => "Tong", "桷" => "Jue", "桸" => "Xi",
+ "桹" => "Lang", "桺" => "Liu", "桻" => "Feng", "桼" => "Qi", "桽" => "Wen", "桾" => "Jun",
+ "æ¡¿" => "Gan", "梀" => "Cu", "æ¢" => "Liang", "梂" => "Qiu", "梃" => "Ting", "梄" => "You",
+ "梅" => "Mei", "梆" => "Bang", "梇" => "Long", "梈" => "Peng", "梉" => "Zhuang", "æ¢" => "Di",
+ "梋" => "Xuan", "梌" => "Tu", "æ¢" => "Zao", "æ¢" => "Ao", "æ¢" => "Gu", "æ¢" => "Bi",
+ "梑" => "Di", "梒" => "Han", "梓" => "Zi", "梔" => "Zhi", "梕" => "Ren", "梖" => "Bei",
+ "梗" => "Geng", "梘" => "Jian", "梙" => "Huan", "æ¢" => "Wan", "梛" => "Nuo", "梜" => "Jia",
+ "æ¢" => "Tiao", "æ¢" => "Ji", "梟" => "Xiao", "æ¢ " => "Lu", "梡" => "Huan", "梢" => "Shao",
+ "梣" => "Cen", "梤" => "Fen", "梥" => "Song", "梦" => "Meng", "梧" => "Wu", "梨" => "Li",
+ "梩" => "Li", "梪" => "Dou", "梫" => "Cen", "梬" => "Ying", "æ¢" => "Suo", "梮" => "Ju",
+ "梯" => "Ti", "械" => "Jie", "梱" => "Kun", "梲" => "Zhuo", "梳" => "Shu", "梴" => "Chan",
+ "梵" => "Fan", "梶" => "Wei", "梷" => "Jing", "梸" => "Li", "梹" => "Bing", "梺" => "Fumoto",
+ "梻" => "Shikimi", "梼" => "Tao", "梽" => "Zhi", "梾" => "Lai", "梿" => "Lian", "检" => "Jian",
+ "æ£" => "Zhuo", "棂" => "Ling", "棃" => "Li", "棄" => "Qi", "棅" => "Bing", "棆" => "Zhun",
+ "棇" => "Cong", "棈" => "Qian", "棉" => "Mian", "æ£" => "Qi", "棋" => "Qi", "棌" => "Cai",
+ "æ£" => "Gun", "æ£" => "Chan", "æ£" => "Te", "æ£" => "Fei", "棑" => "Pai", "棒" => "Bang",
+ "棓" => "Pou", "棔" => "Hun", "棕" => "Zong", "棖" => "Cheng", "棗" => "Zao", "棘" => "Ji",
+ "棙" => "Li", "æ£" => "Peng", "棛" => "Yu", "棜" => "Yu", "æ£" => "Gu", "æ£" => "Hun",
+ "棟" => "Dong", "æ£ " => "Tang", "棡" => "Gang", "棢" => "Wang", "棣" => "Di", "棤" => "Xi",
+ "棥" => "Fan", "棦" => "Cheng", "棧" => "Zhan", "棨" => "Qi", "棩" => "Yuan", "棪" => "Yan",
+ "棫" => "Yu", "棬" => "Quan", "æ£" => "Yi", "森" => "Sen", "棯" => "Ren", "棰" => "Chui",
+ "棱" => "Leng", "棲" => "Qi", "棳" => "Zhuo", "棴" => "Fu", "棵" => "Ke", "棶" => "Lai",
+ "棷" => "Zou", "棸" => "Zou", "棹" => "Zhuo", "棺" => "Guan", "棻" => "Fen", "棼" => "Fen",
+ "棽" => "Chen", "棾" => "Qiong", "棿" => "Nie", "æ¤" => "Guo", "椂" => "Lu", "椃" => "Hao",
+ "椄" => "Jie", "椅" => "Yi", "椆" => "Chou", "椇" => "Ju", "椈" => "Ju", "椉" => "Cheng",
+ "æ¤" => "Zuo", "椋" => "Liang", "椌" => "Qiang", "æ¤" => "Zhi", "æ¤" => "Zhui", "æ¤" => "Ya",
+ "æ¤" => "Ju", "椑" => "Bei", "椒" => "Jiao", "椓" => "Zhuo", "椔" => "Zi", "椕" => "Bin",
+ "椖" => "Peng", "椗" => "Ding", "椘" => "Chu", "椙" => "Chang", "æ¤" => "Kunugi", "椛" => "Momiji",
+ "検" => "Jian", "æ¤" => "Gui", "æ¤" => "Xi", "椟" => "Du", "æ¤ " => "Qian", "椡" => "Kunugi",
+ "椢" => "Soko", "椣" => "Shide", "椤" => "Luo", "椥" => "Zhi", "椦" => "Ken", "椧" => "Myeng",
+ "椨" => "Tafu", "椪" => "Peng", "椫" => "Zhan", "æ¤" => "Tuo", "椮" => "Sen", "椯" => "Duo",
+ "椰" => "Ye", "椱" => "Fou", "椲" => "Wei", "椳" => "Wei", "椴" => "Duan", "椵" => "Jia",
+ "椶" => "Zong", "椷" => "Jian", "椸" => "Yi", "椹" => "Shen", "椺" => "Xi", "椻" => "Yan",
+ "椼" => "Yan", "椽" => "Chuan", "椾" => "Zhan", "椿" => "Chun", "楀" => "Yu", "æ¥" => "He",
+ "楂" => "Zha", "楃" => "Wo", "楄" => "Pian", "楅" => "Bi", "楆" => "Yao", "楇" => "Huo",
+ "楈" => "Xu", "楉" => "Ruo", "æ¥" => "Yang", "楋" => "La", "楌" => "Yan", "æ¥" => "Ben",
+ "æ¥" => "Hun", "æ¥" => "Kui", "æ¥" => "Jie", "楑" => "Kui", "楒" => "Si", "楓" => "Feng",
+ "楔" => "Xie", "楕" => "Tuo", "楖" => "Zhi", "楗" => "Jian", "楘" => "Mu", "楙" => "Mao",
+ "æ¥" => "Chu", "楛" => "Hu", "楜" => "Hu", "æ¥" => "Lian", "æ¥" => "Leng", "楟" => "Ting",
+ "æ¥ " => "Nan", "楡" => "Yu", "楢" => "You", "楣" => "Mei", "楤" => "Song", "楥" => "Xuan",
+ "楦" => "Xuan", "楧" => "Ying", "楨" => "Zhen", "楩" => "Pian", "楪" => "Ye", "楫" => "Ji",
+ "楬" => "Jie", "æ¥" => "Ye", "楮" => "Chu", "楯" => "Shun", "楰" => "Yu", "楱" => "Cou",
+ "楲" => "Wei", "楳" => "Mei", "楴" => "Di", "極" => "Ji", "楶" => "Jie", "楷" => "Kai",
+ "楸" => "Qiu", "楹" => "Ying", "楺" => "Rou", "楻" => "Heng", "楼" => "Lou", "楽" => "Le",
+ "楾" => "Hazou", "楿" => "Katsura", "榀" => "Pin", "æ¦" => "Muro", "概" => "Gai", "榃" => "Tan",
+ "榄" => "Lan", "榅" => "Yun", "榆" => "Yu", "榇" => "Chen", "榈" => "Lu", "榉" => "Ju",
+ "æ¦" => "Sakaki", "榌" => "Pi", "æ¦" => "Xie", "æ¦" => "Jia", "æ¦" => "Yi", "æ¦" => "Zhan",
+ "榑" => "Fu", "榒" => "Nai", "榓" => "Mi", "榔" => "Lang", "榕" => "Rong", "榖" => "Gu",
+ "榗" => "Jian", "榘" => "Ju", "榙" => "Ta", "æ¦" => "Yao", "榛" => "Zhen", "榜" => "Bang",
+ "æ¦" => "Sha", "æ¦" => "Yuan", "榟" => "Zi", "æ¦ " => "Ming", "榡" => "Su", "榢" => "Jia",
+ "榣" => "Yao", "榤" => "Jie", "榥" => "Huang", "榦" => "Gan", "榧" => "Fei", "榨" => "Zha",
+ "榩" => "Qian", "榪" => "Ma", "榫" => "Sun", "榬" => "Yuan", "æ¦" => "Xie", "榮" => "Rong",
+ "榯" => "Shi", "榰" => "Zhi", "榱" => "Cui", "榲" => "Yun", "榳" => "Ting", "榴" => "Liu",
+ "榵" => "Rong", "榶" => "Tang", "榷" => "Que", "榸" => "Zhai", "榹" => "Si", "榺" => "Sheng",
+ "榻" => "Ta", "榼" => "Ke", "榽" => "Xi", "榾" => "Gu", "榿" => "Qi", "槀" => "Kao",
+ "æ§" => "Gao", "槂" => "Sun", "槃" => "Pan", "槄" => "Tao", "槅" => "Ge", "槆" => "Xun",
+ "槇" => "Dian", "槈" => "Nou", "槉" => "Ji", "æ§" => "Shuo", "構" => "Gou", "槌" => "Chui",
+ "æ§" => "Qiang", "æ§" => "Cha", "æ§" => "Qian", "æ§" => "Huai", "槑" => "Mei", "槒" => "Xu",
+ "槓" => "Gang", "槔" => "Gao", "槕" => "Zhuo", "槖" => "Tuo", "槗" => "Hashi", "様" => "Yang",
+ "槙" => "Dian", "æ§" => "Jia", "槛" => "Jian", "槜" => "Zui", "æ§" => "Kashi", "æ§" => "Ori",
+ "槟" => "Bin", "æ§ " => "Zhu", "槢" => "Xi", "槣" => "Qi", "槤" => "Lian", "槥" => "Hui",
+ "槦" => "Yong", "槧" => "Qian", "槨" => "Guo", "槩" => "Gai", "槪" => "Gai", "槫" => "Tuan",
+ "槬" => "Hua", "æ§" => "Cu", "槮" => "Sen", "槯" => "Cui", "槰" => "Beng", "槱" => "You",
+ "槲" => "Hu", "槳" => "Jiang", "槴" => "Hu", "槵" => "Huan", "槶" => "Kui", "槷" => "Yi",
+ "槸" => "Nie", "槹" => "Gao", "槺" => "Kang", "槻" => "Gui", "槼" => "Gui", "槽" => "Cao",
+ "槾" => "Man", "槿" => "Jin", "æ¨" => "Zhuang", "樂" => "Le", "樃" => "Lang", "樄" => "Chen",
+ "樅" => "Cong", "樆" => "Li", "樇" => "Xiu", "樈" => "Qing", "樉" => "Shuang", "æ¨" => "Fan",
+ "樋" => "Tong", "樌" => "Guan", "æ¨" => "Ji", "æ¨" => "Suo", "æ¨" => "Lei", "æ¨" => "Lu",
+ "樑" => "Liang", "樒" => "Mi", "樓" => "Lou", "樔" => "Chao", "樕" => "Su", "樖" => "Ke",
+ "樗" => "Shu", "樘" => "Tang", "標" => "Biao", "æ¨" => "Lu", "樛" => "Jiu", "樜" => "Shu",
+ "æ¨" => "Zha", "æ¨" => "Shu", "樟" => "Zhang", "æ¨ " => "Men", "模" => "Mo", "樢" => "Niao",
+ "樣" => "Yang", "樤" => "Tiao", "樥" => "Peng", "樦" => "Zhu", "樧" => "Sha", "樨" => "Xi",
+ "権" => "Quan", "横" => "Heng", "樫" => "Jian", "樬" => "Cong", "樮" => "Hokuso", "樯" => "Qiang",
+ "樰" => "Tara", "樱" => "Ying", "樲" => "Er", "樳" => "Xin", "樴" => "Zhi", "樵" => "Qiao",
+ "樶" => "Zui", "樷" => "Cong", "樸" => "Pu", "樹" => "Shu", "樺" => "Hua", "樻" => "Kui",
+ "樼" => "Zhen", "樽" => "Zun", "樾" => "Yue", "樿" => "Zhan", "æ©€" => "Xi", "æ©" => "Xun",
+ "橂" => "Dian", "橃" => "Fa", "橄" => "Gan", "橅" => "Mo", "橆" => "Wu", "橇" => "Qiao",
+ "橈" => "Nao", "橉" => "Lin", "æ©" => "Liu", "æ©‹" => "Qiao", "æ©Œ" => "Xian", "æ©" => "Run",
+ "æ©" => "Fan", "æ©" => "Zhan", "æ©" => "Tuo", "æ©‘" => "Lao", "æ©’" => "Yun", "æ©“" => "Shun",
+ "橔" => "Tui", "橕" => "Cheng", "橖" => "Tang", "橗" => "Meng", "橘" => "Ju", "橙" => "Cheng",
+ "æ©" => "Su", "æ©›" => "Jue", "æ©œ" => "Jue", "æ©" => "Tan", "æ©" => "Hui", "æ©Ÿ" => "Ji",
+ "æ© " => "Nuo", "æ©¡" => "Xiang", "æ©¢" => "Tuo", "æ©£" => "Ning", "橤" => "Rui", "æ©¥" => "Zhu",
+ "橦" => "Chuang", "橧" => "Zeng", "橨" => "Fen", "橩" => "Qiong", "橪" => "Ran", "橫" => "Heng",
+ "橬" => "Cen", "æ©" => "Gu", "æ©®" => "Liu", "橯" => "Lao", "æ©°" => "Gao", "橱" => "Chu",
+ "橲" => "Zusa", "橳" => "Nude", "橴" => "Ca", "橵" => "San", "橶" => "Ji", "橷" => "Dou",
+ "橸" => "Shou", "橹" => "Lu", "橼" => "Yuan", "橽" => "Ta", "橾" => "Shu", "橿" => "Jiang",
+ "檀" => "Tan", "æª" => "Lin", "檂" => "Nong", "檃" => "Yin", "檄" => "Xi", "檅" => "Sui",
+ "檆" => "Shan", "檇" => "Zui", "檈" => "Xuan", "檉" => "Cheng", "æª" => "Gan", "檋" => "Ju",
+ "檌" => "Zui", "æª" => "Yi", "æª" => "Qin", "æª" => "Pu", "æª" => "Yan", "檑" => "Lei",
+ "檒" => "Feng", "檓" => "Hui", "檔" => "Dang", "檕" => "Ji", "檖" => "Sui", "檗" => "Bo",
+ "檘" => "Bi", "檙" => "Ding", "æª" => "Chu", "檛" => "Zhua", "檜" => "Kuai", "æª" => "Ji",
+ "æª" => "Jie", "檟" => "Jia", "æª " => "Qing", "檡" => "Zhe", "檢" => "Jian", "檣" => "Qiang",
+ "檤" => "Dao", "檥" => "Yi", "檦" => "Biao", "檧" => "Song", "檨" => "She", "檩" => "Lin",
+ "檪" => "Kunugi", "檫" => "Cha", "檬" => "Meng", "æª" => "Yin", "檮" => "Tao", "檯" => "Tai",
+ "檰" => "Mian", "檱" => "Qi", "檲" => "Toan", "檳" => "Bin", "檴" => "Huo", "檵" => "Ji",
+ "檶" => "Qian", "檷" => "Mi", "檸" => "Ning", "檹" => "Yi", "檺" => "Gao", "檻" => "Jian",
+ "檼" => "Yin", "檽" => "Er", "檾" => "Qing", "檿" => "Yan", "æ«€" => "Qi", "æ«" => "Mi",
+ "櫂" => "Zhao", "櫃" => "Gui", "櫄" => "Chun", "櫅" => "Ji", "櫆" => "Kui", "櫇" => "Po",
+ "櫈" => "Deng", "櫉" => "Chu", "æ«‹" => "Mian", "æ«Œ" => "You", "æ«" => "Zhi", "æ«" => "Guang",
+ "æ«" => "Qian", "æ«" => "Lei", "æ«‘" => "Lei", "æ«’" => "Sa", "æ«“" => "Lu", "æ«”" => "Li",
+ "æ«•" => "Cuan", "æ«–" => "Lu", "æ«—" => "Mie", "櫘" => "Hui", "æ«™" => "Ou", "æ«" => "Lu",
+ "æ«›" => "Jie", "æ«œ" => "Gao", "æ«" => "Du", "æ«" => "Yuan", "æ«Ÿ" => "Li", "æ« " => "Fei",
+ "櫡" => "Zhuo", "櫢" => "Sou", "櫣" => "Lian", "櫤" => "Tamo", "櫥" => "Chu", "櫧" => "Zhu",
+ "櫨" => "Lu", "æ«©" => "Yan", "櫪" => "Li", "æ««" => "Zhu", "櫬" => "Chen", "æ«" => "Jie",
+ "櫮" => "E", "櫯" => "Su", "櫰" => "Huai", "櫱" => "Nie", "櫲" => "Yu", "櫳" => "Long",
+ "櫴" => "Lai", "櫶" => "Xian", "櫷" => "Kwi", "櫸" => "Ju", "櫹" => "Xiao", "櫺" => "Ling",
+ "æ«»" => "Ying", "櫼" => "Jian", "櫽" => "Yin", "櫾" => "You", "æ«¿" => "Ying", "æ¬" => "Nong",
+ "欂" => "Bo", "欃" => "Chan", "欄" => "Lan", "欅" => "Ju", "欆" => "Shuang", "欇" => "She",
+ "欈" => "Wei", "欉" => "Cong", "æ¬" => "Quan", "欋" => "Qu", "欌" => "Cang", "æ¬" => "Yu",
+ "æ¬" => "Luo", "æ¬" => "Li", "欑" => "Zan", "欒" => "Luan", "欓" => "Dang", "欔" => "Jue",
+ "欕" => "Em", "欖" => "Lan", "欗" => "Lan", "欘" => "Zhu", "欙" => "Lei", "æ¬" => "Li",
+ "欛" => "Ba", "欜" => "Nang", "æ¬" => "Yu", "æ¬" => "Ling", "欟" => "Tsuki", "æ¬ " => "Qian",
+ "次" => "Ci", "欢" => "Huan", "欣" => "Xin", "欤" => "Yu", "欥" => "Yu", "欦" => "Qian",
+ "欧" => "Ou", "欨" => "Xu", "欩" => "Chao", "欪" => "Chu", "欫" => "Chi", "欬" => "Kai",
+ "æ¬" => "Yi", "欮" => "Jue", "欯" => "Xi", "欰" => "Xu", "欱" => "Xia", "欲" => "Yu",
+ "欳" => "Kuai", "欴" => "Lang", "欵" => "Kuan", "欶" => "Shuo", "欷" => "Xi", "欸" => "Ai",
+ "欹" => "Yi", "欺" => "Qi", "欻" => "Hu", "欼" => "Chi", "欽" => "Qin", "款" => "Kuan",
+ "欿" => "Kan", "æ€" => "Kuan", "æ" => "Kan", "æ‚" => "Chuan", "æƒ" => "Sha", "æ„" => "Gua",
+ "æ…" => "Yin", "æ†" => "Xin", "æ‡" => "Xie", "æˆ" => "Yu", "æ‰" => "Qian", "æ" => "Xiao",
+ "æ‹" => "Yi", "æŒ" => "Ge", "æ" => "Wu", "æ" => "Tan", "æ" => "Jin", "æ" => "Ou",
+ "æ‘" => "Hu", "æ’" => "Ti", "æ“" => "Huan", "æ”" => "Xu", "æ•" => "Pen", "æ–" => "Xi",
+ "æ—" => "Xiao", "æ˜" => "Xu", "æ™" => "Xi", "æ" => "Sen", "æ›" => "Lian", "æœ" => "Chu",
+ "æ" => "Yi", "æ" => "Kan", "æŸ" => "Yu", "æ " => "Chuo", "æ¡" => "Huan", "æ¢" => "Zhi",
+ "æ£" => "Zheng", "æ¤" => "Ci", "æ¥" => "Bu", "æ¦" => "Wu", "æ§" => "Qi", "æ¨" => "Bu",
+ "æ©" => "Bu", "æª" => "Wai", "æ«" => "Ju", "æ¬" => "Qian", "æ" => "Chi", "æ®" => "Se",
+ "æ¯" => "Chi", "æ°" => "Se", "æ±" => "Zhong", "æ²" => "Sui", "æ³" => "Sui", "æ´" => "Li",
+ "æµ" => "Cuo", "æ¶" => "Yu", "æ·" => "Li", "æ¸" => "Gui", "æ¹" => "Dai", "æº" => "Dai",
+ "æ»" => "Si", "æ¼" => "Jian", "æ½" => "Zhe", "æ¾" => "Mo", "æ¿" => "Mo", "殀" => "Yao",
+ "æ®" => "Mo", "殂" => "Cu", "殃" => "Yang", "殄" => "Tian", "æ®…" => "Sheng", "殆" => "Dai",
+ "殇" => "Shang", "殈" => "Xu", "殉" => "Xun", "æ®" => "Shu", "残" => "Can", "殌" => "Jue",
+ "æ®" => "Piao", "æ®" => "Qia", "æ®" => "Qiu", "æ®" => "Su", "殑" => "Qing", "æ®’" => "Yun",
+ "殓" => "Lian", "殔" => "Yi", "殕" => "Fou", "殖" => "Zhi", "殗" => "Ye", "殘" => "Can",
+ "æ®™" => "Hun", "æ®" => "Dan", "æ®›" => "Ji", "殜" => "Ye", "æ®" => "Zhen", "æ®" => "Yun",
+ "殟" => "Wen", "æ® " => "Chou", "殡" => "Bin", "殢" => "Ti", "殣" => "Jin", "殤" => "Shang",
+ "殥" => "Yin", "殦" => "Diao", "殧" => "Cu", "殨" => "Hui", "殩" => "Cuan", "殪" => "Yi",
+ "殫" => "Dan", "殬" => "Du", "æ®" => "Jiang", "æ®®" => "Lian", "殯" => "Bin", "æ®°" => "Du",
+ "殱" => "Tsukusu", "殲" => "Jian", "殳" => "Shu", "殴" => "Ou", "段" => "Duan", "殶" => "Zhu",
+ "殷" => "Yin", "殸" => "Qing", "殹" => "Yi", "殺" => "Sha", "殻" => "Que", "殼" => "Ke",
+ "殽" => "Yao", "殾" => "Jun", "殿" => "Dian", "毀" => "Hui", "æ¯" => "Hui", "毂" => "Gu",
+ "毃" => "Que", "毄" => "Ji", "毅" => "Yi", "毆" => "Ou", "毇" => "Hui", "毈" => "Duan",
+ "毉" => "Yi", "æ¯" => "Xiao", "毋" => "Wu", "毌" => "Guan", "æ¯" => "Mu", "æ¯" => "Mei",
+ "æ¯" => "Mei", "æ¯" => "Ai", "毑" => "Zuo", "毒" => "Du", "毓" => "Yu", "比" => "Bi",
+ "毕" => "Bi", "毖" => "Bi", "毗" => "Pi", "毘" => "Pi", "毙" => "Bi", "æ¯" => "Chan",
+ "毛" => "Mao", "æ¯" => "Pu", "毟" => "Mushiru", "æ¯ " => "Jia", "毡" => "Zhan", "毢" => "Sai",
+ "毣" => "Mu", "毤" => "Tuo", "毥" => "Xun", "毦" => "Er", "毧" => "Rong", "毨" => "Xian",
+ "毩" => "Ju", "毪" => "Mu", "毫" => "Hao", "毬" => "Qiu", "æ¯" => "Dou", "毮" => "Mushiru",
+ "毯" => "Tan", "毰" => "Pei", "毱" => "Ju", "毲" => "Duo", "毳" => "Cui", "毴" => "Bi",
+ "毵" => "San", "毷" => "Mao", "毸" => "Sui", "毹" => "Yu", "毺" => "Yu", "毻" => "Tuo",
+ "毼" => "He", "毽" => "Jian", "毾" => "Ta", "毿" => "San", "æ°" => "Mu", "æ°‚" => "Li",
+ "æ°ƒ" => "Tong", "æ°„" => "Rong", "æ°…" => "Chang", "æ°†" => "Pu", "æ°‡" => "Luo", "æ°ˆ" => "Zhan",
+ "æ°‰" => "Sao", "æ°" => "Zhan", "æ°‹" => "Meng", "æ°Œ" => "Luo", "æ°" => "Qu", "æ°" => "Die",
+ "æ°" => "Shi", "æ°" => "Di", "æ°‘" => "Min", "æ°’" => "Jue", "æ°“" => "Mang", "æ°”" => "Qi",
+ "æ°•" => "Pie", "æ°–" => "Nai", "æ°—" => "Qi", "æ°˜" => "Dao", "æ°™" => "Xian", "æ°" => "Chuan",
+ "æ°›" => "Fen", "æ°œ" => "Ri", "æ°" => "Nei", "æ°Ÿ" => "Fu", "æ° " => "Shen", "æ°¡" => "Dong",
+ "æ°¢" => "Qing", "æ°£" => "Qi", "æ°¤" => "Yin", "æ°¥" => "Xi", "æ°¦" => "Hai", "æ°§" => "Yang",
+ "æ°¨" => "An", "æ°©" => "Ya", "æ°ª" => "Ke", "æ°«" => "Qing", "æ°¬" => "Ya", "æ°" => "Dong",
+ "æ°®" => "Dan", "æ°¯" => "Lu", "æ°°" => "Qing", "æ°±" => "Yang", "æ°²" => "Yun", "æ°³" => "Yun",
+ "æ°´" => "Shui", "æ°µ" => "San", "æ°¶" => "Zheng", "æ°·" => "Bing", "æ°¸" => "Yong", "æ°¹" => "Dang",
+ "æ°º" => "Shitamizu", "æ°»" => "Le", "æ°¼" => "Ni", "æ°½" => "Tun", "æ°¾" => "Fan", "æ°¿" => "Gui",
+ "æ±€" => "Ting", "æ±" => "Zhi", "求" => "Qiu", "汃" => "Bin", "汄" => "Ze", "æ±…" => "Mian",
+ "汆" => "Cuan", "汇" => "Hui", "汈" => "Diao", "汉" => "Yi", "æ±" => "Cha", "汋" => "Zhuo",
+ "汌" => "Chuan", "æ±" => "Wan", "æ±" => "Fan", "æ±" => "Dai", "æ±" => "Xi", "汑" => "Tuo",
+ "汒" => "Mang", "汓" => "Qiu", "汔" => "Qi", "汕" => "Shan", "汖" => "Pai", "汗" => "Han",
+ "汘" => "Qian", "æ±™" => "Wu", "æ±" => "Wu", "æ±›" => "Xun", "汜" => "Si", "æ±" => "Ru",
+ "æ±" => "Gong", "江" => "Jiang", "æ± " => "Chi", "污" => "Wu", "æ±¢" => "Tsuchi", "汤" => "Tang",
+ "汥" => "Zhi", "汦" => "Chi", "汧" => "Qian", "汨" => "Mi", "汩" => "Yu", "汪" => "Wang",
+ "汫" => "Qing", "汬" => "Jing", "æ±" => "Rui", "æ±®" => "Jun", "汯" => "Hong", "æ±°" => "Tai",
+ "汱" => "Quan", "汲" => "Ji", "汳" => "Bian", "汴" => "Bian", "汵" => "Gan", "汶" => "Wen",
+ "汷" => "Zhong", "汸" => "Fang", "汹" => "Xiong", "決" => "Jue", "汻" => "Hang", "汼" => "Niou",
+ "æ±½" => "Qi", "æ±¾" => "Fen", "汿" => "Xu", "æ²€" => "Xu", "æ²" => "Qin", "沂" => "Yi",
+ "沃" => "Wo", "沄" => "Yun", "沅" => "Yuan", "沆" => "Hang", "沇" => "Yan", "沈" => "Chen",
+ "沉" => "Chen", "æ²" => "Dan", "沋" => "You", "沌" => "Dun", "æ²" => "Hu", "æ²" => "Huo",
+ "æ²" => "Qie", "æ²" => "Mu", "沑" => "Rou", "æ²’" => "Mei", "沓" => "Ta", "æ²”" => "Mian",
+ "沕" => "Wu", "æ²–" => "Chong", "æ²—" => "Tian", "沘" => "Bi", "æ²™" => "Sha", "æ²" => "Zhi",
+ "æ²›" => "Pei", "沜" => "Pan", "æ²" => "Zhui", "æ²" => "Za", "沟" => "Gou", "æ² " => "Liu",
+ "没" => "Mei", "沢" => "Ze", "沣" => "Feng", "沤" => "Ou", "沥" => "Li", "沦" => "Lun",
+ "沧" => "Cang", "沨" => "Feng", "沩" => "Wei", "沪" => "Hu", "沫" => "Mo", "沬" => "Mei",
+ "æ²" => "Shu", "æ²®" => "Ju", "沯" => "Zan", "æ²°" => "Tuo", "æ²±" => "Tuo", "æ²²" => "Tuo",
+ "河" => "He", "沴" => "Li", "沵" => "Mi", "沶" => "Yi", "沷" => "Fa", "沸" => "Fei",
+ "油" => "You", "沺" => "Tian", "治" => "Zhi", "沼" => "Zhao", "沽" => "Gu", "沾" => "Zhan",
+ "沿" => "Yan", "æ³€" => "Si", "æ³" => "Kuang", "泂" => "Jiong", "泃" => "Ju", "泄" => "Xie",
+ "æ³…" => "Qiu", "泆" => "Yi", "泇" => "Jia", "泈" => "Zhong", "泉" => "Quan", "æ³" => "Bo",
+ "泋" => "Hui", "泌" => "Mi", "æ³" => "Ben", "æ³" => "Zhuo", "æ³" => "Chu", "æ³" => "Le",
+ "泑" => "You", "泒" => "Gu", "泓" => "Hong", "泔" => "Gan", "法" => "Fa", "泖" => "Mao",
+ "æ³—" => "Si", "泘" => "Hu", "æ³™" => "Ping", "æ³" => "Ci", "æ³›" => "Fan", "泜" => "Chi",
+ "æ³" => "Su", "æ³" => "Ning", "泟" => "Cheng", "æ³ " => "Ling", "泡" => "Pao", "æ³¢" => "Bo",
+ "泣" => "Qi", "泤" => "Si", "泥" => "Ni", "泦" => "Ju", "泧" => "Yue", "注" => "Zhu",
+ "泩" => "Sheng", "泪" => "Lei", "泫" => "Xuan", "泬" => "Xue", "æ³" => "Fu", "æ³®" => "Pan",
+ "泯" => "Min", "泰" => "Tai", "泱" => "Yang", "泲" => "Ji", "泳" => "Yong", "泴" => "Guan",
+ "泵" => "Beng", "泶" => "Xue", "泷" => "Long", "泸" => "Lu", "泺" => "Bo", "泻" => "Xie",
+ "æ³¼" => "Po", "æ³½" => "Ze", "æ³¾" => "Jing", "泿" => "Yin", "æ´" => "Ji", "æ´‚" => "Yi",
+ "æ´ƒ" => "Hui", "æ´„" => "Hui", "æ´…" => "Zui", "æ´†" => "Cheng", "æ´‡" => "Yin", "æ´ˆ" => "Wei",
+ "æ´‰" => "Hou", "æ´" => "Jian", "æ´‹" => "Yang", "æ´Œ" => "Lie", "æ´" => "Si", "æ´" => "Ji",
+ "æ´" => "Er", "æ´" => "Xing", "æ´‘" => "Fu", "æ´’" => "Sa", "æ´“" => "Suo", "æ´”" => "Zhi",
+ "æ´•" => "Yin", "æ´–" => "Wu", "æ´—" => "Xi", "æ´˜" => "Kao", "æ´™" => "Zhu", "æ´" => "Jiang",
+ "æ´›" => "Luo", "æ´" => "An", "æ´" => "Dong", "æ´Ÿ" => "Yi", "æ´ " => "Mou", "æ´¡" => "Lei",
+ "æ´¢" => "Yi", "æ´£" => "Mi", "æ´¤" => "Quan", "æ´¥" => "Jin", "æ´¦" => "Mo", "æ´§" => "Wei",
+ "æ´¨" => "Xiao", "æ´©" => "Xie", "æ´ª" => "Hong", "æ´«" => "Xu", "æ´¬" => "Shuo", "æ´" => "Kuang",
+ "æ´®" => "Tao", "æ´¯" => "Qie", "æ´°" => "Ju", "æ´±" => "Er", "æ´²" => "Zhou", "æ´³" => "Ru",
+ "æ´´" => "Ping", "æ´µ" => "Xun", "æ´¶" => "Xiong", "æ´·" => "Zhi", "æ´¸" => "Guang", "æ´¹" => "Huan",
+ "æ´º" => "Ming", "æ´»" => "Huo", "æ´¼" => "Wa", "æ´½" => "Qia", "æ´¾" => "Pai", "æ´¿" => "Wu",
+ "æµ€" => "Qu", "æµ" => "Liu", "浂" => "Yi", "浃" => "Jia", "浄" => "Jing", "æµ…" => "Qian",
+ "浆" => "Jiang", "浇" => "Jiao", "浈" => "Cheng", "浉" => "Shi", "æµ" => "Zhuo", "测" => "Ce",
+ "浌" => "Pal", "æµ" => "Kuai", "æµ" => "Ji", "æµ" => "Liu", "æµ" => "Chan", "浑" => "Hun",
+ "浒" => "Hu", "浓" => "Nong", "浔" => "Xun", "浕" => "Jin", "浖" => "Lie", "浗" => "Qiu",
+ "浘" => "Wei", "æµ™" => "Zhe", "æµ" => "Jun", "æµ›" => "Han", "浜" => "Bang", "æµ" => "Mang",
+ "æµ" => "Zhuo", "浟" => "You", "æµ " => "Xi", "浡" => "Bo", "æµ¢" => "Dou", "æµ£" => "Wan",
+ "浤" => "Hong", "浥" => "Yi", "浦" => "Pu", "浧" => "Ying", "浨" => "Lan", "浩" => "Hao",
+ "浪" => "Lang", "浫" => "Han", "浬" => "Li", "æµ" => "Geng", "æµ®" => "Fu", "浯" => "Wu",
+ "æµ°" => "Lian", "æµ±" => "Chun", "æµ²" => "Feng", "æµ³" => "Yi", "æµ´" => "Yu", "æµµ" => "Tong",
+ "浶" => "Lao", "海" => "Hai", "浸" => "Jin", "浹" => "Jia", "浺" => "Chong", "浻" => "Weng",
+ "æµ¼" => "Mei", "æµ½" => "Sui", "æµ¾" => "Cheng", "浿" => "Pei", "涀" => "Xian", "æ¶" => "Shen",
+ "涂" => "Tu", "涃" => "Kun", "涄" => "Pin", "涅" => "Nie", "涆" => "Han", "涇" => "Jing",
+ "消" => "Xiao", "涉" => "She", "æ¶" => "Nian", "涋" => "Tu", "涌" => "Yong", "æ¶" => "Xiao",
+ "æ¶" => "Xian", "æ¶" => "Ting", "æ¶" => "E", "涑" => "Su", "涒" => "Tun", "涓" => "Juan",
+ "涔" => "Cen", "涕" => "Ti", "涖" => "Li", "涗" => "Shui", "涘" => "Si", "涙" => "Lei",
+ "æ¶" => "Shui", "涛" => "Tao", "涜" => "Du", "æ¶" => "Lao", "æ¶" => "Lai", "涟" => "Lian",
+ "æ¶ " => "Wei", "涡" => "Wo", "涢" => "Yun", "涣" => "Huan", "涤" => "Di", "润" => "Run",
+ "涧" => "Jian", "涨" => "Zhang", "涩" => "Se", "涪" => "Fu", "涫" => "Guan", "涬" => "Xing",
+ "æ¶" => "Shou", "涮" => "Shuan", "涯" => "Ya", "涰" => "Chuo", "涱" => "Zhang", "液" => "Ye",
+ "涳" => "Kong", "涴" => "Wo", "涵" => "Han", "涶" => "Tuo", "涷" => "Dong", "涸" => "He",
+ "涹" => "Wo", "涺" => "Ju", "涻" => "Gan", "涼" => "Liang", "涽" => "Hun", "涾" => "Ta",
+ "涿" => "Zhuo", "æ·€" => "Dian", "æ·" => "Qie", "æ·‚" => "De", "æ·ƒ" => "Juan", "æ·„" => "Zi",
+ "æ·…" => "Xi", "æ·†" => "Yao", "æ·‡" => "Qi", "æ·ˆ" => "Gu", "æ·‰" => "Guo", "æ·" => "Han",
+ "æ·‹" => "Lin", "æ·Œ" => "Tang", "æ·" => "Zhou", "æ·" => "Peng", "æ·" => "Hao", "æ·" => "Chang",
+ "æ·‘" => "Shu", "æ·’" => "Qi", "æ·“" => "Fang", "æ·”" => "Chi", "æ·•" => "Lu", "æ·–" => "Nao",
+ "æ·—" => "Ju", "æ·˜" => "Tao", "æ·™" => "Cong", "æ·" => "Lei", "æ·›" => "Zhi", "æ·œ" => "Peng",
+ "æ·" => "Fei", "æ·" => "Song", "æ·Ÿ" => "Tian", "æ· " => "Pi", "æ·¡" => "Dan", "æ·¢" => "Yu",
+ "æ·£" => "Ni", "æ·¤" => "Yu", "æ·¥" => "Lu", "æ·¦" => "Gan", "æ·§" => "Mi", "æ·¨" => "Jing",
+ "æ·©" => "Ling", "æ·ª" => "Lun", "æ·«" => "Yin", "æ·¬" => "Cui", "æ·" => "Qu", "æ·®" => "Huai",
+ "æ·¯" => "Yu", "æ·°" => "Nian", "æ·±" => "Shen", "æ·²" => "Piao", "æ·³" => "Chun", "æ·´" => "Wa",
+ "æ·µ" => "Yuan", "æ·¶" => "Lai", "æ··" => "Hun", "æ·¸" => "Qing", "æ·¹" => "Yan", "æ·º" => "Qian",
+ "æ·»" => "Tian", "æ·¼" => "Miao", "æ·½" => "Zhi", "æ·¾" => "Yin", "æ·¿" => "Mi", "æ¸" => "Yuan",
+ "渂" => "Wen", "渃" => "Re", "渄" => "Fei", "清" => "Qing", "渆" => "Yuan", "渇" => "Ke",
+ "済" => "Ji", "渉" => "She", "æ¸" => "Yuan", "渋" => "Shibui", "渌" => "Lu", "æ¸" => "Zi",
+ "æ¸" => "Du", "æ¸" => "Jian", "渑" => "Min", "渒" => "Pi", "渓" => "Tani", "渔" => "Yu",
+ "渕" => "Yuan", "渖" => "Shen", "渗" => "Shen", "渘" => "Rou", "渙" => "Huan", "æ¸" => "Zhu",
+ "減" => "Jian", "渜" => "Nuan", "æ¸" => "Yu", "æ¸" => "Qiu", "渟" => "Ting", "æ¸ " => "Qu",
+ "渡" => "Du", "渢" => "Feng", "渣" => "Zha", "渤" => "Bo", "渥" => "Wo", "渦" => "Wo",
+ "渧" => "Di", "渨" => "Wei", "温" => "Wen", "渪" => "Ru", "渫" => "Xie", "測" => "Ce",
+ "æ¸" => "Wei", "渮" => "Ge", "港" => "Gang", "渰" => "Yan", "渱" => "Hong", "渲" => "Xuan",
+ "渳" => "Mi", "渴" => "Ke", "渵" => "Mao", "渶" => "Ying", "渷" => "Yan", "游" => "You",
+ "渹" => "Hong", "渺" => "Miao", "渻" => "Xing", "渼" => "Mei", "渽" => "Zai", "渾" => "Hun",
+ "渿" => "Nai", "æ¹€" => "Kui", "æ¹" => "Shi", "湂" => "E", "湃" => "Pai", "湄" => "Mei",
+ "æ¹…" => "Lian", "湆" => "Qi", "湇" => "Qi", "湈" => "Mei", "湉" => "Tian", "æ¹" => "Cou",
+ "湋" => "Wei", "湌" => "Can", "æ¹" => "Tuan", "æ¹" => "Mian", "æ¹" => "Hui", "æ¹" => "Mo",
+ "湑" => "Xu", "湒" => "Ji", "湓" => "Pen", "湔" => "Jian", "湕" => "Jian", "湖" => "Hu",
+ "æ¹—" => "Feng", "湘" => "Xiang", "æ¹™" => "Yi", "æ¹" => "Yin", "æ¹›" => "Zhan", "湜" => "Shi",
+ "æ¹" => "Jie", "æ¹" => "Cheng", "湟" => "Huang", "æ¹ " => "Tan", "湡" => "Yu", "æ¹¢" => "Bi",
+ "湣" => "Min", "湤" => "Shi", "湥" => "Tu", "湦" => "Sheng", "湧" => "Yong", "湨" => "Qu",
+ "湩" => "Zhong", "湪" => "Suei", "湫" => "Jiu", "湬" => "Jiao", "æ¹" => "Qiou", "æ¹®" => "Yin",
+ "湯" => "Tang", "湰" => "Long", "湱" => "Huo", "湲" => "Yuan", "湳" => "Nan", "湴" => "Ban",
+ "湵" => "You", "湶" => "Quan", "湷" => "Chui", "湸" => "Liang", "湹" => "Chan", "湺" => "Yan",
+ "湻" => "Chun", "湼" => "Nie", "湽" => "Zi", "湾" => "Wan", "湿" => "Shi", "満" => "Man",
+ "æº" => "Ying", "溂" => "Ratsu", "溃" => "Kui", "溅" => "Jian", "溆" => "Xu", "溇" => "Lu",
+ "溈" => "Gui", "溉" => "Gai", "溌" => "Po", "æº" => "Jin", "æº" => "Gui", "æº" => "Tang",
+ "æº" => "Yuan", "溑" => "Suo", "溒" => "Yuan", "溓" => "Lian", "溔" => "Yao", "溕" => "Meng",
+ "準" => "Zhun", "溗" => "Sheng", "溘" => "Ke", "溙" => "Tai", "æº" => "Da", "溛" => "Wa",
+ "溜" => "Liu", "æº" => "Gou", "æº" => "Sao", "溟" => "Ming", "æº " => "Zha", "溡" => "Shi",
+ "溢" => "Yi", "溣" => "Lun", "溤" => "Ma", "溥" => "Pu", "溦" => "Wei", "溧" => "Li",
+ "溨" => "Cai", "溩" => "Wu", "溪" => "Xi", "溫" => "Wen", "溬" => "Qiang", "æº" => "Ze",
+ "溮" => "Shi", "溯" => "Su", "溰" => "Yi", "溱" => "Zhen", "溲" => "Sou", "溳" => "Yun",
+ "溴" => "Xiu", "溵" => "Yin", "溶" => "Rong", "溷" => "Hun", "溸" => "Su", "溹" => "Su",
+ "溺" => "Ni", "溻" => "Ta", "溼" => "Shi", "溽" => "Ru", "溾" => "Wei", "溿" => "Pan",
+ "滀" => "Chu", "æ»" => "Chu", "滂" => "Pang", "滃" => "Weng", "滄" => "Cang", "æ»…" => "Mie",
+ "滆" => "He", "滇" => "Dian", "滈" => "Hao", "滉" => "Huang", "æ»" => "Xi", "滋" => "Zi",
+ "滌" => "Di", "æ»" => "Zhi", "æ»" => "Ying", "æ»" => "Fu", "æ»" => "Jie", "滑" => "Hua",
+ "滒" => "Ge", "滓" => "Zi", "滔" => "Tao", "滕" => "Teng", "滖" => "Sui", "滗" => "Bi",
+ "滘" => "Jiao", "æ»™" => "Hui", "æ»" => "Gun", "æ»›" => "Yin", "滜" => "Gao", "æ»" => "Long",
+ "æ»" => "Zhi", "滟" => "Yan", "æ» " => "She", "满" => "Man", "滢" => "Ying", "滣" => "Chun",
+ "滤" => "Lu", "滥" => "Lan", "滦" => "Luan", "滨" => "Bin", "滩" => "Tan", "滪" => "Yu",
+ "滫" => "Sou", "滬" => "Hu", "æ»" => "Bi", "æ»®" => "Biao", "滯" => "Zhi", "æ»°" => "Jiang",
+ "滱" => "Kou", "滲" => "Shen", "滳" => "Shang", "滴" => "Di", "滵" => "Mi", "滶" => "Ao",
+ "滷" => "Lu", "滸" => "Hu", "滹" => "Hu", "滺" => "You", "滻" => "Chan", "滼" => "Fan",
+ "滽" => "Yong", "滾" => "Gun", "滿" => "Man", "æ¼" => "Yu", "漂" => "Piao", "漃" => "Ji",
+ "漄" => "Ya", "漅" => "Jiao", "漆" => "Qi", "漇" => "Xi", "漈" => "Ji", "漉" => "Lu",
+ "æ¼" => "Lu", "漋" => "Long", "漌" => "Jin", "æ¼" => "Guo", "æ¼" => "Cong", "æ¼" => "Lou",
+ "æ¼" => "Zhi", "漑" => "Gai", "æ¼’" => "Qiang", "漓" => "Li", "æ¼”" => "Yan", "漕" => "Cao",
+ "æ¼–" => "Jiao", "æ¼—" => "Cong", "漘" => "Qun", "æ¼™" => "Tuan", "æ¼" => "Ou", "æ¼›" => "Teng",
+ "漜" => "Ye", "æ¼" => "Xi", "æ¼" => "Mi", "漟" => "Tang", "æ¼ " => "Mo", "漡" => "Shang",
+ "漢" => "Han", "漣" => "Lian", "漤" => "Lan", "漥" => "Wa", "漦" => "Li", "漧" => "Qian",
+ "漨" => "Feng", "漩" => "Xuan", "漪" => "Yi", "漫" => "Man", "漬" => "Zi", "æ¼" => "Mang",
+ "漮" => "Kang", "漯" => "Lei", "漰" => "Peng", "漱" => "Shu", "漲" => "Zhang", "漳" => "Zhang",
+ "漴" => "Chong", "漵" => "Xu", "漶" => "Huan", "漷" => "Kuo", "漸" => "Jian", "漹" => "Yan",
+ "漺" => "Chuang", "漻" => "Liao", "漼" => "Cui", "漽" => "Ti", "漾" => "Yang", "漿" => "Jiang",
+ "æ½€" => "Cong", "æ½" => "Ying", "潂" => "Hong", "潃" => "Xun", "潄" => "Shu", "æ½…" => "Guan",
+ "潆" => "Ying", "潇" => "Xiao", "æ½" => "Xu", "潋" => "Lian", "潌" => "Zhi", "æ½" => "Wei",
+ "æ½" => "Pi", "æ½" => "Jue", "æ½" => "Jiao", "潑" => "Po", "æ½’" => "Dang", "潓" => "Hui",
+ "潔" => "Jie", "潕" => "Wu", "潖" => "Pa", "潗" => "Ji", "潘" => "Pan", "潙" => "Gui",
+ "æ½" => "Xiao", "æ½›" => "Qian", "潜" => "Qian", "æ½" => "Xi", "æ½" => "Lu", "潟" => "Xi",
+ "æ½ " => "Xuan", "潡" => "Dun", "æ½¢" => "Huang", "æ½£" => "Min", "潤" => "Run", "æ½¥" => "Su",
+ "潦" => "Liao", "潧" => "Zhen", "潨" => "Zhong", "潩" => "Yi", "潪" => "Di", "潫" => "Wan",
+ "潬" => "Dan", "æ½" => "Tan", "æ½®" => "Chao", "潯" => "Xun", "æ½°" => "Kui", "æ½±" => "Yie",
+ "潲" => "Shao", "潳" => "Tu", "潴" => "Zhu", "潵" => "San", "潶" => "Hei", "潷" => "Bi",
+ "潸" => "Shan", "潹" => "Chan", "潺" => "Chan", "潻" => "Shu", "潼" => "Tong", "潽" => "Pu",
+ "æ½¾" => "Lin", "潿" => "Wei", "æ¾€" => "Se", "æ¾" => "Se", "澂" => "Cheng", "澃" => "Jiong",
+ "澄" => "Cheng", "澅" => "Hua", "澆" => "Jiao", "澇" => "Lao", "澈" => "Che", "澉" => "Gan",
+ "æ¾" => "Cun", "澋" => "Heng", "澌" => "Si", "æ¾" => "Shu", "æ¾" => "Peng", "æ¾" => "Han",
+ "æ¾" => "Yun", "澑" => "Liu", "æ¾’" => "Hong", "澓" => "Fu", "æ¾”" => "Hao", "澕" => "He",
+ "æ¾–" => "Xian", "æ¾—" => "Jian", "澘" => "Shan", "æ¾™" => "Xi", "æ¾" => "Oki", "澜" => "Lan",
+ "æ¾" => "Yu", "澟" => "Lin", "æ¾ " => "Min", "澡" => "Zao", "æ¾¢" => "Dang", "æ¾£" => "Wan",
+ "澤" => "Ze", "澥" => "Xie", "澦" => "Yu", "澧" => "Li", "澨" => "Shi", "澩" => "Xue",
+ "澪" => "Ling", "澫" => "Man", "澬" => "Zi", "æ¾" => "Yong", "æ¾®" => "Kuai", "澯" => "Can",
+ "æ¾°" => "Lian", "æ¾±" => "Dian", "æ¾²" => "Ye", "æ¾³" => "Ao", "æ¾´" => "Huan", "æ¾µ" => "Zhen",
+ "澶" => "Chan", "澷" => "Man", "澸" => "Dan", "澹" => "Dan", "澺" => "Yi", "澻" => "Sui",
+ "æ¾¼" => "Pi", "æ¾½" => "Ju", "æ¾¾" => "Ta", "澿" => "Qin", "æ¿€" => "Ji", "æ¿" => "Zhuo",
+ "濂" => "Lian", "濃" => "Nong", "濄" => "Guo", "濅" => "Jin", "濆" => "Fen", "濇" => "Se",
+ "濈" => "Ji", "濉" => "Sui", "æ¿" => "Hui", "æ¿‹" => "Chu", "æ¿Œ" => "Ta", "æ¿" => "Song",
+ "æ¿" => "Ding", "æ¿" => "Zhu", "æ¿‘" => "Lai", "æ¿’" => "Bin", "æ¿“" => "Lian", "æ¿”" => "Mi",
+ "æ¿•" => "Shi", "æ¿–" => "Shu", "æ¿—" => "Mi", "濘" => "Ning", "æ¿™" => "Ying", "æ¿" => "Ying",
+ "æ¿›" => "Meng", "æ¿œ" => "Jin", "æ¿" => "Qi", "æ¿" => "Pi", "æ¿Ÿ" => "Ji", "æ¿ " => "Hao",
+ "濡" => "Ru", "濢" => "Zui", "濣" => "Wo", "濤" => "Tao", "濥" => "Yin", "濦" => "Yin",
+ "濧" => "Dui", "濨" => "Ci", "濩" => "Huo", "濪" => "Jing", "濫" => "Lan", "濬" => "Jun",
+ "æ¿" => "Ai", "æ¿®" => "Pu", "濯" => "Zhuo", "æ¿°" => "Wei", "濱" => "Bin", "濲" => "Gu",
+ "濳" => "Qian", "濴" => "Xing", "濵" => "Hama", "濶" => "Kuo", "濷" => "Fei", "濹" => "Boku",
+ "濺" => "Jian", "濻" => "Wei", "濼" => "Luo", "濽" => "Zan", "濾" => "Lu", "濿" => "Li",
+ "ç€" => "Yang", "瀂" => "Lu", "瀃" => "Si", "瀄" => "Jie", "瀅" => "Ying", "瀆" => "Du",
+ "瀇" => "Wang", "瀈" => "Hui", "瀉" => "Xie", "ç€" => "Pan", "瀋" => "Shen", "瀌" => "Biao",
+ "ç€" => "Chan", "ç€" => "Mo", "ç€" => "Liu", "ç€" => "Jian", "瀑" => "Pu", "瀒" => "Se",
+ "瀓" => "Cheng", "瀔" => "Gu", "瀕" => "Bin", "瀖" => "Huo", "瀗" => "Xian", "瀘" => "Lu",
+ "瀙" => "Qin", "ç€" => "Han", "瀛" => "Ying", "瀜" => "Yong", "ç€" => "Li", "ç€" => "Jing",
+ "瀟" => "Xiao", "ç€ " => "Ying", "瀡" => "Sui", "瀢" => "Wei", "瀣" => "Xie", "瀤" => "Huai",
+ "瀥" => "Hao", "瀦" => "Zhu", "瀧" => "Long", "瀨" => "Lai", "瀩" => "Dui", "瀪" => "Fan",
+ "瀫" => "Hu", "瀬" => "Lai", "瀯" => "Ying", "瀰" => "Mi", "瀱" => "Ji", "瀲" => "Lian",
+ "瀳" => "Jian", "瀴" => "Ying", "瀵" => "Fen", "瀶" => "Lin", "瀷" => "Yi", "瀸" => "Jian",
+ "瀹" => "Yue", "瀺" => "Chan", "瀻" => "Dai", "瀼" => "Rang", "瀽" => "Jian", "瀾" => "Lan",
+ "瀿" => "Fan", "ç€" => "Shuang", "ç" => "Yuan", "ç‚" => "Zhuo", "çƒ" => "Feng", "ç„" => "She",
+ "ç…" => "Lei", "ç†" => "Lan", "ç‡" => "Cong", "çˆ" => "Qu", "ç‰" => "Yong", "ç" => "Qian",
+ "ç‹" => "Fa", "çŒ" => "Guan", "ç" => "Que", "ç" => "Yan", "ç" => "Hao", "ç" => "Hyeng",
+ "ç‘" => "Sa", "ç’" => "Zan", "ç“" => "Luan", "ç”" => "Yan", "ç•" => "Li", "ç–" => "Mi",
+ "ç—" => "Shan", "ç˜" => "Tan", "ç™" => "Dang", "ç" => "Jiao", "ç›" => "Chan", "ç" => "Hao",
+ "ç" => "Ba", "çŸ" => "Zhu", "ç " => "Lan", "ç¡" => "Lan", "ç¢" => "Nang", "ç£" => "Wan",
+ "ç¤" => "Luan", "ç¥" => "Xun", "ç¦" => "Xian", "ç§" => "Yan", "ç¨" => "Gan", "ç©" => "Yan",
+ "çª" => "Yu", "ç«" => "Huo", "ç¬" => "Si", "ç" => "Mie", "ç®" => "Guang", "ç¯" => "Deng",
+ "ç°" => "Hui", "ç±" => "Xiao", "ç²" => "Xiao", "ç³" => "Hu", "ç´" => "Hong", "çµ" => "Ling",
+ "ç¶" => "Zao", "ç·" => "Zhuan", "ç¸" => "Jiu", "ç¹" => "Zha", "çº" => "Xie", "ç»" => "Chi",
+ "ç¼" => "Zhuo", "ç½" => "Zai", "ç¾" => "Zai", "ç¿" => "Can", "ç‚€" => "Yang", "ç‚" => "Qi",
+ "炂" => "Zhong", "炃" => "Fen", "炄" => "Niu", "炅" => "Jiong", "炆" => "Wen", "炇" => "Po",
+ "炈" => "Yi", "炉" => "Lu", "ç‚" => "Chui", "ç‚‹" => "Pi", "ç‚Œ" => "Kai", "ç‚" => "Pan",
+ "ç‚" => "Yan", "ç‚" => "Kai", "ç‚" => "Pang", "ç‚‘" => "Mu", "ç‚’" => "Chao", "ç‚“" => "Liao",
+ "炔" => "Gui", "炕" => "Kang", "炖" => "Tun", "炗" => "Guang", "炘" => "Xin", "炙" => "Zhi",
+ "ç‚" => "Guang", "ç‚›" => "Guang", "ç‚œ" => "Wei", "ç‚" => "Qiang", "ç‚Ÿ" => "Da", "ç‚ " => "Xia",
+ "炡" => "Zheng", "炢" => "Zhu", "炣" => "Ke", "炤" => "Zhao", "炥" => "Fu", "炦" => "Ba",
+ "炧" => "Duo", "炨" => "Duo", "炩" => "Ling", "炪" => "Zhuo", "炫" => "Xuan", "炬" => "Ju",
+ "ç‚" => "Tan", "ç‚®" => "Pao", "炯" => "Jiong", "ç‚°" => "Pao", "炱" => "Tai", "炲" => "Tai",
+ "炳" => "Bing", "炴" => "Yang", "炵" => "Tong", "炶" => "Han", "炷" => "Zhu", "炸" => "Zha",
+ "点" => "Dian", "為" => "Wei", "炻" => "Shi", "炼" => "Lian", "炽" => "Chi", "炾" => "Huang",
+ "烀" => "Hu", "çƒ" => "Shuo", "烂" => "Lan", "烃" => "Jing", "烄" => "Jiao", "烅" => "Xu",
+ "烆" => "Xing", "烇" => "Quan", "烈" => "Lie", "烉" => "Huan", "çƒ" => "Yang", "烋" => "Xiao",
+ "烌" => "Xiu", "çƒ" => "Xian", "çƒ" => "Yin", "çƒ" => "Wu", "çƒ" => "Zhou", "烑" => "Yao",
+ "烒" => "Shi", "烓" => "Wei", "烔" => "Tong", "烕" => "Xue", "烖" => "Zai", "烗" => "Kai",
+ "烘" => "Hong", "烙" => "Luo", "çƒ" => "Xia", "烛" => "Zhu", "烜" => "Xuan", "çƒ" => "Zheng",
+ "çƒ" => "Po", "烟" => "Yan", "çƒ " => "Hui", "烡" => "Guang", "烢" => "Zhe", "烣" => "Hui",
+ "烤" => "Kao", "烦" => "Fan", "烧" => "Shao", "烨" => "Ye", "烩" => "Hui", "烫" => "Tang",
+ "烬" => "Jin", "çƒ" => "Re", "烯" => "Xi", "烰" => "Fu", "烱" => "Jiong", "烲" => "Che",
+ "烳" => "Pu", "烴" => "Jing", "烵" => "Zhuo", "烶" => "Ting", "烷" => "Wan", "烸" => "Hai",
+ "烹" => "Peng", "烺" => "Lang", "烻" => "Shan", "烼" => "Hu", "烽" => "Feng", "烾" => "Chi",
+ "烿" => "Rong", "ç„" => "Xi", "ç„‚" => "Shu", "焃" => "He", "ç„„" => "Xun", "ç„…" => "Ku",
+ "焆" => "Jue", "焇" => "Xiao", "焈" => "Xi", "焉" => "Yan", "ç„" => "Han", "ç„‹" => "Zhuang",
+ "ç„Œ" => "Jun", "ç„" => "Di", "ç„" => "Xie", "ç„" => "Ji", "ç„" => "Wu", "ç„“" => "Han",
+ "焔" => "Yan", "焕" => "Huan", "焖" => "Men", "焗" => "Ju", "焘" => "Chou", "焙" => "Bei",
+ "ç„" => "Fen", "ç„›" => "Lin", "ç„œ" => "Kun", "ç„" => "Hun", "ç„" => "Tun", "ç„Ÿ" => "Xi",
+ "ç„ " => "Cui", "ç„¡" => "Wu", "ç„¢" => "Hong", "ç„£" => "Ju", "焤" => "Fu", "ç„¥" => "Wo",
+ "焦" => "Jiao", "焧" => "Cong", "焨" => "Feng", "焩" => "Ping", "焪" => "Qiong", "焫" => "Ruo",
+ "焬" => "Xi", "ç„" => "Qiong", "ç„®" => "Xin", "焯" => "Zhuo", "ç„°" => "Yan", "焱" => "Yan",
+ "焲" => "Yi", "焳" => "Jue", "焴" => "Yu", "焵" => "Gang", "然" => "Ran", "焷" => "Pi",
+ "焸" => "Gu", "焺" => "Sheng", "ç„»" => "Chang", "焼" => "Shao", "ç…" => "Chen", "ç…‚" => "He",
+ "ç…ƒ" => "Kui", "ç…„" => "Zhong", "ç……" => "Duan", "ç…†" => "Xia", "ç…‡" => "Hui", "ç…ˆ" => "Feng",
+ "ç…‰" => "Lian", "ç…" => "Xuan", "ç…‹" => "Xing", "ç…Œ" => "Huang", "ç…" => "Jiao", "ç…" => "Jian",
+ "ç…" => "Bi", "ç…" => "Ying", "ç…‘" => "Zhu", "ç…’" => "Wei", "ç…“" => "Tuan", "ç…”" => "Tian",
+ "ç…•" => "Xi", "ç…–" => "Nuan", "ç…—" => "Nuan", "ç…˜" => "Chan", "ç…™" => "Yan", "ç…" => "Jiong",
+ "ç…›" => "Jiong", "ç…œ" => "Yu", "ç…" => "Mei", "ç…" => "Sha", "ç…Ÿ" => "Wei", "ç… " => "Ye",
+ "ç…¡" => "Xin", "ç…¢" => "Qiong", "ç…£" => "Rou", "ç…¤" => "Mei", "ç…¥" => "Huan", "ç…¦" => "Xu",
+ "ç…§" => "Zhao", "ç…¨" => "Wei", "ç…©" => "Fan", "ç…ª" => "Qiu", "ç…«" => "Sui", "ç…¬" => "Yang",
+ "ç…" => "Lie", "ç…®" => "Zhu", "ç…¯" => "Jie", "ç…°" => "Gao", "ç…±" => "Gua", "ç…²" => "Bao",
+ "ç…³" => "Hu", "ç…´" => "Yun", "ç…µ" => "Xia", "ç…¸" => "Bian", "ç…¹" => "Gou", "ç…º" => "Tui",
+ "煻" => "Tang", "煼" => "Chao", "煽" => "Shan", "煾" => "N", "煿" => "Bo", "熀" => "Huang",
+ "ç†" => "Xie", "熂" => "Xi", "熃" => "Wu", "熄" => "Xi", "熅" => "Yun", "熆" => "He",
+ "熇" => "He", "熈" => "Xi", "熉" => "Yun", "ç†" => "Xiong", "熋" => "Nai", "熌" => "Shan",
+ "ç†" => "Qiong", "ç†" => "Yao", "ç†" => "Xun", "ç†" => "Mi", "熑" => "Lian", "熒" => "Ying",
+ "熓" => "Wen", "熔" => "Rong", "熕" => "Oozutsu", "熗" => "Qiang", "熘" => "Liu", "熙" => "Xi",
+ "ç†" => "Bi", "熛" => "Biao", "熜" => "Zong", "ç†" => "Lu", "ç†" => "Jian", "熟" => "Shou",
+ "ç† " => "Yi", "熡" => "Lou", "熢" => "Feng", "熣" => "Sui", "熤" => "Yi", "熥" => "Tong",
+ "熦" => "Jue", "熧" => "Zong", "熨" => "Yun", "熩" => "Hu", "熪" => "Yi", "熫" => "Zhi",
+ "熬" => "Ao", "ç†" => "Wei", "熮" => "Liao", "熯" => "Han", "熰" => "Ou", "熱" => "Re",
+ "熲" => "Jiong", "熳" => "Man", "熵" => "Shang", "熶" => "Cuan", "熷" => "Zeng", "熸" => "Jian",
+ "熹" => "Xi", "熺" => "Xi", "熻" => "Xi", "熼" => "Yi", "熽" => "Xiao", "熾" => "Chi",
+ "熿" => "Huang", "燀" => "Chan", "ç‡" => "Ye", "燂" => "Qian", "燃" => "Ran", "燄" => "Yan",
+ "燅" => "Xian", "燆" => "Qiao", "燇" => "Zun", "燈" => "Deng", "燉" => "Dun", "ç‡" => "Shen",
+ "燋" => "Jiao", "燌" => "Fen", "ç‡" => "Si", "ç‡" => "Liao", "ç‡" => "Yu", "ç‡" => "Lin",
+ "燑" => "Tong", "燒" => "Shao", "燓" => "Fen", "燔" => "Fan", "燕" => "Yan", "燖" => "Xun",
+ "燗" => "Lan", "燘" => "Mei", "燙" => "Tang", "ç‡" => "Yi", "燛" => "Jing", "燜" => "Men",
+ "營" => "Ying", "ç‡ " => "Yu", "燡" => "Yi", "燢" => "Xue", "燣" => "Lan", "燤" => "Tai",
+ "燥" => "Zao", "燦" => "Can", "燧" => "Sui", "燨" => "Xi", "燩" => "Que", "燪" => "Cong",
+ "燫" => "Lian", "燬" => "Hui", "ç‡" => "Zhu", "燮" => "Xie", "燯" => "Ling", "燰" => "Wei",
+ "燱" => "Yi", "燲" => "Xie", "燳" => "Zhao", "燴" => "Hui", "燵" => "Tatsu", "燶" => "Nung",
+ "燷" => "Lan", "燸" => "Ru", "燹" => "Xian", "燺" => "Kao", "燻" => "Xun", "燼" => "Jin",
+ "燽" => "Chou", "燾" => "Chou", "燿" => "Yao", "çˆ" => "Lan", "爂" => "Biao", "爃" => "Rong",
+ "爄" => "Li", "爅" => "Mo", "爆" => "Bao", "爇" => "Ruo", "爈" => "Lu", "爉" => "La",
+ "çˆ" => "Ao", "爋" => "Xun", "爌" => "Kuang", "çˆ" => "Shuo", "çˆ" => "Li", "çˆ" => "Lu",
+ "爑" => "Jue", "爒" => "Liao", "爓" => "Yan", "爔" => "Xi", "爕" => "Xie", "爖" => "Long",
+ "爗" => "Ye", "爙" => "Rang", "çˆ" => "Yue", "爛" => "Lan", "爜" => "Cong", "çˆ" => "Jue",
+ "çˆ" => "Tong", "爟" => "Guan", "爡" => "Che", "爢" => "Mi", "爣" => "Tang", "爤" => "Lan",
+ "爥" => "Zhu", "爧" => "Ling", "爨" => "Cuan", "爩" => "Yu", "爪" => "Zhua", "爫" => "Tsumekanmuri",
+ "爬" => "Pa", "çˆ" => "Zheng", "爮" => "Pao", "爯" => "Cheng", "爰" => "Yuan", "爱" => "Ai",
+ "爲" => "Wei", "爴" => "Jue", "爵" => "Jue", "父" => "Fu", "爷" => "Ye", "爸" => "Ba",
+ "爹" => "Die", "爺" => "Ye", "爻" => "Yao", "爼" => "Zu", "爽" => "Shuang", "爾" => "Er",
+ "爿" => "Qiang", "牀" => "Chuang", "ç‰" => "Ge", "牂" => "Zang", "牃" => "Die", "牄" => "Qiang",
+ "牅" => "Yong", "牆" => "Qiang", "片" => "Pian", "版" => "Ban", "牉" => "Pan", "ç‰" => "Shao",
+ "牋" => "Jian", "牌" => "Pai", "ç‰" => "Du", "ç‰" => "Chuang", "ç‰" => "Tou", "ç‰" => "Zha",
+ "牑" => "Bian", "牒" => "Die", "牓" => "Bang", "牔" => "Bo", "牕" => "Chuang", "牖" => "You",
+ "牘" => "Du", "牙" => "Ya", "ç‰" => "Cheng", "牛" => "Niu", "牜" => "Ushihen", "ç‰" => "Pin",
+ "ç‰" => "Jiu", "牟" => "Mou", "ç‰ " => "Tuo", "牡" => "Mu", "牢" => "Lao", "牣" => "Ren",
+ "牤" => "Mang", "牥" => "Fang", "牦" => "Mao", "牧" => "Mu", "牨" => "Gang", "物" => "Wu",
+ "牪" => "Yan", "牫" => "Ge", "牬" => "Bei", "ç‰" => "Si", "牮" => "Jian", "牯" => "Gu",
+ "牰" => "You", "牱" => "Ge", "牲" => "Sheng", "牳" => "Mu", "牴" => "Di", "牵" => "Qian",
+ "牶" => "Quan", "牷" => "Quan", "牸" => "Zi", "特" => "Te", "牺" => "Xi", "牻" => "Mang",
+ "牼" => "Keng", "牽" => "Qian", "牾" => "Wu", "牿" => "Gu", "ç€" => "Xi", "ç" => "Li",
+ "ç‚" => "Li", "çƒ" => "Pou", "ç„" => "Ji", "ç…" => "Gang", "ç†" => "Zhi", "ç‡" => "Ben",
+ "çˆ" => "Quan", "ç‰" => "Run", "ç" => "Du", "ç‹" => "Ju", "çŒ" => "Jia", "ç" => "Jian",
+ "ç" => "Feng", "ç" => "Pian", "ç" => "Ke", "ç‘" => "Ju", "ç’" => "Kao", "ç“" => "Chu",
+ "ç”" => "Xi", "ç•" => "Bei", "ç–" => "Luo", "ç—" => "Jie", "ç˜" => "Ma", "ç™" => "San",
+ "ç" => "Wei", "ç›" => "Li", "çœ" => "Dun", "ç" => "Tong", "çŸ" => "Jiang", "ç " => "Ikenie",
+ "ç¡" => "Li", "ç¢" => "Du", "ç£" => "Lie", "ç¤" => "Pi", "ç¥" => "Piao", "ç¦" => "Bao",
+ "ç§" => "Xi", "ç¨" => "Chou", "ç©" => "Wei", "çª" => "Kui", "ç«" => "Chou", "ç¬" => "Quan",
+ "ç" => "Fan", "ç®" => "Ba", "ç¯" => "Fan", "ç°" => "Qiu", "ç±" => "Ji", "ç²" => "Cai",
+ "ç³" => "Chuo", "ç´" => "An", "çµ" => "Jie", "ç¶" => "Zhuang", "ç·" => "Guang", "ç¸" => "Ma",
+ "ç¹" => "You", "çº" => "Kang", "ç»" => "Bo", "ç¼" => "Hou", "ç½" => "Ya", "ç¾" => "Yin",
+ "ç¿" => "Huan", "ç‹€" => "Zhuang", "ç‹" => "Yun", "ç‹‚" => "Kuang", "狃" => "Niu", "ç‹„" => "Di",
+ "ç‹…" => "Qing", "狆" => "Zhong", "狇" => "Mu", "狈" => "Bei", "狉" => "Pi", "ç‹" => "Ju",
+ "ç‹‹" => "Ni", "ç‹Œ" => "Sheng", "ç‹" => "Pao", "ç‹" => "Xia", "ç‹" => "Tuo", "ç‹" => "Hu",
+ "ç‹‘" => "Ling", "ç‹’" => "Fei", "ç‹“" => "Pi", "ç‹”" => "Ni", "ç‹•" => "Ao", "ç‹–" => "You",
+ "ç‹—" => "Gou", "狘" => "Yue", "ç‹™" => "Ju", "ç‹" => "Dan", "ç‹›" => "Po", "ç‹œ" => "Gu",
+ "ç‹" => "Xian", "ç‹" => "Ning", "ç‹Ÿ" => "Huan", "ç‹ " => "Hen", "ç‹¡" => "Jiao", "ç‹¢" => "He",
+ "狣" => "Zhao", "狤" => "Ji", "狥" => "Xun", "狦" => "Shan", "狧" => "Ta", "狨" => "Rong",
+ "ç‹©" => "Shou", "狪" => "Tong", "ç‹«" => "Lao", "独" => "Du", "ç‹" => "Xia", "ç‹®" => "Shi",
+ "狯" => "Hua", "狰" => "Zheng", "狱" => "Yu", "狲" => "Sun", "狳" => "Yu", "狴" => "Bi",
+ "狵" => "Mang", "狶" => "Xi", "狷" => "Juan", "狸" => "Li", "狹" => "Xia", "狺" => "Yin",
+ "ç‹»" => "Suan", "狼" => "Lang", "狽" => "Bei", "狾" => "Zhi", "ç‹¿" => "Yan", "çŒ" => "Li",
+ "猂" => "Han", "猃" => "Xian", "猄" => "Jing", "猅" => "Pai", "猆" => "Fei", "猇" => "Yao",
+ "猈" => "Ba", "猉" => "Qi", "çŒ" => "Ni", "猋" => "Biao", "猌" => "Yin", "çŒ" => "Lai",
+ "çŒ" => "Xi", "çŒ" => "Jian", "çŒ" => "Qiang", "猑" => "Kun", "猒" => "Yan", "猓" => "Guo",
+ "猔" => "Zong", "猕" => "Mi", "猖" => "Chang", "猗" => "Yi", "猘" => "Zhi", "猙" => "Zheng",
+ "çŒ" => "Ya", "猛" => "Meng", "猜" => "Cai", "çŒ" => "Cu", "çŒ" => "She", "猟" => "Kari",
+ "çŒ " => "Cen", "猡" => "Luo", "猢" => "Hu", "猣" => "Zong", "猤" => "Ji", "猥" => "Wei",
+ "猦" => "Feng", "猧" => "Wo", "猨" => "Yuan", "猩" => "Xing", "猪" => "Zhu", "猫" => "Mao",
+ "猬" => "Wei", "çŒ" => "Yuan", "献" => "Xian", "猯" => "Tuan", "猰" => "Ya", "猱" => "Nao",
+ "猲" => "Xie", "猳" => "Jia", "猴" => "Hou", "猵" => "Bian", "猶" => "You", "猷" => "You",
+ "猸" => "Mei", "猹" => "Zha", "猺" => "Yao", "猻" => "Sun", "猼" => "Bo", "猽" => "Ming",
+ "猾" => "Hua", "猿" => "Yuan", "ç€" => "Sou", "ç" => "Ma", "ç‚" => "Yuan", "çƒ" => "Dai",
+ "ç„" => "Yu", "ç…" => "Shi", "ç†" => "Hao", "çˆ" => "Yi", "ç‰" => "Zhen", "ç" => "Chuang",
+ "ç‹" => "Hao", "çŒ" => "Man", "ç" => "Jing", "ç" => "Jiang", "ç" => "Mu", "ç" => "Zhang",
+ "ç‘" => "Chan", "ç’" => "Ao", "ç“" => "Ao", "ç”" => "Hao", "ç•" => "Cui", "ç–" => "Fen",
+ "ç—" => "Jue", "ç˜" => "Bi", "ç™" => "Bi", "ç" => "Huang", "ç›" => "Pu", "çœ" => "Lin",
+ "ç" => "Yu", "ç" => "Tong", "çŸ" => "Yao", "ç " => "Liao", "ç¡" => "Shuo", "ç¢" => "Xiao",
+ "ç£" => "Swu", "ç¤" => "Ton", "ç¥" => "Xi", "ç¦" => "Ge", "ç§" => "Juan", "ç¨" => "Du",
+ "ç©" => "Hui", "çª" => "Kuai", "ç«" => "Xian", "ç¬" => "Xie", "ç" => "Ta", "ç®" => "Xian",
+ "ç¯" => "Xun", "ç°" => "Ning", "ç±" => "Pin", "ç²" => "Huo", "ç³" => "Nou", "ç´" => "Meng",
+ "çµ" => "Lie", "ç¶" => "Nao", "ç·" => "Guang", "ç¸" => "Shou", "ç¹" => "Lu", "çº" => "Ta",
+ "ç»" => "Xian", "ç¼" => "Mi", "ç½" => "Rang", "ç¾" => "Huan", "ç¿" => "Nao", "ç€" => "Luo",
+ "ç" => "Xian", "ç‚" => "Qi", "çƒ" => "Jue", "ç„" => "Xuan", "ç…" => "Miao", "ç†" => "Zi",
+ "ç‡" => "Lu", "çˆ" => "Lu", "ç‰" => "Yu", "ç" => "Su", "ç‹" => "Wang", "çŒ" => "Qiu",
+ "ç" => "Ga", "ç" => "Ding", "ç" => "Le", "ç" => "Ba", "ç‘" => "Ji", "ç’" => "Hong",
+ "ç“" => "Di", "ç”" => "Quan", "ç•" => "Gan", "ç–" => "Jiu", "ç—" => "Yu", "ç˜" => "Ji",
+ "ç™" => "Yu", "ç" => "Yang", "ç›" => "Ma", "çœ" => "Gong", "ç" => "Wu", "ç" => "Fu",
+ "çŸ" => "Wen", "ç " => "Jie", "ç¡" => "Ya", "ç¢" => "Fen", "ç£" => "Bian", "ç¤" => "Beng",
+ "ç¥" => "Yue", "ç¦" => "Jue", "ç§" => "Yun", "ç¨" => "Jue", "ç©" => "Wan", "çª" => "Jian",
+ "ç«" => "Mei", "ç¬" => "Dan", "ç" => "Pi", "ç®" => "Wei", "ç¯" => "Huan", "ç°" => "Xian",
+ "ç±" => "Qiang", "ç²" => "Ling", "ç³" => "Dai", "ç´" => "Yi", "çµ" => "An", "ç¶" => "Ping",
+ "ç·" => "Dian", "ç¸" => "Fu", "ç¹" => "Xuan", "çº" => "Xi", "ç»" => "Bo", "ç¼" => "Ci",
+ "ç½" => "Gou", "ç¾" => "Jia", "ç¿" => "Shao", "ç€" => "Po", "ç" => "Ci", "ç‚" => "Ke",
+ "çƒ" => "Ran", "ç„" => "Sheng", "ç…" => "Shen", "ç†" => "Yi", "ç‡" => "Zu", "çˆ" => "Jia",
+ "ç‰" => "Min", "ç" => "Shan", "ç‹" => "Liu", "çŒ" => "Bi", "ç" => "Zhen", "ç" => "Zhen",
+ "ç" => "Jue", "ç" => "Fa", "ç‘" => "Long", "ç’" => "Jin", "ç“" => "Jiao", "ç”" => "Jian",
+ "ç•" => "Li", "ç–" => "Guang", "ç—" => "Xian", "ç˜" => "Zhou", "ç™" => "Gong", "ç" => "Yan",
+ "ç›" => "Xiu", "çœ" => "Yang", "ç" => "Xu", "ç" => "Luo", "çŸ" => "Su", "ç " => "Zhu",
+ "ç¡" => "Qin", "ç¢" => "Ken", "ç£" => "Xun", "ç¤" => "Bao", "ç¥" => "Er", "ç¦" => "Xiang",
+ "ç§" => "Yao", "ç¨" => "Xia", "ç©" => "Heng", "çª" => "Gui", "ç«" => "Chong", "ç¬" => "Xu",
+ "ç" => "Ban", "ç®" => "Pei", "ç°" => "Dang", "ç±" => "Ei", "ç²" => "Hun", "ç³" => "Wen",
+ "ç´" => "E", "çµ" => "Cheng", "ç¶" => "Ti", "ç·" => "Wu", "ç¸" => "Wu", "ç¹" => "Cheng",
+ "çº" => "Jun", "ç»" => "Mei", "ç¼" => "Bei", "ç½" => "Ting", "ç¾" => "Xian", "ç¿" => "Chuo",
+ "ç" => "Xuan", "ç‚" => "Yan", "çƒ" => "Qiu", "ç„" => "Quan", "ç…" => "Lang", "ç†" => "Li",
+ "ç‡" => "Xiu", "çˆ" => "Fu", "ç‰" => "Liu", "ç" => "Ye", "ç‹" => "Xi", "çŒ" => "Ling",
+ "ç" => "Li", "ç" => "Jin", "ç" => "Lian", "ç" => "Suo", "ç‘" => "Chiisai", "ç“" => "Wan",
+ "ç”" => "Dian", "ç•" => "Pin", "ç–" => "Zhan", "ç—" => "Cui", "ç˜" => "Min", "ç™" => "Yu",
+ "ç" => "Ju", "ç›" => "Chen", "çœ" => "Lai", "ç" => "Wen", "ç" => "Sheng", "çŸ" => "Wei",
+ "ç " => "Dian", "ç¡" => "Chu", "ç¢" => "Zhuo", "ç£" => "Pei", "ç¤" => "Cheng", "ç¥" => "Hu",
+ "ç¦" => "Qi", "ç§" => "E", "ç¨" => "Kun", "ç©" => "Chang", "çª" => "Qi", "ç«" => "Beng",
+ "ç¬" => "Wan", "ç" => "Lu", "ç®" => "Cong", "ç¯" => "Guan", "ç°" => "Yan", "ç±" => "Diao",
+ "ç²" => "Bei", "ç³" => "Lin", "ç´" => "Qin", "çµ" => "Pi", "ç¶" => "Pa", "ç·" => "Que",
+ "ç¸" => "Zhuo", "ç¹" => "Qin", "çº" => "Fa", "ç¼" => "Qiong", "ç½" => "Du", "ç¾" => "Jie",
+ "ç¿" => "Hun", "ç‘€" => "Yu", "ç‘" => "Mao", "ç‘‚" => "Mei", "瑃" => "Chun", "ç‘„" => "Xuan",
+ "ç‘…" => "Ti", "瑆" => "Xing", "瑇" => "Dai", "瑈" => "Rou", "瑉" => "Min", "ç‘" => "Zhen",
+ "ç‘‹" => "Wei", "ç‘Œ" => "Ruan", "ç‘" => "Huan", "ç‘" => "Jie", "ç‘" => "Chuan", "ç‘" => "Jian",
+ "ç‘‘" => "Zhuan", "ç‘’" => "Yang", "ç‘“" => "Lian", "ç‘”" => "Quan", "ç‘•" => "Xia", "ç‘–" => "Duan",
+ "ç‘—" => "Yuan", "瑘" => "Ye", "ç‘™" => "Nao", "ç‘" => "Hu", "ç‘›" => "Ying", "ç‘œ" => "Yu",
+ "ç‘" => "Huang", "ç‘" => "Rui", "ç‘Ÿ" => "Se", "ç‘ " => "Liu", "ç‘¡" => "Shi", "ç‘¢" => "Rong",
+ "瑣" => "Suo", "瑤" => "Yao", "瑥" => "Wen", "瑦" => "Wu", "瑧" => "Jin", "瑨" => "Jin",
+ "ç‘©" => "Ying", "瑪" => "Ma", "ç‘«" => "Tao", "瑬" => "Liu", "ç‘" => "Tang", "ç‘®" => "Li",
+ "瑯" => "Lang", "瑰" => "Gui", "瑱" => "Zhen", "瑲" => "Qiang", "瑳" => "Cuo", "瑴" => "Jue",
+ "瑵" => "Zhao", "瑶" => "Yao", "瑷" => "Ai", "瑸" => "Bin", "瑹" => "Tu", "瑺" => "Chang",
+ "瑻" => "Kun", "瑼" => "Zhuan", "瑽" => "Cong", "瑾" => "Jin", "瑿" => "Yi", "璀" => "Cui",
+ "ç’" => "Cong", "ç’‚" => "Qi", "ç’ƒ" => "Li", "ç’„" => "Ying", "ç’…" => "Suo", "ç’†" => "Qiu",
+ "ç’‡" => "Xuan", "ç’ˆ" => "Ao", "ç’‰" => "Lian", "ç’" => "Man", "ç’‹" => "Zhang", "ç’Œ" => "Yin",
+ "ç’" => "Ying", "ç’" => "Zhi", "ç’" => "Lu", "ç’‘" => "Wu", "ç’’" => "Deng", "ç’“" => "Xiou",
+ "ç’”" => "Zeng", "ç’•" => "Xun", "ç’–" => "Qu", "ç’—" => "Dang", "ç’˜" => "Lin", "ç’™" => "Liao",
+ "ç’" => "Qiong", "ç’›" => "Su", "ç’œ" => "Huang", "ç’" => "Gui", "ç’" => "Pu", "ç’Ÿ" => "Jing",
+ "ç’ " => "Fan", "ç’¡" => "Jin", "ç’¢" => "Liu", "ç’£" => "Ji", "ç’¥" => "Jing", "ç’¦" => "Ai",
+ "ç’§" => "Bi", "ç’¨" => "Can", "ç’©" => "Qu", "ç’ª" => "Zao", "ç’«" => "Dang", "ç’¬" => "Jiao",
+ "ç’" => "Gun", "ç’®" => "Tan", "ç’¯" => "Hui", "ç’°" => "Huan", "ç’±" => "Se", "ç’²" => "Sui",
+ "ç’³" => "Tian", "ç’µ" => "Yu", "ç’¶" => "Jin", "ç’·" => "Lu", "ç’¸" => "Bin", "ç’¹" => "Shou",
+ "ç’º" => "Wen", "ç’»" => "Zui", "ç’¼" => "Lan", "ç’½" => "Xi", "ç’¾" => "Ji", "ç’¿" => "Xuan",
+ "ç“€" => "Ruan", "ç“" => "Huo", "ç“‚" => "Gai", "瓃" => "Lei", "ç“„" => "Du", "ç“…" => "Li",
+ "瓆" => "Zhi", "瓇" => "Rou", "瓈" => "Li", "瓉" => "Zan", "ç“" => "Qiong", "ç“‹" => "Zhe",
+ "ç“Œ" => "Gui", "ç“" => "Sui", "ç“" => "La", "ç“" => "Long", "ç“" => "Lu", "ç“‘" => "Li",
+ "ç“’" => "Zan", "ç““" => "Lan", "ç“”" => "Ying", "ç“•" => "Mi", "ç“–" => "Xiang", "ç“—" => "Xi",
+ "瓘" => "Guan", "ç“™" => "Dao", "ç“" => "Zan", "ç“›" => "Huan", "ç“œ" => "Gua", "ç“" => "Bo",
+ "ç“" => "Die", "ç“Ÿ" => "Bao", "ç“ " => "Hu", "ç“¡" => "Zhi", "ç“¢" => "Piao", "ç“£" => "Ban",
+ "瓤" => "Rang", "瓥" => "Li", "瓦" => "Wa", "瓧" => "Dekaguramu", "瓨" => "Jiang", "瓩" => "Qian",
+ "瓪" => "Fan", "ç“«" => "Pen", "瓬" => "Fang", "ç“" => "Dan", "ç“®" => "Weng", "瓯" => "Ou",
+ "瓰" => "Deshiguramu", "瓱" => "Miriguramu", "瓲" => "Thon", "瓳" => "Hu", "瓴" => "Ling", "瓵" => "Yi",
+ "瓶" => "Ping", "瓷" => "Ci", "瓸" => "Hekutogura", "瓹" => "Juan", "瓺" => "Chang", "瓻" => "Chi",
+ "瓼" => "Sarake", "瓽" => "Dang", "瓾" => "Meng", "ç“¿" => "Pou", "ç”" => "Ping", "甂" => "Bian",
+ "甃" => "Zhou", "甄" => "Zhen", "甅" => "Senchigura", "甆" => "Ci", "甇" => "Ying", "甈" => "Qi",
+ "甉" => "Xian", "ç”" => "Lou", "甋" => "Di", "甌" => "Ou", "ç”" => "Meng", "ç”" => "Zhuan",
+ "ç”" => "Peng", "ç”" => "Lin", "甑" => "Zeng", "ç”’" => "Wu", "甓" => "Pi", "ç””" => "Dan",
+ "甕" => "Weng", "ç”–" => "Ying", "ç”—" => "Yan", "甘" => "Gan", "ç”™" => "Dai", "ç”" => "Shen",
+ "ç”›" => "Tian", "甜" => "Tian", "ç”" => "Han", "ç”" => "Chang", "生" => "Sheng", "ç” " => "Qing",
+ "甡" => "Sheng", "產" => "Chan", "産" => "Chan", "甤" => "Rui", "甥" => "Sheng", "甦" => "Su",
+ "甧" => "Sen", "用" => "Yong", "甩" => "Shuai", "甪" => "Lu", "甫" => "Fu", "甬" => "Yong",
+ "ç”" => "Beng", "ç”®" => "Feng", "甯" => "Ning", "ç”°" => "Tian", "ç”±" => "You", "甲" => "Jia",
+ "申" => "Shen", "甴" => "Zha", "电" => "Dian", "甶" => "Fu", "男" => "Nan", "甸" => "Dian",
+ "甹" => "Ping", "町" => "Ting", "画" => "Hua", "甼" => "Ting", "甽" => "Quan", "甾" => "Zi",
+ "甿" => "Meng", "ç•€" => "Bi", "ç•" => "Qi", "ç•‚" => "Liu", "畃" => "Xun", "ç•„" => "Liu",
+ "ç•…" => "Chang", "畆" => "Mu", "畇" => "Yun", "畈" => "Fan", "畉" => "Fu", "ç•" => "Geng",
+ "ç•‹" => "Tian", "ç•Œ" => "Jie", "ç•" => "Jie", "ç•" => "Quan", "ç•" => "Wei", "ç•" => "Fu",
+ "ç•‘" => "Tian", "ç•’" => "Mu", "ç•“" => "Tap", "ç•”" => "Pan", "ç••" => "Jiang", "ç•–" => "Wa",
+ "ç•—" => "Da", "畘" => "Nan", "ç•™" => "Liu", "ç•" => "Ben", "ç•›" => "Zhen", "ç•œ" => "Chu",
+ "ç•" => "Mu", "ç•" => "Mu", "ç•Ÿ" => "Ce", "ç• " => "Cen", "ç•¡" => "Gai", "ç•¢" => "Bi",
+ "畣" => "Da", "畤" => "Zhi", "略" => "Lue", "畦" => "Qi", "畧" => "Lue", "畨" => "Pan",
+ "ç•©" => "Kesa", "番" => "Fan", "ç•«" => "Hua", "畬" => "Yu", "ç•" => "Yu", "ç•®" => "Mu",
+ "畯" => "Jun", "異" => "Yi", "畱" => "Liu", "畲" => "Yu", "畳" => "Die", "畴" => "Chou",
+ "畵" => "Hua", "當" => "Dang", "畷" => "Chuo", "畸" => "Ji", "畹" => "Wan", "畺" => "Jiang",
+ "畻" => "Sheng", "畼" => "Chang", "畽" => "Tuan", "畾" => "Lei", "畿" => "Ji", "疀" => "Cha",
+ "ç–" => "Liu", "ç–‚" => "Tatamu", "ç–ƒ" => "Tuan", "ç–„" => "Lin", "ç–…" => "Jiang", "ç–†" => "Jiang",
+ "ç–‡" => "Chou", "ç–ˆ" => "Bo", "ç–‰" => "Die", "ç–" => "Die", "ç–‹" => "Pi", "ç–Œ" => "Nie",
+ "ç–" => "Dan", "ç–" => "Shu", "ç–" => "Shu", "ç–" => "Zhi", "ç–‘" => "Yi", "ç–’" => "Chuang",
+ "ç–“" => "Nai", "ç–”" => "Ding", "ç–•" => "Bi", "ç––" => "Jie", "ç–—" => "Liao", "ç–˜" => "Gong",
+ "ç–™" => "Ge", "ç–" => "Jiu", "ç–›" => "Zhou", "ç–œ" => "Xia", "ç–" => "Shan", "ç–" => "Xu",
+ "ç–Ÿ" => "Nue", "ç– " => "Li", "ç–¡" => "Yang", "ç–¢" => "Chen", "ç–£" => "You", "ç–¤" => "Ba",
+ "ç–¥" => "Jie", "ç–¦" => "Jue", "ç–§" => "Zhi", "ç–¨" => "Xia", "ç–©" => "Cui", "ç–ª" => "Bi",
+ "ç–«" => "Yi", "ç–¬" => "Li", "ç–" => "Zong", "ç–®" => "Chuang", "ç–¯" => "Feng", "ç–°" => "Zhu",
+ "ç–±" => "Pao", "ç–²" => "Pi", "ç–³" => "Gan", "ç–´" => "Ke", "ç–µ" => "Ci", "ç–¶" => "Xie",
+ "ç–·" => "Qi", "ç–¸" => "Dan", "ç–¹" => "Zhen", "ç–º" => "Fa", "ç–»" => "Zhi", "ç–¼" => "Teng",
+ "ç–½" => "Ju", "ç–¾" => "Ji", "ç–¿" => "Fei", "ç—€" => "Qu", "ç—" => "Dian", "ç—‚" => "Jia",
+ "ç—ƒ" => "Xian", "ç—„" => "Cha", "ç—…" => "Bing", "ç—†" => "Ni", "ç—‡" => "Zheng", "ç—ˆ" => "Yong",
+ "ç—‰" => "Jing", "ç—" => "Quan", "ç—‹" => "Chong", "ç—Œ" => "Tong", "ç—" => "Yi", "ç—" => "Kai",
+ "ç—" => "Wei", "ç—" => "Hui", "ç—‘" => "Duo", "ç—’" => "Yang", "ç—“" => "Chi", "ç—”" => "Zhi",
+ "ç—•" => "Hen", "ç—–" => "Ya", "ç——" => "Mei", "ç—˜" => "Dou", "ç—™" => "Jing", "ç—" => "Xiao",
+ "ç—›" => "Tong", "ç—œ" => "Tu", "ç—" => "Mang", "ç—" => "Pi", "ç—Ÿ" => "Xiao", "ç— " => "Suan",
+ "ç—¡" => "Pu", "ç—¢" => "Li", "ç—£" => "Zhi", "ç—¤" => "Cuo", "ç—¥" => "Duo", "ç—¦" => "Wu",
+ "ç—§" => "Sha", "ç—¨" => "Lao", "ç—©" => "Shou", "ç—ª" => "Huan", "ç—«" => "Xian", "ç—¬" => "Yi",
+ "ç—" => "Peng", "ç—®" => "Zhang", "ç—¯" => "Guan", "ç—°" => "Tan", "ç—±" => "Fei", "ç—²" => "Ma",
+ "ç—³" => "Lin", "ç—´" => "Chi", "ç—µ" => "Ji", "ç—¶" => "Dian", "ç—·" => "An", "ç—¸" => "Chi",
+ "ç—¹" => "Bi", "ç—º" => "Bei", "ç—»" => "Min", "ç—¼" => "Gu", "ç—½" => "Dui", "ç—¾" => "E",
+ "ç—¿" => "Wei", "ç˜" => "Cui", "瘂" => "Ya", "瘃" => "Zhu", "瘄" => "Cu", "瘅" => "Dan",
+ "瘆" => "Shen", "瘇" => "Zhung", "瘈" => "Ji", "瘉" => "Yu", "ç˜" => "Hou", "瘋" => "Feng",
+ "瘌" => "La", "ç˜" => "Yang", "ç˜" => "Shen", "ç˜" => "Tu", "ç˜" => "Yu", "瘑" => "Gua",
+ "瘒" => "Wen", "瘓" => "Huan", "瘔" => "Ku", "瘕" => "Jia", "瘖" => "Yin", "瘗" => "Yi",
+ "瘘" => "Lu", "瘙" => "Sao", "ç˜" => "Jue", "瘛" => "Chi", "瘜" => "Xi", "ç˜" => "Guan",
+ "ç˜" => "Yi", "瘟" => "Wen", "ç˜ " => "Ji", "瘡" => "Chuang", "瘢" => "Ban", "瘣" => "Lei",
+ "瘤" => "Liu", "瘥" => "Chai", "瘦" => "Shou", "瘧" => "Nue", "瘨" => "Dian", "瘩" => "Da",
+ "瘪" => "Pie", "瘫" => "Tan", "瘬" => "Zhang", "ç˜" => "Biao", "瘮" => "Shen", "瘯" => "Cu",
+ "瘰" => "Luo", "瘱" => "Yi", "瘲" => "Zong", "瘳" => "Chou", "瘴" => "Zhang", "瘵" => "Zhai",
+ "瘶" => "Sou", "瘷" => "Suo", "瘸" => "Que", "瘹" => "Diao", "瘺" => "Lou", "瘻" => "Lu",
+ "瘼" => "Mo", "瘽" => "Jin", "瘾" => "Yin", "瘿" => "Ying", "癀" => "Huang", "ç™" => "Fu",
+ "療" => "Liao", "癃" => "Long", "癄" => "Qiao", "癅" => "Liu", "癆" => "Lao", "癇" => "Xian",
+ "癈" => "Fei", "癉" => "Dan", "ç™" => "Yin", "癋" => "He", "癌" => "Yan", "ç™" => "Ban",
+ "ç™" => "Xian", "ç™" => "Guan", "ç™" => "Guai", "癑" => "Nong", "ç™’" => "Yu", "癓" => "Wei",
+ "癔" => "Yi", "癕" => "Yong", "癖" => "Pi", "癗" => "Lei", "癘" => "Li", "癙" => "Shu",
+ "ç™" => "Dan", "ç™›" => "Lin", "癜" => "Dian", "ç™" => "Lin", "ç™" => "Lai", "癟" => "Pie",
+ "ç™ " => "Ji", "癡" => "Chi", "癢" => "Yang", "癣" => "Xian", "癤" => "Jie", "癥" => "Zheng",
+ "癧" => "Li", "癨" => "Huo", "癩" => "Lai", "癪" => "Shaku", "癫" => "Dian", "癬" => "Xian",
+ "ç™" => "Ying", "ç™®" => "Yin", "癯" => "Qu", "ç™°" => "Yong", "ç™±" => "Tan", "癲" => "Dian",
+ "癳" => "Luo", "癴" => "Luan", "癵" => "Luan", "癶" => "Bo", "癸" => "Gui", "癹" => "Po",
+ "発" => "Fa", "登" => "Deng", "發" => "Fa", "白" => "Bai", "百" => "Bai", "癿" => "Qie",
+ "ç€" => "Bi", "ç" => "Zao", "ç‚" => "Zao", "çƒ" => "Mao", "ç„" => "De", "ç…" => "Pa",
+ "ç†" => "Jie", "ç‡" => "Huang", "çˆ" => "Gui", "ç‰" => "Ci", "ç" => "Ling", "ç‹" => "Gao",
+ "çŒ" => "Mo", "ç" => "Ji", "ç" => "Jiao", "ç" => "Peng", "ç" => "Gao", "ç‘" => "Ai",
+ "ç’" => "E", "ç“" => "Hao", "ç”" => "Han", "ç•" => "Bi", "ç–" => "Wan", "ç—" => "Chou",
+ "ç˜" => "Qian", "ç™" => "Xi", "ç" => "Ai", "ç›" => "Jiong", "çœ" => "Hao", "ç" => "Huang",
+ "ç" => "Hao", "çŸ" => "Ze", "ç " => "Cui", "ç¡" => "Hao", "ç¢" => "Xiao", "ç£" => "Ye",
+ "ç¤" => "Po", "ç¥" => "Hao", "ç¦" => "Jiao", "ç§" => "Ai", "ç¨" => "Xing", "ç©" => "Huang",
+ "çª" => "Li", "ç«" => "Piao", "ç¬" => "He", "ç" => "Jiao", "ç®" => "Pi", "ç¯" => "Gan",
+ "ç°" => "Pao", "ç±" => "Zhou", "ç²" => "Jun", "ç³" => "Qiu", "ç´" => "Cun", "çµ" => "Que",
+ "ç¶" => "Zha", "ç·" => "Gu", "ç¸" => "Jun", "ç¹" => "Jun", "çº" => "Zhou", "ç»" => "Zha",
+ "ç¼" => "Gu", "ç½" => "Zhan", "ç¾" => "Du", "ç¿" => "Min", "盀" => "Qi", "ç›" => "Ying",
+ "盂" => "Yu", "盃" => "Bei", "盄" => "Zhao", "盅" => "Zhong", "盆" => "Pen", "盇" => "He",
+ "盈" => "Ying", "盉" => "He", "ç›" => "Yi", "盋" => "Bo", "盌" => "Wan", "ç›" => "He",
+ "ç›" => "Ang", "ç›" => "Zhan", "ç›" => "Yan", "监" => "Jian", "ç›’" => "He", "盓" => "Yu",
+ "盔" => "Kui", "盕" => "Fan", "盖" => "Gai", "盗" => "Dao", "盘" => "Pan", "盙" => "Fu",
+ "ç›" => "Qiu", "ç››" => "Sheng", "盜" => "Dao", "ç›" => "Lu", "ç›" => "Zhan", "盟" => "Meng",
+ "ç› " => "Li", "盡" => "Jin", "盢" => "Xu", "監" => "Jian", "盤" => "Pan", "盥" => "Guan",
+ "盦" => "An", "盧" => "Lu", "盨" => "Shu", "盩" => "Zhou", "盪" => "Dang", "盫" => "An",
+ "盬" => "Gu", "ç›" => "Li", "ç›®" => "Mu", "盯" => "Cheng", "ç›°" => "Gan", "ç›±" => "Xu",
+ "盲" => "Mang", "盳" => "Mang", "直" => "Zhi", "盵" => "Qi", "盶" => "Ruan", "盷" => "Tian",
+ "相" => "Xiang", "盹" => "Dun", "盺" => "Xin", "盻" => "Xi", "盼" => "Pan", "盽" => "Feng",
+ "盾" => "Dun", "盿" => "Min", "çœ" => "Sheng", "眂" => "Shi", "眃" => "Yun", "眄" => "Mian",
+ "眅" => "Pan", "眆" => "Fang", "眇" => "Miao", "眈" => "Dan", "眉" => "Mei", "çœ" => "Mao",
+ "看" => "Kan", "県" => "Xian", "çœ" => "Ou", "çœ" => "Shi", "çœ" => "Yang", "çœ" => "Zheng",
+ "眑" => "Yao", "眒" => "Shen", "眓" => "Huo", "眔" => "Da", "眕" => "Zhen", "眖" => "Kuang",
+ "眗" => "Ju", "眘" => "Shen", "眙" => "Chi", "çœ" => "Sheng", "眛" => "Mei", "眜" => "Mo",
+ "çœ" => "Zhu", "çœ" => "Zhen", "真" => "Zhen", "çœ " => "Mian", "眡" => "Di", "眢" => "Yuan",
+ "眣" => "Die", "眤" => "Yi", "眥" => "Zi", "眦" => "Zi", "眧" => "Chao", "眨" => "Zha",
+ "眩" => "Xuan", "眪" => "Bing", "眫" => "Mi", "眬" => "Long", "çœ" => "Sui", "眮" => "Dong",
+ "眯" => "Mi", "眰" => "Die", "眱" => "Yi", "眲" => "Er", "眳" => "Ming", "眴" => "Xuan",
+ "眵" => "Chi", "眶" => "Kuang", "眷" => "Juan", "眸" => "Mou", "眹" => "Zhen", "眺" => "Tiao",
+ "眻" => "Yang", "眼" => "Yan", "眽" => "Mo", "眾" => "Zhong", "眿" => "Mai", "ç€" => "Zhao",
+ "ç" => "Zheng", "ç‚" => "Mei", "çƒ" => "Jun", "ç„" => "Shao", "ç…" => "Han", "ç†" => "Huan",
+ "ç‡" => "Di", "çˆ" => "Cheng", "ç‰" => "Cuo", "ç" => "Juan", "ç‹" => "E", "çŒ" => "Wan",
+ "ç" => "Xian", "ç" => "Xi", "ç" => "Kun", "ç" => "Lai", "ç‘" => "Jian", "ç’" => "Shan",
+ "ç“" => "Tian", "ç”" => "Hun", "ç•" => "Wan", "ç–" => "Ling", "ç—" => "Shi", "ç˜" => "Qiong",
+ "ç™" => "Lie", "ç" => "Yai", "ç›" => "Jing", "çœ" => "Zheng", "ç" => "Li", "ç" => "Lai",
+ "çŸ" => "Sui", "ç " => "Juan", "ç¡" => "Shui", "ç¢" => "Sui", "ç£" => "Du", "ç¤" => "Bi",
+ "ç¥" => "Bi", "ç¦" => "Mu", "ç§" => "Hun", "ç¨" => "Ni", "ç©" => "Lu", "çª" => "Yi",
+ "ç«" => "Jie", "ç¬" => "Cai", "ç" => "Zhou", "ç®" => "Yu", "ç¯" => "Hun", "ç°" => "Ma",
+ "ç±" => "Xia", "ç²" => "Xing", "ç³" => "Xi", "ç´" => "Gun", "çµ" => "Cai", "ç¶" => "Chun",
+ "ç·" => "Jian", "ç¸" => "Mei", "ç¹" => "Du", "çº" => "Hou", "ç»" => "Xuan", "ç¼" => "Ti",
+ "ç½" => "Kui", "ç¾" => "Gao", "ç¿" => "Rui", "ç€" => "Mou", "ç" => "Xu", "ç‚" => "Fa",
+ "çƒ" => "Wen", "ç„" => "Miao", "ç…" => "Chou", "ç†" => "Kui", "ç‡" => "Mi", "çˆ" => "Weng",
+ "ç‰" => "Kou", "ç" => "Dang", "ç‹" => "Chen", "çŒ" => "Ke", "ç" => "Sou", "ç" => "Xia",
+ "ç" => "Qiong", "ç" => "Mao", "ç‘" => "Ming", "ç’" => "Man", "ç“" => "Shui", "ç”" => "Ze",
+ "ç•" => "Zhang", "ç–" => "Yi", "ç—" => "Diao", "ç˜" => "Ou", "ç™" => "Mo", "ç" => "Shun",
+ "ç›" => "Cong", "çœ" => "Lou", "ç" => "Chi", "ç" => "Man", "çŸ" => "Piao", "ç " => "Cheng",
+ "ç¡" => "Ji", "ç¢" => "Meng", "ç¤" => "Run", "ç¥" => "Pie", "ç¦" => "Xi", "ç§" => "Qiao",
+ "ç¨" => "Pu", "ç©" => "Zhu", "çª" => "Deng", "ç«" => "Shen", "ç¬" => "Shun", "ç" => "Liao",
+ "ç®" => "Che", "ç¯" => "Xian", "ç°" => "Kan", "ç±" => "Ye", "ç²" => "Xu", "ç³" => "Tong",
+ "ç´" => "Mou", "çµ" => "Lin", "ç¶" => "Kui", "ç·" => "Xian", "ç¸" => "Ye", "ç¹" => "Ai",
+ "çº" => "Hui", "ç»" => "Zhan", "ç¼" => "Jian", "ç½" => "Gu", "ç¾" => "Zhao", "ç¿" => "Qu",
+ "矀" => "Wei", "çŸ" => "Chou", "矂" => "Sao", "矃" => "Ning", "矄" => "Xun", "矅" => "Yao",
+ "矆" => "Huo", "矇" => "Meng", "矈" => "Mian", "矉" => "Bin", "çŸ" => "Mian", "矋" => "Li",
+ "矌" => "Kuang", "çŸ" => "Jue", "çŸ" => "Xuan", "çŸ" => "Mian", "çŸ" => "Huo", "矑" => "Lu",
+ "矒" => "Meng", "矓" => "Long", "矔" => "Guan", "矕" => "Man", "矖" => "Xi", "矗" => "Chu",
+ "矘" => "Tang", "矙" => "Kan", "çŸ" => "Zhu", "矛" => "Mao", "矜" => "Jin", "çŸ" => "Lin",
+ "çŸ" => "Yu", "矟" => "Shuo", "çŸ " => "Ce", "矡" => "Jue", "矢" => "Shi", "矣" => "Yi",
+ "矤" => "Shen", "知" => "Zhi", "矦" => "Hou", "矧" => "Shen", "矨" => "Ying", "矩" => "Ju",
+ "矪" => "Zhou", "矫" => "Jiao", "矬" => "Cuo", "çŸ" => "Duan", "矮" => "Ai", "矯" => "Jiao",
+ "矰" => "Zeng", "矱" => "Huo", "矲" => "Bai", "石" => "Shi", "矴" => "Ding", "矵" => "Qi",
+ "矶" => "Ji", "矷" => "Zi", "矸" => "Gan", "矹" => "Wu", "矺" => "Tuo", "矻" => "Ku",
+ "矼" => "Qiang", "矽" => "Xi", "矾" => "Fan", "矿" => "Kuang", "ç " => "Ma", "ç ‚" => "Sha",
+ "ç ƒ" => "Dan", "ç „" => "Jue", "ç …" => "Li", "ç †" => "Fu", "ç ‡" => "Min", "ç ˆ" => "Nuo",
+ "ç ‰" => "Huo", "ç " => "Kang", "ç ‹" => "Zhi", "ç Œ" => "Qi", "ç " => "Kan", "ç " => "Jie",
+ "ç " => "Fen", "ç " => "E", "ç ‘" => "Ya", "ç ’" => "Pi", "ç “" => "Zhe", "ç ”" => "Yan",
+ "ç •" => "Sui", "ç –" => "Zhuan", "ç —" => "Che", "ç ˜" => "Dun", "ç ™" => "Pan", "ç " => "Yan",
+ "ç œ" => "Feng", "ç " => "Fa", "ç " => "Mo", "ç Ÿ" => "Zha", "ç " => "Qu", "ç ¡" => "Yu",
+ "ç ¢" => "Luo", "ç £" => "Tuo", "ç ¤" => "Tuo", "ç ¥" => "Di", "ç ¦" => "Zhai", "ç §" => "Zhen",
+ "ç ¨" => "Ai", "ç ©" => "Fei", "ç ª" => "Mu", "ç «" => "Zhu", "ç ¬" => "Li", "ç " => "Bian",
+ "ç ®" => "Nu", "ç ¯" => "Ping", "ç °" => "Peng", "ç ±" => "Ling", "ç ²" => "Pao", "ç ³" => "Le",
+ "ç ´" => "Po", "ç µ" => "Bo", "ç ¶" => "Po", "ç ·" => "Shen", "ç ¸" => "Za", "ç ¹" => "Nuo",
+ "ç º" => "Li", "ç »" => "Long", "ç ¼" => "Tong", "ç ¾" => "Li", "ç ¿" => "Aragane", "ç¡€" => "Chu",
+ "ç¡" => "Keng", "ç¡‚" => "Quan", "硃" => "Zhu", "ç¡„" => "Kuang", "ç¡…" => "Huo", "硆" => "E",
+ "硇" => "Nao", "硈" => "Jia", "硉" => "Lu", "ç¡" => "Wei", "ç¡‹" => "Ai", "ç¡Œ" => "Luo",
+ "ç¡" => "Ken", "ç¡" => "Xing", "ç¡" => "Yan", "ç¡" => "Tong", "ç¡‘" => "Peng", "ç¡’" => "Xi",
+ "ç¡”" => "Hong", "ç¡•" => "Shuo", "ç¡–" => "Xia", "ç¡—" => "Qiao", "ç¡™" => "Wei", "ç¡" => "Qiao",
+ "ç¡œ" => "Keng", "ç¡" => "Xiao", "ç¡" => "Que", "ç¡Ÿ" => "Chan", "ç¡ " => "Lang", "ç¡¡" => "Hong",
+ "硢" => "Yu", "硣" => "Xiao", "硤" => "Xia", "硥" => "Mang", "硦" => "Long", "硧" => "Iong",
+ "硨" => "Che", "ç¡©" => "Che", "硪" => "E", "ç¡«" => "Liu", "硬" => "Ying", "ç¡" => "Mang",
+ "确" => "Que", "硯" => "Yan", "硰" => "Sha", "硱" => "Kun", "硲" => "Yu", "硴" => "Kaki",
+ "硵" => "Lu", "硶" => "Chen", "硷" => "Jian", "硸" => "Nue", "硹" => "Song", "硺" => "Zhuo",
+ "硻" => "Keng", "硼" => "Peng", "硽" => "Yan", "硾" => "Zhui", "硿" => "Kong", "碀" => "Ceng",
+ "ç¢" => "Qi", "碂" => "Zong", "碃" => "Qing", "碄" => "Lin", "碅" => "Jun", "碆" => "Bo",
+ "碇" => "Ding", "碈" => "Min", "碉" => "Diao", "ç¢" => "Jian", "碋" => "He", "碌" => "Lu",
+ "ç¢" => "Ai", "ç¢" => "Sui", "ç¢" => "Que", "ç¢" => "Ling", "碑" => "Bei", "碒" => "Yin",
+ "碓" => "Dui", "碔" => "Wu", "碕" => "Qi", "碖" => "Lun", "碗" => "Wan", "碘" => "Dian",
+ "碙" => "Gang", "ç¢" => "Pei", "碛" => "Qi", "碜" => "Chen", "ç¢" => "Ruan", "ç¢" => "Yan",
+ "碟" => "Die", "ç¢ " => "Ding", "碡" => "Du", "碢" => "Tuo", "碣" => "Jie", "碤" => "Ying",
+ "碥" => "Bian", "碦" => "Ke", "碧" => "Bi", "碨" => "Wei", "碩" => "Shuo", "碪" => "Zhen",
+ "碫" => "Duan", "碬" => "Xia", "ç¢" => "Dang", "碮" => "Ti", "碯" => "Nao", "碰" => "Peng",
+ "碱" => "Jian", "碲" => "Di", "碳" => "Tan", "碴" => "Cha", "碵" => "Seki", "碶" => "Qi",
+ "碸" => "Feng", "碹" => "Xuan", "確" => "Que", "碻" => "Que", "碼" => "Ma", "碽" => "Gong",
+ "碾" => "Nian", "碿" => "Su", "磀" => "E", "ç£" => "Ci", "磂" => "Liu", "磃" => "Si",
+ "磄" => "Tang", "磅" => "Bang", "磆" => "Hua", "磇" => "Pi", "磈" => "Wei", "磉" => "Sang",
+ "ç£" => "Lei", "磋" => "Cuo", "磌" => "Zhen", "ç£" => "Xia", "ç£" => "Qi", "ç£" => "Lian",
+ "ç£" => "Pan", "磑" => "Wei", "磒" => "Yun", "磓" => "Dui", "磔" => "Zhe", "磕" => "Ke",
+ "磖" => "La", "磘" => "Qing", "磙" => "Gun", "ç£" => "Zhuan", "磛" => "Chan", "磜" => "Qi",
+ "ç£" => "Ao", "ç£" => "Peng", "磟" => "Lu", "ç£ " => "Lu", "磡" => "Kan", "磢" => "Qiang",
+ "磣" => "Chen", "磤" => "Yin", "磥" => "Lei", "磦" => "Biao", "磧" => "Qi", "磨" => "Mo",
+ "磩" => "Qi", "磪" => "Cui", "磫" => "Zong", "磬" => "Qing", "ç£" => "Chuo", "磯" => "Ji",
+ "磰" => "Shan", "磱" => "Lao", "磲" => "Qu", "磳" => "Zeng", "磴" => "Deng", "磵" => "Jian",
+ "磶" => "Xi", "磷" => "Lin", "磸" => "Ding", "磹" => "Dian", "磺" => "Huang", "磻" => "Pan",
+ "磼" => "Za", "磽" => "Qiao", "磾" => "Di", "磿" => "Li", "ç¤" => "Jiao", "礃" => "Zhang",
+ "礄" => "Qiao", "礅" => "Dun", "礆" => "Xian", "礇" => "Yu", "礈" => "Zhui", "礉" => "He",
+ "ç¤" => "Huo", "礋" => "Zhai", "礌" => "Lei", "ç¤" => "Ke", "ç¤" => "Chu", "ç¤" => "Ji",
+ "ç¤" => "Que", "礑" => "Dang", "礒" => "Yi", "礓" => "Jiang", "礔" => "Pi", "礕" => "Pi",
+ "礖" => "Yu", "礗" => "Pin", "礘" => "Qi", "礙" => "Ai", "ç¤" => "Kai", "礛" => "Jian",
+ "礜" => "Yu", "ç¤" => "Ruan", "ç¤" => "Meng", "礟" => "Pao", "ç¤ " => "Ci", "礣" => "Mie",
+ "礤" => "Ca", "礥" => "Xian", "礦" => "Kuang", "礧" => "Lei", "礨" => "Lei", "礩" => "Zhi",
+ "礪" => "Li", "礫" => "Li", "礬" => "Fan", "ç¤" => "Que", "礮" => "Pao", "礯" => "Ying",
+ "礰" => "Li", "礱" => "Long", "礲" => "Long", "礳" => "Mo", "礴" => "Bo", "礵" => "Shuang",
+ "礶" => "Guan", "礷" => "Lan", "礸" => "Zan", "礹" => "Yan", "示" => "Shi", "礻" => "Shi",
+ "礼" => "Li", "礽" => "Reng", "社" => "She", "礿" => "Yue", "祀" => "Si", "ç¥" => "Qi",
+ "祂" => "Ta", "祃" => "Ma", "祄" => "Xie", "祅" => "Xian", "祆" => "Xian", "祇" => "Zhi",
+ "祈" => "Qi", "祉" => "Zhi", "ç¥" => "Beng", "祋" => "Dui", "祌" => "Zhong", "ç¥" => "Yi",
+ "ç¥" => "Shi", "ç¥" => "You", "祑" => "Zhi", "祒" => "Tiao", "祓" => "Fu", "祔" => "Fu",
+ "祕" => "Mi", "祖" => "Zu", "祗" => "Zhi", "祘" => "Suan", "祙" => "Mei", "ç¥" => "Zuo",
+ "祛" => "Qu", "祜" => "Hu", "ç¥" => "Zhu", "ç¥" => "Shen", "祟" => "Sui", "ç¥ " => "Ci",
+ "祡" => "Chai", "祢" => "Mi", "祣" => "Lu", "祤" => "Yu", "祥" => "Xiang", "祦" => "Wu",
+ "祧" => "Tiao", "票" => "Piao", "祩" => "Zhu", "祪" => "Gui", "祫" => "Xia", "祬" => "Zhi",
+ "ç¥" => "Ji", "祮" => "Gao", "祯" => "Zhen", "祰" => "Gao", "祱" => "Shui", "祲" => "Jin",
+ "祳" => "Chen", "祴" => "Gai", "祵" => "Kun", "祶" => "Di", "祷" => "Dao", "祸" => "Huo",
+ "祹" => "Tao", "祺" => "Qi", "祻" => "Gu", "祼" => "Guan", "祽" => "Zui", "祾" => "Ling",
+ "祿" => "Lu", "禀" => "Bing", "ç¦" => "Jin", "禂" => "Dao", "禃" => "Zhi", "禄" => "Lu",
+ "禅" => "Shan", "禆" => "Bei", "禇" => "Zhe", "禈" => "Hui", "禉" => "You", "ç¦" => "Xi",
+ "禋" => "Yin", "禌" => "Zi", "ç¦" => "Huo", "ç¦" => "Zhen", "ç¦" => "Fu", "ç¦" => "Yuan",
+ "禑" => "Wu", "禒" => "Xian", "禓" => "Yang", "禔" => "Ti", "禕" => "Yi", "禖" => "Mei",
+ "禗" => "Si", "禘" => "Di", "ç¦" => "Zhuo", "禛" => "Zhen", "禜" => "Yong", "ç¦" => "Ji",
+ "ç¦" => "Gao", "禟" => "Tang", "ç¦ " => "Si", "禡" => "Ma", "禢" => "Ta", "禤" => "Xuan",
+ "禥" => "Qi", "禦" => "Yu", "禧" => "Xi", "禨" => "Ji", "禩" => "Si", "禪" => "Chan",
+ "禫" => "Tan", "禬" => "Kuai", "ç¦" => "Sui", "禮" => "Li", "禯" => "Nong", "禰" => "Ni",
+ "禱" => "Dao", "禲" => "Li", "禳" => "Rang", "禴" => "Yue", "禵" => "Ti", "禶" => "Zan",
+ "禷" => "Lei", "禸" => "Rou", "禹" => "Yu", "禺" => "Yu", "离" => "Chi", "禼" => "Xie",
+ "禽" => "Qin", "禾" => "He", "禿" => "Tu", "秀" => "Xiu", "ç§" => "Si", "秂" => "Ren",
+ "秃" => "Tu", "秄" => "Zi", "秅" => "Cha", "秆" => "Gan", "秇" => "Yi", "秈" => "Xian",
+ "秉" => "Bing", "ç§" => "Nian", "秋" => "Qiu", "秌" => "Qiu", "ç§" => "Chong", "ç§" => "Fen",
+ "ç§" => "Hao", "ç§" => "Yun", "科" => "Ke", "秒" => "Miao", "秓" => "Zhi", "秔" => "Geng",
+ "秕" => "Bi", "秖" => "Zhi", "秗" => "Yu", "秘" => "Mi", "秙" => "Ku", "ç§" => "Ban",
+ "秛" => "Pi", "秜" => "Ni", "ç§" => "Li", "ç§" => "You", "租" => "Zu", "ç§ " => "Pi",
+ "秡" => "Ba", "秢" => "Ling", "秣" => "Mo", "秤" => "Cheng", "秥" => "Nian", "秦" => "Qin",
+ "秧" => "Yang", "秨" => "Zuo", "秩" => "Zhi", "秪" => "Zhi", "秫" => "Shu", "秬" => "Ju",
+ "ç§" => "Zi", "秮" => "Huo", "积" => "Ji", "称" => "Cheng", "秱" => "Tong", "秲" => "Zhi",
+ "秳" => "Huo", "秴" => "He", "秵" => "Yin", "秶" => "Zi", "秷" => "Zhi", "秸" => "Jie",
+ "秹" => "Ren", "秺" => "Du", "移" => "Yi", "秼" => "Zhu", "秽" => "Hui", "秾" => "Nong",
+ "秿" => "Fu", "ç¨" => "Kao", "稂" => "Lang", "稃" => "Fu", "稄" => "Ze", "稅" => "Shui",
+ "稆" => "Lu", "稇" => "Kun", "稈" => "Gan", "稉" => "Geng", "ç¨" => "Ti", "程" => "Cheng",
+ "稌" => "Tu", "ç¨" => "Shao", "ç¨" => "Shui", "ç¨" => "Ya", "ç¨" => "Lun", "稑" => "Lu",
+ "稒" => "Gu", "稓" => "Zuo", "稔" => "Ren", "稕" => "Zhun", "稖" => "Bang", "稗" => "Bai",
+ "稘" => "Ji", "稙" => "Zhi", "ç¨" => "Zhi", "稛" => "Kun", "稜" => "Leng", "ç¨" => "Peng",
+ "ç¨" => "Ke", "稟" => "Bing", "ç¨ " => "Chou", "稡" => "Zu", "稢" => "Yu", "稣" => "Su",
+ "稤" => "Lue", "稦" => "Yi", "稧" => "Xi", "稨" => "Bian", "稩" => "Ji", "稪" => "Fu",
+ "稫" => "Bi", "稬" => "Nuo", "ç¨" => "Jie", "種" => "Zhong", "稯" => "Zong", "稰" => "Xu",
+ "稱" => "Cheng", "稲" => "Dao", "稳" => "Wen", "稴" => "Lian", "稵" => "Zi", "稶" => "Yu",
+ "稷" => "Ji", "稸" => "Xu", "稹" => "Zhen", "稺" => "Zhi", "稻" => "Dao", "稼" => "Jia",
+ "稽" => "Ji", "稾" => "Gao", "稿" => "Gao", "ç©€" => "Gu", "ç©" => "Rong", "ç©‚" => "Sui",
+ "穃" => "You", "穄" => "Ji", "穅" => "Kang", "穆" => "Mu", "穇" => "Shan", "穈" => "Men",
+ "穉" => "Zhi", "ç©" => "Ji", "ç©‹" => "Lu", "ç©Œ" => "Su", "ç©" => "Ji", "ç©" => "Ying",
+ "ç©" => "Wen", "ç©" => "Qiu", "ç©‘" => "Se", "ç©“" => "Yi", "ç©”" => "Huang", "ç©•" => "Qie",
+ "ç©–" => "Ji", "ç©—" => "Sui", "穘" => "Xiao", "ç©™" => "Pu", "ç©" => "Jiao", "ç©›" => "Zhuo",
+ "ç©œ" => "Tong", "ç©" => "Sai", "ç©" => "Lu", "ç©Ÿ" => "Sui", "ç© " => "Nong", "ç©¡" => "Se",
+ "穢" => "Hui", "穣" => "Rang", "穤" => "Nuo", "穥" => "Yu", "穦" => "Bin", "穧" => "Ji",
+ "穨" => "Tui", "ç©©" => "Wen", "穪" => "Cheng", "ç©«" => "Huo", "穬" => "Gong", "ç©" => "Lu",
+ "穮" => "Biao", "穰" => "Rang", "穱" => "Zhuo", "穲" => "Li", "穳" => "Zan", "穴" => "Xue",
+ "穵" => "Wa", "究" => "Jiu", "穷" => "Qiong", "穸" => "Xi", "穹" => "Qiong", "空" => "Kong",
+ "穻" => "Yu", "穼" => "Sen", "穽" => "Jing", "穾" => "Yao", "穿" => "Chuan", "窀" => "Zhun",
+ "çª" => "Tu", "窂" => "Lao", "窃" => "Qie", "窄" => "Zhai", "窅" => "Yao", "窆" => "Bian",
+ "窇" => "Bao", "窈" => "Yao", "窉" => "Bing", "çª" => "Wa", "窋" => "Zhu", "窌" => "Jiao",
+ "çª" => "Qiao", "çª" => "Diao", "çª" => "Wu", "çª" => "Gui", "窑" => "Yao", "窒" => "Zhi",
+ "窓" => "Chuang", "窔" => "Yao", "窕" => "Tiao", "窖" => "Jiao", "窗" => "Chuang", "窘" => "Jiong",
+ "窙" => "Xiao", "çª" => "Cheng", "窛" => "Kou", "窜" => "Cuan", "çª" => "Wo", "çª" => "Dan",
+ "窟" => "Ku", "çª " => "Ke", "窡" => "Zhui", "窢" => "Xu", "窣" => "Su", "窤" => "Guan",
+ "窥" => "Kui", "窦" => "Dou", "窨" => "Yin", "窩" => "Wo", "窪" => "Wa", "窫" => "Ya",
+ "窬" => "Yu", "çª" => "Ju", "窮" => "Qiong", "窯" => "Yao", "窰" => "Yao", "窱" => "Tiao",
+ "窲" => "Chao", "窳" => "Yu", "窴" => "Tian", "窵" => "Diao", "窶" => "Ju", "窷" => "Liao",
+ "窸" => "Xi", "窹" => "Wu", "窺" => "Kui", "窻" => "Chuang", "窼" => "Zhao", "窾" => "Kuan",
+ "窿" => "Long", "ç«€" => "Cheng", "ç«" => "Cui", "ç«‚" => "Piao", "竃" => "Zao", "ç«„" => "Cuan",
+ "ç«…" => "Qiao", "竆" => "Qiong", "竇" => "Dou", "竈" => "Zao", "竉" => "Long", "ç«" => "Qie",
+ "ç«‹" => "Li", "ç«Œ" => "Chu", "ç«" => "Shi", "ç«" => "Fou", "ç«" => "Qian", "ç«" => "Chu",
+ "ç«‘" => "Hong", "ç«’" => "Qi", "ç«“" => "Qian", "ç«”" => "Gong", "ç«•" => "Shi", "ç«–" => "Shu",
+ "ç«—" => "Miao", "竘" => "Ju", "ç«™" => "Zhan", "ç«" => "Zhu", "ç«›" => "Ling", "ç«œ" => "Long",
+ "ç«" => "Bing", "ç«" => "Jing", "ç«Ÿ" => "Jing", "ç« " => "Zhang", "ç«¡" => "Yi", "ç«¢" => "Si",
+ "竣" => "Jun", "竤" => "Hong", "童" => "Tong", "竦" => "Song", "竧" => "Jing", "竨" => "Diao",
+ "ç«©" => "Yi", "竪" => "Shu", "ç««" => "Jing", "竬" => "Qu", "ç«" => "Jie", "ç«®" => "Ping",
+ "端" => "Duan", "竰" => "Shao", "竱" => "Zhuan", "竲" => "Ceng", "竳" => "Deng", "竴" => "Cui",
+ "竵" => "Huai", "競" => "Jing", "竷" => "Kan", "竸" => "Jing", "竹" => "Zhu", "竺" => "Zhu",
+ "ç«»" => "Le", "竼" => "Peng", "竽" => "Yu", "竾" => "Chi", "ç«¿" => "Gan", "ç¬" => "Zhu",
+ "笂" => "Utsubo", "笃" => "Du", "笄" => "Ji", "笅" => "Xiao", "笆" => "Ba", "笇" => "Suan",
+ "笈" => "Ji", "笉" => "Zhen", "ç¬" => "Zhao", "笋" => "Sun", "笌" => "Ya", "ç¬" => "Zhui",
+ "ç¬" => "Yuan", "ç¬" => "Hu", "ç¬" => "Gang", "笑" => "Xiao", "笒" => "Cen", "笓" => "Pi",
+ "笔" => "Bi", "笕" => "Jian", "笖" => "Yi", "笗" => "Dong", "笘" => "Shan", "笙" => "Sheng",
+ "ç¬" => "Xia", "笛" => "Di", "笜" => "Zhu", "ç¬" => "Na", "ç¬" => "Chi", "笟" => "Gu",
+ "ç¬ " => "Li", "笡" => "Qie", "笢" => "Min", "笣" => "Bao", "笤" => "Tiao", "笥" => "Si",
+ "符" => "Fu", "笧" => "Ce", "笨" => "Ben", "笩" => "Pei", "笪" => "Da", "笫" => "Zi",
+ "第" => "Di", "ç¬" => "Ling", "笮" => "Ze", "笯" => "Nu", "笰" => "Fu", "笱" => "Gou",
+ "笲" => "Fan", "笳" => "Jia", "笴" => "Ge", "笵" => "Fan", "笶" => "Shi", "笷" => "Mao",
+ "笸" => "Po", "笹" => "Sey", "笺" => "Jian", "笻" => "Qiong", "笼" => "Long", "笽" => "Souke",
+ "笾" => "Bian", "笿" => "Luo", "ç€" => "Gui", "ç" => "Qu", "ç‚" => "Chi", "çƒ" => "Yin",
+ "ç„" => "Yao", "ç…" => "Xian", "ç†" => "Bi", "ç‡" => "Qiong", "çˆ" => "Gua", "ç‰" => "Deng",
+ "ç" => "Jiao", "ç‹" => "Jin", "çŒ" => "Quan", "ç" => "Sun", "ç" => "Ru", "ç" => "Fa",
+ "ç" => "Kuang", "ç‘" => "Zhu", "ç’" => "Tong", "ç“" => "Ji", "ç”" => "Da", "ç•" => "Xing",
+ "ç–" => "Ce", "ç—" => "Zhong", "ç˜" => "Kou", "ç™" => "Lai", "ç" => "Bi", "ç›" => "Shai",
+ "çœ" => "Dang", "ç" => "Zheng", "ç" => "Ce", "çŸ" => "Fu", "ç " => "Yun", "ç¡" => "Tu",
+ "ç¢" => "Pa", "ç£" => "Li", "ç¤" => "Lang", "ç¥" => "Ju", "ç¦" => "Guan", "ç§" => "Jian",
+ "ç¨" => "Han", "ç©" => "Tong", "çª" => "Xia", "ç«" => "Zhi", "ç¬" => "Cheng", "ç" => "Suan",
+ "ç®" => "Shi", "ç¯" => "Zhu", "ç°" => "Zuo", "ç±" => "Xiao", "ç²" => "Shao", "ç³" => "Ting",
+ "ç´" => "Ce", "çµ" => "Yan", "ç¶" => "Gao", "ç·" => "Kuai", "ç¸" => "Gan", "ç¹" => "Chou",
+ "çº" => "Kago", "ç»" => "Gang", "ç¼" => "Yun", "ç½" => "O", "ç¾" => "Qian", "ç¿" => "Xiao",
+ "简" => "Jian", "ç®" => "Pu", "箂" => "Lai", "箃" => "Zou", "箄" => "Bi", "ç®…" => "Bi",
+ "箆" => "Bi", "箇" => "Ge", "箈" => "Chi", "箉" => "Guai", "ç®" => "Yu", "箋" => "Jian",
+ "箌" => "Zhao", "ç®" => "Gu", "ç®" => "Chi", "ç®" => "Zheng", "ç®" => "Jing", "箑" => "Sha",
+ "箒" => "Zhou", "箓" => "Lu", "箔" => "Bo", "箕" => "Ji", "箖" => "Lin", "算" => "Suan",
+ "箘" => "Jun", "ç®™" => "Fu", "ç®" => "Zha", "ç®›" => "Gu", "箜" => "Kong", "ç®" => "Qian",
+ "ç®" => "Quan", "箟" => "Jun", "ç® " => "Chui", "管" => "Guan", "箢" => "Yuan", "箣" => "Ce",
+ "箤" => "Ju", "箥" => "Bo", "箦" => "Ze", "箧" => "Qie", "箨" => "Tuo", "箩" => "Luo",
+ "箪" => "Dan", "箫" => "Xiao", "箬" => "Ruo", "ç®" => "Jian", "ç®®" => "Xuan", "箯" => "Bian",
+ "箰" => "Sun", "箱" => "Xiang", "箲" => "Xian", "箳" => "Ping", "箴" => "Zhen", "箵" => "Sheng",
+ "箶" => "Hu", "箷" => "Shi", "箸" => "Zhu", "箹" => "Yue", "箺" => "Chun", "箻" => "Lu",
+ "箼" => "Wu", "箽" => "Dong", "箾" => "Xiao", "箿" => "Ji", "節" => "Jie", "ç¯" => "Huang",
+ "篂" => "Xing", "篃" => "Mei", "範" => "Fan", "篅" => "Chui", "篆" => "Zhuan", "篇" => "Pian",
+ "篈" => "Feng", "築" => "Zhu", "ç¯" => "Hong", "篋" => "Qie", "篌" => "Hou", "ç¯" => "Qiu",
+ "ç¯" => "Miao", "ç¯" => "Qian", "篑" => "Kui", "篒" => "Sik", "篓" => "Lou", "篔" => "Yun",
+ "篕" => "He", "篖" => "Tang", "篗" => "Yue", "篘" => "Chou", "篙" => "Gao", "ç¯" => "Fei",
+ "篛" => "Ruo", "篜" => "Zheng", "ç¯" => "Gou", "ç¯" => "Nie", "篟" => "Qian", "ç¯ " => "Xiao",
+ "篡" => "Cuan", "篢" => "Gong", "篣" => "Pang", "篤" => "Du", "篥" => "Li", "篦" => "Bi",
+ "篧" => "Zhuo", "篨" => "Chu", "篩" => "Shai", "篪" => "Chi", "篫" => "Zhu", "篬" => "Qiang",
+ "ç¯" => "Long", "篮" => "Lan", "篯" => "Jian", "篰" => "Bu", "篱" => "Li", "篲" => "Hui",
+ "篳" => "Bi", "篴" => "Di", "篵" => "Cong", "篶" => "Yan", "篷" => "Peng", "篸" => "Sen",
+ "篹" => "Zhuan", "篺" => "Pai", "篻" => "Piao", "篼" => "Dou", "篽" => "Yu", "篾" => "Mie",
+ "篿" => "Zhuan", "ç°" => "Xi", "ç°‚" => "Guo", "ç°ƒ" => "Yi", "ç°„" => "Hu", "ç°…" => "Chan",
+ "ç°†" => "Kou", "ç°‡" => "Cu", "ç°ˆ" => "Ping", "ç°‰" => "Chou", "ç°" => "Ji", "ç°‹" => "Gui",
+ "ç°Œ" => "Su", "ç°" => "Lou", "ç°" => "Zha", "ç°" => "Lu", "ç°" => "Nian", "ç°‘" => "Suo",
+ "ç°’" => "Cuan", "ç°“" => "Sasara", "ç°”" => "Suo", "ç°•" => "Le", "ç°–" => "Duan", "ç°—" => "Yana",
+ "ç°˜" => "Xiao", "ç°™" => "Bo", "ç°" => "Mi", "ç°›" => "Si", "ç°œ" => "Dang", "ç°" => "Liao",
+ "ç°" => "Dan", "ç°Ÿ" => "Dian", "ç° " => "Fu", "ç°¡" => "Jian", "ç°¢" => "Min", "ç°£" => "Kui",
+ "ç°¤" => "Dai", "ç°¥" => "Qiao", "ç°¦" => "Deng", "ç°§" => "Huang", "ç°¨" => "Sun", "ç°©" => "Lao",
+ "ç°ª" => "Zan", "ç°«" => "Xiao", "ç°¬" => "Du", "ç°" => "Shi", "ç°®" => "Zan", "ç°°" => "Pai",
+ "ç°±" => "Hata", "ç°²" => "Pai", "ç°³" => "Gan", "ç°´" => "Ju", "ç°µ" => "Du", "ç°¶" => "Lu",
+ "ç°·" => "Yan", "ç°¸" => "Bo", "ç°¹" => "Dang", "ç°º" => "Sai", "ç°»" => "Ke", "ç°¼" => "Long",
+ "ç°½" => "Qian", "ç°¾" => "Lian", "ç°¿" => "Bo", "ç±€" => "Zhou", "ç±" => "Lai", "籃" => "Lan",
+ "籄" => "Kui", "籅" => "Yu", "籆" => "Yue", "籇" => "Hao", "籈" => "Zhen", "籉" => "Tai",
+ "ç±" => "Ti", "籋" => "Mi", "籌" => "Chou", "ç±" => "Ji", "ç±" => "Hata", "ç±" => "Teng",
+ "籑" => "Zhuan", "籒" => "Zhou", "籓" => "Fan", "籔" => "Sou", "籕" => "Zhou", "籖" => "Kuji",
+ "ç±—" => "Zhuo", "籘" => "Teng", "ç±™" => "Lu", "ç±" => "Lu", "ç±›" => "Jian", "籜" => "Tuo",
+ "ç±" => "Ying", "ç±" => "Yu", "籟" => "Lai", "ç± " => "Long", "籡" => "Shinshi", "ç±¢" => "Lian",
+ "籣" => "Lan", "籤" => "Qian", "籥" => "Yue", "籦" => "Zhong", "籧" => "Qu", "籨" => "Lian",
+ "籩" => "Bian", "籪" => "Duan", "籫" => "Zuan", "籬" => "Li", "ç±" => "Si", "ç±®" => "Luo",
+ "籯" => "Ying", "籰" => "Yue", "籱" => "Zhuo", "籲" => "Xu", "米" => "Mi", "籴" => "Di",
+ "籵" => "Fan", "籶" => "Shen", "籷" => "Zhe", "籸" => "Shen", "籹" => "Nu", "籺" => "Xie",
+ "ç±»" => "Lei", "ç±¼" => "Xian", "ç±½" => "Zi", "ç±¾" => "Ni", "籿" => "Cun", "ç²" => "Qian",
+ "粂" => "Kume", "粃" => "Bi", "粄" => "Ban", "粅" => "Wu", "粆" => "Sha", "粇" => "Kang",
+ "粈" => "Rou", "粉" => "Fen", "ç²" => "Bi", "粋" => "Cui", "ç²" => "Li", "ç²" => "Chi",
+ "ç²" => "Nukamiso", "ç²" => "Ro", "粑" => "Ba", "ç²’" => "Li", "粓" => "Gan", "ç²”" => "Ju",
+ "粕" => "Po", "ç²–" => "Mo", "ç²—" => "Cu", "粘" => "Nian", "ç²™" => "Zhou", "ç²" => "Li",
+ "ç²›" => "Su", "粜" => "Tiao", "ç²" => "Li", "ç²" => "Qi", "粟" => "Su", "ç² " => "Hong",
+ "粡" => "Tong", "粢" => "Zi", "粣" => "Ce", "粤" => "Yue", "粥" => "Zhou", "粦" => "Lin",
+ "粧" => "Zhuang", "粨" => "Bai", "粪" => "Fen", "粫" => "Ji", "ç²" => "Sukumo", "ç²®" => "Liang",
+ "粯" => "Xian", "粰" => "Fu", "粱" => "Liang", "粲" => "Can", "粳" => "Geng", "粴" => "Li",
+ "粵" => "Yue", "粶" => "Lu", "粷" => "Ju", "粸" => "Qi", "粹" => "Cui", "粺" => "Bai",
+ "粻" => "Zhang", "粼" => "Lin", "粽" => "Zong", "精" => "Jing", "粿" => "Guo", "糀" => "Kouji",
+ "ç³" => "San", "糂" => "San", "糃" => "Tang", "糄" => "Bian", "ç³…" => "Rou", "糆" => "Mian",
+ "糇" => "Hou", "糈" => "Xu", "糉" => "Zong", "ç³" => "Hu", "糋" => "Jian", "糌" => "Zan",
+ "ç³" => "Ci", "ç³" => "Li", "ç³" => "Xie", "ç³" => "Fu", "糑" => "Ni", "ç³’" => "Bei",
+ "糓" => "Gu", "糔" => "Xiu", "糕" => "Gao", "糖" => "Tang", "糗" => "Qiu", "糘" => "Sukumo",
+ "ç³™" => "Cao", "ç³" => "Zhuang", "ç³›" => "Tang", "糜" => "Mi", "ç³" => "San", "ç³" => "Fen",
+ "糟" => "Zao", "ç³ " => "Kang", "糡" => "Jiang", "ç³¢" => "Mo", "ç³£" => "San", "糤" => "San",
+ "糥" => "Nuo", "糦" => "Xi", "糧" => "Liang", "糨" => "Jiang", "糩" => "Kuai", "糪" => "Bo",
+ "糫" => "Huan", "ç³" => "Zong", "ç³®" => "Xian", "糯" => "Nuo", "ç³°" => "Tuan", "ç³±" => "Nie",
+ "糲" => "Li", "糳" => "Zuo", "糴" => "Di", "糵" => "Nie", "糶" => "Tiao", "糷" => "Lan",
+ "糸" => "Mi", "糹" => "Jiao", "糺" => "Jiu", "系" => "Xi", "糼" => "Gong", "糽" => "Zheng",
+ "ç³¾" => "Jiu", "糿" => "You", "ç´" => "Cha", "ç´‚" => "Zhou", "ç´ƒ" => "Xun", "ç´„" => "Yue",
+ "ç´…" => "Hong", "ç´†" => "Yu", "ç´‡" => "He", "ç´ˆ" => "Wan", "ç´‰" => "Ren", "ç´" => "Wen",
+ "ç´‹" => "Wen", "ç´Œ" => "Qiu", "ç´" => "Na", "ç´" => "Zi", "ç´" => "Tou", "ç´" => "Niu",
+ "ç´‘" => "Fou", "ç´’" => "Jie", "ç´“" => "Shu", "ç´”" => "Chun", "ç´•" => "Pi", "ç´–" => "Yin",
+ "ç´—" => "Sha", "ç´˜" => "Hong", "ç´™" => "Zhi", "ç´" => "Ji", "ç´›" => "Fen", "ç´œ" => "Yun",
+ "ç´" => "Ren", "ç´" => "Dan", "ç´Ÿ" => "Jin", "ç´ " => "Su", "ç´¡" => "Fang", "ç´¢" => "Suo",
+ "ç´£" => "Cui", "ç´¤" => "Jiu", "ç´¥" => "Zha", "ç´¦" => "Kinu", "ç´§" => "Jin", "ç´¨" => "Fu",
+ "ç´©" => "Zhi", "ç´ª" => "Ci", "ç´«" => "Zi", "ç´¬" => "Chou", "ç´" => "Hong", "ç´®" => "Zha",
+ "ç´¯" => "Lei", "ç´°" => "Xi", "ç´±" => "Fu", "ç´²" => "Xie", "ç´³" => "Shen", "ç´´" => "Bei",
+ "ç´µ" => "Zhu", "ç´¶" => "Qu", "ç´·" => "Ling", "ç´¸" => "Zhu", "ç´¹" => "Shao", "ç´º" => "Gan",
+ "ç´»" => "Yang", "ç´¼" => "Fu", "ç´½" => "Tuo", "ç´¾" => "Zhen", "ç´¿" => "Dai", "çµ€" => "Zhuo",
+ "çµ" => "Shi", "終" => "Zhong", "絃" => "Xian", "組" => "Zu", "çµ…" => "Jiong", "絆" => "Ban",
+ "絇" => "Ju", "絈" => "Mo", "絉" => "Shu", "çµ" => "Zui", "絋" => "Wata", "経" => "Jing",
+ "çµ" => "Ren", "çµ" => "Heng", "çµ" => "Xie", "çµ" => "Jie", "絑" => "Zhu", "çµ’" => "Chou",
+ "絓" => "Gua", "絔" => "Bai", "絕" => "Jue", "絖" => "Kuang", "絗" => "Hu", "絘" => "Ci",
+ "çµ™" => "Geng", "çµ" => "Geng", "çµ›" => "Tao", "絜" => "Xie", "çµ" => "Ku", "çµ" => "Jiao",
+ "絟" => "Quan", "çµ " => "Gai", "絡" => "Luo", "çµ¢" => "Xuan", "çµ£" => "Bing", "絤" => "Xian",
+ "絥" => "Fu", "給" => "Gei", "絧" => "Tong", "絨" => "Rong", "絩" => "Tiao", "絪" => "Yin",
+ "絫" => "Lei", "絬" => "Xie", "çµ" => "Quan", "çµ®" => "Xu", "絯" => "Lun", "çµ°" => "Die",
+ "統" => "Tong", "絲" => "Si", "絳" => "Jiang", "絴" => "Xiang", "絵" => "Hui", "絶" => "Jue",
+ "絷" => "Zhi", "絸" => "Jian", "絹" => "Juan", "絺" => "Chi", "絻" => "Mian", "絼" => "Zhen",
+ "çµ½" => "Lu", "çµ¾" => "Cheng", "絿" => "Qiu", "綀" => "Shu", "ç¶" => "Bang", "綂" => "Tong",
+ "綃" => "Xiao", "綄" => "Wan", "綅" => "Qin", "綆" => "Geng", "綇" => "Xiu", "綈" => "Ti",
+ "綉" => "Xiu", "ç¶" => "Xie", "綋" => "Hong", "綌" => "Xi", "ç¶" => "Fu", "ç¶" => "Ting",
+ "ç¶" => "Sui", "ç¶" => "Dui", "綑" => "Kun", "綒" => "Fu", "經" => "Jing", "綔" => "Hu",
+ "綕" => "Zhi", "綖" => "Yan", "綗" => "Jiong", "綘" => "Feng", "継" => "Ji", "ç¶" => "Sok",
+ "綛" => "Kase", "綜" => "Zong", "ç¶" => "Lin", "ç¶" => "Duo", "綟" => "Li", "ç¶ " => "Lu",
+ "綡" => "Liang", "綢" => "Chou", "綣" => "Quan", "綤" => "Shao", "綥" => "Qi", "綦" => "Qi",
+ "綧" => "Zhun", "綨" => "Qi", "綩" => "Wan", "綪" => "Qian", "綫" => "Xian", "綬" => "Shou",
+ "ç¶" => "Wei", "綮" => "Qi", "綯" => "Tao", "綰" => "Wan", "綱" => "Gang", "網" => "Wang",
+ "綳" => "Beng", "綴" => "Zhui", "綵" => "Cai", "綶" => "Guo", "綷" => "Cui", "綸" => "Lun",
+ "綹" => "Liu", "綺" => "Qi", "綻" => "Zhan", "綼" => "Bei", "綽" => "Chuo", "綾" => "Ling",
+ "綿" => "Mian", "ç·€" => "Qi", "ç·" => "Qie", "ç·‚" => "Tan", "ç·ƒ" => "Zong", "ç·„" => "Gun",
+ "ç·…" => "Zou", "ç·†" => "Yi", "ç·‡" => "Zi", "ç·ˆ" => "Xing", "ç·‰" => "Liang", "ç·" => "Jin",
+ "ç·‹" => "Fei", "ç·Œ" => "Rui", "ç·" => "Min", "ç·" => "Yu", "ç·" => "Zong", "ç·" => "Fan",
+ "ç·‘" => "Lu", "ç·’" => "Xu", "ç·“" => "Yingl", "ç·”" => "Zhang", "ç·•" => "Kasuri", "ç·–" => "Xu",
+ "ç·—" => "Xiang", "ç·˜" => "Jian", "ç·™" => "Ke", "ç·" => "Xian", "ç·›" => "Ruan", "ç·œ" => "Mian",
+ "ç·" => "Qi", "ç·" => "Duan", "ç·Ÿ" => "Zhong", "ç· " => "Di", "ç·¡" => "Min", "ç·¢" => "Miao",
+ "ç·£" => "Yuan", "ç·¤" => "Xie", "ç·¥" => "Bao", "ç·¦" => "Si", "ç·§" => "Qiu", "ç·¨" => "Bian",
+ "ç·©" => "Huan", "ç·ª" => "Geng", "ç·«" => "Cong", "ç·¬" => "Mian", "ç·" => "Wei", "ç·®" => "Fu",
+ "ç·¯" => "Wei", "ç·°" => "Yu", "ç·±" => "Gou", "ç·²" => "Miao", "ç·³" => "Xie", "ç·´" => "Lian",
+ "ç·µ" => "Zong", "ç·¶" => "Bian", "ç··" => "Yun", "ç·¸" => "Yin", "ç·¹" => "Ti", "ç·º" => "Gua",
+ "ç·»" => "Zhi", "ç·¼" => "Yun", "ç·½" => "Cheng", "ç·¾" => "Chan", "ç·¿" => "Dai", "ç¸" => "Yuan",
+ "縂" => "Zong", "縃" => "Xu", "縄" => "Nawa", "縅" => "Odoshi", "縆" => "Geng", "縇" => "Sen",
+ "縈" => "Ying", "縉" => "Jin", "ç¸" => "Yi", "縋" => "Zhui", "縌" => "Ni", "ç¸" => "Bang",
+ "ç¸" => "Gu", "ç¸" => "Pan", "ç¸" => "Zhou", "縑" => "Jian", "縒" => "Cuo", "縓" => "Quan",
+ "縔" => "Shuang", "縕" => "Yun", "縖" => "Xia", "縗" => "Shuai", "縘" => "Xi", "縙" => "Rong",
+ "ç¸" => "Tao", "縛" => "Fu", "縜" => "Yun", "ç¸" => "Zhen", "ç¸" => "Gao", "縟" => "Ru",
+ "ç¸ " => "Hu", "縡" => "Zai", "縢" => "Teng", "縣" => "Xian", "縤" => "Su", "縥" => "Zhen",
+ "縦" => "Zong", "縧" => "Tao", "縨" => "Horo", "縩" => "Cai", "縪" => "Bi", "縫" => "Feng",
+ "縬" => "Cu", "ç¸" => "Li", "縮" => "Suo", "縯" => "Yin", "縰" => "Xi", "縱" => "Zong",
+ "縲" => "Lei", "縳" => "Zhuan", "縴" => "Qian", "縵" => "Man", "縶" => "Zhi", "縷" => "Lu",
+ "縸" => "Mo", "縹" => "Piao", "縺" => "Lian", "縻" => "Mi", "縼" => "Xuan", "總" => "Zong",
+ "績" => "Ji", "縿" => "Shan", "ç¹€" => "Sui", "ç¹" => "Fan", "繂" => "Shuai", "繃" => "Beng",
+ "繄" => "Yi", "繅" => "Sao", "繆" => "Mou", "繇" => "Zhou", "繈" => "Qiang", "繉" => "Hun",
+ "ç¹" => "Sem", "繋" => "Xi", "繌" => "Jung", "ç¹" => "Xiu", "ç¹" => "Ran", "ç¹" => "Xuan",
+ "ç¹" => "Hui", "繑" => "Qiao", "ç¹’" => "Zeng", "繓" => "Zuo", "ç¹”" => "Zhi", "繕" => "Shan",
+ "ç¹–" => "San", "ç¹—" => "Lin", "繘" => "Yu", "ç¹™" => "Fan", "ç¹" => "Liao", "ç¹›" => "Chuo",
+ "繜" => "Zun", "ç¹" => "Jian", "ç¹" => "Rao", "繟" => "Chan", "ç¹ " => "Rui", "繡" => "Xiu",
+ "繢" => "Hui", "繣" => "Hua", "繤" => "Zuan", "繥" => "Xi", "繦" => "Qiang", "繧" => "Un",
+ "繨" => "Da", "繩" => "Sheng", "繪" => "Hui", "繫" => "Xi", "繬" => "Se", "ç¹" => "Jian",
+ "繮" => "Jiang", "繯" => "Huan", "繰" => "Zao", "繱" => "Cong", "繲" => "Jie", "繳" => "Jiao",
+ "繴" => "Bo", "繵" => "Chan", "繶" => "Yi", "繷" => "Nao", "繸" => "Sui", "繹" => "Yi",
+ "繺" => "Shai", "繻" => "Xu", "繼" => "Ji", "繽" => "Bin", "繾" => "Qian", "繿" => "Lan",
+ "纀" => "Pu", "çº" => "Xun", "纂" => "Zuan", "纃" => "Qi", "纄" => "Peng", "纅" => "Li",
+ "纆" => "Mo", "纇" => "Lei", "纈" => "Xie", "纉" => "Zuan", "çº" => "Kuang", "纋" => "You",
+ "續" => "Xu", "çº" => "Lei", "çº" => "Xian", "çº" => "Chan", "çº" => "Kou", "纑" => "Lu",
+ "纒" => "Chan", "纓" => "Ying", "纔" => "Cai", "纕" => "Xiang", "纖" => "Xian", "纗" => "Zui",
+ "纘" => "Zuan", "纙" => "Luo", "çº" => "Xi", "纛" => "Dao", "纜" => "Lan", "çº" => "Lei",
+ "çº" => "Lian", "纟" => "Si", "çº " => "Jiu", "纡" => "Yu", "红" => "Hong", "纣" => "Zhou",
+ "纤" => "Xian", "纥" => "He", "约" => "Yue", "级" => "Ji", "纨" => "Wan", "纩" => "Kuang",
+ "纪" => "Ji", "纫" => "Ren", "纬" => "Wei", "çº" => "Yun", "纮" => "Hong", "纯" => "Chun",
+ "纰" => "Pi", "纱" => "Sha", "纲" => "Gang", "纳" => "Na", "纴" => "Ren", "纵" => "Zong",
+ "纶" => "Lun", "纷" => "Fen", "纸" => "Zhi", "纹" => "Wen", "纺" => "Fang", "纻" => "Zhu",
+ "纼" => "Yin", "纽" => "Niu", "纾" => "Shu", "线" => "Xian", "绀" => "Gan", "ç»" => "Xie",
+ "绂" => "Fu", "练" => "Lian", "组" => "Zu", "绅" => "Shen", "细" => "Xi", "织" => "Zhi",
+ "终" => "Zhong", "绉" => "Zhou", "ç»" => "Ban", "绋" => "Fu", "绌" => "Zhuo", "ç»" => "Shao",
+ "ç»" => "Yi", "ç»" => "Jing", "ç»" => "Dai", "绑" => "Bang", "ç»’" => "Rong", "结" => "Jie",
+ "绔" => "Ku", "绕" => "Rao", "绖" => "Die", "绗" => "Heng", "绘" => "Hui", "给" => "Gei",
+ "ç»" => "Xuan", "ç»›" => "Jiang", "络" => "Luo", "ç»" => "Jue", "ç»" => "Jiao", "统" => "Tong",
+ "ç» " => "Geng", "绡" => "Xiao", "绢" => "Juan", "绣" => "Xiu", "绤" => "Xi", "绥" => "Sui",
+ "绦" => "Tao", "继" => "Ji", "绨" => "Ti", "绩" => "Ji", "绪" => "Xu", "绫" => "Ling",
+ "ç»" => "Xu", "ç»®" => "Qi", "绯" => "Fei", "ç»°" => "Chuo", "ç»±" => "Zhang", "绲" => "Gun",
+ "绳" => "Sheng", "维" => "Wei", "绵" => "Mian", "绶" => "Shou", "绷" => "Beng", "绸" => "Chou",
+ "绹" => "Tao", "绺" => "Liu", "绻" => "Quan", "综" => "Zong", "绽" => "Zhan", "绾" => "Wan",
+ "绿" => "Lu", "ç¼" => "Zi", "缂" => "Ke", "缃" => "Xiang", "缄" => "Jian", "ç¼…" => "Mian",
+ "缆" => "Lan", "缇" => "Ti", "缈" => "Miao", "缉" => "Qi", "ç¼" => "Yun", "缋" => "Hui",
+ "缌" => "Si", "ç¼" => "Duo", "ç¼" => "Duan", "ç¼" => "Bian", "ç¼" => "Xian", "缑" => "Gou",
+ "缒" => "Zhui", "缓" => "Huan", "缔" => "Di", "缕" => "Lu", "编" => "Bian", "缗" => "Min",
+ "缘" => "Yuan", "ç¼™" => "Jin", "ç¼" => "Fu", "ç¼›" => "Ru", "缜" => "Zhen", "ç¼" => "Feng",
+ "ç¼" => "Shuai", "缟" => "Gao", "ç¼ " => "Chan", "缡" => "Li", "ç¼¢" => "Yi", "ç¼£" => "Jian",
+ "缤" => "Bin", "缥" => "Piao", "缦" => "Man", "缧" => "Lei", "缨" => "Ying", "缩" => "Suo",
+ "缪" => "Mou", "缫" => "Sao", "缬" => "Xie", "ç¼" => "Liao", "ç¼®" => "Shan", "缯" => "Zeng",
+ "ç¼°" => "Jiang", "ç¼±" => "Qian", "ç¼²" => "Zao", "ç¼³" => "Huan", "ç¼´" => "Jiao", "ç¼µ" => "Zuan",
+ "缶" => "Fou", "缷" => "Xie", "缸" => "Gang", "缹" => "Fou", "缺" => "Que", "缻" => "Fou",
+ "ç¼¼" => "Kaakeru", "ç¼½" => "Bo", "ç¼¾" => "Ping", "缿" => "Hou", "ç½" => "Gang", "罂" => "Ying",
+ "罃" => "Ying", "罄" => "Qing", "罅" => "Xia", "罆" => "Guan", "罇" => "Zun", "罈" => "Tan",
+ "罉" => "Chang", "ç½" => "Qi", "罋" => "Weng", "罌" => "Ying", "ç½" => "Lei", "ç½" => "Tan",
+ "ç½" => "Lu", "ç½" => "Guan", "网" => "Wang", "ç½’" => "Wang", "罓" => "Gang", "ç½”" => "Wang",
+ "罕" => "Han", "ç½—" => "Luo", "罘" => "Fu", "ç½™" => "Mi", "ç½" => "Fa", "ç½›" => "Gu",
+ "罜" => "Zhu", "ç½" => "Ju", "ç½" => "Mao", "罟" => "Gu", "ç½ " => "Min", "罡" => "Gang",
+ "罢" => "Ba", "罣" => "Gua", "罤" => "Ti", "罥" => "Juan", "罦" => "Fu", "罧" => "Lin",
+ "罨" => "Yan", "罩" => "Zhao", "罪" => "Zui", "罫" => "Gua", "罬" => "Zhuo", "ç½" => "Yu",
+ "置" => "Zhi", "罯" => "An", "罰" => "Fa", "罱" => "Nan", "署" => "Shu", "罳" => "Si",
+ "罴" => "Pi", "罵" => "Ma", "罶" => "Liu", "罷" => "Ba", "罸" => "Fa", "罹" => "Li",
+ "罺" => "Chao", "罻" => "Wei", "罼" => "Bi", "罽" => "Ji", "罾" => "Zeng", "罿" => "Tong",
+ "ç¾€" => "Liu", "ç¾" => "Ji", "羂" => "Juan", "羃" => "Mi", "羄" => "Zhao", "ç¾…" => "Luo",
+ "羆" => "Pi", "羇" => "Ji", "羈" => "Ji", "羉" => "Luan", "ç¾" => "Yang", "羋" => "Mie",
+ "羌" => "Qiang", "ç¾" => "Ta", "ç¾" => "Mei", "ç¾" => "Yang", "ç¾" => "You", "羑" => "You",
+ "羒" => "Fen", "羓" => "Ba", "羔" => "Gao", "羕" => "Yang", "羖" => "Gu", "羗" => "Qiang",
+ "羘" => "Zang", "ç¾™" => "Gao", "ç¾" => "Ling", "ç¾›" => "Yi", "羜" => "Zhu", "ç¾" => "Di",
+ "ç¾" => "Xiu", "羟" => "Qian", "ç¾ " => "Yi", "羡" => "Xian", "ç¾¢" => "Rong", "ç¾£" => "Qun",
+ "群" => "Qun", "羥" => "Qian", "羦" => "Huan", "羧" => "Zui", "羨" => "Xian", "義" => "Yi",
+ "羪" => "Yashinau", "羫" => "Qiang", "羬" => "Xian", "ç¾" => "Yu", "ç¾®" => "Geng", "羯" => "Jie",
+ "ç¾°" => "Tang", "ç¾±" => "Yuan", "ç¾²" => "Xi", "ç¾³" => "Fan", "ç¾´" => "Shan", "ç¾µ" => "Fen",
+ "羶" => "Shan", "羷" => "Lian", "羸" => "Lei", "羹" => "Geng", "羺" => "Nou", "羻" => "Qiang",
+ "ç¾¼" => "Chan", "ç¾½" => "Yu", "ç¾¾" => "Gong", "羿" => "Yi", "ç¿€" => "Chong", "ç¿" => "Weng",
+ "翂" => "Fen", "翃" => "Hong", "翄" => "Chi", "翅" => "Chi", "翆" => "Cui", "翇" => "Fu",
+ "翈" => "Xia", "翉" => "Pen", "ç¿" => "Yi", "ç¿‹" => "La", "ç¿Œ" => "Yi", "ç¿" => "Pi",
+ "ç¿" => "Ling", "ç¿" => "Liu", "ç¿" => "Zhi", "ç¿‘" => "Qu", "ç¿’" => "Xi", "ç¿“" => "Xie",
+ "翔" => "Xiang", "翕" => "Xi", "翖" => "Xi", "翗" => "Qi", "翘" => "Qiao", "翙" => "Hui",
+ "ç¿" => "Hui", "ç¿›" => "Xiao", "ç¿œ" => "Se", "ç¿" => "Hong", "ç¿" => "Jiang", "ç¿Ÿ" => "Di",
+ "ç¿ " => "Cui", "ç¿¡" => "Fei", "ç¿¢" => "Tao", "ç¿£" => "Sha", "翤" => "Chi", "ç¿¥" => "Zhu",
+ "翦" => "Jian", "翧" => "Xuan", "翨" => "Shi", "翩" => "Pian", "翪" => "Zong", "翫" => "Wan",
+ "翬" => "Hui", "ç¿" => "Hou", "ç¿®" => "He", "翯" => "He", "ç¿°" => "Han", "翱" => "Ao",
+ "翲" => "Piao", "翳" => "Yi", "翴" => "Lian", "翵" => "Qu", "翷" => "Lin", "翸" => "Pen",
+ "翹" => "Qiao", "翺" => "Ao", "翻" => "Fan", "翼" => "Yi", "翽" => "Hui", "翾" => "Xuan",
+ "ç¿¿" => "Dao", "è€" => "Lao", "考" => "Kao", "耄" => "Mao", "者" => "Zhe", "耆" => "Qi",
+ "耇" => "Gou", "耈" => "Gou", "耉" => "Gou", "è€" => "Die", "耋" => "Die", "而" => "Er",
+ "è€" => "Shua", "è€" => "Ruan", "è€" => "Er", "è€" => "Nai", "耑" => "Zhuan", "耒" => "Lei",
+ "耓" => "Ting", "耔" => "Zi", "耕" => "Geng", "耖" => "Chao", "耗" => "Hao", "耘" => "Yun",
+ "耙" => "Pa", "è€" => "Pi", "耛" => "Chi", "耜" => "Si", "è€" => "Chu", "è€" => "Jia",
+ "耟" => "Ju", "è€ " => "He", "耡" => "Chu", "耢" => "Lao", "耣" => "Lun", "耤" => "Ji",
+ "耥" => "Tang", "耦" => "Ou", "耧" => "Lou", "耨" => "Nou", "耩" => "Gou", "耪" => "Pang",
+ "耫" => "Ze", "耬" => "Lou", "è€" => "Ji", "耮" => "Lao", "耯" => "Huo", "耰" => "You",
+ "耱" => "Mo", "耲" => "Huai", "耳" => "Er", "耴" => "Zhe", "耵" => "Ting", "耶" => "Ye",
+ "耷" => "Da", "耸" => "Song", "耹" => "Qin", "耺" => "Yun", "耻" => "Chi", "耼" => "Dan",
+ "耽" => "Dan", "耾" => "Hong", "耿" => "Geng", "è€" => "Zhi", "è‚" => "Nie", "èƒ" => "Dan",
+ "è„" => "Zhen", "è…" => "Che", "è†" => "Ling", "è‡" => "Zheng", "èˆ" => "You", "è‰" => "Wa",
+ "è" => "Liao", "è‹" => "Long", "èŒ" => "Zhi", "è" => "Ning", "è" => "Tiao", "è" => "Er",
+ "è" => "Ya", "è‘" => "Die", "è’" => "Gua", "è”" => "Lian", "è•" => "Hao", "è–" => "Sheng",
+ "è—" => "Lie", "è˜" => "Pin", "è™" => "Jing", "è" => "Ju", "è›" => "Bi", "èœ" => "Di",
+ "è" => "Guo", "è" => "Wen", "èŸ" => "Xu", "è " => "Ping", "è¡" => "Cong", "è¢" => "Shikato",
+ "è¤" => "Ting", "è¥" => "Yu", "è¦" => "Cong", "è§" => "Kui", "è¨" => "Tsuraneru", "è©" => "Kui",
+ "èª" => "Cong", "è«" => "Lian", "è¬" => "Weng", "è" => "Kui", "è®" => "Lian", "è¯" => "Lian",
+ "è°" => "Cong", "è±" => "Ao", "è²" => "Sheng", "è³" => "Song", "è´" => "Ting", "èµ" => "Kui",
+ "è¶" => "Nie", "è·" => "Zhi", "è¸" => "Dan", "è¹" => "Ning", "èº" => "Qie", "è»" => "Ji",
+ "è¼" => "Ting", "è½" => "Ting", "è¾" => "Long", "è¿" => "Yu", "è‚€" => "Yu", "è‚" => "Zhao",
+ "肂" => "Si", "肃" => "Su", "肄" => "Yi", "肅" => "Su", "肆" => "Si", "肇" => "Zhao",
+ "肈" => "Zhao", "肉" => "Rou", "è‚" => "Yi", "è‚‹" => "Le", "è‚Œ" => "Ji", "è‚" => "Qiu",
+ "è‚" => "Ken", "è‚" => "Cao", "è‚" => "Ge", "è‚‘" => "Di", "è‚’" => "Huan", "è‚“" => "Huang",
+ "肔" => "Yi", "肕" => "Ren", "肖" => "Xiao", "肗" => "Ru", "肘" => "Zhou", "肙" => "Yuan",
+ "è‚" => "Du", "è‚›" => "Gang", "è‚œ" => "Rong", "è‚" => "Gan", "è‚" => "Cha", "è‚Ÿ" => "Wo",
+ "è‚ " => "Chang", "è‚¡" => "Gu", "è‚¢" => "Zhi", "è‚£" => "Han", "肤" => "Fu", "è‚¥" => "Fei",
+ "肦" => "Fen", "肧" => "Pei", "肨" => "Pang", "肩" => "Jian", "肪" => "Fang", "肫" => "Zhun",
+ "肬" => "You", "è‚" => "Na", "è‚®" => "Hang", "肯" => "Ken", "è‚°" => "Ran", "肱" => "Gong",
+ "育" => "Yu", "肳" => "Wen", "肴" => "Yao", "肵" => "Jin", "肶" => "Pi", "肷" => "Qian",
+ "肸" => "Xi", "肹" => "Xi", "肺" => "Fei", "肻" => "Ken", "肼" => "Jing", "肽" => "Tai",
+ "肾" => "Shen", "è‚¿" => "Zhong", "胀" => "Zhang", "èƒ" => "Xie", "胂" => "Shen", "胃" => "Wei",
+ "胄" => "Zhou", "胅" => "Die", "胆" => "Dan", "胇" => "Fei", "胈" => "Ba", "胉" => "Bo",
+ "èƒ" => "Qu", "胋" => "Tian", "背" => "Bei", "èƒ" => "Gua", "èƒ" => "Tai", "èƒ" => "Zi",
+ "èƒ" => "Ku", "胑" => "Zhi", "胒" => "Ni", "胓" => "Ping", "胔" => "Zi", "胕" => "Fu",
+ "胖" => "Pang", "胗" => "Zhen", "胘" => "Xian", "胙" => "Zuo", "èƒ" => "Pei", "胛" => "Jia",
+ "胜" => "Sheng", "èƒ" => "Zhi", "èƒ" => "Bao", "胟" => "Mu", "èƒ " => "Qu", "胡" => "Hu",
+ "胢" => "Ke", "胣" => "Yi", "胤" => "Yin", "胥" => "Xu", "胦" => "Yang", "胧" => "Long",
+ "胨" => "Dong", "胩" => "Ka", "胪" => "Lu", "胫" => "Jing", "胬" => "Nu", "èƒ" => "Yan",
+ "胮" => "Pang", "胯" => "Kua", "胰" => "Yi", "胱" => "Guang", "胲" => "Gai", "胳" => "Ge",
+ "胴" => "Dong", "胵" => "Zhi", "胶" => "Xiao", "胷" => "Xiong", "胸" => "Xiong", "胹" => "Er",
+ "胺" => "E", "胻" => "Xing", "胼" => "Pian", "能" => "Neng", "胾" => "Zi", "胿" => "Gui",
+ "è„" => "Tiao", "è„‚" => "Zhi", "脃" => "Cui", "è„„" => "Mei", "è„…" => "Xie", "脆" => "Cui",
+ "脇" => "Xie", "脈" => "Mo", "脉" => "Mai", "è„" => "Ji", "è„‹" => "Obiyaakasu", "è„" => "Kuai",
+ "è„" => "Sa", "è„" => "Zang", "è„" => "Qi", "è„‘" => "Nao", "è„’" => "Mi", "è„“" => "Nong",
+ "脔" => "Luan", "脕" => "Wan", "脖" => "Bo", "脗" => "Wen", "脘" => "Guan", "脙" => "Qiu",
+ "è„" => "Jiao", "è„›" => "Jing", "è„œ" => "Rou", "è„" => "Heng", "è„" => "Cuo", "è„Ÿ" => "Lie",
+ "è„ " => "Shan", "è„¡" => "Ting", "è„¢" => "Mei", "è„£" => "Chun", "脤" => "Shen", "è„¥" => "Xie",
+ "脦" => "De", "脧" => "Zui", "脨" => "Cu", "脩" => "Xiu", "脪" => "Xin", "脫" => "Tuo",
+ "脬" => "Pao", "è„" => "Cheng", "è„®" => "Nei", "脯" => "Fu", "è„°" => "Dou", "脱" => "Tuo",
+ "脲" => "Niao", "脳" => "Noy", "脴" => "Pi", "脵" => "Gu", "脶" => "Gua", "脷" => "Li",
+ "脸" => "Lian", "脹" => "Zhang", "脺" => "Cui", "脻" => "Jie", "脼" => "Liang", "脽" => "Zhou",
+ "脾" => "Pi", "è„¿" => "Biao", "è…€" => "Lun", "è…" => "Pian", "è…‚" => "Guo", "è…ƒ" => "Kui",
+ "è…„" => "Chui", "è……" => "Dan", "è…†" => "Tian", "è…‡" => "Nei", "è…ˆ" => "Jing", "è…‰" => "Jie",
+ "è…" => "La", "è…‹" => "Yi", "è…Œ" => "An", "è…" => "Ren", "è…" => "Shen", "è…" => "Chuo",
+ "è…" => "Fu", "è…‘" => "Fu", "è…’" => "Ju", "è…“" => "Fei", "è…”" => "Qiang", "è…•" => "Wan",
+ "è…–" => "Dong", "è…—" => "Pi", "è…˜" => "Guo", "è…™" => "Zong", "è…" => "Ding", "è…›" => "Wu",
+ "è…œ" => "Mei", "è…" => "Ruan", "è…" => "Zhuan", "è…Ÿ" => "Zhi", "è… " => "Cou", "è…¡" => "Gua",
+ "è…¢" => "Ou", "è…£" => "Di", "è…¤" => "An", "è…¥" => "Xing", "è…¦" => "Nao", "è…§" => "Yu",
+ "è…¨" => "Chuan", "è…©" => "Nan", "è…ª" => "Yun", "è…«" => "Zhong", "è…¬" => "Rou", "è…" => "E",
+ "è…®" => "Sai", "è…¯" => "Tu", "è…°" => "Yao", "è…±" => "Jian", "è…²" => "Wei", "è…³" => "Jiao",
+ "è…´" => "Yu", "è…µ" => "Jia", "è…¶" => "Duan", "è…·" => "Bi", "è…¸" => "Chang", "è…¹" => "Fu",
+ "è…º" => "Xian", "è…»" => "Ni", "è…¼" => "Mian", "è…½" => "Wa", "è…¾" => "Teng", "è…¿" => "Tui",
+ "膀" => "Bang", "è†" => "Qian", "膂" => "Lu", "膃" => "Wa", "膄" => "Sou", "膅" => "Tang",
+ "膆" => "Su", "膇" => "Zhui", "膈" => "Ge", "膉" => "Yi", "è†" => "Bo", "膋" => "Liao",
+ "膌" => "Ji", "è†" => "Pi", "è†" => "Xie", "è†" => "Gao", "è†" => "Lu", "膑" => "Bin",
+ "膒" => "Ou", "膓" => "Chang", "膔" => "Lu", "膕" => "Guo", "膖" => "Pang", "膗" => "Chuai",
+ "膘" => "Piao", "膙" => "Jiang", "è†" => "Fu", "膛" => "Tang", "膜" => "Mo", "è†" => "Xi",
+ "è†" => "Zhuan", "膟" => "Lu", "è† " => "Jiao", "膡" => "Ying", "膢" => "Lu", "膣" => "Zhi",
+ "膤" => "Tara", "膥" => "Chun", "膦" => "Lian", "膧" => "Tong", "膨" => "Peng", "膩" => "Ni",
+ "膪" => "Zha", "膫" => "Liao", "膬" => "Cui", "è†" => "Gui", "膮" => "Xiao", "膯" => "Teng",
+ "膰" => "Fan", "膱" => "Zhi", "膲" => "Jiao", "膳" => "Shan", "膴" => "Wu", "膵" => "Cui",
+ "膶" => "Run", "膷" => "Xiang", "膸" => "Sui", "膹" => "Fen", "膺" => "Ying", "膻" => "Tan",
+ "膼" => "Zhua", "膽" => "Dan", "膾" => "Kuai", "膿" => "Nong", "臀" => "Tun", "è‡" => "Lian",
+ "臂" => "Bi", "臃" => "Yong", "臄" => "Jue", "臅" => "Chu", "臆" => "Yi", "臇" => "Juan",
+ "臈" => "La", "臉" => "Lian", "è‡" => "Sao", "臋" => "Tun", "臌" => "Gu", "è‡" => "Qi",
+ "è‡" => "Cui", "è‡" => "Bin", "è‡" => "Xun", "臑" => "Ru", "臒" => "Huo", "臓" => "Zang",
+ "臔" => "Xian", "臕" => "Biao", "臖" => "Xing", "臗" => "Kuan", "臘" => "La", "臙" => "Yan",
+ "è‡" => "Lu", "臛" => "Huo", "臜" => "Zang", "è‡" => "Luo", "è‡" => "Qu", "臟" => "Zang",
+ "è‡ " => "Luan", "臡" => "Ni", "臢" => "Zang", "臣" => "Chen", "臤" => "Qian", "臥" => "Wo",
+ "臦" => "Guang", "臧" => "Zang", "臨" => "Lin", "臩" => "Guang", "自" => "Zi", "臫" => "Jiao",
+ "臬" => "Nie", "è‡" => "Chou", "臮" => "Ji", "臯" => "Gao", "臰" => "Chou", "臱" => "Mian",
+ "臲" => "Nie", "至" => "Zhi", "致" => "Zhi", "臵" => "Ge", "臶" => "Jian", "臷" => "Die",
+ "臸" => "Zhi", "臹" => "Xiu", "臺" => "Tai", "臻" => "Zhen", "臼" => "Jiu", "臽" => "Xian",
+ "臾" => "Yu", "臿" => "Cha", "èˆ" => "Yu", "舂" => "Chong", "舃" => "Xi", "舄" => "Xi",
+ "舅" => "Jiu", "舆" => "Yu", "與" => "Yu", "興" => "Xing", "舉" => "Ju", "èˆ" => "Jiu",
+ "舋" => "Xin", "舌" => "She", "èˆ" => "She", "èˆ" => "Yadoru", "èˆ" => "Jiu", "èˆ" => "Shi",
+ "舑" => "Tan", "舒" => "Shu", "舓" => "Shi", "舔" => "Tian", "舕" => "Dan", "舖" => "Pu",
+ "舗" => "Pu", "舘" => "Guan", "舙" => "Hua", "èˆ" => "Tan", "舛" => "Chuan", "舜" => "Shun",
+ "èˆ" => "Xia", "èˆ" => "Wu", "舟" => "Zhou", "èˆ " => "Dao", "舡" => "Gang", "舢" => "Shan",
+ "舣" => "Yi", "舥" => "Pa", "舦" => "Tai", "舧" => "Fan", "舨" => "Ban", "舩" => "Chuan",
+ "航" => "Hang", "舫" => "Fang", "般" => "Ban", "èˆ" => "Que", "舮" => "Hesaki", "舯" => "Zhong",
+ "舰" => "Jian", "舱" => "Cang", "舲" => "Ling", "舳" => "Zhu", "舴" => "Ze", "舵" => "Duo",
+ "舶" => "Bo", "舷" => "Xian", "舸" => "Ge", "船" => "Chuan", "舺" => "Jia", "舻" => "Lu",
+ "舼" => "Hong", "舽" => "Pang", "舾" => "Xi", "艀" => "Fu", "è‰" => "Zao", "艂" => "Feng",
+ "艃" => "Li", "艄" => "Shao", "艅" => "Yu", "艆" => "Lang", "艇" => "Ting", "艉" => "Wei",
+ "è‰" => "Bo", "艋" => "Meng", "艌" => "Nian", "è‰" => "Ju", "è‰" => "Huang", "è‰" => "Shou",
+ "è‰" => "Zong", "艑" => "Bian", "艒" => "Mao", "艓" => "Die", "艕" => "Bang", "艖" => "Cha",
+ "艗" => "Yi", "艘" => "Sao", "艙" => "Cang", "è‰" => "Cao", "艛" => "Lou", "艜" => "Dai",
+ "è‰" => "Sori", "è‰" => "Yao", "艟" => "Tong", "è‰ " => "Yofune", "艡" => "Dang", "艢" => "Tan",
+ "艣" => "Lu", "艤" => "Yi", "艥" => "Jie", "艦" => "Jian", "艧" => "Huo", "艨" => "Meng",
+ "艩" => "Qi", "艪" => "Lu", "艫" => "Lu", "艬" => "Chan", "è‰" => "Shuang", "艮" => "Gen",
+ "良" => "Liang", "艰" => "Jian", "艱" => "Jian", "色" => "Se", "艳" => "Yan", "艴" => "Fu",
+ "艵" => "Ping", "艶" => "Yan", "艷" => "Yan", "艸" => "Cao", "艹" => "Cao", "艺" => "Yi",
+ "艻" => "Le", "艼" => "Ting", "艽" => "Qiu", "艾" => "Ai", "艿" => "Nai", "è€" => "Tiao",
+ "è" => "Jiao", "è‚" => "Jie", "èƒ" => "Peng", "è„" => "Wan", "è…" => "Yi", "è†" => "Chai",
+ "è‡" => "Mian", "èˆ" => "Mie", "è‰" => "Gan", "è" => "Qian", "è‹" => "Yu", "èŒ" => "Yu",
+ "è" => "Shuo", "è" => "Qiong", "è" => "Tu", "è" => "Xia", "è‘" => "Qi", "è’" => "Mang",
+ "è“" => "Zi", "è”" => "Hui", "è•" => "Sui", "è–" => "Zhi", "è—" => "Xiang", "è˜" => "Bi",
+ "è™" => "Fu", "è" => "Tun", "è›" => "Wei", "èœ" => "Wu", "è" => "Zhi", "è" => "Qi",
+ "èŸ" => "Shan", "è " => "Wen", "è¡" => "Qian", "è¢" => "Ren", "è£" => "Fou", "è¤" => "Kou",
+ "è¥" => "Jie", "è¦" => "Lu", "è§" => "Xu", "è¨" => "Ji", "è©" => "Qin", "èª" => "Qi",
+ "è«" => "Yuan", "è¬" => "Fen", "è" => "Ba", "è®" => "Rui", "è¯" => "Xin", "è°" => "Ji",
+ "è±" => "Hua", "è²" => "Hua", "è³" => "Fang", "è´" => "Wu", "èµ" => "Jue", "è¶" => "Gou",
+ "è·" => "Zhi", "è¸" => "Yun", "è¹" => "Qin", "èº" => "Ao", "è»" => "Chu", "è¼" => "Mao",
+ "è½" => "Ya", "è¾" => "Fei", "è¿" => "Reng", "è‹€" => "Hang", "è‹" => "Cong", "è‹‚" => "Yin",
+ "苃" => "You", "苄" => "Bian", "苅" => "Yi", "苆" => "Susa", "苇" => "Wei", "苈" => "Li",
+ "苉" => "Pi", "è‹" => "E", "è‹‹" => "Xian", "è‹Œ" => "Chang", "è‹" => "Cang", "è‹" => "Meng",
+ "è‹" => "Su", "è‹" => "Yi", "è‹‘" => "Yuan", "è‹’" => "Ran", "è‹“" => "Ling", "è‹”" => "Tai",
+ "è‹•" => "Tiao", "è‹–" => "Di", "è‹—" => "Miao", "苘" => "Qiong", "è‹™" => "Li", "è‹" => "Yong",
+ "è‹›" => "Ke", "è‹œ" => "Mu", "è‹" => "Pei", "è‹" => "Bao", "è‹Ÿ" => "Gou", "è‹ " => "Min",
+ "苡" => "Yi", "苢" => "Yi", "苣" => "Ju", "苤" => "Pi", "若" => "Ruo", "苦" => "Ku",
+ "苧" => "Zhu", "苨" => "Ni", "苩" => "Bo", "苪" => "Bing", "苫" => "Shan", "苬" => "Qiu",
+ "è‹" => "Yao", "è‹®" => "Xian", "苯" => "Ben", "è‹°" => "Hong", "英" => "Ying", "苲" => "Zha",
+ "苳" => "Dong", "苴" => "Ju", "苵" => "Die", "苶" => "Nie", "苷" => "Gan", "苸" => "Hu",
+ "苹" => "Ping", "苺" => "Mei", "苻" => "Fu", "苼" => "Sheng", "苽" => "Gu", "苾" => "Bi",
+ "è‹¿" => "Wei", "èŒ" => "Zhuo", "茂" => "Mao", "范" => "Fan", "茄" => "Qie", "茅" => "Mao",
+ "茆" => "Mao", "茇" => "Ba", "茈" => "Zi", "茉" => "Mo", "èŒ" => "Zi", "茋" => "Di",
+ "茌" => "Chi", "èŒ" => "Ji", "èŒ" => "Jing", "èŒ" => "Long", "茑" => "Niao", "茓" => "Xue",
+ "茔" => "Ying", "茕" => "Qiong", "茖" => "Ge", "茗" => "Ming", "茘" => "Li", "茙" => "Rong",
+ "èŒ" => "Yin", "茛" => "Gen", "茜" => "Qian", "èŒ" => "Chai", "èŒ" => "Chen", "茟" => "Yu",
+ "èŒ " => "Xiu", "茡" => "Zi", "茢" => "Lie", "茣" => "Wu", "茤" => "Ji", "茥" => "Kui",
+ "茦" => "Ce", "茧" => "Chong", "茨" => "Ci", "茩" => "Gou", "茪" => "Guang", "茫" => "Mang",
+ "茬" => "Chi", "èŒ" => "Jiao", "茮" => "Jiao", "茯" => "Fu", "茰" => "Yu", "茱" => "Zhu",
+ "茲" => "Zi", "茳" => "Jiang", "茴" => "Hui", "茵" => "Yin", "茶" => "Cha", "茷" => "Fa",
+ "茸" => "Rong", "茹" => "Ru", "茺" => "Chong", "茻" => "Mang", "茼" => "Tong", "茽" => "Zhong",
+ "茿" => "Zhu", "è€" => "Xun", "è" => "Huan", "è‚" => "Kua", "èƒ" => "Quan", "è„" => "Gai",
+ "è…" => "Da", "è†" => "Jing", "è‡" => "Xing", "èˆ" => "Quan", "è‰" => "Cao", "è" => "Jing",
+ "è‹" => "Er", "èŒ" => "An", "è" => "Shou", "è" => "Chi", "è" => "Ren", "è" => "Jian",
+ "è‘" => "Ti", "è’" => "Huang", "è“" => "Ping", "è”" => "Li", "è•" => "Jin", "è–" => "Lao",
+ "è—" => "Shu", "è˜" => "Zhuang", "è™" => "Da", "è" => "Jia", "è›" => "Rao", "èœ" => "Bi",
+ "è" => "Ze", "è" => "Qiao", "èŸ" => "Hui", "è " => "Qi", "è¡" => "Dang", "è£" => "Rong",
+ "è¤" => "Hun", "è¥" => "Ying", "è¦" => "Luo", "è§" => "Ying", "è¨" => "Xun", "è©" => "Jin",
+ "èª" => "Sun", "è«" => "Yin", "è¬" => "Mai", "è" => "Hong", "è®" => "Zhou", "è¯" => "Yao",
+ "è°" => "Du", "è±" => "Wei", "è²" => "Chu", "è³" => "Dou", "è´" => "Fu", "èµ" => "Ren",
+ "è¶" => "Yin", "è·" => "He", "è¸" => "Bi", "è¹" => "Bu", "èº" => "Yun", "è»" => "Di",
+ "è¼" => "Tu", "è½" => "Sui", "è¾" => "Sui", "è¿" => "Cheng", "è€" => "Chen", "è" => "Wu",
+ "è‚" => "Bie", "èƒ" => "Xi", "è„" => "Geng", "è…" => "Li", "è†" => "Fu", "è‡" => "Zhu",
+ "èˆ" => "Mo", "è‰" => "Li", "è" => "Zhuang", "è‹" => "Ji", "èŒ" => "Duo", "è" => "Qiu",
+ "è" => "Sha", "è" => "Suo", "è" => "Chen", "è‘" => "Feng", "è’" => "Ju", "è“" => "Mei",
+ "è”" => "Meng", "è•" => "Xing", "è–" => "Jing", "è—" => "Che", "è˜" => "Xin", "è™" => "Jun",
+ "è" => "Yan", "è›" => "Ting", "èœ" => "Diao", "è" => "Cuo", "è" => "Wan", "èŸ" => "Han",
+ "è " => "You", "è¡" => "Cuo", "è¢" => "Jia", "è£" => "Wang", "è¤" => "You", "è¥" => "Niu",
+ "è¦" => "Shao", "è§" => "Xian", "è¨" => "Lang", "è©" => "Fu", "èª" => "E", "è«" => "Mo",
+ "è¬" => "Wen", "è" => "Jie", "è®" => "Nan", "è¯" => "Mu", "è°" => "Kan", "è±" => "Lai",
+ "è²" => "Lian", "è³" => "Shi", "è´" => "Wo", "èµ" => "Usagi", "è¶" => "Lian", "è·" => "Huo",
+ "è¸" => "You", "è¹" => "Ying", "èº" => "Ying", "è»" => "Nuc", "è¼" => "Chun", "è½" => "Mang",
+ "è¾" => "Mang", "è¿" => "Ci", "è€" => "Wan", "è" => "Jing", "è‚" => "Di", "èƒ" => "Qu",
+ "è„" => "Dong", "è…" => "Jian", "è†" => "Zou", "è‡" => "Gu", "èˆ" => "La", "è‰" => "Lu",
+ "è" => "Ju", "è‹" => "Wei", "èŒ" => "Jun", "è" => "Nie", "è" => "Kun", "è" => "He",
+ "è" => "Pu", "è‘" => "Zi", "è’" => "Gao", "è“" => "Guo", "è”" => "Fu", "è•" => "Lun",
+ "è–" => "Chang", "è—" => "Chou", "è˜" => "Song", "è™" => "Chui", "è" => "Zhan", "è›" => "Men",
+ "èœ" => "Cai", "è" => "Ba", "è" => "Li", "èŸ" => "Tu", "è " => "Bo", "è¡" => "Han",
+ "è¢" => "Bao", "è£" => "Qin", "è¤" => "Juan", "è¥" => "Xi", "è¦" => "Qin", "è§" => "Di",
+ "è¨" => "Jie", "è©" => "Pu", "èª" => "Dang", "è«" => "Jin", "è¬" => "Zhao", "è" => "Tai",
+ "è®" => "Geng", "è¯" => "Hua", "è°" => "Gu", "è±" => "Ling", "è²" => "Fei", "è³" => "Jin",
+ "è´" => "An", "èµ" => "Wang", "è¶" => "Beng", "è·" => "Zhou", "è¸" => "Yan", "è¹" => "Ju",
+ "èº" => "Jian", "è»" => "Lin", "è¼" => "Tan", "è½" => "Shu", "è¾" => "Tian", "è¿" => "Dao",
+ "è" => "Qi", "è‚" => "He", "èƒ" => "Cui", "è„" => "Tao", "è…" => "Chun", "è†" => "Bei",
+ "è‡" => "Chang", "èˆ" => "Huan", "è‰" => "Fei", "è" => "Lai", "è‹" => "Qi", "èŒ" => "Meng",
+ "è" => "Ping", "è" => "Wei", "è" => "Dan", "è" => "Sha", "è‘" => "Huan", "è’" => "Yan",
+ "è“" => "Yi", "è”" => "Tiao", "è•" => "Qi", "è–" => "Wan", "è—" => "Ce", "è˜" => "Nai",
+ "è™" => "Kutabireru", "è" => "Tuo", "è›" => "Jiu", "èœ" => "Tie", "è" => "Luo", "è " => "Meng",
+ "è¢" => "Yaji", "è¤" => "Ying", "è¥" => "Ying", "è¦" => "Ying", "è§" => "Xiao", "è¨" => "Sa",
+ "è©" => "Qiu", "èª" => "Ke", "è«" => "Xiang", "è¬" => "Wan", "è" => "Yu", "è®" => "Yu",
+ "è¯" => "Fu", "è°" => "Lian", "è±" => "Xuan", "è²" => "Yuan", "è³" => "Nan", "è´" => "Ze",
+ "èµ" => "Wo", "è¶" => "Chun", "è·" => "Xiao", "è¸" => "Yu", "è¹" => "Pian", "èº" => "Mao",
+ "è»" => "An", "è¼" => "E", "è½" => "Luo", "è¾" => "Ying", "è¿" => "Huo", "è‘€" => "Gua",
+ "è‘" => "Jiang", "è‘‚" => "Mian", "葃" => "Zuo", "è‘„" => "Zuo", "è‘…" => "Ju", "葆" => "Bao",
+ "葇" => "Rou", "葈" => "Xi", "葉" => "Xie", "è‘" => "An", "è‘‹" => "Qu", "è‘Œ" => "Jian",
+ "è‘" => "Fu", "è‘" => "Lu", "è‘" => "Jing", "è‘" => "Pen", "è‘‘" => "Feng", "è‘’" => "Hong",
+ "葓" => "Hong", "葔" => "Hou", "葕" => "Yan", "葖" => "Tu", "著" => "Zhu", "葘" => "Zi",
+ "è‘™" => "Xiang", "è‘" => "Shen", "è‘›" => "Ge", "è‘œ" => "Jie", "è‘" => "Jing", "è‘" => "Mi",
+ "è‘Ÿ" => "Huang", "è‘ " => "Shen", "è‘¡" => "Pu", "è‘¢" => "Gai", "è‘£" => "Dong", "葤" => "Zhou",
+ "葥" => "Qian", "葦" => "Wei", "葧" => "Bo", "葨" => "Wei", "葩" => "Pa", "葪" => "Ji",
+ "è‘«" => "Hu", "葬" => "Zang", "è‘" => "Jia", "è‘®" => "Duan", "葯" => "Yao", "è‘°" => "Jun",
+ "葱" => "Cong", "葲" => "Quan", "葳" => "Wei", "葴" => "Xian", "葵" => "Kui", "葶" => "Ting",
+ "葷" => "Hun", "葸" => "Xi", "葹" => "Shi", "葺" => "Qi", "葻" => "Lan", "葼" => "Zong",
+ "葽" => "Yao", "葾" => "Yuan", "è‘¿" => "Mei", "è’€" => "Yun", "è’" => "Shu", "è’‚" => "Di",
+ "è’ƒ" => "Zhuan", "è’„" => "Guan", "è’…" => "Sukumo", "è’†" => "Xue", "è’‡" => "Chan", "è’ˆ" => "Kai",
+ "è’‰" => "Kui", "è’‹" => "Jiang", "è’Œ" => "Lou", "è’" => "Wei", "è’" => "Pai", "è’" => "Sou",
+ "è’‘" => "Yin", "è’’" => "Shi", "è’“" => "Chun", "è’”" => "Shi", "è’•" => "Yun", "è’–" => "Zhen",
+ "è’—" => "Lang", "è’˜" => "Nu", "è’™" => "Meng", "è’" => "He", "è’›" => "Que", "è’œ" => "Suan",
+ "è’" => "Yuan", "è’" => "Li", "è’Ÿ" => "Ju", "è’ " => "Xi", "è’¡" => "Pang", "è’¢" => "Chu",
+ "è’£" => "Xu", "è’¤" => "Tu", "è’¥" => "Liu", "è’¦" => "Wo", "è’§" => "Zhen", "è’¨" => "Qian",
+ "è’©" => "Zu", "è’ª" => "Po", "è’«" => "Cuo", "è’¬" => "Yuan", "è’" => "Chu", "è’®" => "Yu",
+ "è’¯" => "Kuai", "è’°" => "Pan", "è’±" => "Pu", "è’²" => "Pu", "è’³" => "Na", "è’´" => "Shuo",
+ "è’µ" => "Xi", "è’¶" => "Fen", "è’·" => "Yun", "è’¸" => "Zheng", "è’¹" => "Jian", "è’º" => "Ji",
+ "è’»" => "Ruo", "è’¼" => "Cang", "è’½" => "En", "è’¾" => "Mi", "è’¿" => "Hao", "è“€" => "Sun",
+ "è“" => "Zhen", "è“‚" => "Ming", "蓃" => "Sou", "è“„" => "Xu", "è“…" => "Liu", "蓆" => "Xi",
+ "蓇" => "Gu", "蓈" => "Lang", "蓉" => "Rong", "è“" => "Weng", "è“‹" => "Gai", "è“Œ" => "Cuo",
+ "è“" => "Shi", "è“" => "Tang", "è“" => "Luo", "è“" => "Ru", "è“‘" => "Suo", "è“’" => "Xian",
+ "蓓" => "Bei", "蓔" => "Yao", "蓕" => "Gui", "蓖" => "Bi", "蓗" => "Zong", "蓘" => "Gun",
+ "è“™" => "Za", "è“" => "Xiu", "è“›" => "Ce", "è“œ" => "Hai", "è“" => "Lan", "è“Ÿ" => "Ji",
+ "è“ " => "Li", "è“¡" => "Can", "è“¢" => "Lang", "è“£" => "Yu", "è“¥" => "Ying", "蓦" => "Mo",
+ "蓧" => "Diao", "蓨" => "Tiao", "蓩" => "Mao", "蓪" => "Tong", "蓫" => "Zhu", "蓬" => "Peng",
+ "è“" => "An", "è“®" => "Lian", "蓯" => "Cong", "è“°" => "Xi", "蓱" => "Ping", "蓲" => "Qiu",
+ "蓳" => "Jin", "蓴" => "Chun", "蓵" => "Jie", "蓶" => "Wei", "蓷" => "Tui", "蓸" => "Cao",
+ "蓹" => "Yu", "蓺" => "Yi", "蓻" => "Ji", "蓼" => "Liao", "蓽" => "Bi", "蓾" => "Lu",
+ "è“¿" => "Su", "è”" => "Zhang", "蔂" => "Luo", "蔃" => "Jiang", "蔄" => "Man", "è”…" => "Yan",
+ "蔆" => "Ling", "蔇" => "Ji", "蔈" => "Piao", "蔉" => "Gun", "è”" => "Han", "蔋" => "Di",
+ "蔌" => "Su", "è”" => "Lu", "è”" => "She", "è”" => "Shang", "è”" => "Di", "蔑" => "Mie",
+ "蔒" => "Xun", "蔓" => "Man", "蔔" => "Bo", "蔕" => "Di", "蔖" => "Cuo", "蔗" => "Zhe",
+ "蔘" => "Sen", "è”™" => "Xuan", "è”" => "Wei", "è”›" => "Hu", "蔜" => "Ao", "è”" => "Mi",
+ "è”" => "Lou", "蔟" => "Cu", "è” " => "Zhong", "蔡" => "Cai", "蔢" => "Po", "蔣" => "Jiang",
+ "蔤" => "Mi", "蔥" => "Cong", "蔦" => "Niao", "蔧" => "Hui", "蔨" => "Jun", "蔩" => "Yin",
+ "蔪" => "Jian", "蔫" => "Yan", "蔬" => "Shu", "è”" => "Yin", "è”®" => "Kui", "蔯" => "Chen",
+ "蔰" => "Hu", "蔱" => "Sha", "蔲" => "Kou", "蔳" => "Qian", "蔴" => "Ma", "蔵" => "Zang",
+ "蔶" => "Sonoko", "蔷" => "Qiang", "蔸" => "Dou", "蔹" => "Lian", "蔺" => "Lin", "蔻" => "Kou",
+ "蔼" => "Ai", "蔽" => "Bi", "蔾" => "Li", "蔿" => "Wei", "è•€" => "Ji", "è•" => "Xun",
+ "蕂" => "Sheng", "蕃" => "Fan", "蕄" => "Meng", "蕅" => "Ou", "蕆" => "Chan", "蕇" => "Dian",
+ "蕈" => "Xun", "蕉" => "Jiao", "è•" => "Rui", "è•‹" => "Rui", "è•Œ" => "Lei", "è•" => "Yu",
+ "è•" => "Qiao", "è•" => "Chu", "è•" => "Hua", "è•‘" => "Jian", "è•’" => "Mai", "è•“" => "Yun",
+ "蕔" => "Bao", "蕕" => "You", "蕖" => "Qu", "蕗" => "Lu", "蕘" => "Rao", "蕙" => "Hui",
+ "è•" => "E", "è•›" => "Teng", "è•œ" => "Fei", "è•" => "Jue", "è•" => "Zui", "è•Ÿ" => "Fa",
+ "è• " => "Ru", "è•¡" => "Fen", "è•¢" => "Kui", "è•£" => "Shun", "蕤" => "Rui", "è•¥" => "Ya",
+ "蕦" => "Xu", "蕧" => "Fu", "蕨" => "Jue", "蕩" => "Dang", "蕪" => "Wu", "蕫" => "Tong",
+ "蕬" => "Si", "è•" => "Xiao", "è•®" => "Xi", "蕯" => "Long", "è•°" => "Yun", "蕲" => "Qi",
+ "蕳" => "Jian", "蕴" => "Yun", "蕵" => "Sun", "蕶" => "Ling", "蕷" => "Yu", "蕸" => "Xia",
+ "蕹" => "Yong", "蕺" => "Ji", "蕻" => "Hong", "蕼" => "Si", "蕽" => "Nong", "蕾" => "Lei",
+ "è•¿" => "Xuan", "è–€" => "Yun", "è–" => "Yu", "è–‚" => "Xi", "è–ƒ" => "Hao", "è–„" => "Bo",
+ "è–…" => "Hao", "è–†" => "Ai", "è–‡" => "Wei", "è–ˆ" => "Hui", "è–‰" => "Wei", "è–" => "Ji",
+ "è–‹" => "Ci", "è–Œ" => "Xiang", "è–" => "Luan", "è–" => "Mie", "è–" => "Yi", "è–" => "Leng",
+ "è–‘" => "Jiang", "è–’" => "Can", "è–“" => "Shen", "è–”" => "Qiang", "è–•" => "Lian", "è––" => "Ke",
+ "è–—" => "Yuan", "è–˜" => "Da", "è–™" => "Ti", "è–" => "Tang", "è–›" => "Xie", "è–œ" => "Bi",
+ "è–" => "Zhan", "è–" => "Sun", "è–Ÿ" => "Lian", "è– " => "Fan", "è–¡" => "Ding", "è–¢" => "Jie",
+ "è–£" => "Gu", "è–¤" => "Xie", "è–¥" => "Shu", "è–¦" => "Jian", "è–§" => "Kao", "è–¨" => "Hong",
+ "è–©" => "Sa", "è–ª" => "Xin", "è–«" => "Xun", "è–¬" => "Yao", "è–" => "Hie", "è–®" => "Sou",
+ "è–¯" => "Shu", "è–°" => "Xun", "è–±" => "Dui", "è–²" => "Pin", "è–³" => "Wei", "è–´" => "Neng",
+ "è–µ" => "Chou", "è–¶" => "Mai", "è–·" => "Ru", "è–¸" => "Piao", "è–¹" => "Tai", "è–º" => "Qi",
+ "è–»" => "Zao", "è–¼" => "Chen", "è–½" => "Zhen", "è–¾" => "Er", "è–¿" => "Ni", "è—€" => "Ying",
+ "è—" => "Gao", "è—‚" => "Cong", "è—ƒ" => "Xiao", "è—„" => "Qi", "è—…" => "Fa", "è—†" => "Jian",
+ "è—‡" => "Xu", "è—ˆ" => "Kui", "è—‰" => "Jie", "è—" => "Bian", "è—‹" => "Diao", "è—Œ" => "Mi",
+ "è—" => "Lan", "è—" => "Jin", "è—" => "Cang", "è—" => "Miao", "è—‘" => "Qiong", "è—’" => "Qie",
+ "è—“" => "Xian", "è—•" => "Ou", "è—–" => "Xian", "è——" => "Su", "è—˜" => "Lu", "è—™" => "Yi",
+ "è—" => "Xu", "è—›" => "Xie", "è—œ" => "Li", "è—" => "Yi", "è—" => "La", "è—Ÿ" => "Lei",
+ "è— " => "Xiao", "è—¡" => "Di", "è—¢" => "Zhi", "è—£" => "Bei", "è—¤" => "Teng", "è—¥" => "Yao",
+ "è—¦" => "Mo", "è—§" => "Huan", "è—¨" => "Piao", "è—©" => "Fan", "è—ª" => "Sou", "è—«" => "Tan",
+ "è—¬" => "Tui", "è—" => "Qiong", "è—®" => "Qiao", "è—¯" => "Wei", "è—°" => "Liu", "è—±" => "Hui",
+ "è—³" => "Gao", "è—´" => "Yun", "è—¶" => "Li", "è—·" => "Shu", "è—¸" => "Chu", "è—¹" => "Ai",
+ "è—º" => "Lin", "è—»" => "Zao", "è—¼" => "Xuan", "è—½" => "Chen", "è—¾" => "Lai", "è—¿" => "Huo",
+ "è˜" => "Wu", "蘂" => "Rui", "蘃" => "Rui", "蘄" => "Qi", "蘅" => "Heng", "蘆" => "Lu",
+ "蘇" => "Su", "蘈" => "Tui", "蘉" => "Mang", "è˜" => "Yun", "蘋" => "Pin", "蘌" => "Yu",
+ "è˜" => "Xun", "è˜" => "Ji", "è˜" => "Jiong", "è˜" => "Xian", "蘑" => "Mo", "蘒" => "Hagi",
+ "蘓" => "Su", "蘔" => "Jiong", "蘖" => "Nie", "蘗" => "Bo", "蘘" => "Rang", "蘙" => "Yi",
+ "è˜" => "Xian", "蘛" => "Yu", "蘜" => "Ju", "è˜" => "Lian", "è˜" => "Lian", "蘟" => "Yin",
+ "è˜ " => "Qiang", "蘡" => "Ying", "蘢" => "Long", "蘣" => "Tong", "蘤" => "Wei", "蘥" => "Yue",
+ "蘦" => "Ling", "蘧" => "Qu", "蘨" => "Yao", "蘩" => "Fan", "蘪" => "Mi", "蘫" => "Lan",
+ "蘬" => "Kui", "è˜" => "Lan", "蘮" => "Ji", "蘯" => "Dang", "蘰" => "Katsura", "蘱" => "Lei",
+ "蘲" => "Lei", "蘳" => "Hua", "蘴" => "Feng", "蘵" => "Zhi", "蘶" => "Wei", "蘷" => "Kui",
+ "蘸" => "Zhan", "蘹" => "Huai", "蘺" => "Li", "蘻" => "Ji", "蘼" => "Mi", "蘽" => "Lei",
+ "蘾" => "Huai", "蘿" => "Luo", "虀" => "Ji", "è™" => "Kui", "虂" => "Lu", "虃" => "Jian",
+ "虄" => "San", "虆" => "Lei", "虇" => "Quan", "虈" => "Xiao", "虉" => "Yi", "è™" => "Luan",
+ "虋" => "Men", "虌" => "Bie", "è™" => "Hu", "è™" => "Hu", "è™" => "Lu", "è™" => "Nue",
+ "虑" => "Lu", "虒" => "Si", "虓" => "Xiao", "虔" => "Qian", "處" => "Chu", "虖" => "Hu",
+ "è™—" => "Xu", "虘" => "Cuo", "è™™" => "Fu", "è™" => "Xu", "è™›" => "Xu", "虜" => "Lu",
+ "è™" => "Hu", "è™" => "Yu", "號" => "Hao", "è™ " => "Jiao", "虡" => "Ju", "虢" => "Guo",
+ "虣" => "Bao", "虤" => "Yan", "虥" => "Zhan", "虦" => "Zhan", "虧" => "Kui", "虨" => "Ban",
+ "虩" => "Xi", "虪" => "Shu", "虫" => "Chong", "虬" => "Qiu", "è™" => "Diao", "è™®" => "Ji",
+ "虯" => "Qiu", "虰" => "Cheng", "虱" => "Shi", "虳" => "Di", "虴" => "Zhe", "虵" => "She",
+ "虶" => "Yu", "虷" => "Gan", "虸" => "Zi", "虹" => "Hong", "虺" => "Hui", "虻" => "Meng",
+ "虼" => "Ge", "虽" => "Sui", "虾" => "Xia", "虿" => "Chai", "è€" => "Shi", "è" => "Yi",
+ "è‚" => "Ma", "èƒ" => "Xiang", "è„" => "Fang", "è…" => "E", "è†" => "Pa", "è‡" => "Chi",
+ "èˆ" => "Qian", "è‰" => "Wen", "è" => "Wen", "è‹" => "Rui", "èŒ" => "Bang", "è" => "Bi",
+ "è" => "Yue", "è" => "Yue", "è" => "Jun", "è‘" => "Qi", "è’" => "Ran", "è“" => "Yin",
+ "è”" => "Qi", "è•" => "Tian", "è–" => "Yuan", "è—" => "Jue", "è˜" => "Hui", "è™" => "Qin",
+ "è" => "Qi", "è›" => "Zhong", "èœ" => "Ya", "è" => "Ci", "è" => "Mu", "èŸ" => "Wang",
+ "è " => "Fen", "è¡" => "Fen", "è¢" => "Hang", "è£" => "Gong", "è¤" => "Zao", "è¥" => "Fu",
+ "è¦" => "Ran", "è§" => "Jie", "è¨" => "Fu", "è©" => "Chi", "èª" => "Dou", "è«" => "Piao",
+ "è¬" => "Xian", "è" => "Ni", "è®" => "Te", "è¯" => "Qiu", "è°" => "You", "è±" => "Zha",
+ "è²" => "Ping", "è³" => "Chi", "è´" => "You", "èµ" => "He", "è¶" => "Han", "è·" => "Ju",
+ "è¸" => "Li", "è¹" => "Fu", "èº" => "Ran", "è»" => "Zha", "è¼" => "Gou", "è½" => "Pi",
+ "è¾" => "Bo", "è¿" => "Xian", "蛀" => "Zhu", "è›" => "Diao", "蛂" => "Bie", "蛃" => "Bing",
+ "蛄" => "Gu", "蛅" => "Ran", "蛆" => "Qu", "蛇" => "She", "蛈" => "Tie", "蛉" => "Ling",
+ "è›" => "Gu", "蛋" => "Dan", "蛌" => "Gu", "è›" => "Ying", "è›" => "Li", "è›" => "Cheng",
+ "è›" => "Qu", "蛑" => "Mou", "è›’" => "Ge", "蛓" => "Ci", "è›”" => "Hui", "蛕" => "Hui",
+ "è›–" => "Mang", "è›—" => "Fu", "蛘" => "Yang", "è›™" => "Wa", "è›" => "Lie", "è››" => "Zhu",
+ "蛜" => "Yi", "è›" => "Xian", "è›" => "Kuo", "蛟" => "Jiao", "è› " => "Li", "蛡" => "Yi",
+ "蛢" => "Ping", "蛣" => "Ji", "蛤" => "Ha", "蛥" => "She", "蛦" => "Yi", "蛧" => "Wang",
+ "蛨" => "Mo", "蛩" => "Qiong", "蛪" => "Qie", "蛫" => "Gui", "蛬" => "Gong", "è›" => "Zhi",
+ "蛮" => "Man", "蛯" => "Ebi", "蛰" => "Zhi", "蛱" => "Jia", "蛲" => "Rao", "蛳" => "Si",
+ "蛴" => "Qi", "蛵" => "Xing", "蛶" => "Lie", "蛷" => "Qiu", "蛸" => "Shao", "蛹" => "Yong",
+ "蛺" => "Jia", "蛻" => "Shui", "蛼" => "Che", "蛽" => "Bai", "蛾" => "E", "蛿" => "Han",
+ "èœ" => "Xuan", "蜂" => "Feng", "蜃" => "Shen", "蜄" => "Zhen", "蜅" => "Fu", "蜆" => "Xian",
+ "蜇" => "Zhe", "蜈" => "Wu", "蜉" => "Fu", "èœ" => "Li", "蜋" => "Lang", "蜌" => "Bi",
+ "èœ" => "Chu", "èœ" => "Yuan", "èœ" => "You", "èœ" => "Jie", "蜑" => "Dan", "蜒" => "Yan",
+ "蜓" => "Ting", "蜔" => "Dian", "蜕" => "Shui", "蜖" => "Hui", "蜗" => "Gua", "蜘" => "Zhi",
+ "蜙" => "Song", "èœ" => "Fei", "蜛" => "Ju", "蜜" => "Mi", "èœ" => "Qi", "èœ" => "Qi",
+ "蜟" => "Yu", "èœ " => "Jun", "蜡" => "Zha", "蜢" => "Meng", "蜣" => "Qiang", "蜤" => "Si",
+ "蜥" => "Xi", "蜦" => "Lun", "蜧" => "Li", "蜨" => "Die", "蜩" => "Tiao", "蜪" => "Tao",
+ "蜫" => "Kun", "蜬" => "Gan", "èœ" => "Han", "蜮" => "Yu", "蜯" => "Bang", "蜰" => "Fei",
+ "蜱" => "Pi", "蜲" => "Wei", "蜳" => "Dun", "蜴" => "Yi", "蜵" => "Yuan", "蜶" => "Su",
+ "蜷" => "Quan", "蜸" => "Qian", "蜹" => "Rui", "蜺" => "Ni", "蜻" => "Qing", "蜼" => "Wei",
+ "蜽" => "Liang", "蜾" => "Guo", "蜿" => "Wan", "è€" => "Dong", "è" => "E", "è‚" => "Ban",
+ "èƒ" => "Di", "è„" => "Wang", "è…" => "Can", "è†" => "Yang", "è‡" => "Ying", "èˆ" => "Guo",
+ "è‰" => "Chan", "è‹" => "La", "èŒ" => "Ke", "è" => "Ji", "è" => "He", "è" => "Ting",
+ "è" => "Mai", "è‘" => "Xu", "è’" => "Mian", "è“" => "Yu", "è”" => "Jie", "è•" => "Shi",
+ "è–" => "Xuan", "è—" => "Huang", "è˜" => "Yan", "è™" => "Bian", "è" => "Rou", "è›" => "Wei",
+ "èœ" => "Fu", "è" => "Yuan", "è" => "Mei", "èŸ" => "Wei", "è " => "Fu", "è¡" => "Ruan",
+ "è¢" => "Xie", "è£" => "You", "è¤" => "Qiu", "è¥" => "Mao", "è¦" => "Xia", "è§" => "Ying",
+ "è¨" => "Shi", "è©" => "Chong", "èª" => "Tang", "è«" => "Zhu", "è¬" => "Zong", "è" => "Ti",
+ "è®" => "Fu", "è¯" => "Yuan", "è°" => "Hui", "è±" => "Meng", "è²" => "La", "è³" => "Du",
+ "è´" => "Hu", "èµ" => "Qiu", "è¶" => "Die", "è·" => "Li", "è¸" => "Gua", "è¹" => "Yun",
+ "èº" => "Ju", "è»" => "Nan", "è¼" => "Lou", "è½" => "Qun", "è¾" => "Rong", "è¿" => "Ying",
+ "è€" => "Jiang", "è‚" => "Lang", "èƒ" => "Pang", "è„" => "Si", "è…" => "Xi", "è†" => "Ci",
+ "è‡" => "Xi", "èˆ" => "Yuan", "è‰" => "Weng", "è" => "Lian", "è‹" => "Sou", "èŒ" => "Ban",
+ "è" => "Rong", "è" => "Rong", "è" => "Ji", "è" => "Wu", "è‘" => "Qiu", "è’" => "Han",
+ "è“" => "Qin", "è”" => "Yi", "è•" => "Bi", "è–" => "Hua", "è—" => "Tang", "è˜" => "Yi",
+ "è™" => "Du", "è" => "Nai", "è›" => "He", "èœ" => "Hu", "è" => "Hui", "è" => "Ma",
+ "èŸ" => "Ming", "è " => "Yi", "è¡" => "Wen", "è¢" => "Ying", "è£" => "Teng", "è¤" => "Yu",
+ "è¥" => "Cang", "è¦" => "So", "è§" => "Ebi", "è¨" => "Man", "èª" => "Shang", "è«" => "Zhe",
+ "è¬" => "Cao", "è" => "Chi", "è®" => "Di", "è¯" => "Ao", "è°" => "Lu", "è±" => "Wei",
+ "è²" => "Zhi", "è³" => "Tang", "è´" => "Chen", "èµ" => "Piao", "è¶" => "Qu", "è·" => "Pi",
+ "è¸" => "Yu", "è¹" => "Jian", "èº" => "Luo", "è»" => "Lou", "è¼" => "Qin", "è½" => "Zhong",
+ "è¾" => "Yin", "è¿" => "Jiang", "蟀" => "Shuai", "èŸ" => "Wen", "蟂" => "Jiao", "蟃" => "Wan",
+ "蟄" => "Zhi", "蟅" => "Zhe", "蟆" => "Ma", "蟇" => "Ma", "蟈" => "Guo", "蟉" => "Liu",
+ "èŸ" => "Mao", "蟋" => "Xi", "蟌" => "Cong", "èŸ" => "Li", "èŸ" => "Man", "èŸ" => "Xiao",
+ "èŸ" => "Kamakiri", "蟑" => "Zhang", "蟒" => "Mang", "蟓" => "Xiang", "蟔" => "Mo", "蟕" => "Zui",
+ "蟖" => "Si", "蟗" => "Qiu", "蟘" => "Te", "蟙" => "Zhi", "èŸ" => "Peng", "蟛" => "Peng",
+ "蟜" => "Jiao", "èŸ" => "Qu", "èŸ" => "Bie", "蟟" => "Liao", "èŸ " => "Pan", "蟡" => "Gui",
+ "蟢" => "Xi", "蟣" => "Ji", "蟤" => "Zhuan", "蟥" => "Huang", "蟦" => "Fei", "蟧" => "Lao",
+ "蟨" => "Jue", "蟩" => "Jue", "蟪" => "Hui", "蟫" => "Yin", "蟬" => "Chan", "èŸ" => "Jiao",
+ "蟮" => "Shan", "蟯" => "Rao", "蟰" => "Xiao", "蟱" => "Mou", "蟲" => "Chong", "蟳" => "Xun",
+ "蟴" => "Si", "蟶" => "Cheng", "蟷" => "Dang", "蟸" => "Li", "蟹" => "Xie", "蟺" => "Shan",
+ "蟻" => "Yi", "蟼" => "Jing", "蟽" => "Da", "蟾" => "Chan", "蟿" => "Qi", "è " => "Xiang",
+ "è ‚" => "She", "è ƒ" => "Luo", "è „" => "Qin", "è …" => "Ying", "è †" => "Chai", "è ‡" => "Li",
+ "è ˆ" => "Ze", "è ‰" => "Xuan", "è " => "Lian", "è ‹" => "Zhu", "è Œ" => "Ze", "è " => "Xie",
+ "è " => "Mang", "è " => "Xie", "è " => "Qi", "è ‘" => "Rong", "è ’" => "Jian", "è “" => "Meng",
+ "è ”" => "Hao", "è •" => "Ruan", "è –" => "Huo", "è —" => "Zhuo", "è ˜" => "Jie", "è ™" => "Bin",
+ "è " => "He", "è ›" => "Mie", "è œ" => "Fan", "è " => "Lei", "è " => "Jie", "è Ÿ" => "La",
+ "è " => "Mi", "è ¡" => "Li", "è ¢" => "Chun", "è £" => "Li", "è ¤" => "Qiu", "è ¥" => "Nie",
+ "è ¦" => "Lu", "è §" => "Du", "è ¨" => "Xiao", "è ©" => "Zhu", "è ª" => "Long", "è «" => "Li",
+ "è ¬" => "Long", "è " => "Feng", "è ®" => "Ye", "è ¯" => "Beng", "è °" => "Shang", "è ±" => "Gu",
+ "è ²" => "Juan", "è ³" => "Ying", "è µ" => "Xi", "è ¶" => "Can", "è ·" => "Qu", "è ¸" => "Quan",
+ "è ¹" => "Du", "è º" => "Can", "è »" => "Man", "è ¼" => "Jue", "è ½" => "Jie", "è ¾" => "Zhu",
+ "è ¿" => "Zha", "è¡€" => "Xie", "è¡" => "Huang", "è¡‚" => "Niu", "衃" => "Pei", "è¡„" => "Nu",
+ "è¡…" => "Xin", "衆" => "Zhong", "衇" => "Mo", "衈" => "Er", "衉" => "Ke", "è¡" => "Mie",
+ "è¡‹" => "Xi", "è¡Œ" => "Xing", "è¡" => "Yan", "è¡" => "Kan", "è¡" => "Yuan", "è¡‘" => "Ling",
+ "è¡’" => "Xuan", "è¡“" => "Shu", "è¡”" => "Xian", "è¡•" => "Tong", "è¡–" => "Long", "è¡—" => "Jie",
+ "衘" => "Xian", "è¡™" => "Ya", "è¡" => "Hu", "è¡›" => "Wei", "è¡œ" => "Dao", "è¡" => "Chong",
+ "è¡" => "Wei", "è¡Ÿ" => "Dao", "è¡ " => "Zhun", "è¡¡" => "Heng", "è¡¢" => "Qu", "è¡£" => "Yi",
+ "衤" => "Yi", "补" => "Bu", "衦" => "Gan", "衧" => "Yu", "表" => "Biao", "衩" => "Cha",
+ "衪" => "Yi", "è¡«" => "Shan", "衬" => "Chen", "è¡" => "Fu", "è¡®" => "Gun", "衯" => "Fen",
+ "衰" => "Shuai", "衱" => "Jie", "衲" => "Na", "衳" => "Zhong", "衴" => "Dan", "衵" => "Ri",
+ "衶" => "Zhong", "衷" => "Zhong", "衸" => "Xie", "衹" => "Qi", "衺" => "Xie", "衻" => "Ran",
+ "衼" => "Zhi", "衽" => "Ren", "衾" => "Qin", "è¡¿" => "Jin", "袀" => "Jun", "è¢" => "Yuan",
+ "袂" => "Mei", "袃" => "Chai", "袄" => "Ao", "袅" => "Niao", "袆" => "Hui", "袇" => "Ran",
+ "袈" => "Jia", "袉" => "Tuo", "è¢" => "Ling", "袋" => "Dai", "袌" => "Bao", "è¢" => "Pao",
+ "è¢" => "Yao", "è¢" => "Zuo", "è¢" => "Bi", "袑" => "Shao", "袒" => "Tan", "袓" => "Ju",
+ "袔" => "He", "袕" => "Shu", "袖" => "Xiu", "袗" => "Zhen", "袘" => "Yi", "袙" => "Pa",
+ "è¢" => "Bo", "袛" => "Di", "袜" => "Wa", "è¢" => "Fu", "è¢" => "Gun", "袟" => "Zhi",
+ "è¢ " => "Zhi", "袡" => "Ran", "袢" => "Pan", "袣" => "Yi", "袤" => "Mao", "袥" => "Tuo",
+ "袦" => "Na", "袧" => "Kou", "袨" => "Xian", "袩" => "Chan", "袪" => "Qu", "被" => "Bei",
+ "袬" => "Gun", "è¢" => "Xi", "袮" => "Ne", "袯" => "Bo", "袰" => "Horo", "袱" => "Fu",
+ "袲" => "Yi", "袳" => "Chi", "袴" => "Ku", "袵" => "Ren", "袶" => "Jiang", "袷" => "Jia",
+ "袸" => "Cun", "袹" => "Mo", "袺" => "Jie", "袻" => "Er", "袼" => "Luo", "袽" => "Ru",
+ "袾" => "Zhu", "袿" => "Gui", "裀" => "Yin", "è£" => "Cai", "裂" => "Lie", "裃" => "Kamishimo",
+ "裄" => "Yuki", "装" => "Zhuang", "裆" => "Dang", "裈" => "Kun", "裉" => "Ken", "è£" => "Niao",
+ "裋" => "Shu", "裌" => "Jia", "è£" => "Kun", "è£" => "Cheng", "è£" => "Li", "è£" => "Juan",
+ "裑" => "Shen", "裒" => "Pou", "裓" => "Ge", "裔" => "Yi", "裕" => "Yu", "裖" => "Zhen",
+ "裗" => "Liu", "裘" => "Qiu", "裙" => "Qun", "è£" => "Ji", "裛" => "Yi", "補" => "Bu",
+ "è£" => "Zhuang", "è£" => "Shui", "裟" => "Sha", "è£ " => "Qun", "裡" => "Li", "裢" => "Lian",
+ "裣" => "Lian", "裤" => "Ku", "裥" => "Jian", "裦" => "Fou", "裧" => "Chan", "裨" => "Bi",
+ "裩" => "Gun", "裪" => "Tao", "裫" => "Yuan", "裬" => "Ling", "è£" => "Chi", "裮" => "Chang",
+ "裯" => "Chou", "裰" => "Duo", "裱" => "Biao", "裲" => "Liang", "裳" => "Chang", "裴" => "Pei",
+ "裵" => "Pei", "裶" => "Fei", "裷" => "Yuan", "裸" => "Luo", "裹" => "Guo", "裺" => "Yan",
+ "裻" => "Du", "裼" => "Xi", "製" => "Zhi", "裾" => "Ju", "裿" => "Qi", "è¤" => "Zhi",
+ "褂" => "Gua", "褃" => "Ken", "褄" => "Che", "褅" => "Ti", "褆" => "Ti", "複" => "Fu",
+ "褈" => "Chong", "褉" => "Xie", "è¤" => "Bian", "褋" => "Die", "褌" => "Kun", "è¤" => "Duan",
+ "è¤" => "Xiu", "è¤" => "Xiu", "è¤" => "He", "褑" => "Yuan", "褒" => "Bao", "褓" => "Bao",
+ "褔" => "Fu", "褕" => "Yu", "褖" => "Tuan", "褗" => "Yan", "褘" => "Hui", "褙" => "Bei",
+ "è¤" => "Chu", "褛" => "Lu", "褜" => "Ena", "è¤" => "Hitoe", "è¤" => "Yun", "褟" => "Da",
+ "è¤ " => "Gou", "褡" => "Da", "褢" => "Huai", "褣" => "Rong", "褤" => "Yuan", "褥" => "Ru",
+ "褦" => "Nai", "褧" => "Jiong", "褨" => "Suo", "褩" => "Ban", "褪" => "Tun", "褫" => "Chi",
+ "褬" => "Sang", "è¤" => "Niao", "褮" => "Ying", "褯" => "Jie", "褰" => "Qian", "褱" => "Huai",
+ "褲" => "Ku", "褳" => "Lian", "褴" => "Bao", "褵" => "Li", "褶" => "Zhe", "褷" => "Shi",
+ "褸" => "Lu", "褹" => "Yi", "褺" => "Die", "褻" => "Xie", "褼" => "Xian", "褽" => "Wei",
+ "褾" => "Biao", "褿" => "Cao", "襀" => "Ji", "è¥" => "Jiang", "襂" => "Sen", "襃" => "Bao",
+ "襄" => "Xiang", "襅" => "Chihaya", "襆" => "Pu", "襇" => "Jian", "襈" => "Zhuan", "襉" => "Jian",
+ "è¥" => "Zui", "襋" => "Ji", "襌" => "Dan", "è¥" => "Za", "è¥" => "Fan", "è¥" => "Bo",
+ "è¥" => "Xiang", "襑" => "Xin", "襒" => "Bie", "襓" => "Rao", "襔" => "Man", "襕" => "Lan",
+ "襖" => "Ao", "襗" => "Duo", "襘" => "Gui", "襙" => "Cao", "è¥" => "Sui", "襛" => "Nong",
+ "襜" => "Chan", "è¥" => "Lian", "è¥" => "Bi", "襟" => "Jin", "è¥ " => "Dang", "襡" => "Shu",
+ "襢" => "Tan", "襣" => "Bi", "襤" => "Lan", "襥" => "Pu", "襦" => "Ru", "襧" => "Zhi",
+ "襩" => "Shu", "襪" => "Wa", "襫" => "Shi", "襬" => "Bai", "è¥" => "Xie", "襮" => "Bo",
+ "襯" => "Chen", "襰" => "Lai", "襱" => "Long", "襲" => "Xi", "襳" => "Xian", "襴" => "Lan",
+ "襵" => "Zhe", "襶" => "Dai", "襷" => "Tasuki", "襸" => "Zan", "襹" => "Shi", "襺" => "Jian",
+ "襻" => "Pan", "襼" => "Yi", "襽" => "Ran", "襾" => "Ya", "西" => "Xi", "覀" => "Xi",
+ "è¦" => "Yao", "覂" => "Feng", "覃" => "Tan", "覅" => "Biao", "覆" => "Fu", "覇" => "Ba",
+ "覈" => "He", "覉" => "Ji", "è¦" => "Ji", "見" => "Jian", "覌" => "Guan", "è¦" => "Bian",
+ "è¦" => "Yan", "è¦" => "Gui", "è¦" => "Jue", "覑" => "Pian", "覒" => "Mao", "覓" => "Mi",
+ "覔" => "Mi", "覕" => "Mie", "視" => "Shi", "覗" => "Si", "覘" => "Zhan", "覙" => "Luo",
+ "è¦" => "Jue", "覛" => "Mi", "覜" => "Tiao", "è¦" => "Lian", "è¦" => "Yao", "覟" => "Zhi",
+ "è¦ " => "Jun", "覡" => "Xi", "覢" => "Shan", "覣" => "Wei", "覤" => "Xi", "覥" => "Tian",
+ "覦" => "Yu", "覧" => "Lan", "覨" => "E", "覩" => "Du", "親" => "Qin", "覫" => "Pang",
+ "覬" => "Ji", "è¦" => "Ming", "覮" => "Ying", "覯" => "Gou", "覰" => "Qu", "覱" => "Zhan",
+ "覲" => "Jin", "観" => "Guan", "覴" => "Deng", "覵" => "Jian", "覶" => "Luo", "覷" => "Qu",
+ "覸" => "Jian", "覹" => "Wei", "覺" => "Jue", "覻" => "Qu", "覼" => "Luo", "覽" => "Lan",
+ "覾" => "Shen", "覿" => "Di", "觀" => "Guan", "è§" => "Jian", "观" => "Guan", "觃" => "Yan",
+ "规" => "Gui", "觅" => "Mi", "视" => "Shi", "觇" => "Zhan", "览" => "Lan", "觉" => "Jue",
+ "è§" => "Ji", "觋" => "Xi", "觌" => "Di", "è§" => "Tian", "è§" => "Yu", "è§" => "Gou",
+ "è§" => "Jin", "觑" => "Qu", "角" => "Jiao", "觓" => "Jiu", "觔" => "Jin", "觕" => "Cu",
+ "觖" => "Jue", "觗" => "Zhi", "觘" => "Chao", "觙" => "Ji", "è§" => "Gu", "觛" => "Dan",
+ "觜" => "Zui", "è§" => "Di", "è§" => "Shang", "觟" => "Hua", "è§ " => "Quan", "觡" => "Ge",
+ "觢" => "Chi", "解" => "Jie", "觤" => "Gui", "觥" => "Gong", "触" => "Hong", "觧" => "Jie",
+ "觨" => "Hun", "觩" => "Qiu", "觪" => "Xing", "觫" => "Su", "觬" => "Ni", "è§" => "Ji",
+ "觮" => "Lu", "觯" => "Zhi", "觰" => "Zha", "觱" => "Bi", "觲" => "Xing", "觳" => "Hu",
+ "觴" => "Shang", "觵" => "Gong", "觶" => "Zhi", "觷" => "Xue", "觸" => "Chu", "觹" => "Xi",
+ "觺" => "Yi", "觻" => "Lu", "觼" => "Jue", "觽" => "Xi", "觾" => "Yan", "觿" => "Xi",
+ "è¨" => "Yan", "訂" => "Ding", "訃" => "Fu", "訄" => "Qiu", "訅" => "Qiu", "訆" => "Jiao",
+ "訇" => "Hong", "計" => "Ji", "訉" => "Fan", "è¨" => "Xun", "訋" => "Diao", "訌" => "Hong",
+ "è¨" => "Cha", "è¨" => "Tao", "è¨" => "Xu", "è¨" => "Jie", "訑" => "Yi", "訒" => "Ren",
+ "訓" => "Xun", "訔" => "Yin", "訕" => "Shan", "訖" => "Qi", "託" => "Tuo", "記" => "Ji",
+ "訙" => "Xun", "è¨" => "Yin", "訛" => "E", "訜" => "Fen", "è¨" => "Ya", "è¨" => "Yao",
+ "訟" => "Song", "è¨ " => "Shen", "訡" => "Yin", "訢" => "Xin", "訣" => "Jue", "訤" => "Xiao",
+ "訥" => "Ne", "訦" => "Chen", "訧" => "You", "訨" => "Zhi", "訩" => "Xiong", "訪" => "Fang",
+ "訫" => "Xin", "訬" => "Chao", "è¨" => "She", "訮" => "Xian", "訯" => "Sha", "訰" => "Tun",
+ "許" => "Xu", "訲" => "Yi", "訳" => "Yi", "訴" => "Su", "訵" => "Chi", "訶" => "He",
+ "訷" => "Shen", "訸" => "He", "訹" => "Xu", "診" => "Zhen", "註" => "Zhu", "証" => "Zheng",
+ "訽" => "Gou", "訾" => "Zi", "訿" => "Zi", "è©€" => "Zhan", "è©" => "Gu", "è©‚" => "Fu",
+ "詃" => "Quan", "詄" => "Die", "詅" => "Ling", "詆" => "Di", "詇" => "Yang", "詈" => "Li",
+ "詉" => "Nao", "è©" => "Pan", "è©‹" => "Zhou", "è©Œ" => "Gan", "è©" => "Yi", "è©" => "Ju",
+ "è©" => "Ao", "è©" => "Zha", "è©‘" => "Tuo", "è©’" => "Yi", "è©“" => "Qu", "è©”" => "Zhao",
+ "è©•" => "Ping", "è©–" => "Bi", "è©—" => "Xiong", "詘" => "Qu", "è©™" => "Ba", "è©" => "Da",
+ "è©›" => "Zu", "è©œ" => "Tao", "è©" => "Zhu", "è©" => "Ci", "è©Ÿ" => "Zhe", "è© " => "Yong",
+ "詡" => "Xu", "詢" => "Xun", "詣" => "Yi", "詤" => "Huang", "詥" => "He", "試" => "Shi",
+ "詧" => "Cha", "詨" => "Jiao", "詩" => "Shi", "詪" => "Hen", "詫" => "Cha", "詬" => "Gou",
+ "è©" => "Gui", "è©®" => "Quan", "詯" => "Hui", "è©°" => "Jie", "話" => "Hua", "該" => "Gai",
+ "詳" => "Xiang", "詴" => "Wei", "詵" => "Shen", "詶" => "Chou", "詷" => "Tong", "詸" => "Mi",
+ "詹" => "Zhan", "詺" => "Ming", "詻" => "E", "詼" => "Hui", "詽" => "Yan", "詾" => "Xiong",
+ "è©¿" => "Gua", "誀" => "Er", "èª" => "Beng", "誂" => "Tiao", "誃" => "Chi", "誄" => "Lei",
+ "誅" => "Zhu", "誆" => "Kuang", "誇" => "Kua", "誈" => "Wu", "誉" => "Yu", "èª" => "Teng",
+ "誋" => "Ji", "誌" => "Zhi", "èª" => "Ren", "èª" => "Su", "èª" => "Lang", "èª" => "E",
+ "誑" => "Kuang", "誒" => "E", "誓" => "Shi", "誔" => "Ting", "誕" => "Dan", "誖" => "Bo",
+ "誗" => "Chan", "誘" => "You", "誙" => "Heng", "èª" => "Qiao", "誛" => "Qin", "誜" => "Shua",
+ "èª" => "An", "èª" => "Yu", "誟" => "Xiao", "èª " => "Cheng", "誡" => "Jie", "誢" => "Xian",
+ "誣" => "Wu", "誤" => "Wu", "誥" => "Gao", "誦" => "Song", "誧" => "Pu", "誨" => "Hui",
+ "誩" => "Jing", "說" => "Shuo", "誫" => "Zhen", "説" => "Shuo", "èª" => "Du", "誮" => "Yasashi",
+ "誯" => "Chang", "誰" => "Shui", "誱" => "Jie", "課" => "Ke", "誳" => "Qu", "誴" => "Cong",
+ "誵" => "Xiao", "誶" => "Sui", "誷" => "Wang", "誸" => "Xuan", "誹" => "Fei", "誺" => "Chi",
+ "誻" => "Ta", "誼" => "Yi", "誽" => "Na", "誾" => "Yin", "調" => "Diao", "諀" => "Pi",
+ "è«" => "Chuo", "è«‚" => "Chan", "諃" => "Chen", "è«„" => "Zhun", "è«…" => "Ji", "諆" => "Qi",
+ "談" => "Tan", "諈" => "Zhui", "諉" => "Wei", "è«" => "Ju", "è«‹" => "Qing", "è«Œ" => "Jian",
+ "è«" => "Zheng", "è«" => "Ze", "è«" => "Zou", "è«" => "Qian", "è«‘" => "Zhuo", "è«’" => "Liang",
+ "諓" => "Jian", "諔" => "Zhu", "諕" => "Hao", "論" => "Lun", "諗" => "Shen", "諘" => "Biao",
+ "è«™" => "Huai", "è«" => "Pian", "è«›" => "Yu", "è«œ" => "Die", "è«" => "Xu", "è«" => "Pian",
+ "è«Ÿ" => "Shi", "è« " => "Xuan", "è«¡" => "Shi", "è«¢" => "Hun", "è«£" => "Hua", "諤" => "E",
+ "諥" => "Zhong", "諦" => "Di", "諧" => "Xie", "諨" => "Fu", "諩" => "Pu", "諪" => "Ting",
+ "è««" => "Jian", "諬" => "Qi", "è«" => "Yu", "è«®" => "Zi", "諯" => "Chuan", "è«°" => "Xi",
+ "諱" => "Hui", "諲" => "Yin", "諳" => "An", "諴" => "Xian", "諵" => "Nan", "諶" => "Chen",
+ "諷" => "Feng", "諸" => "Zhu", "諹" => "Yang", "諺" => "Yan", "諻" => "Heng", "諼" => "Xuan",
+ "諽" => "Ge", "諾" => "Nuo", "è«¿" => "Qi", "è¬" => "Ye", "謂" => "Wei", "謄" => "Teng",
+ "謅" => "Zou", "謆" => "Shan", "謇" => "Jian", "謈" => "Bo", "謉" => "Ku", "è¬" => "Huang",
+ "謋" => "Huo", "謌" => "Ge", "è¬" => "Ying", "è¬" => "Mi", "è¬" => "Xiao", "è¬" => "Mi",
+ "謑" => "Xi", "謒" => "Qiang", "謓" => "Chen", "謔" => "Nue", "謕" => "Ti", "謖" => "Su",
+ "謗" => "Bang", "謘" => "Chi", "謙" => "Qian", "è¬" => "Shi", "講" => "Jiang", "謜" => "Yuan",
+ "è¬" => "Xie", "è¬" => "Xue", "謟" => "Tao", "è¬ " => "Yao", "謡" => "Yao", "謣" => "Yu",
+ "謤" => "Biao", "謥" => "Cong", "謦" => "Qing", "謧" => "Li", "謨" => "Mo", "謩" => "Mo",
+ "謪" => "Shang", "謫" => "Zhe", "謬" => "Miu", "è¬" => "Jian", "謮" => "Ze", "謯" => "Jie",
+ "謰" => "Lian", "謱" => "Lou", "謲" => "Can", "謳" => "Ou", "謴" => "Guan", "謵" => "Xi",
+ "謶" => "Zhuo", "謷" => "Ao", "謸" => "Ao", "謹" => "Jin", "謺" => "Zhe", "謻" => "Yi",
+ "謼" => "Hu", "謽" => "Jiang", "謾" => "Man", "謿" => "Chao", "è€" => "Han", "è" => "Hua",
+ "è‚" => "Chan", "èƒ" => "Xu", "è„" => "Zeng", "è…" => "Se", "è†" => "Xi", "è‡" => "She",
+ "èˆ" => "Dui", "è‰" => "Zheng", "è" => "Nao", "è‹" => "Lan", "èŒ" => "E", "è" => "Ying",
+ "è" => "Jue", "è" => "Ji", "è" => "Zun", "è‘" => "Jiao", "è’" => "Bo", "è“" => "Hui",
+ "è”" => "Zhuan", "è•" => "Mu", "è–" => "Zen", "è—" => "Zha", "è˜" => "Shi", "è™" => "Qiao",
+ "è" => "Tan", "è›" => "Zen", "èœ" => "Pu", "è" => "Sheng", "è" => "Xuan", "èŸ" => "Zao",
+ "è " => "Tan", "è¡" => "Dang", "è¢" => "Sui", "è£" => "Qian", "è¤" => "Ji", "è¥" => "Jiao",
+ "è¦" => "Jing", "è§" => "Lian", "è¨" => "Nou", "è©" => "Yi", "èª" => "Ai", "è«" => "Zhan",
+ "è¬" => "Pi", "è" => "Hui", "è®" => "Hua", "è¯" => "Yi", "è°" => "Yi", "è±" => "Shan",
+ "è²" => "Rang", "è³" => "Nou", "è´" => "Qian", "èµ" => "Zhui", "è¶" => "Ta", "è·" => "Hu",
+ "è¸" => "Zhou", "è¹" => "Hao", "èº" => "Ye", "è»" => "Ying", "è¼" => "Jian", "è½" => "Yu",
+ "è¾" => "Jian", "è¿" => "Hui", "讀" => "Du", "è®" => "Zhe", "讂" => "Xuan", "讃" => "Zan",
+ "讄" => "Lei", "讅" => "Shen", "讆" => "Wei", "讇" => "Chan", "讈" => "Li", "讉" => "Yi",
+ "è®" => "Bian", "讋" => "Zhe", "讌" => "Yan", "è®" => "E", "è®" => "Chou", "è®" => "Wei",
+ "è®" => "Chou", "讑" => "Yao", "è®’" => "Chan", "讓" => "Rang", "è®”" => "Yin", "讕" => "Lan",
+ "è®–" => "Chen", "è®—" => "Huo", "讘" => "Zhe", "è®™" => "Huan", "è®" => "Zan", "è®›" => "Yi",
+ "讜" => "Dang", "è®" => "Zhan", "è®" => "Yan", "讟" => "Du", "è® " => "Yan", "计" => "Ji",
+ "订" => "Ding", "讣" => "Fu", "认" => "Ren", "讥" => "Ji", "讦" => "Jie", "讧" => "Hong",
+ "讨" => "Tao", "让" => "Rang", "讪" => "Shan", "讫" => "Qi", "讬" => "Tuo", "è®" => "Xun",
+ "议" => "Yi", "讯" => "Xun", "记" => "Ji", "讱" => "Ren", "讲" => "Jiang", "讳" => "Hui",
+ "讴" => "Ou", "讵" => "Ju", "讶" => "Ya", "讷" => "Ne", "许" => "Xu", "讹" => "E",
+ "论" => "Lun", "讻" => "Xiong", "讼" => "Song", "讽" => "Feng", "设" => "She", "访" => "Fang",
+ "诀" => "Jue", "è¯" => "Zheng", "诂" => "Gu", "诃" => "He", "评" => "Ping", "诅" => "Zu",
+ "识" => "Shi", "诇" => "Xiong", "诈" => "Zha", "诉" => "Su", "è¯" => "Zhen", "诋" => "Di",
+ "诌" => "Zou", "è¯" => "Ci", "è¯" => "Qu", "è¯" => "Zhao", "è¯" => "Bi", "译" => "Yi",
+ "诒" => "Yi", "诓" => "Kuang", "诔" => "Lei", "试" => "Shi", "诖" => "Gua", "诗" => "Shi",
+ "诘" => "Jie", "诙" => "Hui", "è¯" => "Cheng", "诛" => "Zhu", "诜" => "Shen", "è¯" => "Hua",
+ "è¯" => "Dan", "诟" => "Gou", "è¯ " => "Quan", "诡" => "Gui", "询" => "Xun", "诣" => "Yi",
+ "诤" => "Zheng", "该" => "Gai", "详" => "Xiang", "诧" => "Cha", "诨" => "Hun", "诩" => "Xu",
+ "诪" => "Zhou", "诫" => "Jie", "诬" => "Wu", "è¯" => "Yu", "诮" => "Qiao", "误" => "Wu",
+ "诰" => "Gao", "诱" => "You", "诲" => "Hui", "诳" => "Kuang", "说" => "Shuo", "诵" => "Song",
+ "诶" => "Ai", "请" => "Qing", "诸" => "Zhu", "诹" => "Zou", "诺" => "Nuo", "读" => "Du",
+ "诼" => "Zhuo", "诽" => "Fei", "课" => "Ke", "诿" => "Wei", "è°" => "Shui", "è°‚" => "Shen",
+ "è°ƒ" => "Diao", "è°„" => "Chan", "è°…" => "Liang", "è°†" => "Zhun", "è°‡" => "Sui", "è°ˆ" => "Tan",
+ "è°‰" => "Shen", "è°" => "Yi", "è°‹" => "Mou", "è°Œ" => "Chen", "è°" => "Die", "è°" => "Huang",
+ "è°" => "Jian", "è°" => "Xie", "è°‘" => "Nue", "è°’" => "Ye", "è°“" => "Wei", "è°”" => "E",
+ "è°•" => "Yu", "è°–" => "Xuan", "è°—" => "Chan", "è°˜" => "Zi", "è°™" => "An", "è°" => "Yan",
+ "è°›" => "Di", "è°œ" => "Mi", "è°" => "Pian", "è°" => "Xu", "è°Ÿ" => "Mo", "è° " => "Dang",
+ "è°¡" => "Su", "è°¢" => "Xie", "è°£" => "Yao", "è°¤" => "Bang", "è°¥" => "Shi", "è°¦" => "Qian",
+ "è°§" => "Mi", "è°¨" => "Jin", "è°©" => "Man", "è°ª" => "Zhe", "è°«" => "Jian", "è°¬" => "Miu",
+ "è°" => "Tan", "è°®" => "Zen", "è°¯" => "Qiao", "è°°" => "Lan", "è°±" => "Pu", "è°²" => "Jue",
+ "è°³" => "Yan", "è°´" => "Qian", "è°µ" => "Zhan", "è°¶" => "Chen", "è°·" => "Gu", "è°¸" => "Qian",
+ "è°¹" => "Hong", "è°º" => "Xia", "è°»" => "Jue", "è°¼" => "Hong", "è°½" => "Han", "è°¾" => "Hong",
+ "è°¿" => "Xi", "è±€" => "Xi", "è±" => "Huo", "豂" => "Liao", "豃" => "Han", "豄" => "Du",
+ "è±…" => "Long", "豆" => "Dou", "豇" => "Jiang", "豈" => "Qi", "豉" => "Shi", "è±" => "Li",
+ "豋" => "Deng", "豌" => "Wan", "è±" => "Bi", "è±" => "Shu", "è±" => "Xian", "è±" => "Feng",
+ "豑" => "Zhi", "豒" => "Zhi", "豓" => "Yan", "豔" => "Yan", "豕" => "Shi", "豖" => "Chu",
+ "è±—" => "Hui", "豘" => "Tun", "è±™" => "Yi", "è±" => "Tun", "è±›" => "Yi", "豜" => "Jian",
+ "è±" => "Ba", "è±" => "Hou", "豟" => "E", "è± " => "Cu", "象" => "Xiang", "è±¢" => "Huan",
+ "豣" => "Jian", "豤" => "Ken", "豥" => "Gai", "豦" => "Qu", "豧" => "Fu", "豨" => "Xi",
+ "豩" => "Bin", "豪" => "Hao", "豫" => "Yu", "豬" => "Zhu", "è±" => "Jia", "豯" => "Xi",
+ "è±°" => "Bo", "è±±" => "Wen", "è±²" => "Huan", "è±³" => "Bin", "è±´" => "Di", "è±µ" => "Zong",
+ "豶" => "Fen", "豷" => "Yi", "豸" => "Zhi", "豹" => "Bao", "豺" => "Chai", "豻" => "Han",
+ "è±¼" => "Pi", "è±½" => "Na", "è±¾" => "Pi", "豿" => "Gou", "è²€" => "Na", "è²" => "You",
+ "貂" => "Diao", "貃" => "Mo", "貄" => "Si", "貅" => "Xiu", "貆" => "Huan", "貇" => "Kun",
+ "貈" => "He", "貉" => "He", "è²" => "Mo", "貋" => "Han", "貌" => "Mao", "è²" => "Li",
+ "è²" => "Ni", "è²" => "Bi", "è²" => "Yu", "貑" => "Jia", "è²’" => "Tuan", "貓" => "Mao",
+ "貔" => "Pi", "貕" => "Xi", "貖" => "E", "貗" => "Ju", "貘" => "Mo", "貙" => "Chu",
+ "è²" => "Tan", "è²›" => "Huan", "貜" => "Jue", "è²" => "Bei", "è²" => "Zhen", "貟" => "Yuan",
+ "è² " => "Fu", "財" => "Cai", "è²¢" => "Gong", "è²£" => "Te", "貤" => "Yi", "è²¥" => "Hang",
+ "貦" => "Wan", "貧" => "Pin", "貨" => "Huo", "販" => "Fan", "貪" => "Tan", "貫" => "Guan",
+ "責" => "Ze", "è²" => "Zhi", "è²®" => "Er", "貯" => "Zhu", "è²°" => "Shi", "è²±" => "Bi",
+ "貲" => "Zi", "貳" => "Er", "貴" => "Gui", "貵" => "Pian", "貶" => "Bian", "買" => "Mai",
+ "貸" => "Dai", "貹" => "Sheng", "貺" => "Kuang", "費" => "Fei", "貼" => "Tie", "貽" => "Yi",
+ "è²¾" => "Chi", "貿" => "Mao", "è³€" => "He", "è³" => "Bi", "賂" => "Lu", "賃" => "Ren",
+ "賄" => "Hui", "賅" => "Gai", "賆" => "Pian", "資" => "Zi", "賈" => "Jia", "賉" => "Xu",
+ "è³" => "Zei", "賋" => "Jiao", "賌" => "Gai", "è³" => "Zang", "è³" => "Jian", "è³" => "Ying",
+ "è³" => "Xun", "賑" => "Zhen", "è³’" => "She", "賓" => "Bin", "è³”" => "Bin", "賕" => "Qiu",
+ "è³–" => "She", "è³—" => "Chuan", "賘" => "Zang", "è³™" => "Zhou", "è³" => "Lai", "è³›" => "Zan",
+ "賜" => "Si", "è³" => "Chen", "è³" => "Shang", "賟" => "Tian", "è³ " => "Pei", "賡" => "Geng",
+ "賢" => "Xian", "賣" => "Mai", "賤" => "Jian", "賥" => "Sui", "賦" => "Fu", "賧" => "Tan",
+ "賨" => "Cong", "賩" => "Cong", "質" => "Zhi", "賫" => "Ji", "賬" => "Zhang", "è³" => "Du",
+ "賮" => "Jin", "賯" => "Xiong", "賰" => "Shun", "賱" => "Yun", "賲" => "Bao", "賳" => "Zai",
+ "賴" => "Lai", "賵" => "Feng", "賶" => "Cang", "賷" => "Ji", "賸" => "Sheng", "賹" => "Ai",
+ "賺" => "Zhuan", "賻" => "Fu", "購" => "Gou", "賽" => "Sai", "賾" => "Ze", "賿" => "Liao",
+ "è´" => "Bai", "è´‚" => "Chen", "è´ƒ" => "Zhuan", "è´„" => "Zhi", "è´…" => "Zhui", "è´†" => "Biao",
+ "è´‡" => "Yun", "è´ˆ" => "Zeng", "è´‰" => "Tan", "è´" => "Zan", "è´‹" => "Yan", "è´" => "Shan",
+ "è´" => "Wan", "è´" => "Ying", "è´" => "Jin", "è´‘" => "Gan", "è´’" => "Xian", "è´“" => "Zang",
+ "è´”" => "Bi", "è´•" => "Du", "è´–" => "Shu", "è´—" => "Yan", "è´™" => "Xuan", "è´" => "Long",
+ "è´›" => "Gan", "è´œ" => "Zang", "è´" => "Bei", "è´" => "Zhen", "è´Ÿ" => "Fu", "è´ " => "Yuan",
+ "è´¡" => "Gong", "è´¢" => "Cai", "è´£" => "Ze", "è´¤" => "Xian", "è´¥" => "Bai", "è´¦" => "Zhang",
+ "è´§" => "Huo", "è´¨" => "Zhi", "è´©" => "Fan", "è´ª" => "Tan", "è´«" => "Pin", "è´¬" => "Bian",
+ "è´" => "Gou", "è´®" => "Zhu", "è´¯" => "Guan", "è´°" => "Er", "è´±" => "Jian", "è´²" => "Bi",
+ "è´³" => "Shi", "è´´" => "Tie", "è´µ" => "Gui", "è´¶" => "Kuang", "è´·" => "Dai", "è´¸" => "Mao",
+ "è´¹" => "Fei", "è´º" => "He", "è´»" => "Yi", "è´¼" => "Zei", "è´½" => "Zhi", "è´¾" => "Jia",
+ "è´¿" => "Hui", "èµ€" => "Zi", "èµ" => "Ren", "赂" => "Lu", "赃" => "Zang", "资" => "Zi",
+ "èµ…" => "Gai", "赆" => "Jin", "赇" => "Qiu", "赈" => "Zhen", "赉" => "Lai", "èµ" => "She",
+ "赋" => "Fu", "赌" => "Du", "èµ" => "Ji", "èµ" => "Shu", "èµ" => "Shang", "èµ" => "Si",
+ "赑" => "Bi", "赒" => "Zhou", "赓" => "Geng", "赔" => "Pei", "赕" => "Tan", "赖" => "Lai",
+ "èµ—" => "Feng", "赘" => "Zhui", "èµ™" => "Fu", "èµ" => "Zhuan", "èµ›" => "Sai", "赜" => "Ze",
+ "èµ" => "Yan", "èµ" => "Zan", "赟" => "Yun", "èµ " => "Zeng", "赡" => "Shan", "èµ¢" => "Ying",
+ "赣" => "Gan", "赤" => "Chi", "赥" => "Xi", "赦" => "She", "赧" => "Nan", "赨" => "Xiong",
+ "赩" => "Xi", "赪" => "Cheng", "赫" => "He", "赬" => "Cheng", "èµ" => "Zhe", "èµ®" => "Xia",
+ "赯" => "Tang", "走" => "Zou", "赱" => "Zou", "赲" => "Li", "赳" => "Jiu", "赴" => "Fu",
+ "赵" => "Zhao", "赶" => "Gan", "起" => "Qi", "赸" => "Shan", "赹" => "Qiong", "赺" => "Qin",
+ "赻" => "Xian", "赼" => "Ci", "赽" => "Jue", "赾" => "Qin", "赿" => "Chi", "趀" => "Ci",
+ "è¶" => "Chen", "趂" => "Chen", "趃" => "Die", "趄" => "Ju", "超" => "Chao", "趆" => "Di",
+ "趇" => "Se", "趈" => "Zhan", "趉" => "Zhu", "è¶" => "Yue", "趋" => "Qu", "趌" => "Jie",
+ "è¶" => "Chi", "è¶" => "Chu", "è¶" => "Gua", "è¶" => "Xue", "趑" => "Ci", "趒" => "Tiao",
+ "趓" => "Duo", "趔" => "Lie", "趕" => "Gan", "趖" => "Suo", "趗" => "Cu", "趘" => "Xi",
+ "趙" => "Zhao", "è¶" => "Su", "趛" => "Yin", "趜" => "Ju", "è¶" => "Jian", "è¶" => "Que",
+ "趟" => "Tang", "è¶ " => "Chuo", "趡" => "Cui", "趢" => "Lu", "趣" => "Qu", "趤" => "Dang",
+ "趥" => "Qiu", "趦" => "Zi", "趧" => "Ti", "趨" => "Qu", "趩" => "Chi", "趪" => "Huang",
+ "趫" => "Qiao", "趬" => "Qiao", "è¶" => "Yao", "趮" => "Zao", "趯" => "Ti", "趱" => "Zan",
+ "趲" => "Zan", "足" => "Zu", "趴" => "Pa", "趵" => "Bao", "趶" => "Ku", "趷" => "Ke",
+ "趸" => "Dun", "趹" => "Jue", "趺" => "Fu", "趻" => "Chen", "趼" => "Jian", "趽" => "Fang",
+ "趾" => "Zhi", "趿" => "Sa", "è·€" => "Yue", "è·" => "Pa", "è·‚" => "Qi", "è·ƒ" => "Yue",
+ "è·„" => "Qiang", "è·…" => "Tuo", "è·†" => "Tai", "è·‡" => "Yi", "è·ˆ" => "Nian", "è·‰" => "Ling",
+ "è·" => "Mei", "è·‹" => "Ba", "è·Œ" => "Die", "è·" => "Ku", "è·" => "Tuo", "è·" => "Jia",
+ "è·" => "Ci", "è·‘" => "Pao", "è·’" => "Qia", "è·“" => "Zhu", "è·”" => "Ju", "è·•" => "Die",
+ "è·–" => "Zhi", "è·—" => "Fu", "è·˜" => "Pan", "è·™" => "Ju", "è·" => "Shan", "è·›" => "Bo",
+ "è·œ" => "Ni", "è·" => "Ju", "è·" => "Li", "è·Ÿ" => "Gen", "è· " => "Yi", "è·¡" => "Ji",
+ "è·¢" => "Dai", "è·£" => "Xian", "è·¤" => "Jiao", "è·¥" => "Duo", "è·¦" => "Zhu", "è·§" => "Zhuan",
+ "è·¨" => "Kua", "è·©" => "Zhuai", "è·ª" => "Gui", "è·«" => "Qiong", "è·¬" => "Kui", "è·" => "Xiang",
+ "è·®" => "Chi", "è·¯" => "Lu", "è·°" => "Beng", "è·±" => "Zhi", "è·²" => "Jia", "è·³" => "Tiao",
+ "è·´" => "Cai", "è·µ" => "Jian", "è·¶" => "Ta", "è··" => "Qiao", "è·¸" => "Bi", "è·¹" => "Xian",
+ "è·º" => "Duo", "è·»" => "Ji", "è·¼" => "Ju", "è·½" => "Ji", "è·¾" => "Shu", "è·¿" => "Tu",
+ "è¸" => "Jing", "踂" => "Nie", "踃" => "Xiao", "踄" => "Bo", "踅" => "Chi", "踆" => "Qun",
+ "踇" => "Mou", "踈" => "Shu", "踉" => "Lang", "è¸" => "Yong", "踋" => "Jiao", "踌" => "Chou",
+ "è¸" => "Qiao", "è¸" => "Ta", "è¸" => "Jian", "踑" => "Qi", "踒" => "Wo", "踓" => "Wei",
+ "踔" => "Zhuo", "踕" => "Jie", "踖" => "Ji", "踗" => "Nie", "踘" => "Ju", "踙" => "Ju",
+ "è¸" => "Lun", "踛" => "Lu", "踜" => "Leng", "è¸" => "Huai", "è¸" => "Ju", "踟" => "Chi",
+ "è¸ " => "Wan", "踡" => "Quan", "踢" => "Ti", "踣" => "Bo", "踤" => "Zu", "踥" => "Qie",
+ "踦" => "Ji", "踧" => "Cu", "踨" => "Zong", "踩" => "Cai", "踪" => "Zong", "踫" => "Peng",
+ "踬" => "Zhi", "è¸" => "Zheng", "踮" => "Dian", "踯" => "Zhi", "踰" => "Yu", "踱" => "Duo",
+ "踲" => "Dun", "踳" => "Chun", "踴" => "Yong", "踵" => "Zhong", "踶" => "Di", "踷" => "Zhe",
+ "踸" => "Chen", "踹" => "Chuai", "踺" => "Jian", "踻" => "Gua", "踼" => "Tang", "踽" => "Ju",
+ "踾" => "Fu", "踿" => "Zu", "è¹€" => "Die", "è¹" => "Pian", "蹂" => "Rou", "蹃" => "Nuo",
+ "蹄" => "Ti", "蹅" => "Cha", "蹆" => "Tui", "蹇" => "Jian", "蹈" => "Dao", "蹉" => "Cuo",
+ "è¹" => "Xi", "蹋" => "Ta", "蹌" => "Qiang", "è¹" => "Zhan", "è¹" => "Dian", "è¹" => "Ti",
+ "è¹" => "Ji", "蹑" => "Nie", "è¹’" => "Man", "蹓" => "Liu", "è¹”" => "Zhan", "蹕" => "Bi",
+ "è¹–" => "Chong", "è¹—" => "Lu", "蹘" => "Liao", "è¹™" => "Cu", "è¹" => "Tang", "è¹›" => "Dai",
+ "蹜" => "Suo", "è¹" => "Xi", "è¹" => "Kui", "蹟" => "Ji", "è¹ " => "Zhi", "蹡" => "Qiang",
+ "蹢" => "Di", "蹣" => "Man", "蹤" => "Zong", "蹥" => "Lian", "蹦" => "Beng", "蹧" => "Zao",
+ "蹨" => "Nian", "蹩" => "Bie", "蹪" => "Tui", "蹫" => "Ju", "蹬" => "Deng", "è¹" => "Ceng",
+ "蹮" => "Xian", "蹯" => "Fan", "蹰" => "Chu", "蹱" => "Zhong", "蹲" => "Dun", "蹳" => "Bo",
+ "蹴" => "Cu", "蹵" => "Zu", "蹶" => "Jue", "蹷" => "Jue", "蹸" => "Lin", "蹹" => "Ta",
+ "蹺" => "Qiao", "蹻" => "Qiao", "蹼" => "Pu", "蹽" => "Liao", "蹾" => "Dun", "蹿" => "Cuan",
+ "躀" => "Kuang", "èº" => "Zao", "躂" => "Ta", "躃" => "Bi", "躄" => "Bi", "躅" => "Zhu",
+ "躆" => "Ju", "躇" => "Chu", "躈" => "Qiao", "躉" => "Dun", "èº" => "Chou", "躋" => "Ji",
+ "躌" => "Wu", "èº" => "Yue", "èº" => "Nian", "èº" => "Lin", "èº" => "Lie", "躑" => "Zhi",
+ "躒" => "Li", "躓" => "Zhi", "躔" => "Chan", "躕" => "Chu", "躖" => "Duan", "躗" => "Wei",
+ "躘" => "Long", "躙" => "Lin", "èº" => "Xian", "躛" => "Wei", "躜" => "Zuan", "èº" => "Lan",
+ "èº" => "Xie", "躟" => "Rang", "èº " => "Xie", "躡" => "Nie", "躢" => "Ta", "躣" => "Qu",
+ "躤" => "Jie", "躥" => "Cuan", "躦" => "Zuan", "躧" => "Xi", "躨" => "Kui", "躩" => "Jue",
+ "躪" => "Lin", "身" => "Shen", "躬" => "Gong", "èº" => "Dan", "躮" => "Segare", "躯" => "Qu",
+ "躰" => "Ti", "躱" => "Duo", "躲" => "Duo", "躳" => "Gong", "躴" => "Lang", "躵" => "Nerau",
+ "躶" => "Luo", "躷" => "Ai", "躸" => "Ji", "躹" => "Ju", "躺" => "Tang", "躻" => "Utsuke",
+ "躽" => "Yan", "躾" => "Shitsuke", "躿" => "Kang", "軀" => "Qu", "è»" => "Lou", "軂" => "Lao",
+ "軃" => "Tuo", "軄" => "Zhi", "軅" => "Yagate", "軆" => "Ti", "軇" => "Dao", "軈" => "Yagate",
+ "軉" => "Yu", "è»" => "Che", "軋" => "Ya", "軌" => "Gui", "è»" => "Jun", "è»" => "Wei",
+ "è»" => "Yue", "è»" => "Xin", "軑" => "Di", "è»’" => "Xuan", "軓" => "Fan", "è»”" => "Ren",
+ "軕" => "Shan", "è»–" => "Qiang", "è»—" => "Shu", "軘" => "Tun", "è»™" => "Chen", "è»" => "Dai",
+ "è»›" => "E", "軜" => "Na", "è»" => "Qi", "è»" => "Mao", "軟" => "Ruan", "è» " => "Ren",
+ "軡" => "Fan", "転" => "Zhuan", "軣" => "Hong", "軤" => "Hu", "軥" => "Qu", "軦" => "Huang",
+ "軧" => "Di", "軨" => "Ling", "軩" => "Dai", "軪" => "Ao", "軫" => "Zhen", "軬" => "Fan",
+ "è»" => "Kuang", "è»®" => "Ang", "軯" => "Peng", "è»°" => "Bei", "è»±" => "Gu", "軲" => "Ku",
+ "軳" => "Pao", "軴" => "Zhu", "軵" => "Rong", "軶" => "E", "軷" => "Ba", "軸" => "Zhou",
+ "軹" => "Zhi", "軺" => "Yao", "軻" => "Ke", "軼" => "Yi", "軽" => "Qing", "軾" => "Shi",
+ "軿" => "Ping", "è¼" => "Qiong", "輂" => "Ju", "較" => "Jiao", "輄" => "Guang", "è¼…" => "Lu",
+ "輆" => "Kai", "輇" => "Quan", "輈" => "Zhou", "載" => "Zai", "è¼" => "Zhi", "輋" => "She",
+ "輌" => "Liang", "è¼" => "Yu", "è¼" => "Shao", "è¼" => "You", "è¼" => "Huan", "輑" => "Yun",
+ "輒" => "Zhe", "輓" => "Wan", "輔" => "Fu", "輕" => "Qing", "輖" => "Zhou", "輗" => "Ni",
+ "輘" => "Ling", "è¼™" => "Zhe", "è¼" => "Zhan", "è¼›" => "Liang", "輜" => "Zi", "è¼" => "Hui",
+ "è¼" => "Wang", "輟" => "Chuo", "è¼ " => "Guo", "輡" => "Kan", "è¼¢" => "Yi", "è¼£" => "Peng",
+ "輤" => "Qian", "輥" => "Gun", "輦" => "Nian", "輧" => "Pian", "輨" => "Guan", "輩" => "Bei",
+ "輪" => "Lun", "輫" => "Pai", "輬" => "Liang", "è¼" => "Ruan", "è¼®" => "Rou", "輯" => "Ji",
+ "è¼°" => "Yang", "è¼±" => "Xian", "è¼²" => "Chuan", "è¼³" => "Cou", "è¼´" => "Qun", "è¼µ" => "Ge",
+ "輶" => "You", "輷" => "Hong", "輸" => "Shu", "輹" => "Fu", "輺" => "Zi", "輻" => "Fu",
+ "è¼¼" => "Wen", "è¼½" => "Ben", "è¼¾" => "Zhan", "輿" => "Yu", "è½€" => "Wen", "è½" => "Tao",
+ "轂" => "Gu", "轃" => "Zhen", "轄" => "Xia", "轅" => "Yuan", "轆" => "Lu", "轇" => "Jiu",
+ "轈" => "Chao", "轉" => "Zhuan", "è½" => "Wei", "轋" => "Hun", "轌" => "Sori", "è½" => "Che",
+ "è½" => "Jiao", "è½" => "Zhan", "è½" => "Pu", "轑" => "Lao", "è½’" => "Fen", "轓" => "Fan",
+ "轔" => "Lin", "轕" => "Ge", "轖" => "Se", "轗" => "Kan", "轘" => "Huan", "轙" => "Yi",
+ "è½" => "Ji", "è½›" => "Dui", "轜" => "Er", "è½" => "Yu", "è½" => "Xian", "轟" => "Hong",
+ "è½ " => "Lei", "轡" => "Pei", "è½¢" => "Li", "è½£" => "Li", "轤" => "Lu", "è½¥" => "Lin",
+ "车" => "Che", "轧" => "Ya", "轨" => "Gui", "轩" => "Xuan", "轪" => "Di", "轫" => "Ren",
+ "转" => "Zhuan", "è½" => "E", "è½®" => "Lun", "软" => "Ruan", "è½°" => "Hong", "è½±" => "Ku",
+ "轲" => "Ke", "轳" => "Lu", "轴" => "Zhou", "轵" => "Zhi", "轶" => "Yi", "轷" => "Hu",
+ "轸" => "Zhen", "轹" => "Li", "轺" => "Yao", "轻" => "Qing", "轼" => "Shi", "载" => "Zai",
+ "è½¾" => "Zhi", "轿" => "Jiao", "è¾€" => "Zhou", "è¾" => "Quan", "辂" => "Lu", "较" => "Jiao",
+ "辄" => "Zhe", "辅" => "Fu", "辆" => "Liang", "辇" => "Nian", "辈" => "Bei", "辉" => "Hui",
+ "è¾" => "Gun", "辋" => "Wang", "辌" => "Liang", "è¾" => "Chuo", "è¾" => "Zi", "è¾" => "Cou",
+ "è¾" => "Fu", "辑" => "Ji", "è¾’" => "Wen", "输" => "Shu", "è¾”" => "Pei", "辕" => "Yuan",
+ "è¾–" => "Xia", "è¾—" => "Zhan", "辘" => "Lu", "è¾™" => "Che", "è¾" => "Lin", "è¾›" => "Xin",
+ "辜" => "Gu", "è¾" => "Ci", "è¾" => "Ci", "辟" => "Pi", "è¾ " => "Zui", "辡" => "Bian",
+ "辢" => "La", "辣" => "La", "辤" => "Ci", "辥" => "Xue", "辦" => "Ban", "辧" => "Bian",
+ "辨" => "Bian", "辩" => "Bian", "辫" => "Bian", "辬" => "Ban", "è¾" => "Ci", "è¾®" => "Bian",
+ "辯" => "Bian", "辰" => "Chen", "辱" => "Ru", "農" => "Nong", "辳" => "Nong", "辴" => "Zhen",
+ "辵" => "Chuo", "辶" => "Chuo", "辷" => "Suberu", "辸" => "Reng", "边" => "Bian", "辺" => "Bian",
+ "辻" => "Sip", "込" => "Ip", "辽" => "Liao", "达" => "Da", "辿" => "Chan", "迀" => "Gan",
+ "è¿" => "Qian", "è¿‚" => "Yu", "迃" => "Yu", "è¿„" => "Qi", "è¿…" => "Xun", "迆" => "Yi",
+ "过" => "Guo", "迈" => "Mai", "迉" => "Qi", "è¿" => "Za", "è¿‹" => "Wang", "è¿Œ" => "Jia",
+ "è¿" => "Zhun", "è¿" => "Ying", "è¿" => "Ti", "è¿" => "Yun", "è¿‘" => "Jin", "è¿’" => "Hang",
+ "迓" => "Ya", "返" => "Fan", "迕" => "Wu", "迖" => "Da", "迗" => "E", "还" => "Huan",
+ "è¿™" => "Zhe", "è¿" => "Totemo", "è¿›" => "Jin", "è¿œ" => "Yuan", "è¿" => "Wei", "è¿" => "Lian",
+ "è¿Ÿ" => "Chi", "è¿ " => "Che", "è¿¡" => "Ni", "è¿¢" => "Tiao", "è¿£" => "Zhi", "迤" => "Yi",
+ "迥" => "Jiong", "迦" => "Jia", "迧" => "Chen", "迨" => "Dai", "迩" => "Er", "迪" => "Di",
+ "è¿«" => "Po", "迬" => "Wang", "è¿" => "Die", "è¿®" => "Ze", "迯" => "Tao", "è¿°" => "Shu",
+ "迱" => "Tuo", "迲" => "Kep", "迳" => "Jing", "迴" => "Hui", "迵" => "Tong", "迶" => "You",
+ "迷" => "Mi", "迸" => "Beng", "迹" => "Ji", "迺" => "Nai", "迻" => "Yi", "迼" => "Jie",
+ "追" => "Zhui", "迾" => "Lie", "è¿¿" => "Xun", "é€" => "Song", "适" => "Gua", "逃" => "Tao",
+ "逄" => "Pang", "逅" => "Hou", "逆" => "Ni", "逇" => "Dun", "逈" => "Jiong", "选" => "Xuan",
+ "é€" => "Xun", "逋" => "Bu", "逌" => "You", "é€" => "Xiao", "é€" => "Qiu", "é€" => "Tou",
+ "é€" => "Zhu", "逑" => "Qiu", "递" => "Di", "逓" => "Di", "途" => "Tu", "逕" => "Jing",
+ "逖" => "Ti", "逗" => "Dou", "逘" => "Yi", "這" => "Zhe", "é€" => "Tong", "逛" => "Guang",
+ "逜" => "Wu", "é€" => "Shi", "é€" => "Cheng", "速" => "Su", "é€ " => "Zao", "逡" => "Qun",
+ "逢" => "Feng", "連" => "Lian", "逤" => "Suo", "逥" => "Hui", "逦" => "Li", "逧" => "Sako",
+ "逨" => "Lai", "逩" => "Ben", "逪" => "Cuo", "逫" => "Jue", "逬" => "Beng", "é€" => "Huan",
+ "逮" => "Dai", "逯" => "Lu", "逰" => "You", "週" => "Zhou", "進" => "Jin", "逳" => "Yu",
+ "逴" => "Chuo", "逵" => "Kui", "逶" => "Wei", "逷" => "Ti", "逸" => "Yi", "逹" => "Da",
+ "逺" => "Yuan", "逻" => "Luo", "逼" => "Bi", "逽" => "Nuo", "逾" => "Yu", "逿" => "Dang",
+ "é€" => "Sui", "é" => "Dun", "é‚" => "Sui", "éƒ" => "Yan", "é„" => "Chuan", "é…" => "Chi",
+ "é†" => "Ti", "é‡" => "Yu", "éˆ" => "Shi", "é‰" => "Zhen", "é" => "You", "é‹" => "Yun",
+ "éŒ" => "E", "é" => "Bian", "é" => "Guo", "é" => "E", "é" => "Xia", "é‘" => "Huang",
+ "é’" => "Qiu", "é“" => "Dao", "é”" => "Da", "é•" => "Wei", "é–" => "Appare", "é—" => "Yi",
+ "é˜" => "Gou", "é™" => "Yao", "é" => "Chu", "é›" => "Liu", "éœ" => "Xun", "é" => "Ta",
+ "é" => "Di", "éŸ" => "Chi", "é " => "Yuan", "é¡" => "Su", "é¢" => "Ta", "é£" => "Qian",
+ "é¥" => "Yao", "é¦" => "Guan", "é§" => "Zhang", "é¨" => "Ao", "é©" => "Shi", "éª" => "Ce",
+ "é«" => "Chi", "é¬" => "Su", "é" => "Zao", "é®" => "Zhe", "é¯" => "Dun", "é°" => "Di",
+ "é±" => "Lou", "é²" => "Chi", "é³" => "Cuo", "é´" => "Lin", "éµ" => "Zun", "é¶" => "Rao",
+ "é·" => "Qian", "é¸" => "Xuan", "é¹" => "Yu", "éº" => "Yi", "é»" => "Wu", "é¼" => "Liao",
+ "é½" => "Ju", "é¾" => "Shi", "é¿" => "Bi", "é‚€" => "Yao", "é‚" => "Mai", "é‚‚" => "Xie",
+ "邃" => "Sui", "還" => "Huan", "邅" => "Zhan", "邆" => "Teng", "邇" => "Er", "邈" => "Miao",
+ "邉" => "Bian", "é‚" => "Bian", "é‚‹" => "La", "é‚Œ" => "Li", "é‚" => "Yuan", "é‚" => "Yao",
+ "é‚" => "Luo", "é‚" => "Li", "é‚‘" => "Yi", "é‚’" => "Ting", "é‚“" => "Deng", "é‚”" => "Qi",
+ "é‚•" => "Yong", "é‚–" => "Shan", "é‚—" => "Han", "邘" => "Yu", "é‚™" => "Mang", "é‚" => "Ru",
+ "é‚›" => "Qiong", "é‚" => "Kuang", "é‚" => "Fu", "é‚Ÿ" => "Kang", "é‚ " => "Bin", "é‚¡" => "Fang",
+ "邢" => "Xing", "那" => "Na", "邤" => "Xin", "邥" => "Shen", "邦" => "Bang", "邧" => "Yuan",
+ "邨" => "Cun", "é‚©" => "Huo", "邪" => "Xie", "é‚«" => "Bang", "邬" => "Wu", "é‚" => "Ju",
+ "邮" => "You", "邯" => "Han", "邰" => "Tai", "邱" => "Qiu", "邲" => "Bi", "邳" => "Pei",
+ "邴" => "Bing", "邵" => "Shao", "邶" => "Bei", "邷" => "Wa", "邸" => "Di", "邹" => "Zou",
+ "邺" => "Ye", "邻" => "Lin", "邼" => "Kuang", "邽" => "Gui", "邾" => "Zhu", "邿" => "Shi",
+ "郀" => "Ku", "éƒ" => "Yu", "郂" => "Gai", "郃" => "Ge", "郄" => "Xi", "郅" => "Zhi",
+ "郆" => "Ji", "郇" => "Xun", "郈" => "Hou", "郉" => "Xing", "éƒ" => "Jiao", "郋" => "Xi",
+ "郌" => "Gui", "éƒ" => "Nuo", "éƒ" => "Lang", "éƒ" => "Jia", "éƒ" => "Kuai", "郑" => "Zheng",
+ "郒" => "Otoko", "郓" => "Yun", "郔" => "Yan", "郕" => "Cheng", "郖" => "Dou", "郗" => "Chi",
+ "郘" => "Lu", "郙" => "Fu", "éƒ" => "Wu", "郛" => "Fu", "郜" => "Gao", "éƒ" => "Hao",
+ "éƒ" => "Lang", "郟" => "Jia", "éƒ " => "Geng", "郡" => "Jun", "郢" => "Ying", "郣" => "Bo",
+ "郤" => "Xi", "郥" => "Bei", "郦" => "Li", "郧" => "Yun", "部" => "Bu", "郩" => "Xiao",
+ "郪" => "Qi", "郫" => "Pi", "郬" => "Qing", "éƒ" => "Guo", "郮" => "Zhou", "郯" => "Tan",
+ "郰" => "Zou", "郱" => "Ping", "郲" => "Lai", "郳" => "Ni", "郴" => "Chen", "郵" => "You",
+ "郶" => "Bu", "郷" => "Xiang", "郸" => "Dan", "郹" => "Ju", "郺" => "Yong", "郻" => "Qiao",
+ "郼" => "Yi", "都" => "Du", "郾" => "Yan", "郿" => "Mei", "é„" => "Bei", "é„‚" => "E",
+ "鄃" => "Yu", "鄄" => "Juan", "鄅" => "Yu", "鄆" => "Yun", "鄇" => "Hou", "鄈" => "Kui",
+ "鄉" => "Xiang", "é„" => "Xiang", "é„‹" => "Sou", "é„Œ" => "Tang", "é„" => "Ming", "é„" => "Xi",
+ "é„" => "Ru", "é„" => "Chu", "é„‘" => "Zi", "é„’" => "Zou", "é„“" => "Ju", "é„”" => "Wu",
+ "é„•" => "Xiang", "é„–" => "Yun", "é„—" => "Hao", "鄘" => "Yong", "é„™" => "Bi", "é„" => "Mo",
+ "é„›" => "Chao", "é„œ" => "Fu", "é„" => "Liao", "é„" => "Yin", "é„Ÿ" => "Zhuan", "é„ " => "Hu",
+ "鄡" => "Qiao", "鄢" => "Yan", "鄣" => "Zhang", "鄤" => "Fan", "鄥" => "Qiao", "鄦" => "Xu",
+ "鄧" => "Deng", "鄨" => "Bi", "鄩" => "Xin", "鄪" => "Bi", "鄫" => "Ceng", "鄬" => "Wei",
+ "é„" => "Zheng", "é„®" => "Mao", "鄯" => "Shan", "é„°" => "Lin", "鄱" => "Po", "鄲" => "Dan",
+ "鄳" => "Meng", "鄴" => "Ye", "鄵" => "Cao", "鄶" => "Kuai", "鄷" => "Feng", "鄸" => "Meng",
+ "鄹" => "Zou", "鄺" => "Kuang", "鄻" => "Lian", "鄼" => "Zan", "鄽" => "Chan", "鄾" => "You",
+ "é„¿" => "Qi", "é…€" => "Yan", "é…" => "Chan", "é…‚" => "Zan", "é…ƒ" => "Ling", "é…„" => "Huan",
+ "é……" => "Xi", "é…†" => "Feng", "é…‡" => "Zan", "é…ˆ" => "Li", "é…‰" => "You", "é…" => "Ding",
+ "é…‹" => "Qiu", "é…Œ" => "Zhuo", "é…" => "Pei", "é…" => "Zhou", "é…" => "Yi", "é…" => "Hang",
+ "é…‘" => "Yu", "é…’" => "Jiu", "é…“" => "Yan", "é…”" => "Zui", "é…•" => "Mao", "é…–" => "Dan",
+ "é…—" => "Xu", "é…˜" => "Tou", "é…™" => "Zhen", "é…" => "Fen", "é…›" => "Sakenomoto", "é…" => "Yun",
+ "é…" => "Tai", "é…Ÿ" => "Tian", "é… " => "Qia", "é…¡" => "Tuo", "é…¢" => "Zuo", "é…£" => "Han",
+ "é…¤" => "Gu", "é…¥" => "Su", "é…¦" => "Po", "é…§" => "Chou", "é…¨" => "Zai", "é…©" => "Ming",
+ "é…ª" => "Luo", "é…«" => "Chuo", "é…¬" => "Chou", "é…" => "You", "é…®" => "Tong", "é…¯" => "Zhi",
+ "é…°" => "Xian", "é…±" => "Jiang", "é…²" => "Cheng", "é…³" => "Yin", "é…´" => "Tu", "é…µ" => "Xiao",
+ "é…¶" => "Mei", "é…·" => "Ku", "é…¸" => "Suan", "é…¹" => "Lei", "é…º" => "Pu", "é…»" => "Zui",
+ "é…¼" => "Hai", "é…½" => "Yan", "é…¾" => "Xi", "é…¿" => "Niang", "醀" => "Wei", "é†" => "Lu",
+ "醂" => "Lan", "醃" => "Yan", "醄" => "Tao", "醅" => "Pei", "醆" => "Zhan", "醇" => "Chun",
+ "醈" => "Tan", "醉" => "Zui", "é†" => "Chuo", "醋" => "Cu", "醌" => "Kun", "é†" => "Ti",
+ "é†" => "Mian", "é†" => "Du", "é†" => "Hu", "醑" => "Xu", "醒" => "Xing", "醓" => "Tan",
+ "醔" => "Jiu", "醕" => "Chun", "醖" => "Yun", "醗" => "Po", "醘" => "Ke", "醙" => "Sou",
+ "é†" => "Mi", "醛" => "Quan", "醜" => "Chou", "é†" => "Cuo", "é†" => "Yun", "醟" => "Yong",
+ "é† " => "Ang", "醡" => "Zha", "醢" => "Hai", "醣" => "Tang", "醤" => "Jiang", "醥" => "Piao",
+ "醦" => "Shan", "醧" => "Yu", "醨" => "Li", "醩" => "Zao", "醪" => "Lao", "醫" => "Yi",
+ "醬" => "Jiang", "é†" => "Pu", "醮" => "Jiao", "醯" => "Xi", "醰" => "Tan", "醱" => "Po",
+ "醲" => "Nong", "醳" => "Yi", "醴" => "Li", "醵" => "Ju", "醶" => "Jiao", "醷" => "Yi",
+ "醸" => "Niang", "醹" => "Ru", "醺" => "Xun", "醻" => "Chou", "醼" => "Yan", "醽" => "Ling",
+ "醾" => "Mi", "醿" => "Mi", "釀" => "Niang", "é‡" => "Xin", "釂" => "Jiao", "釃" => "Xi",
+ "釄" => "Mi", "釅" => "Yan", "釆" => "Bian", "采" => "Cai", "釈" => "Shi", "釉" => "You",
+ "é‡" => "Shi", "釋" => "Shi", "里" => "Li", "é‡" => "Zhong", "é‡" => "Ye", "é‡" => "Liang",
+ "é‡" => "Li", "金" => "Jin", "釒" => "Jin", "釓" => "Qiu", "釔" => "Yi", "釕" => "Diao",
+ "釖" => "Dao", "釗" => "Zhao", "釘" => "Ding", "釙" => "Po", "é‡" => "Qiu", "釛" => "He",
+ "釜" => "Fu", "é‡" => "Zhen", "é‡" => "Zhi", "釟" => "Ba", "é‡ " => "Luan", "釡" => "Fu",
+ "釢" => "Nai", "釣" => "Diao", "釤" => "Shan", "釥" => "Qiao", "釦" => "Kou", "釧" => "Chuan",
+ "釨" => "Zi", "釩" => "Fan", "釪" => "Yu", "釫" => "Hua", "釬" => "Han", "é‡" => "Gong",
+ "釮" => "Qi", "釯" => "Mang", "釰" => "Ri", "釱" => "Di", "釲" => "Si", "釳" => "Xi",
+ "釴" => "Yi", "釵" => "Chai", "釶" => "Shi", "釷" => "Tu", "釸" => "Xi", "釹" => "Nu",
+ "釺" => "Qian", "釻" => "Ishiyumi", "釼" => "Jian", "釽" => "Pi", "釾" => "Ye", "釿" => "Yin",
+ "éˆ" => "Fang", "鈂" => "Chen", "鈃" => "Xing", "鈄" => "Tou", "鈅" => "Yue", "鈆" => "Yan",
+ "鈇" => "Fu", "鈈" => "Pi", "鈉" => "Na", "éˆ" => "Xin", "鈋" => "E", "鈌" => "Jue",
+ "éˆ" => "Dun", "éˆ" => "Gou", "éˆ" => "Yin", "éˆ" => "Qian", "鈑" => "Ban", "鈒" => "Ji",
+ "鈓" => "Ren", "鈔" => "Chao", "鈕" => "Niu", "鈖" => "Fen", "鈗" => "Yun", "鈘" => "Ji",
+ "鈙" => "Qin", "éˆ" => "Pi", "鈛" => "Guo", "鈜" => "Hong", "éˆ" => "Yin", "éˆ" => "Jun",
+ "鈟" => "Shi", "éˆ " => "Yi", "鈡" => "Zhong", "鈢" => "Nie", "鈣" => "Gai", "鈤" => "Ri",
+ "鈥" => "Huo", "鈦" => "Tai", "鈧" => "Kang", "鈨" => "Habaki", "鈩" => "Irori", "鈪" => "Ngaak",
+ "鈬" => "Duo", "éˆ" => "Zi", "鈮" => "Ni", "鈯" => "Tu", "鈰" => "Shi", "鈱" => "Min",
+ "鈲" => "Gu", "鈳" => "E", "鈴" => "Ling", "鈵" => "Bing", "鈶" => "Yi", "鈷" => "Gu",
+ "鈸" => "Ba", "鈹" => "Pi", "鈺" => "Yu", "鈻" => "Si", "鈼" => "Zuo", "鈽" => "Bu",
+ "鈾" => "You", "鈿" => "Dian", "鉀" => "Jia", "é‰" => "Zhen", "鉂" => "Shi", "鉃" => "Shi",
+ "鉄" => "Tie", "鉅" => "Ju", "鉆" => "Zhan", "鉇" => "Shi", "鉈" => "She", "鉉" => "Xuan",
+ "é‰" => "Zhao", "鉋" => "Bao", "鉌" => "He", "é‰" => "Bi", "é‰" => "Sheng", "é‰" => "Chu",
+ "é‰" => "Shi", "鉑" => "Bo", "鉒" => "Zhu", "鉓" => "Chi", "鉔" => "Za", "鉕" => "Po",
+ "鉖" => "Tong", "鉗" => "Qian", "鉘" => "Fu", "鉙" => "Zhai", "é‰" => "Liu", "鉛" => "Qian",
+ "鉜" => "Fu", "é‰" => "Li", "é‰" => "Yue", "鉟" => "Pi", "é‰ " => "Yang", "鉡" => "Ban",
+ "鉢" => "Bo", "鉣" => "Jie", "鉤" => "Gou", "鉥" => "Shu", "鉦" => "Zheng", "鉧" => "Mu",
+ "鉨" => "Ni", "鉩" => "Nie", "鉪" => "Di", "鉫" => "Jia", "鉬" => "Mu", "é‰" => "Dan",
+ "鉮" => "Shen", "鉯" => "Yi", "鉰" => "Si", "鉱" => "Kuang", "鉲" => "Ka", "鉳" => "Bei",
+ "鉴" => "Jian", "鉵" => "Tong", "鉶" => "Xing", "鉷" => "Hong", "鉸" => "Jiao", "鉹" => "Chi",
+ "鉺" => "Er", "鉻" => "Ge", "鉼" => "Bing", "鉽" => "Shi", "鉾" => "Mou", "鉿" => "Jia",
+ "é€" => "Yin", "é" => "Jun", "é‚" => "Zhou", "éƒ" => "Chong", "é„" => "Shang", "é…" => "Tong",
+ "é†" => "Mo", "é‡" => "Lei", "éˆ" => "Ji", "é‰" => "Yu", "é" => "Xu", "é‹" => "Ren",
+ "éŒ" => "Zun", "é" => "Zhi", "é" => "Qiong", "é" => "Shan", "é" => "Chi", "é‘" => "Xian",
+ "é’" => "Xing", "é“" => "Quan", "é”" => "Pi", "é•" => "Tie", "é–" => "Zhu", "é—" => "Hou",
+ "é˜" => "Ming", "é™" => "Kua", "é" => "Yao", "é›" => "Xian", "éœ" => "Xian", "é" => "Xiu",
+ "é" => "Jun", "éŸ" => "Cha", "é " => "Lao", "é¡" => "Ji", "é¢" => "Pi", "é£" => "Ru",
+ "é¤" => "Mi", "é¥" => "Yi", "é¦" => "Yin", "é§" => "Guang", "é¨" => "An", "é©" => "Diou",
+ "éª" => "You", "é«" => "Se", "é¬" => "Kao", "é" => "Qian", "é®" => "Luan", "é¯" => "Kasugai",
+ "é°" => "Ai", "é±" => "Diao", "é²" => "Han", "é³" => "Rui", "é´" => "Shi", "éµ" => "Keng",
+ "é¶" => "Qiu", "é·" => "Xiao", "é¸" => "Zhe", "é¹" => "Xiu", "éº" => "Zang", "é»" => "Ti",
+ "é¼" => "Cuo", "é½" => "Gua", "é¾" => "Gong", "é¿" => "Zhong", "é‹€" => "Dou", "é‹" => "Lu",
+ "鋂" => "Mei", "鋃" => "Lang", "鋄" => "Wan", "鋅" => "Xin", "鋆" => "Yun", "鋇" => "Bei",
+ "鋈" => "Wu", "鋉" => "Su", "é‹" => "Yu", "é‹‹" => "Chan", "é‹Œ" => "Ting", "é‹" => "Bo",
+ "é‹" => "Han", "é‹" => "Jia", "é‹" => "Hong", "é‹‘" => "Cuan", "é‹’" => "Feng", "é‹“" => "Chan",
+ "鋔" => "Wan", "鋕" => "Zhi", "鋖" => "Si", "鋗" => "Xuan", "鋘" => "Wu", "鋙" => "Wu",
+ "é‹" => "Tiao", "é‹›" => "Gong", "é‹œ" => "Zhuo", "é‹" => "Lue", "é‹" => "Xing", "é‹Ÿ" => "Qian",
+ "é‹ " => "Shen", "é‹¡" => "Han", "é‹¢" => "Lue", "é‹£" => "Xie", "鋤" => "Chu", "é‹¥" => "Zheng",
+ "鋦" => "Ju", "鋧" => "Xian", "鋨" => "Tie", "鋩" => "Mang", "鋪" => "Pu", "鋫" => "Li",
+ "鋬" => "Pan", "é‹" => "Rui", "é‹®" => "Cheng", "鋯" => "Gao", "é‹°" => "Li", "鋱" => "Te",
+ "鋲" => "Pyeng", "鋳" => "Zhu", "鋵" => "Tu", "鋶" => "Liu", "鋷" => "Zui", "鋸" => "Ju",
+ "鋹" => "Chang", "鋺" => "Yuan", "鋻" => "Jian", "鋼" => "Gang", "鋽" => "Diao", "鋾" => "Tao",
+ "é‹¿" => "Chang", "éŒ" => "Kua", "錂" => "Ling", "錃" => "Bei", "錄" => "Lu", "錅" => "Li",
+ "錆" => "Qiang", "錇" => "Pou", "錈" => "Juan", "錉" => "Min", "éŒ" => "Zui", "錋" => "Peng",
+ "錌" => "An", "éŒ" => "Pi", "éŒ" => "Xian", "éŒ" => "Ya", "éŒ" => "Zhui", "錑" => "Lei",
+ "錒" => "A", "錓" => "Kong", "錔" => "Ta", "錕" => "Kun", "錖" => "Du", "錗" => "Wei",
+ "錘" => "Chui", "錙" => "Zi", "éŒ" => "Zheng", "錛" => "Ben", "錜" => "Nie", "éŒ" => "Cong",
+ "éŒ" => "Qun", "錟" => "Tan", "éŒ " => "Ding", "錡" => "Qi", "錢" => "Qian", "錣" => "Zhuo",
+ "錤" => "Qi", "錥" => "Yu", "錦" => "Jin", "錧" => "Guan", "錨" => "Mao", "錩" => "Chang",
+ "錪" => "Tian", "錫" => "Xi", "錬" => "Lian", "éŒ" => "Tao", "錮" => "Gu", "錯" => "Cuo",
+ "錰" => "Shu", "錱" => "Zhen", "録" => "Lu", "錳" => "Meng", "錴" => "Lu", "錵" => "Hua",
+ "錶" => "Biao", "錷" => "Ga", "錸" => "Lai", "錹" => "Ken", "錺" => "Kazari", "錻" => "Bu",
+ "錼" => "Nai", "錽" => "Wan", "錾" => "Zan", "é€" => "De", "é" => "Xian", "éƒ" => "Huo",
+ "é„" => "Liang", "é†" => "Men", "é‡" => "Kai", "éˆ" => "Ying", "é‰" => "Di", "é" => "Lian",
+ "é‹" => "Guo", "éŒ" => "Xian", "é" => "Du", "é" => "Tu", "é" => "Wei", "é" => "Cong",
+ "é‘" => "Fu", "é’" => "Rou", "é“" => "Ji", "é”" => "E", "é•" => "Rou", "é–" => "Chen",
+ "é—" => "Ti", "é˜" => "Zha", "é™" => "Hong", "é" => "Yang", "é›" => "Duan", "éœ" => "Xia",
+ "é" => "Yu", "é" => "Keng", "éŸ" => "Xing", "é " => "Huang", "é¡" => "Wei", "é¢" => "Fu",
+ "é£" => "Zhao", "é¤" => "Cha", "é¥" => "Qie", "é¦" => "She", "é§" => "Hong", "é¨" => "Kui",
+ "é©" => "Tian", "éª" => "Mou", "é«" => "Qiao", "é¬" => "Qiao", "é" => "Hou", "é®" => "Tou",
+ "é¯" => "Cong", "é°" => "Huan", "é±" => "Ye", "é²" => "Min", "é³" => "Jian", "é´" => "Duan",
+ "éµ" => "Jian", "é¶" => "Song", "é·" => "Kui", "é¸" => "Hu", "é¹" => "Xuan", "éº" => "Duo",
+ "é»" => "Jie", "é¼" => "Zhen", "é½" => "Bian", "é¾" => "Zhong", "é¿" => "Zi", "é€" => "Xiu",
+ "é" => "Ye", "é‚" => "Mei", "éƒ" => "Pai", "é„" => "Ai", "é…" => "Jie", "é‡" => "Mei",
+ "éˆ" => "Chuo", "é‰" => "Ta", "é" => "Bang", "é‹" => "Xia", "éŒ" => "Lian", "é" => "Suo",
+ "é" => "Xi", "é" => "Liu", "é" => "Zu", "é‘" => "Ye", "é’" => "Nou", "é“" => "Weng",
+ "é”" => "Rong", "é•" => "Tang", "é–" => "Suo", "é—" => "Qiang", "é˜" => "Ge", "é™" => "Shuo",
+ "é" => "Chui", "é›" => "Bo", "éœ" => "Pan", "é" => "Sa", "é" => "Bi", "éŸ" => "Sang",
+ "é " => "Gang", "é¡" => "Zi", "é¢" => "Wu", "é£" => "Ying", "é¤" => "Huang", "é¥" => "Tiao",
+ "é¦" => "Liu", "é§" => "Kai", "é¨" => "Sun", "é©" => "Sha", "éª" => "Sou", "é«" => "Wan",
+ "é¬" => "Hao", "é" => "Zhen", "é®" => "Zhen", "é¯" => "Luo", "é°" => "Yi", "é±" => "Yuan",
+ "é²" => "Tang", "é³" => "Nie", "é´" => "Xi", "éµ" => "Jia", "é¶" => "Ge", "é·" => "Ma",
+ "é¸" => "Juan", "é¹" => "Kasugai", "éº" => "Habaki", "é»" => "Suo", "é¿" => "Na", "é€" => "Lu",
+ "é" => "Suo", "é‚" => "Ou", "éƒ" => "Zu", "é„" => "Tuan", "é…" => "Xiu", "é†" => "Guan",
+ "é‡" => "Xuan", "éˆ" => "Lian", "é‰" => "Shou", "é" => "Ao", "é‹" => "Man", "éŒ" => "Mo",
+ "é" => "Luo", "é" => "Bi", "é" => "Wei", "é" => "Liu", "é‘" => "Di", "é’" => "Qiao",
+ "é“" => "Cong", "é”" => "Yi", "é•" => "Lu", "é–" => "Ao", "é—" => "Keng", "é˜" => "Qiang",
+ "é™" => "Cui", "é" => "Qi", "é›" => "Chang", "éœ" => "Tang", "é" => "Man", "é" => "Yong",
+ "éŸ" => "Chan", "é " => "Feng", "é¡" => "Jing", "é¢" => "Biao", "é£" => "Shu", "é¤" => "Lou",
+ "é¥" => "Xiu", "é¦" => "Cong", "é§" => "Long", "é¨" => "Zan", "é©" => "Jian", "éª" => "Cao",
+ "é«" => "Li", "é¬" => "Xia", "é" => "Xi", "é®" => "Kang", "é°" => "Beng", "é³" => "Zheng",
+ "é´" => "Lu", "éµ" => "Hua", "é¶" => "Ji", "é·" => "Pu", "é¸" => "Hui", "é¹" => "Qiang",
+ "éº" => "Po", "é»" => "Lin", "é¼" => "Suo", "é½" => "Xiu", "é¾" => "San", "é¿" => "Cheng",
+ "é" => "Si", "é‚" => "Liu", "éƒ" => "Nao", "é„" => "Heng", "é…" => "Pie", "é†" => "Sui",
+ "é‡" => "Fan", "éˆ" => "Qiao", "é‰" => "Quan", "é" => "Yang", "é‹" => "Tang", "éŒ" => "Xiang",
+ "é" => "Jue", "é" => "Jiao", "é" => "Zun", "é" => "Liao", "é‘" => "Jie", "é’" => "Lao",
+ "é“" => "Dui", "é”" => "Tan", "é•" => "Zan", "é–" => "Ji", "é—" => "Jian", "é˜" => "Zhong",
+ "é™" => "Deng", "é" => "Ya", "é›" => "Ying", "éœ" => "Dui", "é" => "Jue", "é" => "Nou",
+ "éŸ" => "Ti", "é " => "Pu", "é¡" => "Tie", "é¤" => "Ding", "é¥" => "Shan", "é¦" => "Kai",
+ "é§" => "Jian", "é¨" => "Fei", "é©" => "Sui", "éª" => "Lu", "é«" => "Juan", "é¬" => "Hui",
+ "é" => "Yu", "é®" => "Lian", "é¯" => "Zhuo", "é°" => "Qiao", "é±" => "Qian", "é²" => "Zhuo",
+ "é³" => "Lei", "é´" => "Bi", "éµ" => "Tie", "é¶" => "Huan", "é·" => "Ye", "é¸" => "Duo",
+ "é¹" => "Guo", "éº" => "Dang", "é»" => "Ju", "é¼" => "Fen", "é½" => "Da", "é¾" => "Bei",
+ "é¿" => "Yi", "é‘€" => "Ai", "é‘" => "Zong", "é‘‚" => "Xun", "鑃" => "Diao", "é‘„" => "Zhu",
+ "é‘…" => "Heng", "鑆" => "Zhui", "鑇" => "Ji", "鑈" => "Nie", "鑉" => "Ta", "é‘" => "Huo",
+ "é‘‹" => "Qing", "é‘Œ" => "Bin", "é‘" => "Ying", "é‘" => "Kui", "é‘" => "Ning", "é‘" => "Xu",
+ "é‘‘" => "Jian", "é‘’" => "Jian", "é‘“" => "Yari", "é‘”" => "Cha", "é‘•" => "Zhi", "é‘–" => "Mie",
+ "é‘—" => "Li", "鑘" => "Lei", "é‘™" => "Ji", "é‘" => "Zuan", "é‘›" => "Kuang", "é‘œ" => "Shang",
+ "é‘" => "Peng", "é‘" => "La", "é‘Ÿ" => "Du", "é‘ " => "Shuo", "é‘¡" => "Chuo", "é‘¢" => "Lu",
+ "鑣" => "Biao", "鑤" => "Bao", "鑥" => "Lu", "鑨" => "Long", "鑩" => "E", "鑪" => "Lu",
+ "é‘«" => "Xin", "鑬" => "Jian", "é‘" => "Lan", "é‘®" => "Bo", "鑯" => "Jian", "é‘°" => "Yao",
+ "鑱" => "Chan", "鑲" => "Xiang", "鑳" => "Jian", "鑴" => "Xi", "鑵" => "Guan", "鑶" => "Cang",
+ "鑷" => "Nie", "鑸" => "Lei", "鑹" => "Cuan", "鑺" => "Qu", "鑻" => "Pan", "鑼" => "Luo",
+ "鑽" => "Zuan", "鑾" => "Luan", "é‘¿" => "Zao", "é’€" => "Nie", "é’" => "Jue", "é’‚" => "Tang",
+ "é’ƒ" => "Shu", "é’„" => "Lan", "é’…" => "Jin", "é’†" => "Qiu", "é’‡" => "Yi", "é’ˆ" => "Zhen",
+ "é’‰" => "Ding", "é’" => "Zhao", "é’‹" => "Po", "é’Œ" => "Diao", "é’" => "Tu", "é’" => "Qian",
+ "é’" => "Chuan", "é’" => "Shan", "é’‘" => "Ji", "é’’" => "Fan", "é’“" => "Diao", "é’”" => "Men",
+ "é’•" => "Nu", "é’–" => "Xi", "é’—" => "Chai", "é’˜" => "Xing", "é’™" => "Gai", "é’" => "Bu",
+ "é’›" => "Tai", "é’œ" => "Ju", "é’" => "Dun", "é’" => "Chao", "é’Ÿ" => "Zhong", "é’ " => "Na",
+ "é’¡" => "Bei", "é’¢" => "Gang", "é’£" => "Ban", "é’¤" => "Qian", "é’¥" => "Yao", "é’¦" => "Qin",
+ "é’§" => "Jun", "é’¨" => "Wu", "é’©" => "Gou", "é’ª" => "Kang", "é’«" => "Fang", "é’¬" => "Huo",
+ "é’" => "Tou", "é’®" => "Niu", "é’¯" => "Ba", "é’°" => "Yu", "é’±" => "Qian", "é’²" => "Zheng",
+ "é’³" => "Qian", "é’´" => "Gu", "é’µ" => "Bo", "é’¶" => "E", "é’·" => "Po", "é’¸" => "Bu",
+ "é’¹" => "Ba", "é’º" => "Yue", "é’»" => "Zuan", "é’¼" => "Mu", "é’½" => "Dan", "é’¾" => "Jia",
+ "é’¿" => "Dian", "é“€" => "You", "é“" => "Tie", "é“‚" => "Bo", "铃" => "Ling", "é“„" => "Shuo",
+ "é“…" => "Qian", "铆" => "Liu", "铇" => "Bao", "铈" => "Shi", "铉" => "Xuan", "é“" => "She",
+ "é“‹" => "Bi", "é“Œ" => "Ni", "é“" => "Pi", "é“" => "Duo", "é“" => "Xing", "é“" => "Kao",
+ "é“‘" => "Lao", "é“’" => "Er", "é““" => "Mang", "é“”" => "Ya", "é“•" => "You", "é“–" => "Cheng",
+ "é“—" => "Jia", "铘" => "Ye", "é“™" => "Nao", "é“" => "Zhi", "é“›" => "Dang", "é“œ" => "Tong",
+ "é“" => "Lu", "é“" => "Diao", "é“Ÿ" => "Yin", "é“ " => "Kai", "é“¡" => "Zha", "é“¢" => "Zhu",
+ "铣" => "Xian", "铤" => "Ting", "铥" => "Diu", "铦" => "Xian", "铧" => "Hua", "铨" => "Quan",
+ "é“©" => "Sha", "铪" => "Jia", "é“«" => "Yao", "铬" => "Ge", "é“" => "Ming", "é“®" => "Zheng",
+ "铯" => "Se", "铰" => "Jiao", "铱" => "Yi", "铲" => "Chan", "铳" => "Chong", "铴" => "Tang",
+ "铵" => "An", "银" => "Yin", "铷" => "Ru", "铸" => "Zhu", "铹" => "Lao", "铺" => "Pu",
+ "é“»" => "Wu", "铼" => "Lai", "铽" => "Te", "链" => "Lian", "é“¿" => "Keng", "é”" => "Suo",
+ "锂" => "Li", "锃" => "Zheng", "锄" => "Chu", "锅" => "Guo", "锆" => "Gao", "锇" => "Tie",
+ "锈" => "Xiu", "锉" => "Cuo", "é”" => "Lue", "锋" => "Feng", "锌" => "Xin", "é”" => "Liu",
+ "é”" => "Kai", "é”" => "Jian", "é”" => "Rui", "锑" => "Ti", "é”’" => "Lang", "锓" => "Qian",
+ "锔" => "Ju", "锕" => "A", "锖" => "Qiang", "锗" => "Duo", "锘" => "Tian", "错" => "Cuo",
+ "é”" => "Mao", "é”›" => "Ben", "锜" => "Qi", "é”" => "De", "é”" => "Kua", "锟" => "Kun",
+ "é” " => "Chang", "锡" => "Xi", "锢" => "Gu", "锣" => "Luo", "锤" => "Chui", "锥" => "Zhui",
+ "锦" => "Jin", "锧" => "Zhi", "锨" => "Xian", "锩" => "Juan", "锪" => "Huo", "锫" => "Pou",
+ "锬" => "Tan", "é”" => "Ding", "é”®" => "Jian", "锯" => "Ju", "é”°" => "Meng", "é”±" => "Zi",
+ "锲" => "Qie", "锳" => "Ying", "锴" => "Kai", "锵" => "Qiang", "锶" => "Song", "锷" => "E",
+ "锸" => "Cha", "锹" => "Qiao", "锺" => "Zhong", "锻" => "Duan", "锼" => "Sou", "锽" => "Huang",
+ "锾" => "Huan", "锿" => "Ai", "é•€" => "Du", "é•" => "Mei", "é•‚" => "Lou", "镃" => "Zi",
+ "镄" => "Fei", "镅" => "Mei", "镆" => "Mo", "镇" => "Zhen", "镈" => "Bo", "镉" => "Ge",
+ "é•" => "Nie", "é•‹" => "Tang", "é•Œ" => "Juan", "é•" => "Nie", "é•" => "Na", "é•" => "Liu",
+ "é•" => "Hao", "é•‘" => "Bang", "é•’" => "Yi", "é•“" => "Jia", "é•”" => "Bin", "é••" => "Rong",
+ "é•–" => "Biao", "é•—" => "Tang", "镘" => "Man", "é•™" => "Luo", "é•" => "Beng", "é•›" => "Yong",
+ "é•œ" => "Jing", "é•" => "Di", "é•" => "Zu", "é•Ÿ" => "Xuan", "é• " => "Liu", "é•¡" => "Tan",
+ "镢" => "Jue", "镣" => "Liao", "镤" => "Pu", "镥" => "Lu", "镦" => "Dui", "镧" => "Lan",
+ "镨" => "Pu", "é•©" => "Cuan", "镪" => "Qiang", "é•«" => "Deng", "镬" => "Huo", "é•" => "Lei",
+ "镮" => "Huan", "镯" => "Zhuo", "镰" => "Lian", "镱" => "Yi", "镲" => "Cha", "镳" => "Biao",
+ "镴" => "La", "镵" => "Chan", "镶" => "Xiang", "長" => "Chang", "镸" => "Chang", "镹" => "Jiu",
+ "镺" => "Ao", "镻" => "Die", "镼" => "Qu", "镽" => "Liao", "镾" => "Mi", "长" => "Chang",
+ "é–€" => "Men", "é–" => "Ma", "é–‚" => "Shuan", "é–ƒ" => "Shan", "é–„" => "Huo", "é–…" => "Men",
+ "é–†" => "Yan", "é–‡" => "Bi", "é–ˆ" => "Han", "é–‰" => "Bi", "é–" => "San", "é–‹" => "Kai",
+ "é–Œ" => "Kang", "é–" => "Beng", "é–" => "Hong", "é–" => "Run", "é–" => "San", "é–‘" => "Xian",
+ "é–’" => "Xian", "é–“" => "Jian", "é–”" => "Min", "é–•" => "Xia", "é––" => "Yuru", "é–—" => "Dou",
+ "é–˜" => "Zha", "é–™" => "Nao", "é–" => "Jian", "é–›" => "Peng", "é–œ" => "Xia", "é–" => "Ling",
+ "é–" => "Bian", "é–Ÿ" => "Bi", "é– " => "Run", "é–¡" => "He", "é–¢" => "Guan", "é–£" => "Ge",
+ "é–¤" => "Ge", "é–¥" => "Fa", "é–¦" => "Chu", "é–§" => "Hong", "é–¨" => "Gui", "é–©" => "Min",
+ "é–ª" => "Se", "é–«" => "Kun", "é–¬" => "Lang", "é–" => "Lu", "é–®" => "Ting", "é–¯" => "Sha",
+ "é–°" => "Ju", "é–±" => "Yue", "é–²" => "Yue", "é–³" => "Chan", "é–´" => "Qu", "é–µ" => "Lin",
+ "é–¶" => "Chang", "é–·" => "Shai", "é–¸" => "Kun", "é–¹" => "Yan", "é–º" => "Min", "é–»" => "Yan",
+ "é–¼" => "E", "é–½" => "Hun", "é–¾" => "Yu", "é–¿" => "Wen", "é—€" => "Xiang", "é—" => "Bao",
+ "é—‚" => "Xiang", "é—ƒ" => "Qu", "é—„" => "Yao", "é—…" => "Wen", "é—†" => "Ban", "é—‡" => "An",
+ "é—ˆ" => "Wei", "é—‰" => "Yin", "é—" => "Kuo", "é—‹" => "Que", "é—Œ" => "Lan", "é—" => "Du",
+ "é—" => "Phwung", "é—" => "Tian", "é—‘" => "Nie", "é—’" => "Ta", "é—“" => "Kai", "é—”" => "He",
+ "é—•" => "Que", "é—–" => "Chuang", "é——" => "Guan", "é—˜" => "Dou", "é—™" => "Qi", "é—" => "Kui",
+ "é—›" => "Tang", "é—œ" => "Guan", "é—" => "Piao", "é—" => "Kan", "é—Ÿ" => "Xi", "é— " => "Hui",
+ "é—¡" => "Chan", "é—¢" => "Pi", "é—£" => "Dang", "é—¤" => "Huan", "é—¥" => "Ta", "é—¦" => "Wen",
+ "é—¨" => "Men", "é—©" => "Shuan", "é—ª" => "Shan", "é—«" => "Yan", "é—¬" => "Han", "é—" => "Bi",
+ "é—®" => "Wen", "é—¯" => "Chuang", "é—°" => "Run", "é—±" => "Wei", "é—²" => "Xian", "é—³" => "Hong",
+ "é—´" => "Jian", "é—µ" => "Min", "é—¶" => "Kang", "é—·" => "Men", "é—¸" => "Zha", "é—¹" => "Nao",
+ "é—º" => "Gui", "é—»" => "Wen", "é—¼" => "Ta", "é—½" => "Min", "é—¾" => "Lu", "é—¿" => "Kai",
+ "é˜" => "Ge", "阂" => "He", "阃" => "Kun", "阄" => "Jiu", "阅" => "Yue", "阆" => "Lang",
+ "阇" => "Du", "阈" => "Yu", "阉" => "Yan", "é˜" => "Chang", "阋" => "Xi", "阌" => "Wen",
+ "é˜" => "Hun", "é˜" => "Yan", "é˜" => "E", "é˜" => "Chan", "阑" => "Lan", "阒" => "Qu",
+ "阓" => "Hui", "阔" => "Kuo", "阕" => "Que", "阖" => "Ge", "阗" => "Tian", "阘" => "Ta",
+ "阙" => "Que", "é˜" => "Kan", "阛" => "Huan", "阜" => "Fu", "é˜" => "Fu", "é˜" => "Le",
+ "队" => "Dui", "é˜ " => "Xin", "阡" => "Qian", "阢" => "Wu", "阣" => "Yi", "阤" => "Tuo",
+ "阥" => "Yin", "阦" => "Yang", "阧" => "Dou", "阨" => "E", "阩" => "Sheng", "阪" => "Ban",
+ "阫" => "Pei", "阬" => "Keng", "é˜" => "Yun", "阮" => "Ruan", "阯" => "Zhi", "阰" => "Pi",
+ "阱" => "Jing", "防" => "Fang", "阳" => "Yang", "阴" => "Yin", "阵" => "Zhen", "阶" => "Jie",
+ "阷" => "Cheng", "阸" => "E", "阹" => "Qu", "阺" => "Di", "阻" => "Zu", "阼" => "Zuo",
+ "阽" => "Dian", "阾" => "Ling", "阿" => "A", "陀" => "Tuo", "é™" => "Tuo", "陂" => "Po",
+ "陃" => "Bing", "附" => "Fu", "际" => "Ji", "陆" => "Lu", "陇" => "Long", "陈" => "Chen",
+ "陉" => "Xing", "é™" => "Duo", "陋" => "Lou", "陌" => "Mo", "é™" => "Jiang", "é™" => "Shu",
+ "é™" => "Duo", "é™" => "Xian", "陑" => "Er", "é™’" => "Gui", "陓" => "Yu", "é™”" => "Gai",
+ "陕" => "Shan", "é™–" => "Xun", "é™—" => "Qiao", "陘" => "Xing", "é™™" => "Chun", "é™" => "Fu",
+ "é™›" => "Bi", "陜" => "Xia", "é™" => "Shan", "é™" => "Sheng", "陟" => "Zhi", "é™ " => "Pu",
+ "陡" => "Dou", "院" => "Yuan", "陣" => "Zhen", "除" => "Chu", "陥" => "Xian", "陦" => "Tou",
+ "陧" => "Nie", "陨" => "Yun", "险" => "Xian", "陪" => "Pei", "陫" => "Pei", "陬" => "Zou",
+ "é™" => "Yi", "é™®" => "Dui", "陯" => "Lun", "é™°" => "Yin", "é™±" => "Ju", "陲" => "Chui",
+ "陳" => "Chen", "陴" => "Pi", "陵" => "Ling", "陶" => "Tao", "陷" => "Xian", "陸" => "Lu",
+ "陹" => "Sheng", "険" => "Xian", "陻" => "Yin", "陼" => "Zhu", "陽" => "Yang", "陾" => "Reng",
+ "陿" => "Shan", "é€" => "Chong", "é" => "Yan", "é‚" => "Yin", "éƒ" => "Yu", "é„" => "Ti",
+ "é…" => "Yu", "é†" => "Long", "é‡" => "Wei", "éˆ" => "Wei", "é‰" => "Nie", "é" => "Dui",
+ "é‹" => "Sui", "éŒ" => "An", "é" => "Huang", "é" => "Jie", "é" => "Sui", "é" => "Yin",
+ "é‘" => "Gai", "é’" => "Yan", "é“" => "Hui", "é”" => "Ge", "é•" => "Yun", "é–" => "Wu",
+ "é—" => "Wei", "é˜" => "Ai", "é™" => "Xi", "é" => "Tang", "é›" => "Ji", "éœ" => "Zhang",
+ "é" => "Dao", "é" => "Ao", "éŸ" => "Xi", "é " => "Yin", "é¢" => "Rao", "é£" => "Lin",
+ "é¤" => "Tui", "é¥" => "Deng", "é¦" => "Pi", "é§" => "Sui", "é¨" => "Sui", "é©" => "Yu",
+ "éª" => "Xian", "é«" => "Fen", "é¬" => "Ni", "é" => "Er", "é®" => "Ji", "é¯" => "Dao",
+ "é°" => "Xi", "é±" => "Yin", "é²" => "E", "é³" => "Hui", "é´" => "Long", "éµ" => "Xi",
+ "é¶" => "Li", "é·" => "Li", "é¸" => "Li", "é¹" => "Zhui", "éº" => "He", "é»" => "Zhi",
+ "é¼" => "Zhun", "é½" => "Jun", "é¾" => "Nan", "é¿" => "Yi", "雀" => "Que", "é›" => "Yan",
+ "雂" => "Qian", "雃" => "Ya", "雄" => "Xiong", "雅" => "Ya", "集" => "Ji", "雇" => "Gu",
+ "雈" => "Huan", "雉" => "Zhi", "é›" => "Gou", "雋" => "Jun", "雌" => "Ci", "é›" => "Yong",
+ "é›" => "Ju", "é›" => "Chu", "é›" => "Hu", "雑" => "Za", "é›’" => "Luo", "雓" => "Yu",
+ "雔" => "Chou", "雕" => "Diao", "雖" => "Sui", "雗" => "Han", "雘" => "Huo", "雙" => "Shuang",
+ "é›" => "Guan", "é››" => "Chu", "雜" => "Za", "é›" => "Yong", "é›" => "Ji", "雟" => "Xi",
+ "é› " => "Chou", "雡" => "Liu", "離" => "Li", "難" => "Nan", "雤" => "Xue", "雥" => "Za",
+ "雦" => "Ji", "雧" => "Ji", "雨" => "Yu", "雩" => "Yu", "雪" => "Xue", "雫" => "Na",
+ "雬" => "Fou", "é›" => "Se", "é›®" => "Mu", "雯" => "Wen", "é›°" => "Fen", "é›±" => "Pang",
+ "雲" => "Yun", "雳" => "Li", "雴" => "Li", "雵" => "Ang", "零" => "Ling", "雷" => "Lei",
+ "雸" => "An", "雹" => "Bao", "雺" => "Meng", "電" => "Dian", "雼" => "Dang", "雽" => "Xing",
+ "雾" => "Wu", "雿" => "Zhao", "éœ" => "Ji", "霂" => "Mu", "霃" => "Chen", "霄" => "Xiao",
+ "霅" => "Zha", "霆" => "Ting", "震" => "Zhen", "霈" => "Pei", "霉" => "Mei", "éœ" => "Ling",
+ "霋" => "Qi", "霌" => "Chou", "éœ" => "Huo", "éœ" => "Sha", "éœ" => "Fei", "éœ" => "Weng",
+ "霑" => "Zhan", "霒" => "Yin", "霓" => "Ni", "霔" => "Chou", "霕" => "Tun", "霖" => "Lin",
+ "霘" => "Dong", "霙" => "Ying", "éœ" => "Wu", "霛" => "Ling", "霜" => "Shuang", "éœ" => "Ling",
+ "éœ" => "Xia", "霟" => "Hong", "éœ " => "Yin", "霡" => "Mo", "霢" => "Mai", "霣" => "Yun",
+ "霤" => "Liu", "霥" => "Meng", "霦" => "Bin", "霧" => "Wu", "霨" => "Wei", "霩" => "Huo",
+ "霪" => "Yin", "霫" => "Xi", "霬" => "Yi", "éœ" => "Ai", "霮" => "Dan", "霯" => "Deng",
+ "霰" => "Xian", "霱" => "Yu", "露" => "Lu", "霳" => "Long", "霴" => "Dai", "霵" => "Ji",
+ "霶" => "Pang", "霷" => "Yang", "霸" => "Ba", "霹" => "Pi", "霺" => "Wei", "霼" => "Xi",
+ "霽" => "Ji", "霾" => "Mai", "霿" => "Meng", "é€" => "Meng", "é" => "Lei", "é‚" => "Li",
+ "éƒ" => "Huo", "é„" => "Ai", "é…" => "Fei", "é†" => "Dai", "é‡" => "Long", "éˆ" => "Ling",
+ "é‰" => "Ai", "é" => "Feng", "é‹" => "Li", "éŒ" => "Bao", "é" => "He", "é" => "He",
+ "é" => "Bing", "é‘" => "Qing", "é’" => "Qing", "é“" => "Jing", "é”" => "Tian", "é•" => "Zhen",
+ "é–" => "Jing", "é—" => "Cheng", "é˜" => "Qing", "é™" => "Jing", "é" => "Jing", "é›" => "Dian",
+ "éœ" => "Jing", "é" => "Tian", "é" => "Fei", "éŸ" => "Fei", "é " => "Kao", "é¡" => "Mi",
+ "é¢" => "Mian", "é£" => "Mian", "é¤" => "Pao", "é¥" => "Ye", "é¦" => "Tian", "é§" => "Hui",
+ "é¨" => "Ye", "é©" => "Ge", "éª" => "Ding", "é«" => "Cha", "é¬" => "Jian", "é" => "Ren",
+ "é®" => "Di", "é¯" => "Du", "é°" => "Wu", "é±" => "Ren", "é²" => "Qin", "é³" => "Jin",
+ "é´" => "Xue", "éµ" => "Niu", "é¶" => "Ba", "é·" => "Yin", "é¸" => "Sa", "é¹" => "Na",
+ "éº" => "Mo", "é»" => "Zu", "é¼" => "Da", "é½" => "Ban", "é¾" => "Yi", "é¿" => "Yao",
+ "é€" => "Tao", "é" => "Tuo", "é‚" => "Jia", "éƒ" => "Hong", "é„" => "Pao", "é…" => "Yang",
+ "é†" => "Tomo", "é‡" => "Yin", "éˆ" => "Jia", "é‰" => "Tao", "é" => "Ji", "é‹" => "Xie",
+ "éŒ" => "An", "é" => "An", "é" => "Hen", "é" => "Gong", "é" => "Kohaze", "é‘" => "Da",
+ "é’" => "Qiao", "é“" => "Ting", "é”" => "Wan", "é•" => "Ying", "é–" => "Sui", "é—" => "Tiao",
+ "é˜" => "Qiao", "é™" => "Xuan", "é" => "Kong", "é›" => "Beng", "éœ" => "Ta", "é" => "Zhang",
+ "é" => "Bing", "éŸ" => "Kuo", "é " => "Ju", "é¡" => "La", "é¢" => "Xie", "é£" => "Rou",
+ "é¤" => "Bang", "é¥" => "Yi", "é¦" => "Qiu", "é§" => "Qiu", "é¨" => "He", "é©" => "Xiao",
+ "éª" => "Mu", "é«" => "Ju", "é¬" => "Jian", "é" => "Bian", "é®" => "Di", "é¯" => "Jian",
+ "é°" => "On", "é±" => "Tao", "é²" => "Gou", "é³" => "Ta", "é´" => "Bei", "éµ" => "Xie",
+ "é¶" => "Pan", "é·" => "Ge", "é¸" => "Bi", "é¹" => "Kuo", "éº" => "Tang", "é»" => "Lou",
+ "é¼" => "Gui", "é½" => "Qiao", "é¾" => "Xue", "é¿" => "Ji", "韀" => "Jian", "éŸ" => "Jiang",
+ "韂" => "Chan", "韃" => "Da", "韄" => "Huo", "韅" => "Xian", "韆" => "Qian", "韇" => "Du",
+ "韈" => "Wa", "韉" => "Jian", "éŸ" => "Lan", "韋" => "Wei", "韌" => "Ren", "éŸ" => "Fu",
+ "éŸ" => "Mei", "éŸ" => "Juan", "éŸ" => "Ge", "韑" => "Wei", "韒" => "Qiao", "韓" => "Han",
+ "韔" => "Chang", "韖" => "Rou", "韗" => "Xun", "韘" => "She", "韙" => "Wei", "éŸ" => "Ge",
+ "韛" => "Bei", "韜" => "Tao", "éŸ" => "Gou", "éŸ" => "Yun", "éŸ " => "Bi", "韡" => "Wei",
+ "韢" => "Hui", "韣" => "Du", "韤" => "Wa", "韥" => "Du", "韦" => "Wei", "韧" => "Ren",
+ "韨" => "Fu", "韩" => "Han", "韪" => "Wei", "韫" => "Yun", "韬" => "Tao", "éŸ" => "Jiu",
+ "韮" => "Jiu", "韯" => "Xian", "韰" => "Xie", "韱" => "Xian", "韲" => "Ji", "音" => "Yin",
+ "韴" => "Za", "韵" => "Yun", "韶" => "Shao", "韷" => "Le", "韸" => "Peng", "韹" => "Heng",
+ "韺" => "Ying", "韻" => "Yun", "韼" => "Peng", "韽" => "Yin", "韾" => "Yin", "響" => "Xiang",
+ "é " => "Ye", "é ‚" => "Ding", "é ƒ" => "Qing", "é „" => "Pan", "é …" => "Xiang", "é †" => "Shun",
+ "é ‡" => "Han", "é ˆ" => "Xu", "é ‰" => "Yi", "é " => "Xu", "é ‹" => "Gu", "é Œ" => "Song",
+ "é " => "Kui", "é " => "Qi", "é " => "Hang", "é " => "Yu", "é ‘" => "Wan", "é ’" => "Ban",
+ "é “" => "Dun", "é ”" => "Di", "é •" => "Dan", "é –" => "Pan", "é —" => "Po", "é ˜" => "Ling",
+ "é ™" => "Ce", "é " => "Jing", "é ›" => "Lei", "é œ" => "He", "é " => "Qiao", "é " => "E",
+ "é Ÿ" => "E", "é " => "Wei", "é ¡" => "Jie", "é ¢" => "Gua", "é £" => "Shen", "é ¤" => "Yi",
+ "é ¥" => "Shen", "é ¦" => "Hai", "é §" => "Dui", "é ¨" => "Pian", "é ©" => "Ping", "é ª" => "Lei",
+ "é «" => "Fu", "é ¬" => "Jia", "é " => "Tou", "é ®" => "Hui", "é ¯" => "Kui", "é °" => "Jia",
+ "é ±" => "Le", "é ²" => "Tian", "é ³" => "Cheng", "é ´" => "Ying", "é µ" => "Jun", "é ¶" => "Hu",
+ "é ·" => "Han", "é ¸" => "Jing", "é ¹" => "Tui", "é º" => "Tui", "é »" => "Pin", "é ¼" => "Lai",
+ "é ½" => "Tui", "é ¾" => "Zi", "é ¿" => "Zi", "é¡€" => "Chui", "é¡" => "Ding", "é¡‚" => "Lai",
+ "顃" => "Yan", "顄" => "Han", "顅" => "Jian", "顆" => "Ke", "顇" => "Cui", "顈" => "Jiong",
+ "顉" => "Qin", "é¡" => "Yi", "é¡‹" => "Sai", "é¡Œ" => "Ti", "é¡" => "E", "é¡" => "E",
+ "é¡" => "Yan", "é¡" => "Hun", "é¡‘" => "Kan", "é¡’" => "Yong", "é¡“" => "Zhuan", "é¡”" => "Yan",
+ "é¡•" => "Xian", "é¡–" => "Xin", "é¡—" => "Yi", "願" => "Yuan", "é¡™" => "Sang", "é¡" => "Dian",
+ "é¡›" => "Dian", "é¡œ" => "Jiang", "é¡" => "Ku", "é¡" => "Lei", "é¡Ÿ" => "Liao", "é¡ " => "Piao",
+ "顡" => "Yi", "顢" => "Man", "顣" => "Qi", "顤" => "Rao", "顥" => "Hao", "顦" => "Qiao",
+ "顧" => "Gu", "顨" => "Xun", "顩" => "Qian", "顪" => "Hui", "顫" => "Zhan", "顬" => "Ru",
+ "é¡" => "Hong", "é¡®" => "Bin", "顯" => "Xian", "é¡°" => "Pin", "顱" => "Lu", "顲" => "Lan",
+ "顳" => "Nie", "顴" => "Quan", "页" => "Ye", "顶" => "Ding", "顷" => "Qing", "顸" => "Han",
+ "项" => "Xiang", "顺" => "Shun", "须" => "Xu", "顼" => "Xu", "顽" => "Wan", "顾" => "Gu",
+ "é¡¿" => "Dun", "颀" => "Qi", "é¢" => "Ban", "颂" => "Song", "颃" => "Hang", "预" => "Yu",
+ "颅" => "Lu", "领" => "Ling", "颇" => "Po", "颈" => "Jing", "颉" => "Jie", "é¢" => "Jia",
+ "颋" => "Tian", "颌" => "Han", "é¢" => "Ying", "é¢" => "Jiong", "é¢" => "Hai", "é¢" => "Yi",
+ "频" => "Pin", "颒" => "Hui", "颓" => "Tui", "颔" => "Han", "颕" => "Ying", "颖" => "Ying",
+ "颗" => "Ke", "题" => "Ti", "颙" => "Yong", "é¢" => "E", "颛" => "Zhuan", "颜" => "Yan",
+ "é¢" => "E", "é¢" => "Nie", "颟" => "Man", "é¢ " => "Dian", "颡" => "Sang", "颢" => "Hao",
+ "颣" => "Lei", "颤" => "Zhan", "颥" => "Ru", "颦" => "Pin", "颧" => "Quan", "風" => "Feng",
+ "颩" => "Biao", "颪" => "Oroshi", "颫" => "Fu", "颬" => "Xia", "é¢" => "Zhan", "颮" => "Biao",
+ "颯" => "Sa", "颰" => "Ba", "颱" => "Tai", "颲" => "Lie", "颳" => "Gua", "颴" => "Xuan",
+ "颵" => "Shao", "颶" => "Ju", "颷" => "Bi", "颸" => "Si", "颹" => "Wei", "颺" => "Yang",
+ "颻" => "Yao", "颼" => "Sou", "颽" => "Kai", "颾" => "Sao", "颿" => "Fan", "飀" => "Liu",
+ "é£" => "Xi", "飂" => "Liao", "飃" => "Piao", "飄" => "Piao", "飅" => "Liu", "飆" => "Biao",
+ "飇" => "Biao", "飈" => "Biao", "飉" => "Liao", "飋" => "Se", "飌" => "Feng", "é£" => "Biao",
+ "é£" => "Feng", "é£" => "Yang", "é£" => "Zhan", "飑" => "Biao", "飒" => "Sa", "飓" => "Ju",
+ "飔" => "Si", "飕" => "Sou", "飖" => "Yao", "飗" => "Liu", "飘" => "Piao", "飙" => "Biao",
+ "é£" => "Biao", "飛" => "Fei", "飜" => "Fan", "é£" => "Fei", "é£" => "Fei", "食" => "Shi",
+ "é£ " => "Shi", "飡" => "Can", "飢" => "Ji", "飣" => "Ding", "飤" => "Si", "飥" => "Tuo",
+ "飦" => "Zhan", "飧" => "Sun", "飨" => "Xiang", "飩" => "Tun", "飪" => "Ren", "飫" => "Yu",
+ "飬" => "Juan", "é£" => "Chi", "飮" => "Yin", "飯" => "Fan", "飰" => "Fan", "飱" => "Sun",
+ "飲" => "Yin", "飳" => "Zhu", "飴" => "Yi", "飵" => "Zhai", "飶" => "Bi", "飷" => "Jie",
+ "飸" => "Tao", "飹" => "Liu", "飺" => "Ci", "飻" => "Tie", "飼" => "Si", "飽" => "Bao",
+ "飾" => "Shi", "飿" => "Duo", "é¤" => "Ren", "餂" => "Tian", "餃" => "Jiao", "餄" => "Jia",
+ "餅" => "Bing", "餆" => "Yao", "餇" => "Tong", "餈" => "Ci", "餉" => "Xiang", "é¤" => "Yang",
+ "餋" => "Yang", "餌" => "Er", "é¤" => "Yan", "é¤" => "Le", "é¤" => "Yi", "é¤" => "Can",
+ "餑" => "Bo", "餒" => "Nei", "餓" => "E", "餔" => "Bu", "餕" => "Jun", "餖" => "Dou",
+ "餗" => "Su", "餘" => "Yu", "餙" => "Shi", "é¤" => "Yao", "餛" => "Hun", "餜" => "Guo",
+ "é¤" => "Shi", "é¤" => "Jian", "餟" => "Zhui", "é¤ " => "Bing", "餡" => "Xian", "餢" => "Bu",
+ "餣" => "Ye", "餤" => "Tan", "餥" => "Fei", "餦" => "Zhang", "餧" => "Wei", "館" => "Guan",
+ "餩" => "E", "餪" => "Nuan", "餫" => "Hun", "餬" => "Hu", "é¤" => "Huang", "餮" => "Tie",
+ "餯" => "Hui", "餰" => "Jian", "餱" => "Hou", "餲" => "He", "餳" => "Xing", "餴" => "Fen",
+ "餵" => "Wei", "餶" => "Gu", "餷" => "Cha", "餸" => "Song", "餹" => "Tang", "餺" => "Bo",
+ "餻" => "Gao", "餼" => "Xi", "餽" => "Kui", "餾" => "Liu", "餿" => "Sou", "饀" => "Tao",
+ "é¥" => "Ye", "饂" => "Yun", "饃" => "Mo", "饄" => "Tang", "饅" => "Man", "饆" => "Bi",
+ "饇" => "Yu", "饈" => "Xiu", "饉" => "Jin", "é¥" => "San", "饋" => "Kui", "饌" => "Zhuan",
+ "é¥" => "Shan", "é¥" => "Chi", "é¥" => "Dan", "é¥" => "Yi", "饑" => "Ji", "饒" => "Rao",
+ "饓" => "Cheng", "饔" => "Yong", "饕" => "Tao", "饖" => "Hui", "饗" => "Xiang", "饘" => "Zhan",
+ "饙" => "Fen", "é¥" => "Hai", "饛" => "Meng", "饜" => "Yan", "é¥" => "Mo", "é¥" => "Chan",
+ "饟" => "Xiang", "é¥ " => "Luo", "饡" => "Zuan", "饢" => "Nang", "饣" => "Shi", "饤" => "Ding",
+ "饥" => "Ji", "饦" => "Tuo", "饧" => "Xing", "饨" => "Tun", "饩" => "Xi", "饪" => "Ren",
+ "饫" => "Yu", "饬" => "Chi", "é¥" => "Fan", "饮" => "Yin", "饯" => "Jian", "饰" => "Shi",
+ "饱" => "Bao", "饲" => "Si", "饳" => "Duo", "饴" => "Yi", "饵" => "Er", "饶" => "Rao",
+ "饷" => "Xiang", "饸" => "Jia", "饹" => "Le", "饺" => "Jiao", "饻" => "Yi", "饼" => "Bing",
+ "饽" => "Bo", "饾" => "Dou", "饿" => "E", "馀" => "Yu", "é¦" => "Nei", "馂" => "Jun",
+ "馃" => "Guo", "馄" => "Hun", "馅" => "Xian", "馆" => "Guan", "馇" => "Cha", "馈" => "Kui",
+ "馉" => "Gu", "é¦" => "Sou", "馋" => "Chan", "馌" => "Ye", "é¦" => "Mo", "é¦" => "Bo",
+ "é¦" => "Liu", "é¦" => "Xiu", "馑" => "Jin", "馒" => "Man", "馓" => "San", "馔" => "Zhuan",
+ "馕" => "Nang", "首" => "Shou", "馗" => "Kui", "馘" => "Guo", "香" => "Xiang", "é¦" => "Fen",
+ "馛" => "Ba", "馜" => "Ni", "é¦" => "Bi", "é¦" => "Bo", "馟" => "Tu", "é¦ " => "Han",
+ "馡" => "Fei", "馢" => "Jian", "馣" => "An", "馤" => "Ai", "馥" => "Fu", "馦" => "Xian",
+ "馧" => "Wen", "馨" => "Xin", "馩" => "Fen", "馪" => "Bin", "馫" => "Xing", "馬" => "Ma",
+ "é¦" => "Yu", "馮" => "Feng", "馯" => "Han", "馰" => "Di", "馱" => "Tuo", "馲" => "Tuo",
+ "馳" => "Chi", "馴" => "Xun", "馵" => "Zhu", "馶" => "Zhi", "馷" => "Pei", "馸" => "Xin",
+ "馹" => "Ri", "馺" => "Sa", "馻" => "Yin", "馼" => "Wen", "馽" => "Zhi", "馾" => "Dan",
+ "馿" => "Lu", "駀" => "You", "é§" => "Bo", "駂" => "Bao", "駃" => "Kuai", "駄" => "Tuo",
+ "駅" => "Yi", "駆" => "Qu", "駈" => "Qu", "駉" => "Jiong", "é§" => "Bo", "駋" => "Zhao",
+ "駌" => "Yuan", "é§" => "Peng", "é§" => "Zhou", "é§" => "Ju", "é§" => "Zhu", "駑" => "Nu",
+ "駒" => "Ju", "駓" => "Pi", "駔" => "Zang", "駕" => "Jia", "駖" => "Ling", "駗" => "Zhen",
+ "駘" => "Tai", "駙" => "Fu", "é§" => "Yang", "駛" => "Shi", "駜" => "Bi", "é§" => "Tuo",
+ "é§" => "Tuo", "駟" => "Si", "é§ " => "Liu", "駡" => "Ma", "駢" => "Pian", "駣" => "Tao",
+ "駤" => "Zhi", "駥" => "Rong", "駦" => "Teng", "駧" => "Dong", "駨" => "Xun", "駩" => "Quan",
+ "駪" => "Shen", "駫" => "Jiong", "駬" => "Er", "é§" => "Hai", "駮" => "Bo", "駯" => "Zhu",
+ "駰" => "Yin", "駱" => "Luo", "駲" => "Shuu", "駳" => "Dan", "駴" => "Xie", "駵" => "Liu",
+ "駶" => "Ju", "駷" => "Song", "駸" => "Qin", "駹" => "Mang", "駺" => "Liang", "駻" => "Han",
+ "駼" => "Tu", "駽" => "Xuan", "駾" => "Tui", "駿" => "Jun", "é¨" => "Cheng", "騂" => "Xin",
+ "騃" => "Ai", "騄" => "Lu", "騅" => "Zhui", "騆" => "Zhou", "騇" => "She", "騈" => "Pian",
+ "騉" => "Kun", "é¨" => "Tao", "騋" => "Lai", "騌" => "Zong", "é¨" => "Ke", "é¨" => "Qi",
+ "é¨" => "Qi", "é¨" => "Yan", "騑" => "Fei", "騒" => "Sao", "験" => "Yan", "騔" => "Jie",
+ "騕" => "Yao", "騖" => "Wu", "騗" => "Pian", "騘" => "Cong", "騙" => "Pian", "é¨" => "Qian",
+ "騛" => "Fei", "騜" => "Huang", "é¨" => "Jian", "é¨" => "Huo", "騟" => "Yu", "é¨ " => "Ti",
+ "騡" => "Quan", "騢" => "Xia", "騣" => "Zong", "騤" => "Kui", "騥" => "Rou", "騦" => "Si",
+ "騧" => "Gua", "騨" => "Tuo", "騩" => "Kui", "騪" => "Sou", "騫" => "Qian", "騬" => "Cheng",
+ "é¨" => "Zhi", "騮" => "Liu", "騯" => "Pang", "騰" => "Teng", "騱" => "Xi", "騲" => "Cao",
+ "騳" => "Du", "騴" => "Yan", "騵" => "Yuan", "騶" => "Zou", "騷" => "Sao", "騸" => "Shan",
+ "騹" => "Li", "騺" => "Zhi", "騻" => "Shuang", "騼" => "Lu", "騽" => "Xi", "騾" => "Luo",
+ "騿" => "Zhang", "é©€" => "Mo", "é©" => "Ao", "é©‚" => "Can", "驃" => "Piao", "é©„" => "Cong",
+ "é©…" => "Qu", "驆" => "Bi", "驇" => "Zhi", "驈" => "Yu", "驉" => "Xu", "é©" => "Hua",
+ "é©‹" => "Bo", "é©Œ" => "Su", "é©" => "Xiao", "é©" => "Lin", "é©" => "Chan", "é©" => "Dun",
+ "é©‘" => "Liu", "é©’" => "Tuo", "é©“" => "Zeng", "é©”" => "Tan", "é©•" => "Jiao", "é©–" => "Tie",
+ "é©—" => "Yan", "驘" => "Luo", "é©™" => "Zhan", "é©" => "Jing", "é©›" => "Yi", "é©œ" => "Ye",
+ "é©" => "Tuo", "é©" => "Bin", "é©Ÿ" => "Zou", "é© " => "Yan", "é©¡" => "Peng", "é©¢" => "Lu",
+ "驣" => "Teng", "驤" => "Xiang", "驥" => "Ji", "驦" => "Shuang", "驧" => "Ju", "驨" => "Xi",
+ "é©©" => "Huan", "驪" => "Li", "é©«" => "Biao", "马" => "Ma", "é©" => "Yu", "é©®" => "Tuo",
+ "驯" => "Xun", "驰" => "Chi", "驱" => "Qu", "驲" => "Ri", "驳" => "Bo", "驴" => "Lu",
+ "驵" => "Zang", "驶" => "Shi", "驷" => "Si", "驸" => "Fu", "驹" => "Ju", "驺" => "Zou",
+ "驻" => "Zhu", "驼" => "Tuo", "驽" => "Nu", "驾" => "Jia", "驿" => "Yi", "骀" => "Tai",
+ "éª" => "Xiao", "骂" => "Ma", "骃" => "Yin", "骄" => "Jiao", "骅" => "Hua", "骆" => "Luo",
+ "骇" => "Hai", "骈" => "Pian", "骉" => "Biao", "éª" => "Li", "骋" => "Cheng", "验" => "Yan",
+ "éª" => "Xin", "éª" => "Qin", "éª" => "Jun", "éª" => "Qi", "骑" => "Qi", "骒" => "Ke",
+ "骓" => "Zhui", "骔" => "Zong", "骕" => "Su", "骖" => "Can", "骗" => "Pian", "骘" => "Zhi",
+ "骙" => "Kui", "éª" => "Sao", "骛" => "Wu", "骜" => "Ao", "éª" => "Liu", "éª" => "Qian",
+ "骟" => "Shan", "éª " => "Piao", "骡" => "Luo", "骢" => "Cong", "骣" => "Chan", "骤" => "Zou",
+ "骥" => "Ji", "骦" => "Shuang", "骧" => "Xiang", "骨" => "Gu", "骩" => "Wei", "骪" => "Wei",
+ "骫" => "Wei", "骬" => "Yu", "éª" => "Gan", "骮" => "Yi", "骯" => "Ang", "骰" => "Tou",
+ "骱" => "Xie", "骲" => "Bao", "骳" => "Bi", "骴" => "Chi", "骵" => "Ti", "骶" => "Di",
+ "骷" => "Ku", "骸" => "Hai", "骹" => "Qiao", "骺" => "Gou", "骻" => "Kua", "骼" => "Ge",
+ "骽" => "Tui", "骾" => "Geng", "骿" => "Pian", "é«€" => "Bi", "é«" => "Ke", "é«‚" => "Ka",
+ "髃" => "Yu", "髄" => "Sui", "髅" => "Lou", "髆" => "Bo", "髇" => "Xiao", "髈" => "Pang",
+ "髉" => "Bo", "é«" => "Ci", "é«‹" => "Kuan", "é«Œ" => "Bin", "é«" => "Mo", "é«" => "Liao",
+ "é«" => "Lou", "é«" => "Nao", "é«‘" => "Du", "é«’" => "Zang", "é«“" => "Sui", "é«”" => "Ti",
+ "é«•" => "Bin", "é«–" => "Kuan", "é«—" => "Lu", "高" => "Gao", "é«™" => "Gao", "é«" => "Qiao",
+ "é«›" => "Kao", "é«œ" => "Qiao", "é«" => "Lao", "é«" => "Zao", "é«Ÿ" => "Biao", "é« " => "Kun",
+ "髡" => "Kun", "髢" => "Ti", "髣" => "Fang", "髤" => "Xiu", "髥" => "Ran", "髦" => "Mao",
+ "髧" => "Dan", "髨" => "Kun", "髩" => "Bin", "髪" => "Fa", "髫" => "Tiao", "髬" => "Peng",
+ "é«" => "Zi", "é«®" => "Fa", "髯" => "Ran", "é«°" => "Ti", "髱" => "Pao", "髲" => "Pi",
+ "髳" => "Mao", "髴" => "Fu", "髵" => "Er", "髶" => "Rong", "髷" => "Qu", "髸" => "Gong",
+ "髹" => "Xiu", "髺" => "Gua", "髻" => "Ji", "髼" => "Peng", "髽" => "Zhua", "髾" => "Shao",
+ "é«¿" => "Sha", "é¬" => "Li", "鬂" => "Bin", "鬃" => "Zong", "鬄" => "Ti", "鬅" => "Peng",
+ "鬆" => "Song", "鬇" => "Zheng", "鬈" => "Quan", "鬉" => "Zong", "é¬" => "Shun", "鬋" => "Jian",
+ "鬌" => "Duo", "é¬" => "Hu", "é¬" => "La", "é¬" => "Jiu", "é¬" => "Qi", "鬑" => "Lian",
+ "鬒" => "Zhen", "鬓" => "Bin", "鬔" => "Peng", "鬕" => "Mo", "鬖" => "San", "鬗" => "Man",
+ "鬘" => "Man", "鬙" => "Seng", "é¬" => "Xu", "鬛" => "Lie", "鬜" => "Qian", "é¬" => "Qian",
+ "é¬" => "Nong", "鬟" => "Huan", "é¬ " => "Kuai", "鬡" => "Ning", "鬢" => "Bin", "鬣" => "Lie",
+ "鬤" => "Rang", "鬥" => "Dou", "鬦" => "Dou", "鬧" => "Nao", "鬨" => "Hong", "鬩" => "Xi",
+ "鬪" => "Dou", "鬫" => "Han", "鬬" => "Dou", "é¬" => "Dou", "鬮" => "Jiu", "鬯" => "Chang",
+ "鬰" => "Yu", "鬱" => "Yu", "鬲" => "Li", "鬳" => "Juan", "鬴" => "Fu", "鬵" => "Qian",
+ "鬶" => "Gui", "鬷" => "Zong", "鬸" => "Liu", "鬹" => "Gui", "鬺" => "Shang", "鬻" => "Yu",
+ "鬼" => "Gui", "鬽" => "Mei", "鬾" => "Ji", "鬿" => "Qi", "é€" => "Jie", "é" => "Kui",
+ "é‚" => "Hun", "éƒ" => "Ba", "é„" => "Po", "é…" => "Mei", "é†" => "Xu", "é‡" => "Yan",
+ "éˆ" => "Xiao", "é‰" => "Liang", "é" => "Yu", "é‹" => "Tui", "éŒ" => "Qi", "é" => "Wang",
+ "é" => "Liang", "é" => "Wei", "é" => "Jian", "é‘" => "Chi", "é’" => "Piao", "é“" => "Bi",
+ "é”" => "Mo", "é•" => "Ji", "é–" => "Xu", "é—" => "Chou", "é˜" => "Yan", "é™" => "Zhan",
+ "é" => "Yu", "é›" => "Dao", "éœ" => "Ren", "é" => "Ji", "é" => "Eri", "éŸ" => "Gong",
+ "é " => "Tuo", "é¡" => "Diao", "é¢" => "Ji", "é£" => "Xu", "é¤" => "E", "é¥" => "E",
+ "é¦" => "Sha", "é§" => "Hang", "é¨" => "Tun", "é©" => "Mo", "éª" => "Jie", "é«" => "Shen",
+ "é¬" => "Fan", "é" => "Yuan", "é®" => "Bi", "é¯" => "Lu", "é°" => "Wen", "é±" => "Hu",
+ "é²" => "Lu", "é³" => "Za", "é´" => "Fang", "éµ" => "Fen", "é¶" => "Na", "é·" => "You",
+ "é¸" => "Namazu", "é¹" => "Todo", "éº" => "He", "é»" => "Xia", "é¼" => "Qu", "é½" => "Han",
+ "é¾" => "Pi", "é¿" => "Ling", "鮀" => "Tuo", "é®" => "Bo", "鮂" => "Qiu", "鮃" => "Ping",
+ "鮄" => "Fu", "鮅" => "Bi", "鮆" => "Ji", "鮇" => "Wei", "鮈" => "Ju", "鮉" => "Diao",
+ "é®" => "Bo", "鮋" => "You", "鮌" => "Gun", "é®" => "Pi", "é®" => "Nian", "é®" => "Xing",
+ "é®" => "Tai", "鮑" => "Bao", "é®’" => "Fu", "鮓" => "Zha", "é®”" => "Ju", "鮕" => "Gu",
+ "é®–" => "Kajika", "é®—" => "Tong", "é®™" => "Ta", "é®" => "Jie", "é®›" => "Shu", "鮜" => "Hou",
+ "é®" => "Xiang", "é®" => "Er", "鮟" => "An", "é® " => "Wei", "鮡" => "Tiao", "鮢" => "Zhu",
+ "鮣" => "Yin", "鮤" => "Lie", "鮥" => "Luo", "鮦" => "Tong", "鮧" => "Yi", "鮨" => "Qi",
+ "鮩" => "Bing", "鮪" => "Wei", "鮫" => "Jiao", "鮬" => "Bu", "é®" => "Gui", "é®®" => "Xian",
+ "鮯" => "Ge", "鮰" => "Hui", "鮱" => "Bora", "鮲" => "Mate", "鮳" => "Kao", "鮴" => "Gori",
+ "鮵" => "Duo", "鮶" => "Jun", "鮷" => "Ti", "鮸" => "Man", "鮹" => "Xiao", "鮺" => "Za",
+ "鮻" => "Sha", "鮼" => "Qin", "鮽" => "Yu", "鮾" => "Nei", "鮿" => "Zhe", "鯀" => "Gun",
+ "é¯" => "Geng", "鯂" => "Su", "鯃" => "Wu", "鯄" => "Qiu", "鯅" => "Ting", "鯆" => "Fu",
+ "鯇" => "Wan", "鯈" => "You", "鯉" => "Li", "é¯" => "Sha", "鯋" => "Sha", "鯌" => "Gao",
+ "é¯" => "Meng", "é¯" => "Ugui", "é¯" => "Asari", "é¯" => "Subashiri", "鯑" => "Kazunoko", "鯒" => "Yong",
+ "鯓" => "Ni", "鯔" => "Zi", "鯕" => "Qi", "鯖" => "Qing", "鯗" => "Xiang", "鯘" => "Nei",
+ "鯙" => "Chun", "é¯" => "Ji", "鯛" => "Diao", "鯜" => "Qie", "é¯" => "Gu", "é¯" => "Zhou",
+ "鯟" => "Dong", "é¯ " => "Lai", "鯡" => "Fei", "鯢" => "Ni", "鯣" => "Yi", "鯤" => "Kun",
+ "鯥" => "Lu", "鯦" => "Jiu", "鯧" => "Chang", "鯨" => "Jing", "鯩" => "Lun", "鯪" => "Ling",
+ "鯫" => "Zou", "鯬" => "Li", "é¯" => "Meng", "鯮" => "Zong", "鯯" => "Zhi", "鯰" => "Nian",
+ "鯱" => "Shachi", "鯲" => "Dojou", "鯳" => "Sukesou", "鯴" => "Shi", "鯵" => "Shen", "鯶" => "Hun",
+ "鯷" => "Shi", "鯸" => "Hou", "鯹" => "Xing", "鯺" => "Zhu", "鯻" => "La", "鯼" => "Zong",
+ "鯽" => "Ji", "鯾" => "Bian", "鯿" => "Bian", "é°" => "Quan", "é°‚" => "Ze", "é°ƒ" => "Wei",
+ "é°„" => "Wei", "é°…" => "Yu", "é°†" => "Qun", "é°‡" => "Rou", "é°ˆ" => "Die", "é°‰" => "Huang",
+ "é°" => "Lian", "é°‹" => "Yan", "é°Œ" => "Qiu", "é°" => "Qiu", "é°" => "Jian", "é°" => "Bi",
+ "é°" => "E", "é°‘" => "Yang", "é°’" => "Fu", "é°“" => "Sai", "é°”" => "Jian", "é°•" => "Xia",
+ "é°–" => "Tuo", "é°—" => "Hu", "é°˜" => "Muroaji", "é°™" => "Ruo", "é°" => "Haraka", "é°›" => "Wen",
+ "é°œ" => "Jian", "é°" => "Hao", "é°" => "Wu", "é°Ÿ" => "Fang", "é° " => "Sao", "é°¡" => "Liu",
+ "é°¢" => "Ma", "é°£" => "Shi", "é°¤" => "Shi", "é°¥" => "Yin", "é°¦" => "Z", "é°§" => "Teng",
+ "é°¨" => "Ta", "é°©" => "Yao", "é°ª" => "Ge", "é°«" => "Rong", "é°¬" => "Qian", "é°" => "Qi",
+ "é°®" => "Wen", "é°¯" => "Ruo", "é°°" => "Hatahata", "é°±" => "Lian", "é°²" => "Ao", "é°³" => "Le",
+ "é°´" => "Hui", "é°µ" => "Min", "é°¶" => "Ji", "é°·" => "Tiao", "é°¸" => "Qu", "é°¹" => "Jian",
+ "é°º" => "Sao", "é°»" => "Man", "é°¼" => "Xi", "é°½" => "Qiu", "é°¾" => "Biao", "é°¿" => "Ji",
+ "é±€" => "Ji", "é±" => "Zhu", "鱂" => "Jiang", "鱃" => "Qiu", "鱄" => "Zhuan", "é±…" => "Yong",
+ "鱆" => "Zhang", "鱇" => "Kang", "鱈" => "Xue", "鱉" => "Bie", "é±" => "Jue", "鱋" => "Qu",
+ "鱌" => "Xiang", "é±" => "Bo", "é±" => "Jiao", "é±" => "Xun", "é±" => "Su", "鱑" => "Huang",
+ "鱒" => "Zun", "鱓" => "Shan", "鱔" => "Shan", "鱕" => "Fan", "鱖" => "Jue", "鱗" => "Lin",
+ "鱘" => "Xun", "é±™" => "Miao", "é±" => "Xi", "é±›" => "Eso", "鱜" => "Kyou", "é±" => "Fen",
+ "é±" => "Guan", "鱟" => "Hou", "é± " => "Kuai", "鱡" => "Zei", "é±¢" => "Sao", "é±£" => "Zhan",
+ "鱤" => "Gan", "鱥" => "Gui", "鱦" => "Sheng", "鱧" => "Li", "鱨" => "Chang", "鱩" => "Hatahata",
+ "鱪" => "Shiira", "鱫" => "Mutsu", "鱬" => "Ru", "é±" => "Ji", "é±®" => "Xu", "鱯" => "Huo",
+ "é±°" => "Shiira", "é±±" => "Li", "é±²" => "Lie", "é±³" => "Li", "é±´" => "Mie", "é±µ" => "Zhen",
+ "鱶" => "Xiang", "鱷" => "E", "鱸" => "Lu", "鱹" => "Guan", "鱺" => "Li", "鱻" => "Xian",
+ "é±¼" => "Yu", "é±½" => "Dao", "é±¾" => "Ji", "鱿" => "You", "é²€" => "Tun", "é²" => "Lu",
+ "鲂" => "Fang", "鲃" => "Ba", "鲄" => "He", "鲅" => "Bo", "鲆" => "Ping", "鲇" => "Nian",
+ "鲈" => "Lu", "鲉" => "You", "é²" => "Zha", "鲋" => "Fu", "鲌" => "Bo", "é²" => "Bao",
+ "é²" => "Hou", "é²" => "Pi", "é²" => "Tai", "鲑" => "Gui", "é²’" => "Jie", "鲓" => "Kao",
+ "鲔" => "Wei", "鲕" => "Er", "鲖" => "Tong", "鲗" => "Ze", "鲘" => "Hou", "鲙" => "Kuai",
+ "é²" => "Ji", "é²›" => "Jiao", "鲜" => "Xian", "é²" => "Za", "é²" => "Xiang", "鲟" => "Xun",
+ "é² " => "Geng", "鲡" => "Li", "é²¢" => "Lian", "é²£" => "Jian", "鲤" => "Li", "é²¥" => "Shi",
+ "鲦" => "Tiao", "鲧" => "Gun", "鲨" => "Sha", "鲩" => "Wan", "鲪" => "Jun", "鲫" => "Ji",
+ "鲬" => "Yong", "é²" => "Qing", "é²®" => "Ling", "鲯" => "Qi", "é²°" => "Zou", "é²±" => "Fei",
+ "鲲" => "Kun", "鲳" => "Chang", "鲴" => "Gu", "鲵" => "Ni", "鲶" => "Nian", "鲷" => "Diao",
+ "鲸" => "Jing", "鲹" => "Shen", "鲺" => "Shi", "鲻" => "Zi", "鲼" => "Fen", "鲽" => "Die",
+ "é²¾" => "Bi", "鲿" => "Chang", "é³€" => "Shi", "é³" => "Wen", "鳂" => "Wei", "鳃" => "Sai",
+ "鳄" => "E", "鳅" => "Qiu", "鳆" => "Fu", "鳇" => "Huang", "鳈" => "Quan", "鳉" => "Jiang",
+ "é³" => "Bian", "鳋" => "Sao", "鳌" => "Ao", "é³" => "Qi", "é³" => "Ta", "é³" => "Yin",
+ "é³" => "Yao", "鳑" => "Fang", "é³’" => "Jian", "鳓" => "Le", "é³”" => "Biao", "鳕" => "Xue",
+ "é³–" => "Bie", "é³—" => "Man", "鳘" => "Min", "é³™" => "Yong", "é³" => "Wei", "é³›" => "Xi",
+ "鳜" => "Jue", "é³" => "Shan", "é³" => "Lin", "鳟" => "Zun", "é³ " => "Huo", "鳡" => "Gan",
+ "鳢" => "Li", "鳣" => "Zhan", "鳤" => "Guan", "鳥" => "Niao", "鳦" => "Yi", "鳧" => "Fu",
+ "鳨" => "Li", "鳩" => "Jiu", "鳪" => "Bu", "鳫" => "Yan", "鳬" => "Fu", "é³" => "Diao",
+ "鳮" => "Ji", "鳯" => "Feng", "鳰" => "Nio", "鳱" => "Gan", "鳲" => "Shi", "鳳" => "Feng",
+ "鳴" => "Ming", "鳵" => "Bao", "鳶" => "Yuan", "鳷" => "Zhi", "鳸" => "Hu", "鳹" => "Qin",
+ "鳺" => "Fu", "鳻" => "Fen", "鳼" => "Wen", "鳽" => "Jian", "鳾" => "Shi", "鳿" => "Yu",
+ "é´" => "Yiao", "é´‚" => "Jue", "é´ƒ" => "Jue", "é´„" => "Pi", "é´…" => "Huan", "é´†" => "Zhen",
+ "é´‡" => "Bao", "é´ˆ" => "Yan", "é´‰" => "Ya", "é´" => "Zheng", "é´‹" => "Fang", "é´Œ" => "Feng",
+ "é´" => "Wen", "é´" => "Ou", "é´" => "Te", "é´" => "Jia", "é´‘" => "Nu", "é´’" => "Ling",
+ "é´“" => "Mie", "é´”" => "Fu", "é´•" => "Tuo", "é´–" => "Wen", "é´—" => "Li", "é´˜" => "Bian",
+ "é´™" => "Zhi", "é´" => "Ge", "é´›" => "Yuan", "é´œ" => "Zi", "é´" => "Qu", "é´" => "Xiao",
+ "é´Ÿ" => "Zhi", "é´ " => "Dan", "é´¡" => "Ju", "é´¢" => "You", "é´£" => "Gu", "é´¤" => "Zhong",
+ "é´¥" => "Yu", "é´¦" => "Yang", "é´§" => "Rong", "é´¨" => "Ya", "é´©" => "Tie", "é´ª" => "Yu",
+ "é´«" => "Shigi", "é´¬" => "Ying", "é´" => "Zhui", "é´®" => "Wu", "é´¯" => "Er", "é´°" => "Gua",
+ "é´±" => "Ai", "é´²" => "Zhi", "é´³" => "Yan", "é´´" => "Heng", "é´µ" => "Jiao", "é´¶" => "Ji",
+ "é´·" => "Lie", "é´¸" => "Zhu", "é´¹" => "Ren", "é´º" => "Yi", "é´»" => "Hong", "é´¼" => "Luo",
+ "é´½" => "Ru", "é´¾" => "Mou", "é´¿" => "Ge", "éµ€" => "Ren", "éµ" => "Jiao", "鵂" => "Xiu",
+ "鵃" => "Zhou", "鵄" => "Zhi", "鵅" => "Luo", "鵆" => "Chidori", "鵇" => "Toki", "鵈" => "Ten",
+ "鵉" => "Luan", "éµ" => "Jia", "鵋" => "Ji", "鵌" => "Yu", "éµ" => "Huan", "éµ" => "Tuo",
+ "éµ" => "Bu", "éµ" => "Wu", "鵑" => "Juan", "éµ’" => "Yu", "鵓" => "Bo", "éµ”" => "Xun",
+ "鵕" => "Xun", "éµ–" => "Bi", "éµ—" => "Xi", "鵘" => "Jun", "éµ™" => "Ju", "éµ" => "Tu",
+ "éµ›" => "Jing", "鵜" => "Ti", "éµ" => "E", "éµ" => "E", "鵟" => "Kuang", "éµ " => "Hu",
+ "鵡" => "Wu", "鵢" => "Shen", "鵣" => "Lai", "鵤" => "Ikaruga", "鵥" => "Kakesu", "鵦" => "Lu",
+ "鵧" => "Ping", "鵨" => "Shu", "鵩" => "Fu", "鵪" => "An", "鵫" => "Zhao", "鵬" => "Peng",
+ "éµ" => "Qin", "éµ®" => "Qian", "鵯" => "Bei", "éµ°" => "Diao", "éµ±" => "Lu", "éµ²" => "Que",
+ "鵳" => "Jian", "鵴" => "Ju", "鵵" => "Tu", "鵶" => "Ya", "鵷" => "Yuan", "鵸" => "Qi",
+ "鵹" => "Li", "鵺" => "Ye", "鵻" => "Zhui", "鵼" => "Kong", "鵽" => "Zhui", "鵾" => "Kun",
+ "鵿" => "Sheng", "鶀" => "Qi", "é¶" => "Jing", "鶂" => "Yi", "鶃" => "Yi", "鶄" => "Jing",
+ "鶅" => "Zi", "鶆" => "Lai", "鶇" => "Dong", "鶈" => "Qi", "鶉" => "Chun", "é¶" => "Geng",
+ "鶋" => "Ju", "鶌" => "Qu", "é¶" => "Isuka", "é¶" => "Kikuitadaki", "é¶" => "Ji", "é¶" => "Shu",
+ "鶒" => "Chi", "鶓" => "Miao", "鶔" => "Rou", "鶕" => "An", "鶖" => "Qiu", "鶗" => "Ti",
+ "鶘" => "Hu", "鶙" => "Ti", "é¶" => "E", "鶛" => "Jie", "鶜" => "Mao", "é¶" => "Fu",
+ "é¶" => "Chun", "鶟" => "Tu", "é¶ " => "Yan", "鶡" => "He", "鶢" => "Yuan", "鶣" => "Pian",
+ "鶤" => "Yun", "鶥" => "Mei", "鶦" => "Hu", "鶧" => "Ying", "鶨" => "Dun", "鶩" => "Mu",
+ "鶪" => "Ju", "鶫" => "Tsugumi", "鶬" => "Cang", "é¶" => "Fang", "鶮" => "Gu", "鶯" => "Ying",
+ "鶰" => "Yuan", "鶱" => "Xuan", "鶲" => "Weng", "鶳" => "Shi", "鶴" => "He", "鶵" => "Chu",
+ "鶶" => "Tang", "鶷" => "Xia", "鶸" => "Ruo", "鶹" => "Liu", "鶺" => "Ji", "鶻" => "Gu",
+ "鶼" => "Jian", "鶽" => "Zhun", "鶾" => "Han", "鶿" => "Zi", "é·€" => "Zi", "é·" => "Ni",
+ "é·‚" => "Yao", "é·ƒ" => "Yan", "é·„" => "Ji", "é·…" => "Li", "é·†" => "Tian", "é·‡" => "Kou",
+ "é·ˆ" => "Ti", "é·‰" => "Ti", "é·" => "Ni", "é·‹" => "Tu", "é·Œ" => "Ma", "é·" => "Jiao",
+ "é·" => "Gao", "é·" => "Tian", "é·" => "Chen", "é·‘" => "Li", "é·’" => "Zhuan", "é·“" => "Zhe",
+ "é·”" => "Ao", "é·•" => "Yao", "é·–" => "Yi", "é·—" => "Ou", "é·˜" => "Chi", "é·™" => "Zhi",
+ "é·" => "Liao", "é·›" => "Rong", "é·œ" => "Lou", "é·" => "Bi", "é·" => "Shuang", "é·Ÿ" => "Zhuo",
+ "é· " => "Yu", "é·¡" => "Wu", "é·¢" => "Jue", "é·£" => "Yin", "é·¤" => "Quan", "é·¥" => "Si",
+ "é·¦" => "Jiao", "é·§" => "Yi", "é·¨" => "Hua", "é·©" => "Bi", "é·ª" => "Ying", "é·«" => "Su",
+ "é·¬" => "Huang", "é·" => "Fan", "é·®" => "Jiao", "é·¯" => "Liao", "é·°" => "Yan", "é·±" => "Kao",
+ "é·²" => "Jiu", "é·³" => "Xian", "é·´" => "Xian", "é·µ" => "Tu", "é·¶" => "Mai", "é··" => "Zun",
+ "é·¸" => "Yu", "é·¹" => "Ying", "é·º" => "Lu", "é·»" => "Tuan", "é·¼" => "Xian", "é·½" => "Xue",
+ "é·¾" => "Yi", "é·¿" => "Pi", "é¸" => "Luo", "鸂" => "Qi", "鸃" => "Yi", "鸄" => "Ji",
+ "鸅" => "Zhe", "鸆" => "Yu", "鸇" => "Zhan", "鸈" => "Ye", "鸉" => "Yang", "é¸" => "Pi",
+ "鸋" => "Ning", "鸌" => "Huo", "é¸" => "Mi", "é¸" => "Ying", "é¸" => "Meng", "é¸" => "Di",
+ "鸑" => "Yue", "鸒" => "Yu", "鸓" => "Lei", "鸔" => "Bao", "鸕" => "Lu", "鸖" => "He",
+ "鸗" => "Long", "鸘" => "Shuang", "鸙" => "Yue", "é¸" => "Ying", "鸛" => "Guan", "鸜" => "Qu",
+ "é¸" => "Li", "é¸" => "Luan", "鸟" => "Niao", "é¸ " => "Jiu", "鸡" => "Ji", "鸢" => "Yuan",
+ "鸣" => "Ming", "鸤" => "Shi", "鸥" => "Ou", "鸦" => "Ya", "鸧" => "Cang", "鸨" => "Bao",
+ "鸩" => "Zhen", "鸪" => "Gu", "鸫" => "Dong", "鸬" => "Lu", "é¸" => "Ya", "鸮" => "Xiao",
+ "鸯" => "Yang", "鸰" => "Ling", "鸱" => "Zhi", "鸲" => "Qu", "鸳" => "Yuan", "鸴" => "Xue",
+ "鸵" => "Tuo", "鸶" => "Si", "鸷" => "Zhi", "鸸" => "Er", "鸹" => "Gua", "鸺" => "Xiu",
+ "鸻" => "Heng", "鸼" => "Zhou", "鸽" => "Ge", "鸾" => "Luan", "鸿" => "Hong", "鹀" => "Wu",
+ "é¹" => "Bo", "鹂" => "Li", "鹃" => "Juan", "鹄" => "Hu", "é¹…" => "E", "鹆" => "Yu",
+ "鹇" => "Xian", "鹈" => "Ti", "鹉" => "Wu", "é¹" => "Que", "鹋" => "Miao", "鹌" => "An",
+ "é¹" => "Kun", "é¹" => "Bei", "é¹" => "Peng", "é¹" => "Qian", "鹑" => "Chun", "é¹’" => "Geng",
+ "鹓" => "Yuan", "鹔" => "Su", "鹕" => "Hu", "鹖" => "He", "鹗" => "E", "鹘" => "Gu",
+ "é¹™" => "Qiu", "é¹" => "Zi", "é¹›" => "Mei", "鹜" => "Mu", "é¹" => "Ni", "é¹" => "Yao",
+ "鹟" => "Weng", "é¹ " => "Liu", "鹡" => "Ji", "é¹¢" => "Ni", "é¹£" => "Jian", "鹤" => "He",
+ "鹥" => "Yi", "鹦" => "Ying", "鹧" => "Zhe", "鹨" => "Liao", "鹩" => "Liao", "鹪" => "Jiao",
+ "鹫" => "Jiu", "鹬" => "Yu", "é¹" => "Lu", "é¹®" => "Xuan", "鹯" => "Zhan", "é¹°" => "Ying",
+ "鹱" => "Huo", "鹲" => "Meng", "鹳" => "Guan", "鹴" => "Shuang", "鹵" => "Lu", "鹶" => "Jin",
+ "鹷" => "Ling", "鹸" => "Jian", "鹹" => "Xian", "鹺" => "Cuo", "鹻" => "Jian", "鹼" => "Jian",
+ "é¹½" => "Yan", "é¹¾" => "Cuo", "鹿" => "Lu", "麀" => "You", "éº" => "Cu", "麂" => "Ji",
+ "麃" => "Biao", "麄" => "Cu", "麅" => "Biao", "麆" => "Zhu", "麇" => "Jun", "麈" => "Zhu",
+ "麉" => "Jian", "éº" => "Mi", "麋" => "Mi", "麌" => "Wu", "éº" => "Liu", "éº" => "Chen",
+ "éº" => "Jun", "éº" => "Lin", "麑" => "Ni", "麒" => "Qi", "麓" => "Lu", "麔" => "Jiu",
+ "麕" => "Jun", "麖" => "Jing", "麗" => "Li", "麘" => "Xiang", "麙" => "Yan", "éº" => "Jia",
+ "麛" => "Mi", "麜" => "Li", "éº" => "She", "éº" => "Zhang", "麟" => "Lin", "éº " => "Jing",
+ "麡" => "Ji", "麢" => "Ling", "麣" => "Yan", "麤" => "Cu", "麥" => "Mai", "麦" => "Mai",
+ "麧" => "Ge", "麨" => "Chao", "麩" => "Fu", "麪" => "Mian", "麫" => "Mian", "麬" => "Fu",
+ "éº" => "Pao", "麮" => "Qu", "麯" => "Qu", "麰" => "Mou", "麱" => "Fu", "麲" => "Xian",
+ "麳" => "Lai", "麴" => "Qu", "麵" => "Mian", "麷" => "Feng", "麸" => "Fu", "麹" => "Qu",
+ "麺" => "Mian", "麻" => "Ma", "麼" => "Mo", "麽" => "Mo", "麾" => "Hui", "麿" => "Ma",
+ "黀" => "Zou", "é»" => "Nen", "黂" => "Fen", "黃" => "Huang", "黄" => "Huang", "é»…" => "Jin",
+ "黆" => "Guang", "黇" => "Tian", "黈" => "Tou", "黉" => "Heng", "é»" => "Xi", "黋" => "Kuang",
+ "黌" => "Heng", "é»" => "Shu", "é»" => "Li", "é»" => "Nian", "é»" => "Chi", "黑" => "Hei",
+ "黒" => "Hei", "黓" => "Yi", "黔" => "Qian", "黕" => "Dan", "黖" => "Xi", "黗" => "Tuan",
+ "默" => "Mo", "é»™" => "Mo", "é»" => "Qian", "é»›" => "Dai", "黜" => "Chu", "é»" => "You",
+ "é»" => "Dian", "黟" => "Yi", "é» " => "Xia", "黡" => "Yan", "黢" => "Qu", "黣" => "Mei",
+ "黤" => "Yan", "黥" => "Jing", "黦" => "Yu", "黧" => "Li", "黨" => "Dang", "黩" => "Du",
+ "黪" => "Can", "黫" => "Yin", "黬" => "An", "é»" => "Yan", "é»®" => "Tan", "黯" => "An",
+ "黰" => "Zhen", "黱" => "Dai", "黲" => "Can", "黳" => "Yi", "黴" => "Mei", "黵" => "Dan",
+ "黶" => "Yan", "黷" => "Du", "黸" => "Lu", "黹" => "Zhi", "黺" => "Fen", "黻" => "Fu",
+ "黼" => "Fu", "黽" => "Min", "黾" => "Min", "黿" => "Yuan", "é¼" => "Qu", "鼂" => "Chao",
+ "鼃" => "Wa", "鼄" => "Zhu", "鼅" => "Zhi", "鼆" => "Mang", "鼇" => "Ao", "鼈" => "Bie",
+ "鼉" => "Tuo", "é¼" => "Bi", "鼋" => "Yuan", "鼌" => "Chao", "é¼" => "Tuo", "é¼" => "Ding",
+ "é¼" => "Mi", "é¼" => "Nai", "鼑" => "Ding", "é¼’" => "Zi", "鼓" => "Gu", "é¼”" => "Gu",
+ "鼕" => "Dong", "é¼–" => "Fen", "é¼—" => "Tao", "鼘" => "Yuan", "é¼™" => "Pi", "é¼" => "Chang",
+ "é¼›" => "Gao", "鼜" => "Qi", "é¼" => "Yuan", "é¼" => "Tang", "鼟" => "Teng", "é¼ " => "Shu",
+ "鼡" => "Shu", "鼢" => "Fen", "鼣" => "Fei", "鼤" => "Wen", "鼥" => "Ba", "鼦" => "Diao",
+ "鼧" => "Tuo", "鼨" => "Tong", "鼩" => "Qu", "鼪" => "Sheng", "鼫" => "Shi", "鼬" => "You",
+ "é¼" => "Shi", "é¼®" => "Ting", "鼯" => "Wu", "é¼°" => "Nian", "é¼±" => "Jing", "é¼²" => "Hun",
+ "鼳" => "Ju", "鼴" => "Yan", "鼵" => "Tu", "鼶" => "Ti", "鼷" => "Xi", "鼸" => "Xian",
+ "鼹" => "Yan", "鼺" => "Lei", "鼻" => "Bi", "鼼" => "Yao", "鼽" => "Qiu", "鼾" => "Han",
+ "鼿" => "Wu", "é½€" => "Wu", "é½" => "Hou", "齂" => "Xi", "齃" => "Ge", "齄" => "Zha",
+ "é½…" => "Xiu", "齆" => "Weng", "齇" => "Zha", "齈" => "Nong", "齉" => "Nang", "é½" => "Qi",
+ "齋" => "Zhai", "齌" => "Ji", "é½" => "Zi", "é½" => "Ji", "é½" => "Ji", "é½" => "Qi",
+ "齑" => "Ji", "齒" => "Chi", "齓" => "Chen", "齔" => "Chen", "齕" => "He", "齖" => "Ya",
+ "é½—" => "Ken", "齘" => "Xie", "é½™" => "Pao", "é½" => "Cuo", "é½›" => "Shi", "齜" => "Zi",
+ "é½" => "Chi", "é½" => "Nian", "齟" => "Ju", "é½ " => "Tiao", "齡" => "Ling", "é½¢" => "Ling",
+ "齣" => "Chu", "齤" => "Quan", "齥" => "Xie", "齦" => "Ken", "齧" => "Nie", "齨" => "Jiu",
+ "齩" => "Yao", "齪" => "Chuo", "齫" => "Kun", "齬" => "Yu", "é½" => "Chu", "é½®" => "Yi",
+ "齯" => "Ni", "齰" => "Cuo", "齱" => "Zou", "齲" => "Qu", "齳" => "Nen", "齴" => "Xian",
+ "齵" => "Ou", "齶" => "E", "齷" => "Wo", "齸" => "Yi", "齹" => "Chuo", "齺" => "Zou",
+ "齻" => "Dian", "齼" => "Chu", "齽" => "Jin", "齾" => "Ya", "齿" => "Chi", "龀" => "Chen",
+ "é¾" => "He", "龂" => "Ken", "龃" => "Ju", "龄" => "Ling", "é¾…" => "Pao", "龆" => "Tiao",
+ "龇" => "Zi", "龈" => "Ken", "龉" => "Yu", "é¾" => "Chuo", "龋" => "Qu", "龌" => "Wo",
+ "é¾" => "Long", "é¾" => "Pang", "é¾" => "Gong", "é¾" => "Pang", "龑" => "Yan", "é¾’" => "Long",
+ "龓" => "Long", "龔" => "Gong", "龕" => "Kan", "龖" => "Ta", "龗" => "Ling", "龘" => "Ta",
+ "é¾™" => "Long", "é¾" => "Gong", "é¾›" => "Kan", "龜" => "Gui", "é¾" => "Qiu", "é¾" => "Bie",
+ "龟" => "Gui", "é¾ " => "Yue", "龡" => "Chui", "é¾¢" => "He", "é¾£" => "Jue", "龤" => "Xie",
+ "é¾¥" => "Yu", "ê€" => "ix", "ꀂ" => "i", "ꀃ" => "ip", "ꀄ" => "iet", "ꀅ" => "iex",
+ "ꀆ" => "ie", "ꀇ" => "iep", "ꀈ" => "at", "ꀉ" => "ax", "ê€" => "a", "ꀋ" => "ap",
+ "ꀌ" => "uox", "ê€" => "uo", "ê€" => "uop", "ê€" => "ot", "ê€" => "ox", "ꀑ" => "o",
+ "ꀒ" => "op", "ꀓ" => "ex", "ꀔ" => "e", "ꀕ" => "wu", "ꀖ" => "bit", "ꀗ" => "bix",
+ "ꀘ" => "bi", "ꀙ" => "bip", "ê€" => "biet", "ꀛ" => "biex", "ꀜ" => "bie", "ê€" => "biep",
+ "ê€" => "bat", "ꀟ" => "bax", "ê€ " => "ba", "ꀡ" => "bap", "ꀢ" => "buox", "ꀣ" => "buo",
+ "ꀤ" => "buop", "ꀥ" => "bot", "ꀦ" => "box", "ꀧ" => "bo", "ꀨ" => "bop", "ꀩ" => "bex",
+ "ꀪ" => "be", "ꀫ" => "bep", "ꀬ" => "but", "ê€" => "bux", "ꀮ" => "bu", "ꀯ" => "bup",
+ "ꀰ" => "burx", "ꀱ" => "bur", "ꀲ" => "byt", "ꀳ" => "byx", "ꀴ" => "by", "ꀵ" => "byp",
+ "ꀶ" => "byrx", "ꀷ" => "byr", "ꀸ" => "pit", "ꀹ" => "pix", "ꀺ" => "pi", "ꀻ" => "pip",
+ "ꀼ" => "piex", "ꀽ" => "pie", "ꀾ" => "piep", "ꀿ" => "pat", "ê€" => "pax", "ê" => "pa",
+ "ê‚" => "pap", "êƒ" => "puox", "ê„" => "puo", "ê…" => "puop", "ê†" => "pot", "ê‡" => "pox",
+ "êˆ" => "po", "ê‰" => "pop", "ê" => "put", "ê‹" => "pux", "êŒ" => "pu", "ê" => "pup",
+ "ê" => "purx", "ê" => "pur", "ê" => "pyt", "ê‘" => "pyx", "ê’" => "py", "ê“" => "pyp",
+ "ê”" => "pyrx", "ê•" => "pyr", "ê–" => "bbit", "ê—" => "bbix", "ê˜" => "bbi", "ê™" => "bbip",
+ "ê" => "bbiet", "ê›" => "bbiex", "êœ" => "bbie", "ê" => "bbiep", "ê" => "bbat", "êŸ" => "bbax",
+ "ê " => "bba", "ê¡" => "bbap", "ê¢" => "bbuox", "ê£" => "bbuo", "ê¤" => "bbuop", "ê¥" => "bbot",
+ "ê¦" => "bbox", "ê§" => "bbo", "ê¨" => "bbop", "ê©" => "bbex", "êª" => "bbe", "ê«" => "bbep",
+ "ê¬" => "bbut", "ê" => "bbux", "ê®" => "bbu", "ê¯" => "bbup", "ê°" => "bburx", "ê±" => "bbur",
+ "ê²" => "bbyt", "ê³" => "bbyx", "ê´" => "bby", "êµ" => "bbyp", "ê¶" => "nbit", "ê·" => "nbix",
+ "ê¸" => "nbi", "ê¹" => "nbip", "êº" => "nbiex", "ê»" => "nbie", "ê¼" => "nbiep", "ê½" => "nbat",
+ "ê¾" => "nbax", "ê¿" => "nba", "ê‚€" => "nbap", "ê‚" => "nbot", "ê‚‚" => "nbox", "ꂃ" => "nbo",
+ "ꂄ" => "nbop", "ꂅ" => "nbut", "ꂆ" => "nbux", "ꂇ" => "nbu", "ꂈ" => "nbup", "ꂉ" => "nburx",
+ "ê‚" => "nbur", "ê‚‹" => "nbyt", "ê‚Œ" => "nbyx", "ê‚" => "nby", "ê‚" => "nbyp", "ê‚" => "nbyrx",
+ "ê‚" => "nbyr", "ê‚‘" => "hmit", "ê‚’" => "hmix", "ê‚“" => "hmi", "ê‚”" => "hmip", "ê‚•" => "hmiex",
+ "ê‚–" => "hmie", "ê‚—" => "hmiep", "ꂘ" => "hmat", "ê‚™" => "hmax", "ê‚" => "hma", "ê‚›" => "hmap",
+ "ê‚œ" => "hmuox", "ê‚" => "hmuo", "ê‚" => "hmuop", "ê‚Ÿ" => "hmot", "ê‚ " => "hmox", "ê‚¡" => "hmo",
+ "ꂢ" => "hmop", "ꂣ" => "hmut", "ꂤ" => "hmux", "ꂥ" => "hmu", "ꂦ" => "hmup", "ꂧ" => "hmurx",
+ "ꂨ" => "hmur", "ê‚©" => "hmyx", "ꂪ" => "hmy", "ê‚«" => "hmyp", "ꂬ" => "hmyrx", "ê‚" => "hmyr",
+ "ꂮ" => "mit", "ꂯ" => "mix", "ꂰ" => "mi", "ꂱ" => "mip", "ꂲ" => "miex", "ꂳ" => "mie",
+ "ꂴ" => "miep", "ꂵ" => "mat", "ꂶ" => "max", "ꂷ" => "ma", "ꂸ" => "map", "ꂹ" => "muot",
+ "ꂺ" => "muox", "ꂻ" => "muo", "ꂼ" => "muop", "ꂽ" => "mot", "ꂾ" => "mox", "ꂿ" => "mo",
+ "ꃀ" => "mop", "êƒ" => "mex", "ꃂ" => "me", "ꃃ" => "mut", "ꃄ" => "mux", "ꃅ" => "mu",
+ "ꃆ" => "mup", "ꃇ" => "murx", "ꃈ" => "mur", "ꃉ" => "myt", "êƒ" => "myx", "ꃋ" => "my",
+ "ꃌ" => "myp", "êƒ" => "fit", "êƒ" => "fix", "êƒ" => "fi", "êƒ" => "fip", "ꃑ" => "fat",
+ "ꃒ" => "fax", "ꃓ" => "fa", "ꃔ" => "fap", "ꃕ" => "fox", "ꃖ" => "fo", "ꃗ" => "fop",
+ "ꃘ" => "fut", "ꃙ" => "fux", "êƒ" => "fu", "ꃛ" => "fup", "ꃜ" => "furx", "êƒ" => "fur",
+ "êƒ" => "fyt", "ꃟ" => "fyx", "êƒ " => "fy", "ꃡ" => "fyp", "ꃢ" => "vit", "ꃣ" => "vix",
+ "ꃤ" => "vi", "ꃥ" => "vip", "ꃦ" => "viet", "ꃧ" => "viex", "ꃨ" => "vie", "ꃩ" => "viep",
+ "ꃪ" => "vat", "ꃫ" => "vax", "ꃬ" => "va", "êƒ" => "vap", "ꃮ" => "vot", "ꃯ" => "vox",
+ "ꃰ" => "vo", "ꃱ" => "vop", "ꃲ" => "vex", "ꃳ" => "vep", "ꃴ" => "vut", "ꃵ" => "vux",
+ "ꃶ" => "vu", "ꃷ" => "vup", "ꃸ" => "vurx", "ꃹ" => "vur", "ꃺ" => "vyt", "ꃻ" => "vyx",
+ "ꃼ" => "vy", "ꃽ" => "vyp", "ꃾ" => "vyrx", "ꃿ" => "vyr", "ê„" => "dix", "ê„‚" => "di",
+ "ꄃ" => "dip", "ꄄ" => "diex", "ꄅ" => "die", "ꄆ" => "diep", "ꄇ" => "dat", "ꄈ" => "dax",
+ "ꄉ" => "da", "ê„" => "dap", "ê„‹" => "duox", "ê„Œ" => "duo", "ê„" => "dot", "ê„" => "dox",
+ "ê„" => "do", "ê„" => "dop", "ê„‘" => "dex", "ê„’" => "de", "ê„“" => "dep", "ê„”" => "dut",
+ "ê„•" => "dux", "ê„–" => "du", "ê„—" => "dup", "ꄘ" => "durx", "ê„™" => "dur", "ê„" => "tit",
+ "ê„›" => "tix", "ê„œ" => "ti", "ê„" => "tip", "ê„" => "tiex", "ê„Ÿ" => "tie", "ê„ " => "tiep",
+ "ꄡ" => "tat", "ꄢ" => "tax", "ꄣ" => "ta", "ꄤ" => "tap", "ꄥ" => "tuot", "ꄦ" => "tuox",
+ "ꄧ" => "tuo", "ꄨ" => "tuop", "ꄩ" => "tot", "ꄪ" => "tox", "ꄫ" => "to", "ꄬ" => "top",
+ "ê„" => "tex", "ê„®" => "te", "ꄯ" => "tep", "ê„°" => "tut", "ꄱ" => "tux", "ꄲ" => "tu",
+ "ꄳ" => "tup", "ꄴ" => "turx", "ꄵ" => "tur", "ꄶ" => "ddit", "ꄷ" => "ddix", "ꄸ" => "ddi",
+ "ꄹ" => "ddip", "ꄺ" => "ddiex", "ꄻ" => "ddie", "ꄼ" => "ddiep", "ꄽ" => "ddat", "ꄾ" => "ddax",
+ "ê„¿" => "dda", "ê…€" => "ddap", "ê…" => "dduox", "ê…‚" => "dduo", "ê…ƒ" => "dduop", "ê…„" => "ddot",
+ "ê……" => "ddox", "ê…†" => "ddo", "ê…‡" => "ddop", "ê…ˆ" => "ddex", "ê…‰" => "dde", "ê…" => "ddep",
+ "ê…‹" => "ddut", "ê…Œ" => "ddux", "ê…" => "ddu", "ê…" => "ddup", "ê…" => "ddurx", "ê…" => "ddur",
+ "ê…‘" => "ndit", "ê…’" => "ndix", "ê…“" => "ndi", "ê…”" => "ndip", "ê…•" => "ndiex", "ê…–" => "ndie",
+ "ê…—" => "ndat", "ê…˜" => "ndax", "ê…™" => "nda", "ê…" => "ndap", "ê…›" => "ndot", "ê…œ" => "ndox",
+ "ê…" => "ndo", "ê…" => "ndop", "ê…Ÿ" => "ndex", "ê… " => "nde", "ê…¡" => "ndep", "ê…¢" => "ndut",
+ "ê…£" => "ndux", "ê…¤" => "ndu", "ê…¥" => "ndup", "ê…¦" => "ndurx", "ê…§" => "ndur", "ê…¨" => "hnit",
+ "ê…©" => "hnix", "ê…ª" => "hni", "ê…«" => "hnip", "ê…¬" => "hniet", "ê…" => "hniex", "ê…®" => "hnie",
+ "ê…¯" => "hniep", "ê…°" => "hnat", "ê…±" => "hnax", "ê…²" => "hna", "ê…³" => "hnap", "ê…´" => "hnuox",
+ "ê…µ" => "hnuo", "ê…¶" => "hnot", "ê…·" => "hnox", "ê…¸" => "hnop", "ê…¹" => "hnex", "ê…º" => "hne",
+ "ꅻ" => "hnep", "ꅼ" => "hnut", "ꅽ" => "nit", "ꅾ" => "nix", "ꅿ" => "ni", "ꆀ" => "nip",
+ "ê†" => "niex", "ꆂ" => "nie", "ꆃ" => "niep", "ꆄ" => "nax", "ꆅ" => "na", "ꆆ" => "nap",
+ "ꆇ" => "nuox", "ꆈ" => "nuo", "ꆉ" => "nuop", "ê†" => "not", "ꆋ" => "nox", "ꆌ" => "no",
+ "ê†" => "nop", "ê†" => "nex", "ê†" => "ne", "ê†" => "nep", "ꆑ" => "nut", "ꆒ" => "nux",
+ "ꆓ" => "nu", "ꆔ" => "nup", "ꆕ" => "nurx", "ꆖ" => "nur", "ꆗ" => "hlit", "ꆘ" => "hlix",
+ "ꆙ" => "hli", "ê†" => "hlip", "ꆛ" => "hliex", "ꆜ" => "hlie", "ê†" => "hliep", "ê†" => "hlat",
+ "ꆟ" => "hlax", "ê† " => "hla", "ꆡ" => "hlap", "ꆢ" => "hluox", "ꆣ" => "hluo", "ꆤ" => "hluop",
+ "ꆥ" => "hlox", "ꆦ" => "hlo", "ꆧ" => "hlop", "ꆨ" => "hlex", "ꆩ" => "hle", "ꆪ" => "hlep",
+ "ꆫ" => "hlut", "ꆬ" => "hlux", "ê†" => "hlu", "ꆮ" => "hlup", "ꆯ" => "hlurx", "ꆰ" => "hlur",
+ "ꆱ" => "hlyt", "ꆲ" => "hlyx", "ꆳ" => "hly", "ꆴ" => "hlyp", "ꆵ" => "hlyrx", "ꆶ" => "hlyr",
+ "ꆷ" => "lit", "ꆸ" => "lix", "ꆹ" => "li", "ꆺ" => "lip", "ꆻ" => "liet", "ꆼ" => "liex",
+ "ꆽ" => "lie", "ꆾ" => "liep", "ꆿ" => "lat", "ꇀ" => "lax", "ê‡" => "la", "ꇂ" => "lap",
+ "ꇃ" => "luot", "ꇄ" => "luox", "ꇅ" => "luo", "ꇆ" => "luop", "ꇇ" => "lot", "ꇈ" => "lox",
+ "ꇉ" => "lo", "ê‡" => "lop", "ꇋ" => "lex", "ꇌ" => "le", "ê‡" => "lep", "ê‡" => "lut",
+ "ê‡" => "lux", "ê‡" => "lu", "ꇑ" => "lup", "ꇒ" => "lurx", "ꇓ" => "lur", "ꇔ" => "lyt",
+ "ꇕ" => "lyx", "ꇖ" => "ly", "ꇗ" => "lyp", "ꇘ" => "lyrx", "ꇙ" => "lyr", "ê‡" => "git",
+ "ꇛ" => "gix", "ꇜ" => "gi", "ê‡" => "gip", "ê‡" => "giet", "ꇟ" => "giex", "ê‡ " => "gie",
+ "ꇡ" => "giep", "ꇢ" => "gat", "ꇣ" => "gax", "ꇤ" => "ga", "ꇥ" => "gap", "ꇦ" => "guot",
+ "ꇧ" => "guox", "ꇨ" => "guo", "ꇩ" => "guop", "ꇪ" => "got", "ꇫ" => "gox", "ꇬ" => "go",
+ "ê‡" => "gop", "ꇮ" => "get", "ꇯ" => "gex", "ꇰ" => "ge", "ꇱ" => "gep", "ꇲ" => "gut",
+ "ꇳ" => "gux", "ꇴ" => "gu", "ꇵ" => "gup", "ꇶ" => "gurx", "ꇷ" => "gur", "ꇸ" => "kit",
+ "ꇹ" => "kix", "ꇺ" => "ki", "ꇻ" => "kip", "ꇼ" => "kiex", "ꇽ" => "kie", "ꇾ" => "kiep",
+ "ꇿ" => "kat", "êˆ" => "ka", "ꈂ" => "kap", "ꈃ" => "kuox", "ꈄ" => "kuo", "ꈅ" => "kuop",
+ "ꈆ" => "kot", "ꈇ" => "kox", "ꈈ" => "ko", "ꈉ" => "kop", "êˆ" => "ket", "ꈋ" => "kex",
+ "ꈌ" => "ke", "êˆ" => "kep", "êˆ" => "kut", "êˆ" => "kux", "êˆ" => "ku", "ꈑ" => "kup",
+ "ꈒ" => "kurx", "ꈓ" => "kur", "ꈔ" => "ggit", "ꈕ" => "ggix", "ꈖ" => "ggi", "ꈗ" => "ggiex",
+ "ꈘ" => "ggie", "ꈙ" => "ggiep", "êˆ" => "ggat", "ꈛ" => "ggax", "ꈜ" => "gga", "êˆ" => "ggap",
+ "êˆ" => "gguot", "ꈟ" => "gguox", "êˆ " => "gguo", "ꈡ" => "gguop", "ꈢ" => "ggot", "ꈣ" => "ggox",
+ "ꈤ" => "ggo", "ꈥ" => "ggop", "ꈦ" => "gget", "ꈧ" => "ggex", "ꈨ" => "gge", "ꈩ" => "ggep",
+ "ꈪ" => "ggut", "ꈫ" => "ggux", "ꈬ" => "ggu", "êˆ" => "ggup", "ꈮ" => "ggurx", "ꈯ" => "ggur",
+ "ꈰ" => "mgiex", "ꈱ" => "mgie", "ꈲ" => "mgat", "ꈳ" => "mgax", "ꈴ" => "mga", "ꈵ" => "mgap",
+ "ꈶ" => "mguox", "ꈷ" => "mguo", "ꈸ" => "mguop", "ꈹ" => "mgot", "ꈺ" => "mgox", "ꈻ" => "mgo",
+ "ꈼ" => "mgop", "ꈽ" => "mgex", "ꈾ" => "mge", "ꈿ" => "mgep", "ꉀ" => "mgut", "ê‰" => "mgux",
+ "ꉂ" => "mgu", "ꉃ" => "mgup", "ꉄ" => "mgurx", "ꉅ" => "mgur", "ꉆ" => "hxit", "ꉇ" => "hxix",
+ "ꉈ" => "hxi", "ꉉ" => "hxip", "ê‰" => "hxiet", "ꉋ" => "hxiex", "ꉌ" => "hxie", "ê‰" => "hxiep",
+ "ê‰" => "hxat", "ê‰" => "hxax", "ê‰" => "hxa", "ꉑ" => "hxap", "ꉒ" => "hxuot", "ꉓ" => "hxuox",
+ "ꉔ" => "hxuo", "ꉕ" => "hxuop", "ꉖ" => "hxot", "ꉗ" => "hxox", "ꉘ" => "hxo", "ꉙ" => "hxop",
+ "ê‰" => "hxex", "ꉛ" => "hxe", "ꉜ" => "hxep", "ê‰" => "ngiex", "ê‰" => "ngie", "ꉟ" => "ngiep",
+ "ê‰ " => "ngat", "ꉡ" => "ngax", "ꉢ" => "nga", "ꉣ" => "ngap", "ꉤ" => "nguot", "ꉥ" => "nguox",
+ "ꉦ" => "nguo", "ꉧ" => "ngot", "ꉨ" => "ngox", "ꉩ" => "ngo", "ꉪ" => "ngop", "ꉫ" => "ngex",
+ "ꉬ" => "nge", "ê‰" => "ngep", "ꉮ" => "hit", "ꉯ" => "hiex", "ꉰ" => "hie", "ꉱ" => "hat",
+ "ꉲ" => "hax", "ꉳ" => "ha", "ꉴ" => "hap", "ꉵ" => "huot", "ꉶ" => "huox", "ꉷ" => "huo",
+ "ꉸ" => "huop", "ꉹ" => "hot", "ꉺ" => "hox", "ꉻ" => "ho", "ꉼ" => "hop", "ꉽ" => "hex",
+ "ꉾ" => "he", "ꉿ" => "hep", "ê€" => "wat", "ê" => "wax", "ê‚" => "wa", "êƒ" => "wap",
+ "ê„" => "wuox", "ê…" => "wuo", "ê†" => "wuop", "ê‡" => "wox", "êˆ" => "wo", "ê‰" => "wop",
+ "ê" => "wex", "ê‹" => "we", "êŒ" => "wep", "ê" => "zit", "ê" => "zix", "ê" => "zi",
+ "ê" => "zip", "ê‘" => "ziex", "ê’" => "zie", "ê“" => "ziep", "ê”" => "zat", "ê•" => "zax",
+ "ê–" => "za", "ê—" => "zap", "ê˜" => "zuox", "ê™" => "zuo", "ê" => "zuop", "ê›" => "zot",
+ "êœ" => "zox", "ê" => "zo", "ê" => "zop", "êŸ" => "zex", "ê " => "ze", "ê¡" => "zep",
+ "ê¢" => "zut", "ê£" => "zux", "ê¤" => "zu", "ê¥" => "zup", "ê¦" => "zurx", "ê§" => "zur",
+ "ê¨" => "zyt", "ê©" => "zyx", "êª" => "zy", "ê«" => "zyp", "ê¬" => "zyrx", "ê" => "zyr",
+ "ê®" => "cit", "ê¯" => "cix", "ê°" => "ci", "ê±" => "cip", "ê²" => "ciet", "ê³" => "ciex",
+ "ê´" => "cie", "êµ" => "ciep", "ê¶" => "cat", "ê·" => "cax", "ê¸" => "ca", "ê¹" => "cap",
+ "êº" => "cuox", "ê»" => "cuo", "ê¼" => "cuop", "ê½" => "cot", "ê¾" => "cox", "ê¿" => "co",
+ "ê‹€" => "cop", "ê‹" => "cex", "ê‹‚" => "ce", "ꋃ" => "cep", "ê‹„" => "cut", "ê‹…" => "cux",
+ "ꋆ" => "cu", "ꋇ" => "cup", "ꋈ" => "curx", "ꋉ" => "cur", "ê‹" => "cyt", "ê‹‹" => "cyx",
+ "ê‹Œ" => "cy", "ê‹" => "cyp", "ê‹" => "cyrx", "ê‹" => "cyr", "ê‹" => "zzit", "ê‹‘" => "zzix",
+ "ê‹’" => "zzi", "ê‹“" => "zzip", "ê‹”" => "zziet", "ê‹•" => "zziex", "ê‹–" => "zzie", "ê‹—" => "zziep",
+ "ꋘ" => "zzat", "ê‹™" => "zzax", "ê‹" => "zza", "ê‹›" => "zzap", "ê‹œ" => "zzox", "ê‹" => "zzo",
+ "ê‹" => "zzop", "ê‹Ÿ" => "zzex", "ê‹ " => "zze", "ê‹¡" => "zzep", "ê‹¢" => "zzux", "ê‹£" => "zzu",
+ "ꋤ" => "zzup", "ꋥ" => "zzurx", "ꋦ" => "zzur", "ꋧ" => "zzyt", "ꋨ" => "zzyx", "ꋩ" => "zzy",
+ "ꋪ" => "zzyp", "ê‹«" => "zzyrx", "ꋬ" => "zzyr", "ê‹" => "nzit", "ê‹®" => "nzix", "ꋯ" => "nzi",
+ "ꋰ" => "nzip", "ꋱ" => "nziex", "ꋲ" => "nzie", "ꋳ" => "nziep", "ꋴ" => "nzat", "ꋵ" => "nzax",
+ "ꋶ" => "nza", "ꋷ" => "nzap", "ꋸ" => "nzuox", "ꋹ" => "nzuo", "ꋺ" => "nzox", "ꋻ" => "nzop",
+ "ꋼ" => "nzex", "ꋽ" => "nze", "ꋾ" => "nzux", "ê‹¿" => "nzu", "êŒ" => "nzurx", "ꌂ" => "nzur",
+ "ꌃ" => "nzyt", "ꌄ" => "nzyx", "ꌅ" => "nzy", "ꌆ" => "nzyp", "ꌇ" => "nzyrx", "ꌈ" => "nzyr",
+ "ꌉ" => "sit", "êŒ" => "six", "ꌋ" => "si", "ꌌ" => "sip", "êŒ" => "siex", "êŒ" => "sie",
+ "êŒ" => "siep", "êŒ" => "sat", "ꌑ" => "sax", "ꌒ" => "sa", "ꌓ" => "sap", "ꌔ" => "suox",
+ "ꌕ" => "suo", "ꌖ" => "suop", "ꌗ" => "sot", "ꌘ" => "sox", "ꌙ" => "so", "êŒ" => "sop",
+ "ꌛ" => "sex", "ꌜ" => "se", "êŒ" => "sep", "êŒ" => "sut", "ꌟ" => "sux", "êŒ " => "su",
+ "ꌡ" => "sup", "ꌢ" => "surx", "ꌣ" => "sur", "ꌤ" => "syt", "ꌥ" => "syx", "ꌦ" => "sy",
+ "ꌧ" => "syp", "ꌨ" => "syrx", "ꌩ" => "syr", "ꌪ" => "ssit", "ꌫ" => "ssix", "ꌬ" => "ssi",
+ "êŒ" => "ssip", "ꌮ" => "ssiex", "ꌯ" => "ssie", "ꌰ" => "ssiep", "ꌱ" => "ssat", "ꌲ" => "ssax",
+ "ꌳ" => "ssa", "ꌴ" => "ssap", "ꌵ" => "ssot", "ꌶ" => "ssox", "ꌷ" => "sso", "ꌸ" => "ssop",
+ "ꌹ" => "ssex", "ꌺ" => "sse", "ꌻ" => "ssep", "ꌼ" => "ssut", "ꌽ" => "ssux", "ꌾ" => "ssu",
+ "ꌿ" => "ssup", "ê€" => "ssyt", "ê" => "ssyx", "ê‚" => "ssy", "êƒ" => "ssyp", "ê„" => "ssyrx",
+ "ê…" => "ssyr", "ê†" => "zhat", "ê‡" => "zhax", "êˆ" => "zha", "ê‰" => "zhap", "ê" => "zhuox",
+ "ê‹" => "zhuo", "êŒ" => "zhuop", "ê" => "zhot", "ê" => "zhox", "ê" => "zho", "ê" => "zhop",
+ "ê‘" => "zhet", "ê’" => "zhex", "ê“" => "zhe", "ê”" => "zhep", "ê•" => "zhut", "ê–" => "zhux",
+ "ê—" => "zhu", "ê˜" => "zhup", "ê™" => "zhurx", "ê" => "zhur", "ê›" => "zhyt", "êœ" => "zhyx",
+ "ê" => "zhy", "ê" => "zhyp", "êŸ" => "zhyrx", "ê " => "zhyr", "ê¡" => "chat", "ê¢" => "chax",
+ "ê£" => "cha", "ê¤" => "chap", "ê¥" => "chuot", "ê¦" => "chuox", "ê§" => "chuo", "ê¨" => "chuop",
+ "ê©" => "chot", "êª" => "chox", "ê«" => "cho", "ê¬" => "chop", "ê" => "chet", "ê®" => "chex",
+ "ê¯" => "che", "ê°" => "chep", "ê±" => "chux", "ê²" => "chu", "ê³" => "chup", "ê´" => "churx",
+ "êµ" => "chur", "ê¶" => "chyt", "ê·" => "chyx", "ê¸" => "chy", "ê¹" => "chyp", "êº" => "chyrx",
+ "ê»" => "chyr", "ê¼" => "rrax", "ê½" => "rra", "ê¾" => "rruox", "ê¿" => "rruo", "ê€" => "rrot",
+ "ê" => "rrox", "ê‚" => "rro", "êƒ" => "rrop", "ê„" => "rret", "ê…" => "rrex", "ê†" => "rre",
+ "ê‡" => "rrep", "êˆ" => "rrut", "ê‰" => "rrux", "ê" => "rru", "ê‹" => "rrup", "êŒ" => "rrurx",
+ "ê" => "rrur", "ê" => "rryt", "ê" => "rryx", "ê" => "rry", "ê‘" => "rryp", "ê’" => "rryrx",
+ "ê“" => "rryr", "ê”" => "nrat", "ê•" => "nrax", "ê–" => "nra", "ê—" => "nrap", "ê˜" => "nrox",
+ "ê™" => "nro", "ê" => "nrop", "ê›" => "nret", "êœ" => "nrex", "ê" => "nre", "ê" => "nrep",
+ "êŸ" => "nrut", "ê " => "nrux", "ê¡" => "nru", "ê¢" => "nrup", "ê£" => "nrurx", "ê¤" => "nrur",
+ "ê¥" => "nryt", "ê¦" => "nryx", "ê§" => "nry", "ê¨" => "nryp", "ê©" => "nryrx", "êª" => "nryr",
+ "ê«" => "shat", "ê¬" => "shax", "ê" => "sha", "ê®" => "shap", "ê¯" => "shuox", "ê°" => "shuo",
+ "ê±" => "shuop", "ê²" => "shot", "ê³" => "shox", "ê´" => "sho", "êµ" => "shop", "ê¶" => "shet",
+ "ê·" => "shex", "ê¸" => "she", "ê¹" => "shep", "êº" => "shut", "ê»" => "shux", "ê¼" => "shu",
+ "ê½" => "shup", "ê¾" => "shurx", "ê¿" => "shur", "ê€" => "shyt", "ê" => "shyx", "ê‚" => "shy",
+ "êƒ" => "shyp", "ê„" => "shyrx", "ê…" => "shyr", "ê†" => "rat", "ê‡" => "rax", "êˆ" => "ra",
+ "ê‰" => "rap", "ê" => "ruox", "ê‹" => "ruo", "êŒ" => "ruop", "ê" => "rot", "ê" => "rox",
+ "ê" => "ro", "ê" => "rop", "ê‘" => "rex", "ê’" => "re", "ê“" => "rep", "ê”" => "rut",
+ "ê•" => "rux", "ê–" => "ru", "ê—" => "rup", "ê˜" => "rurx", "ê™" => "rur", "ê" => "ryt",
+ "ê›" => "ryx", "êœ" => "ry", "ê" => "ryp", "ê" => "ryrx", "êŸ" => "ryr", "ê " => "jit",
+ "ê¡" => "jix", "ê¢" => "ji", "ê£" => "jip", "ê¤" => "jiet", "ê¥" => "jiex", "ê¦" => "jie",
+ "ê§" => "jiep", "ê¨" => "juot", "ê©" => "juox", "êª" => "juo", "ê«" => "juop", "ê¬" => "jot",
+ "ê" => "jox", "ê®" => "jo", "ê¯" => "jop", "ê°" => "jut", "ê±" => "jux", "ê²" => "ju",
+ "ê³" => "jup", "ê´" => "jurx", "êµ" => "jur", "ê¶" => "jyt", "ê·" => "jyx", "ê¸" => "jy",
+ "ê¹" => "jyp", "êº" => "jyrx", "ê»" => "jyr", "ê¼" => "qit", "ê½" => "qix", "ê¾" => "qi",
+ "ê¿" => "qip", "ê" => "qiex", "ê‚" => "qie", "êƒ" => "qiep", "ê„" => "quot", "ê…" => "quox",
+ "ê†" => "quo", "ê‡" => "quop", "êˆ" => "qot", "ê‰" => "qox", "ê" => "qo", "ê‹" => "qop",
+ "êŒ" => "qut", "ê" => "qux", "ê" => "qu", "ê" => "qup", "ê" => "qurx", "ê‘" => "qur",
+ "ê’" => "qyt", "ê“" => "qyx", "ê”" => "qy", "ê•" => "qyp", "ê–" => "qyrx", "ê—" => "qyr",
+ "ê˜" => "jjit", "ê™" => "jjix", "ê" => "jji", "ê›" => "jjip", "êœ" => "jjiet", "ê" => "jjiex",
+ "ê" => "jjie", "êŸ" => "jjiep", "ê " => "jjuox", "ê¡" => "jjuo", "ê¢" => "jjuop", "ê£" => "jjot",
+ "ê¤" => "jjox", "ê¥" => "jjo", "ê¦" => "jjop", "ê§" => "jjut", "ê¨" => "jjux", "ê©" => "jju",
+ "êª" => "jjup", "ê«" => "jjurx", "ê¬" => "jjur", "ê" => "jjyt", "ê®" => "jjyx", "ê¯" => "jjy",
+ "ê°" => "jjyp", "ê±" => "njit", "ê²" => "njix", "ê³" => "nji", "ê´" => "njip", "êµ" => "njiet",
+ "ê¶" => "njiex", "ê·" => "njie", "ê¸" => "njiep", "ê¹" => "njuox", "êº" => "njuo", "ê»" => "njot",
+ "ê¼" => "njox", "ê½" => "njo", "ê¾" => "njop", "ê¿" => "njux", "ê‘€" => "nju", "ê‘" => "njup",
+ "ꑂ" => "njurx", "ꑃ" => "njur", "ꑄ" => "njyt", "ꑅ" => "njyx", "ꑆ" => "njy", "ꑇ" => "njyp",
+ "ꑈ" => "njyrx", "ꑉ" => "njyr", "ê‘" => "nyit", "ê‘‹" => "nyix", "ê‘Œ" => "nyi", "ê‘" => "nyip",
+ "ê‘" => "nyiet", "ê‘" => "nyiex", "ê‘" => "nyie", "ê‘‘" => "nyiep", "ê‘’" => "nyuox", "ê‘“" => "nyuo",
+ "ꑔ" => "nyuop", "ꑕ" => "nyot", "ꑖ" => "nyox", "ꑗ" => "nyo", "ꑘ" => "nyop", "ꑙ" => "nyut",
+ "ê‘" => "nyux", "ê‘›" => "nyu", "ê‘œ" => "nyup", "ê‘" => "xit", "ê‘" => "xix", "ê‘Ÿ" => "xi",
+ "ê‘ " => "xip", "ê‘¡" => "xiet", "ê‘¢" => "xiex", "ê‘£" => "xie", "ꑤ" => "xiep", "ê‘¥" => "xuox",
+ "ꑦ" => "xuo", "ꑧ" => "xot", "ꑨ" => "xox", "ꑩ" => "xo", "ꑪ" => "xop", "ꑫ" => "xyt",
+ "ꑬ" => "xyx", "ê‘" => "xy", "ê‘®" => "xyp", "ꑯ" => "xyrx", "ê‘°" => "xyr", "ꑱ" => "yit",
+ "ꑲ" => "yix", "ꑳ" => "yi", "ꑴ" => "yip", "ꑵ" => "yiet", "ꑶ" => "yiex", "ꑷ" => "yie",
+ "ꑸ" => "yiep", "ꑹ" => "yuot", "ꑺ" => "yuox", "ꑻ" => "yuo", "ꑼ" => "yuop", "ꑽ" => "yot",
+ "ꑾ" => "yox", "ê‘¿" => "yo", "ê’€" => "yop", "ê’" => "yut", "ê’‚" => "yux", "ê’ƒ" => "yu",
+ "ê’„" => "yup", "ê’…" => "yurx", "ê’†" => "yur", "ê’‡" => "yyt", "ê’ˆ" => "yyx", "ê’‰" => "yy",
+ "ê’" => "yyp", "ê’‹" => "yyrx", "ê’Œ" => "yyr", "ê’" => "Qot", "ê’‘" => "Li", "ê’’" => "Kit",
+ "ê’“" => "Nyip", "ê’”" => "Cyp", "ê’•" => "Ssi", "ê’–" => "Ggop", "ê’—" => "Gep", "ê’˜" => "Mi",
+ "ê’™" => "Hxit", "ê’" => "Lyr", "ê’›" => "Bbut", "ê’œ" => "Mop", "ê’" => "Yo", "ê’" => "Put",
+ "ê’Ÿ" => "Hxuo", "ê’ " => "Tat", "ê’¡" => "Ga", "ê’¤" => "Ddur", "ê’¥" => "Bur", "ê’¦" => "Gguo",
+ "ê’§" => "Nyop", "ê’¨" => "Tu", "ê’©" => "Op", "ê’ª" => "Jjut", "ê’«" => "Zot", "ê’¬" => "Pyt",
+ "ê’" => "Hmo", "ê’®" => "Yit", "ê’¯" => "Vur", "ê’°" => "Shy", "ê’±" => "Vep", "ê’²" => "Za",
+ "ê’³" => "Jo", "ê’µ" => "Jjy", "ê’¶" => "Got", "ê’·" => "Jjie", "ê’¸" => "Wo", "ê’¹" => "Du",
+ "ê’º" => "Shur", "ê’»" => "Lie", "ê’¼" => "Cy", "ê’½" => "Cuop", "ê’¾" => "Cip", "ê’¿" => "Hxop",
+ "ê“€" => "Shat", "ê“‚" => "Shop", "꓃" => "Che", "ê“„" => "Zziet", "꓆" => "Ke", "ê°" => "gag",
+ "ê°‚" => "gagg", "ê°ƒ" => "gags", "ê°„" => "gan", "ê°…" => "ganj", "ê°†" => "ganh", "ê°‡" => "gad",
+ "ê°ˆ" => "gal", "ê°‰" => "galg", "ê°" => "galm", "ê°‹" => "galb", "ê°Œ" => "gals", "ê°" => "galt",
+ "ê°" => "galp", "ê°" => "galh", "ê°" => "gam", "ê°‘" => "gab", "ê°’" => "gabs", "ê°“" => "gas",
+ "ê°”" => "gass", "ê°•" => "gang", "ê°–" => "gaj", "ê°—" => "gac", "ê°˜" => "gak", "ê°™" => "gat",
+ "ê°" => "gap", "ê°›" => "gah", "ê°œ" => "gae", "ê°" => "gaeg", "ê°" => "gaegg", "ê°Ÿ" => "gaegs",
+ "ê° " => "gaen", "ê°¡" => "gaenj", "ê°¢" => "gaenh", "ê°£" => "gaed", "ê°¤" => "gael", "ê°¥" => "gaelg",
+ "ê°¦" => "gaelm", "ê°§" => "gaelb", "ê°¨" => "gaels", "ê°©" => "gaelt", "ê°ª" => "gaelp", "ê°«" => "gaelh",
+ "ê°¬" => "gaem", "ê°" => "gaeb", "ê°®" => "gaebs", "ê°¯" => "gaes", "ê°°" => "gaess", "ê°±" => "gaeng",
+ "ê°²" => "gaej", "ê°³" => "gaec", "ê°´" => "gaek", "ê°µ" => "gaet", "ê°¶" => "gaep", "ê°·" => "gaeh",
+ "ê°¸" => "gya", "ê°¹" => "gyag", "ê°º" => "gyagg", "ê°»" => "gyags", "ê°¼" => "gyan", "ê°½" => "gyanj",
+ "ê°¾" => "gyanh", "ê°¿" => "gyad", "ê±€" => "gyal", "ê±" => "gyalg", "걂" => "gyalm", "걃" => "gyalb",
+ "걄" => "gyals", "걅" => "gyalt", "걆" => "gyalp", "걇" => "gyalh", "걈" => "gyam", "걉" => "gyab",
+ "ê±" => "gyabs", "걋" => "gyas", "걌" => "gyass", "ê±" => "gyang", "ê±" => "gyaj", "ê±" => "gyac",
+ "ê±" => "gyak", "걑" => "gyat", "ê±’" => "gyap", "걓" => "gyah", "ê±”" => "gyae", "걕" => "gyaeg",
+ "ê±–" => "gyaegg", "ê±—" => "gyaegs", "걘" => "gyaen", "ê±™" => "gyaenj", "ê±" => "gyaenh", "ê±›" => "gyaed",
+ "걜" => "gyael", "ê±" => "gyaelg", "ê±" => "gyaelm", "걟" => "gyaelb", "ê± " => "gyaels", "걡" => "gyaelt",
+ "걢" => "gyaelp", "걣" => "gyaelh", "걤" => "gyaem", "걥" => "gyaeb", "걦" => "gyaebs", "걧" => "gyaes",
+ "걨" => "gyaess", "걩" => "gyaeng", "걪" => "gyaej", "걫" => "gyaec", "걬" => "gyaek", "ê±" => "gyaet",
+ "걮" => "gyaep", "걯" => "gyaeh", "거" => "geo", "걱" => "geog", "걲" => "geogg", "걳" => "geogs",
+ "건" => "geon", "걵" => "geonj", "걶" => "geonh", "걷" => "geod", "걸" => "geol", "걹" => "geolg",
+ "걺" => "geolm", "걻" => "geolb", "걼" => "geols", "걽" => "geolt", "걾" => "geolp", "걿" => "geolh",
+ "ê²€" => "geom", "ê²" => "geob", "겂" => "geobs", "것" => "geos", "겄" => "geoss", "ê²…" => "geong",
+ "겆" => "geoj", "겇" => "geoc", "겈" => "geok", "겉" => "geot", "ê²" => "geop", "겋" => "geoh",
+ "게" => "ge", "ê²" => "geg", "ê²" => "gegg", "ê²" => "gegs", "ê²" => "gen", "겑" => "genj",
+ "겒" => "genh", "겓" => "ged", "겔" => "gel", "겕" => "gelg", "겖" => "gelm", "겗" => "gelb",
+ "겘" => "gels", "ê²™" => "gelt", "ê²" => "gelp", "ê²›" => "gelh", "겜" => "gem", "ê²" => "geb",
+ "ê²" => "gebs", "겟" => "ges", "ê² " => "gess", "겡" => "geng", "ê²¢" => "gej", "ê²£" => "gec",
+ "겤" => "gek", "겥" => "get", "겦" => "gep", "겧" => "geh", "겨" => "gyeo", "격" => "gyeog",
+ "겪" => "gyeogg", "겫" => "gyeogs", "견" => "gyeon", "ê²" => "gyeonj", "ê²®" => "gyeonh", "겯" => "gyeod",
+ "ê²°" => "gyeol", "ê²±" => "gyeolg", "ê²²" => "gyeolm", "ê²³" => "gyeolb", "ê²´" => "gyeols", "ê²µ" => "gyeolt",
+ "겶" => "gyeolp", "겷" => "gyeolh", "겸" => "gyeom", "겹" => "gyeob", "겺" => "gyeobs", "겻" => "gyeos",
+ "ê²¼" => "gyeoss", "ê²½" => "gyeong", "ê²¾" => "gyeoj", "겿" => "gyeoc", "ê³€" => "gyeok", "ê³" => "gyeot",
+ "곂" => "gyeop", "곃" => "gyeoh", "계" => "gye", "곅" => "gyeg", "곆" => "gyegg", "곇" => "gyegs",
+ "곈" => "gyen", "곉" => "gyenj", "ê³" => "gyenh", "곋" => "gyed", "곌" => "gyel", "ê³" => "gyelg",
+ "ê³" => "gyelm", "ê³" => "gyelb", "ê³" => "gyels", "곑" => "gyelt", "ê³’" => "gyelp", "곓" => "gyelh",
+ "곔" => "gyem", "곕" => "gyeb", "곖" => "gyebs", "곗" => "gyes", "곘" => "gyess", "곙" => "gyeng",
+ "ê³" => "gyej", "ê³›" => "gyec", "곜" => "gyek", "ê³" => "gyet", "ê³" => "gyep", "곟" => "gyeh",
+ "ê³ " => "go", "곡" => "gog", "ê³¢" => "gogg", "ê³£" => "gogs", "곤" => "gon", "ê³¥" => "gonj",
+ "곦" => "gonh", "곧" => "god", "골" => "gol", "곩" => "golg", "곪" => "golm", "곫" => "golb",
+ "곬" => "gols", "ê³" => "golt", "ê³®" => "golp", "곯" => "golh", "ê³°" => "gom", "ê³±" => "gob",
+ "곲" => "gobs", "곳" => "gos", "곴" => "goss", "공" => "gong", "곶" => "goj", "곷" => "goc",
+ "곸" => "gok", "곹" => "got", "곺" => "gop", "곻" => "goh", "과" => "gwa", "곽" => "gwag",
+ "ê³¾" => "gwagg", "곿" => "gwags", "ê´" => "gwanj", "ê´‚" => "gwanh", "ê´ƒ" => "gwad", "ê´„" => "gwal",
+ "ê´…" => "gwalg", "ê´†" => "gwalm", "ê´‡" => "gwalb", "ê´ˆ" => "gwals", "ê´‰" => "gwalt", "ê´" => "gwalp",
+ "ê´‹" => "gwalh", "ê´Œ" => "gwam", "ê´" => "gwab", "ê´" => "gwabs", "ê´" => "gwas", "ê´" => "gwass",
+ "ê´‘" => "gwang", "ê´’" => "gwaj", "ê´“" => "gwac", "ê´”" => "gwak", "ê´•" => "gwat", "ê´–" => "gwap",
+ "ê´—" => "gwah", "ê´˜" => "gwae", "ê´™" => "gwaeg", "ê´" => "gwaegg", "ê´›" => "gwaegs", "ê´œ" => "gwaen",
+ "ê´" => "gwaenj", "ê´" => "gwaenh", "ê´Ÿ" => "gwaed", "ê´ " => "gwael", "ê´¡" => "gwaelg", "ê´¢" => "gwaelm",
+ "ê´£" => "gwaelb", "ê´¤" => "gwaels", "ê´¥" => "gwaelt", "ê´¦" => "gwaelp", "ê´§" => "gwaelh", "ê´¨" => "gwaem",
+ "ê´©" => "gwaeb", "ê´ª" => "gwaebs", "ê´«" => "gwaes", "ê´¬" => "gwaess", "ê´" => "gwaeng", "ê´®" => "gwaej",
+ "ê´¯" => "gwaec", "ê´°" => "gwaek", "ê´±" => "gwaet", "ê´²" => "gwaep", "ê´³" => "gwaeh", "ê´´" => "goe",
+ "ê´µ" => "goeg", "ê´¶" => "goegg", "ê´·" => "goegs", "ê´¸" => "goen", "ê´¹" => "goenj", "ê´º" => "goenh",
+ "ê´»" => "goed", "ê´¼" => "goel", "ê´½" => "goelg", "ê´¾" => "goelm", "ê´¿" => "goelb", "êµ€" => "goels",
+ "êµ" => "goelt", "굂" => "goelp", "굃" => "goelh", "굄" => "goem", "êµ…" => "goeb", "굆" => "goebs",
+ "굇" => "goes", "굈" => "goess", "굉" => "goeng", "êµ" => "goej", "굋" => "goec", "굌" => "goek",
+ "êµ" => "goet", "êµ" => "goep", "êµ" => "goeh", "êµ" => "gyo", "굑" => "gyog", "êµ’" => "gyogg",
+ "굓" => "gyogs", "굔" => "gyon", "굕" => "gyonj", "굖" => "gyonh", "굗" => "gyod", "굘" => "gyol",
+ "êµ™" => "gyolg", "êµ" => "gyolm", "êµ›" => "gyolb", "굜" => "gyols", "êµ" => "gyolt", "êµ" => "gyolp",
+ "굟" => "gyolh", "êµ " => "gyom", "굡" => "gyob", "êµ¢" => "gyobs", "êµ£" => "gyos", "굤" => "gyoss",
+ "굥" => "gyong", "굦" => "gyoj", "굧" => "gyoc", "굨" => "gyok", "굩" => "gyot", "굪" => "gyop",
+ "굫" => "gyoh", "구" => "gu", "êµ" => "gug", "êµ®" => "gugg", "굯" => "gugs", "êµ°" => "gun",
+ "굱" => "gunj", "굲" => "gunh", "굳" => "gud", "굴" => "gul", "굵" => "gulg", "굶" => "gulm",
+ "굷" => "gulb", "굸" => "guls", "굹" => "gult", "굺" => "gulp", "굻" => "gulh", "굼" => "gum",
+ "êµ½" => "gub", "êµ¾" => "gubs", "굿" => "gus", "궀" => "guss", "ê¶" => "gung", "궂" => "guj",
+ "궃" => "guc", "궄" => "guk", "궅" => "gut", "궆" => "gup", "궇" => "guh", "궈" => "gweo",
+ "궉" => "gweog", "ê¶" => "gweogg", "궋" => "gweogs", "권" => "gweon", "ê¶" => "gweonj", "ê¶" => "gweonh",
+ "ê¶" => "gweod", "ê¶" => "gweol", "궑" => "gweolg", "궒" => "gweolm", "궓" => "gweolb", "궔" => "gweols",
+ "궕" => "gweolt", "궖" => "gweolp", "궗" => "gweolh", "궘" => "gweom", "궙" => "gweob", "ê¶" => "gweobs",
+ "궛" => "gweos", "궜" => "gweoss", "ê¶" => "gweong", "ê¶" => "gweoj", "궟" => "gweoc", "ê¶ " => "gweok",
+ "궡" => "gweot", "궢" => "gweop", "궣" => "gweoh", "궤" => "gwe", "궥" => "gweg", "궦" => "gwegg",
+ "궧" => "gwegs", "궨" => "gwen", "궩" => "gwenj", "궪" => "gwenh", "궫" => "gwed", "궬" => "gwel",
+ "ê¶" => "gwelg", "궮" => "gwelm", "궯" => "gwelb", "궰" => "gwels", "궱" => "gwelt", "궲" => "gwelp",
+ "궳" => "gwelh", "궴" => "gwem", "궵" => "gweb", "궶" => "gwebs", "궷" => "gwes", "궸" => "gwess",
+ "궹" => "gweng", "궺" => "gwej", "궻" => "gwec", "궼" => "gwek", "궽" => "gwet", "궾" => "gwep",
+ "궿" => "gweh", "ê·€" => "gwi", "ê·" => "gwig", "ê·‚" => "gwigg", "ê·ƒ" => "gwigs", "ê·„" => "gwin",
+ "ê·…" => "gwinj", "ê·†" => "gwinh", "ê·‡" => "gwid", "ê·ˆ" => "gwil", "ê·‰" => "gwilg", "ê·" => "gwilm",
+ "ê·‹" => "gwilb", "ê·Œ" => "gwils", "ê·" => "gwilt", "ê·" => "gwilp", "ê·" => "gwilh", "ê·" => "gwim",
+ "ê·‘" => "gwib", "ê·’" => "gwibs", "ê·“" => "gwis", "ê·”" => "gwiss", "ê·•" => "gwing", "ê·–" => "gwij",
+ "ê·—" => "gwic", "ê·˜" => "gwik", "ê·™" => "gwit", "ê·" => "gwip", "ê·›" => "gwih", "ê·œ" => "gyu",
+ "ê·" => "gyug", "ê·" => "gyugg", "ê·Ÿ" => "gyugs", "ê· " => "gyun", "ê·¡" => "gyunj", "ê·¢" => "gyunh",
+ "ê·£" => "gyud", "ê·¤" => "gyul", "ê·¥" => "gyulg", "ê·¦" => "gyulm", "ê·§" => "gyulb", "ê·¨" => "gyuls",
+ "ê·©" => "gyult", "ê·ª" => "gyulp", "ê·«" => "gyulh", "ê·¬" => "gyum", "ê·" => "gyub", "ê·®" => "gyubs",
+ "ê·¯" => "gyus", "ê·°" => "gyuss", "ê·±" => "gyung", "ê·²" => "gyuj", "ê·³" => "gyuc", "ê·´" => "gyuk",
+ "ê·µ" => "gyut", "ê·¶" => "gyup", "ê··" => "gyuh", "ê·¸" => "geu", "ê·¹" => "geug", "ê·º" => "geugg",
+ "ê·»" => "geugs", "ê·¼" => "geun", "ê·½" => "geunj", "ê·¾" => "geunh", "ê·¿" => "geud", "ê¸" => "geulg",
+ "긂" => "geulm", "긃" => "geulb", "긄" => "geuls", "긅" => "geult", "긆" => "geulp", "긇" => "geulh",
+ "금" => "geum", "급" => "geub", "ê¸" => "geubs", "긋" => "geus", "긌" => "geuss", "ê¸" => "geung",
+ "ê¸" => "geuj", "ê¸" => "geuc", "ê¸" => "geuk", "긑" => "geut", "긒" => "geup", "긓" => "geuh",
+ "긔" => "gyi", "긕" => "gyig", "긖" => "gyigg", "긗" => "gyigs", "긘" => "gyin", "긙" => "gyinj",
+ "ê¸" => "gyinh", "긛" => "gyid", "긜" => "gyil", "ê¸" => "gyilg", "ê¸" => "gyilm", "긟" => "gyilb",
+ "ê¸ " => "gyils", "긡" => "gyilt", "긢" => "gyilp", "긣" => "gyilh", "긤" => "gyim", "긥" => "gyib",
+ "긦" => "gyibs", "긧" => "gyis", "긨" => "gyiss", "긩" => "gying", "긪" => "gyij", "긫" => "gyic",
+ "긬" => "gyik", "ê¸" => "gyit", "긮" => "gyip", "긯" => "gyih", "기" => "gi", "긱" => "gig",
+ "긲" => "gigg", "긳" => "gigs", "긴" => "gin", "긵" => "ginj", "긶" => "ginh", "긷" => "gid",
+ "길" => "gil", "긹" => "gilg", "긺" => "gilm", "긻" => "gilb", "긼" => "gils", "긽" => "gilt",
+ "긾" => "gilp", "긿" => "gilh", "ê¹€" => "gim", "ê¹" => "gib", "깂" => "gibs", "깃" => "gis",
+ "깄" => "giss", "깅" => "ging", "깆" => "gij", "깇" => "gic", "깈" => "gik", "깉" => "git",
+ "ê¹" => "gip", "깋" => "gih", "까" => "gga", "ê¹" => "ggag", "ê¹" => "ggagg", "ê¹" => "ggags",
+ "ê¹" => "ggan", "깑" => "gganj", "ê¹’" => "gganh", "깓" => "ggad", "ê¹”" => "ggal", "깕" => "ggalg",
+ "ê¹–" => "ggalm", "ê¹—" => "ggalb", "깘" => "ggals", "ê¹™" => "ggalt", "ê¹" => "ggalp", "ê¹›" => "ggalh",
+ "깜" => "ggam", "ê¹" => "ggab", "ê¹" => "ggabs", "깟" => "ggas", "ê¹ " => "ggass", "깡" => "ggang",
+ "깢" => "ggaj", "깣" => "ggac", "깤" => "ggak", "깥" => "ggat", "깦" => "ggap", "깧" => "ggah",
+ "깨" => "ggae", "깩" => "ggaeg", "깪" => "ggaegg", "깫" => "ggaegs", "깬" => "ggaen", "ê¹" => "ggaenj",
+ "깮" => "ggaenh", "깯" => "ggaed", "깰" => "ggael", "깱" => "ggaelg", "깲" => "ggaelm", "깳" => "ggaelb",
+ "깴" => "ggaels", "깵" => "ggaelt", "깶" => "ggaelp", "깷" => "ggaelh", "깸" => "ggaem", "깹" => "ggaeb",
+ "깺" => "ggaebs", "깻" => "ggaes", "깼" => "ggaess", "깽" => "ggaeng", "깾" => "ggaej", "깿" => "ggaec",
+ "꺀" => "ggaek", "êº" => "ggaet", "꺂" => "ggaep", "꺃" => "ggaeh", "꺄" => "ggya", "꺅" => "ggyag",
+ "꺆" => "ggyagg", "꺇" => "ggyags", "꺈" => "ggyan", "꺉" => "ggyanj", "êº" => "ggyanh", "꺋" => "ggyad",
+ "꺌" => "ggyal", "êº" => "ggyalg", "êº" => "ggyalm", "êº" => "ggyalb", "êº" => "ggyals", "꺑" => "ggyalt",
+ "꺒" => "ggyalp", "꺓" => "ggyalh", "꺔" => "ggyam", "꺕" => "ggyab", "꺖" => "ggyabs", "꺗" => "ggyas",
+ "꺘" => "ggyass", "꺙" => "ggyang", "êº" => "ggyaj", "꺛" => "ggyac", "꺜" => "ggyak", "êº" => "ggyat",
+ "êº" => "ggyap", "꺟" => "ggyah", "êº " => "ggyae", "꺡" => "ggyaeg", "꺢" => "ggyaegg", "꺣" => "ggyaegs",
+ "꺤" => "ggyaen", "꺥" => "ggyaenj", "꺦" => "ggyaenh", "꺧" => "ggyaed", "꺨" => "ggyael", "꺩" => "ggyaelg",
+ "꺪" => "ggyaelm", "꺫" => "ggyaelb", "꺬" => "ggyaels", "êº" => "ggyaelt", "꺮" => "ggyaelp", "꺯" => "ggyaelh",
+ "꺰" => "ggyaem", "꺱" => "ggyaeb", "꺲" => "ggyaebs", "꺳" => "ggyaes", "꺴" => "ggyaess", "꺵" => "ggyaeng",
+ "꺶" => "ggyaej", "꺷" => "ggyaec", "꺸" => "ggyaek", "꺹" => "ggyaet", "꺺" => "ggyaep", "꺻" => "ggyaeh",
+ "꺼" => "ggeo", "꺽" => "ggeog", "꺾" => "ggeogg", "꺿" => "ggeogs", "껀" => "ggeon", "ê»" => "ggeonj",
+ "껂" => "ggeonh", "껃" => "ggeod", "껄" => "ggeol", "껅" => "ggeolg", "껆" => "ggeolm", "껇" => "ggeolb",
+ "껈" => "ggeols", "껉" => "ggeolt", "ê»" => "ggeolp", "껋" => "ggeolh", "껌" => "ggeom", "ê»" => "ggeob",
+ "ê»" => "ggeobs", "ê»" => "ggeos", "ê»" => "ggeoss", "껑" => "ggeong", "ê»’" => "ggeoj", "껓" => "ggeoc",
+ "껔" => "ggeok", "껕" => "ggeot", "껖" => "ggeop", "껗" => "ggeoh", "께" => "gge", "껙" => "ggeg",
+ "ê»" => "ggegg", "ê»›" => "ggegs", "껜" => "ggen", "ê»" => "ggenj", "ê»" => "ggenh", "껟" => "gged",
+ "ê» " => "ggel", "껡" => "ggelg", "껢" => "ggelm", "껣" => "ggelb", "껤" => "ggels", "껥" => "ggelt",
+ "껦" => "ggelp", "껧" => "ggelh", "껨" => "ggem", "껩" => "ggeb", "껪" => "ggebs", "껫" => "gges",
+ "껬" => "ggess", "ê»" => "ggeng", "ê»®" => "ggej", "껯" => "ggec", "ê»°" => "ggek", "ê»±" => "gget",
+ "껲" => "ggep", "껳" => "ggeh", "껴" => "ggyeo", "껵" => "ggyeog", "껶" => "ggyeogg", "껷" => "ggyeogs",
+ "껸" => "ggyeon", "껹" => "ggyeonj", "껺" => "ggyeonh", "껻" => "ggyeod", "껼" => "ggyeol", "껽" => "ggyeolg",
+ "껾" => "ggyeolm", "껿" => "ggyeolb", "ê¼" => "ggyeolt", "꼂" => "ggyeolp", "꼃" => "ggyeolh", "꼄" => "ggyeom",
+ "ê¼…" => "ggyeob", "꼆" => "ggyeobs", "꼇" => "ggyeos", "꼈" => "ggyeoss", "꼉" => "ggyeong", "ê¼" => "ggyeoj",
+ "꼋" => "ggyeoc", "꼌" => "ggyeok", "ê¼" => "ggyeot", "ê¼" => "ggyeop", "ê¼" => "ggyeoh", "ê¼" => "ggye",
+ "꼑" => "ggyeg", "꼒" => "ggyegg", "꼓" => "ggyegs", "꼔" => "ggyen", "꼕" => "ggyenj", "꼖" => "ggyenh",
+ "ê¼—" => "ggyed", "꼘" => "ggyel", "ê¼™" => "ggyelg", "ê¼" => "ggyelm", "ê¼›" => "ggyelb", "꼜" => "ggyels",
+ "ê¼" => "ggyelt", "ê¼" => "ggyelp", "꼟" => "ggyelh", "ê¼ " => "ggyem", "꼡" => "ggyeb", "ê¼¢" => "ggyebs",
+ "꼣" => "ggyes", "꼤" => "ggyess", "꼥" => "ggyeng", "꼦" => "ggyej", "꼧" => "ggyec", "꼨" => "ggyek",
+ "꼩" => "ggyet", "꼪" => "ggyep", "꼫" => "ggyeh", "꼬" => "ggo", "ê¼" => "ggog", "ê¼®" => "ggogg",
+ "꼯" => "ggogs", "꼰" => "ggon", "꼱" => "ggonj", "꼲" => "ggonh", "꼳" => "ggod", "꼴" => "ggol",
+ "꼵" => "ggolg", "꼶" => "ggolm", "꼷" => "ggolb", "꼸" => "ggols", "꼹" => "ggolt", "꼺" => "ggolp",
+ "꼻" => "ggolh", "꼼" => "ggom", "꼽" => "ggob", "꼾" => "ggobs", "꼿" => "ggos", "꽀" => "ggoss",
+ "ê½" => "ggong", "꽂" => "ggoj", "꽃" => "ggoc", "꽄" => "ggok", "ê½…" => "ggot", "꽆" => "ggop",
+ "꽇" => "ggoh", "꽈" => "ggwa", "꽉" => "ggwag", "ê½" => "ggwagg", "꽋" => "ggwags", "꽌" => "ggwan",
+ "ê½" => "ggwanj", "ê½" => "ggwanh", "ê½" => "ggwad", "ê½" => "ggwal", "꽑" => "ggwalg", "ê½’" => "ggwalm",
+ "꽓" => "ggwalb", "꽔" => "ggwals", "꽕" => "ggwalt", "꽖" => "ggwalp", "꽗" => "ggwalh", "꽘" => "ggwam",
+ "ê½™" => "ggwab", "ê½" => "ggwabs", "ê½›" => "ggwas", "꽜" => "ggwass", "ê½" => "ggwang", "ê½" => "ggwaj",
+ "꽟" => "ggwac", "ê½ " => "ggwak", "꽡" => "ggwat", "ê½¢" => "ggwap", "ê½£" => "ggwah", "꽤" => "ggwae",
+ "꽥" => "ggwaeg", "꽦" => "ggwaegg", "꽧" => "ggwaegs", "꽨" => "ggwaen", "꽩" => "ggwaenj", "꽪" => "ggwaenh",
+ "꽫" => "ggwaed", "꽬" => "ggwael", "ê½" => "ggwaelg", "ê½®" => "ggwaelm", "꽯" => "ggwaelb", "ê½°" => "ggwaels",
+ "꽱" => "ggwaelt", "꽲" => "ggwaelp", "꽳" => "ggwaelh", "꽴" => "ggwaem", "꽵" => "ggwaeb", "꽶" => "ggwaebs",
+ "꽷" => "ggwaes", "꽸" => "ggwaess", "꽹" => "ggwaeng", "꽺" => "ggwaej", "꽻" => "ggwaec", "꽼" => "ggwaek",
+ "ê½½" => "ggwaet", "ê½¾" => "ggwaep", "꽿" => "ggwaeh", "ê¾€" => "ggoe", "ê¾" => "ggoeg", "꾂" => "ggoegg",
+ "꾃" => "ggoegs", "꾄" => "ggoen", "꾅" => "ggoenj", "꾆" => "ggoenh", "꾇" => "ggoed", "꾈" => "ggoel",
+ "꾉" => "ggoelg", "ê¾" => "ggoelm", "꾋" => "ggoelb", "꾌" => "ggoels", "ê¾" => "ggoelt", "ê¾" => "ggoelp",
+ "ê¾" => "ggoelh", "ê¾" => "ggoem", "꾑" => "ggoeb", "ê¾’" => "ggoebs", "꾓" => "ggoes", "ê¾”" => "ggoess",
+ "꾕" => "ggoeng", "ê¾–" => "ggoej", "ê¾—" => "ggoec", "꾘" => "ggoek", "ê¾™" => "ggoet", "ê¾" => "ggoep",
+ "ê¾›" => "ggoeh", "꾜" => "ggyo", "ê¾" => "ggyog", "ê¾" => "ggyogg", "꾟" => "ggyogs", "ê¾ " => "ggyon",
+ "꾡" => "ggyonj", "꾢" => "ggyonh", "꾣" => "ggyod", "꾤" => "ggyol", "꾥" => "ggyolg", "꾦" => "ggyolm",
+ "꾧" => "ggyolb", "꾨" => "ggyols", "꾩" => "ggyolt", "꾪" => "ggyolp", "꾫" => "ggyolh", "꾬" => "ggyom",
+ "ê¾" => "ggyob", "ê¾®" => "ggyobs", "꾯" => "ggyos", "ê¾°" => "ggyoss", "ê¾±" => "ggyong", "ê¾²" => "ggyoj",
+ "꾳" => "ggyoc", "꾴" => "ggyok", "꾵" => "ggyot", "꾶" => "ggyop", "꾷" => "ggyoh", "꾸" => "ggu",
+ "꾹" => "ggug", "꾺" => "ggugg", "꾻" => "ggugs", "꾼" => "ggun", "꾽" => "ggunj", "꾾" => "ggunh",
+ "꾿" => "ggud", "ê¿€" => "ggul", "ê¿" => "ggulg", "ê¿‚" => "ggulm", "꿃" => "ggulb", "ê¿„" => "gguls",
+ "ê¿…" => "ggult", "꿆" => "ggulp", "꿇" => "ggulh", "꿈" => "ggum", "꿉" => "ggub", "ê¿" => "ggubs",
+ "ê¿‹" => "ggus", "ê¿Œ" => "gguss", "ê¿" => "ggung", "ê¿" => "gguj", "ê¿" => "gguc", "ê¿" => "gguk",
+ "ê¿‘" => "ggut", "ê¿’" => "ggup", "ê¿“" => "gguh", "ê¿”" => "ggweo", "ê¿•" => "ggweog", "ê¿–" => "ggweogg",
+ "ê¿—" => "ggweogs", "꿘" => "ggweon", "ê¿™" => "ggweonj", "ê¿" => "ggweonh", "ê¿›" => "ggweod", "ê¿œ" => "ggweol",
+ "ê¿" => "ggweolg", "ê¿" => "ggweolm", "ê¿Ÿ" => "ggweolb", "ê¿ " => "ggweols", "ê¿¡" => "ggweolt", "ê¿¢" => "ggweolp",
+ "꿣" => "ggweolh", "꿤" => "ggweom", "꿥" => "ggweob", "꿦" => "ggweobs", "꿧" => "ggweos", "꿨" => "ggweoss",
+ "ê¿©" => "ggweong", "꿪" => "ggweoj", "ê¿«" => "ggweoc", "꿬" => "ggweok", "ê¿" => "ggweot", "ê¿®" => "ggweop",
+ "꿯" => "ggweoh", "꿰" => "ggwe", "꿱" => "ggweg", "꿲" => "ggwegg", "꿳" => "ggwegs", "꿴" => "ggwen",
+ "꿵" => "ggwenj", "꿶" => "ggwenh", "꿷" => "ggwed", "꿸" => "ggwel", "꿹" => "ggwelg", "꿺" => "ggwelm",
+ "ê¿»" => "ggwelb", "꿼" => "ggwels", "꿽" => "ggwelt", "꿾" => "ggwelp", "ê¿¿" => "ggwelh", "ë€" => "ggweb",
+ "뀂" => "ggwebs", "뀃" => "ggwes", "뀄" => "ggwess", "뀅" => "ggweng", "뀆" => "ggwej", "뀇" => "ggwec",
+ "뀈" => "ggwek", "뀉" => "ggwet", "ë€" => "ggwep", "뀋" => "ggweh", "뀌" => "ggwi", "ë€" => "ggwig",
+ "ë€" => "ggwigg", "ë€" => "ggwigs", "ë€" => "ggwin", "뀑" => "ggwinj", "뀒" => "ggwinh", "뀓" => "ggwid",
+ "뀔" => "ggwil", "뀕" => "ggwilg", "뀖" => "ggwilm", "뀗" => "ggwilb", "뀘" => "ggwils", "뀙" => "ggwilt",
+ "ë€" => "ggwilp", "뀛" => "ggwilh", "뀜" => "ggwim", "ë€" => "ggwib", "ë€" => "ggwibs", "뀟" => "ggwis",
+ "ë€ " => "ggwiss", "뀡" => "ggwing", "뀢" => "ggwij", "뀣" => "ggwic", "뀤" => "ggwik", "뀥" => "ggwit",
+ "뀦" => "ggwip", "뀧" => "ggwih", "뀨" => "ggyu", "뀩" => "ggyug", "뀪" => "ggyugg", "뀫" => "ggyugs",
+ "뀬" => "ggyun", "ë€" => "ggyunj", "뀮" => "ggyunh", "뀯" => "ggyud", "뀰" => "ggyul", "뀱" => "ggyulg",
+ "뀲" => "ggyulm", "뀳" => "ggyulb", "뀴" => "ggyuls", "뀵" => "ggyult", "뀶" => "ggyulp", "뀷" => "ggyulh",
+ "뀸" => "ggyum", "뀹" => "ggyub", "뀺" => "ggyubs", "뀻" => "ggyus", "뀼" => "ggyuss", "뀽" => "ggyung",
+ "뀾" => "ggyuj", "뀿" => "ggyuc", "ë€" => "ggyuk", "ë" => "ggyut", "ë‚" => "ggyup", "ëƒ" => "ggyuh",
+ "ë„" => "ggeu", "ë…" => "ggeug", "ë†" => "ggeugg", "ë‡" => "ggeugs", "ëˆ" => "ggeun", "ë‰" => "ggeunj",
+ "ë" => "ggeunh", "ë‹" => "ggeud", "ëŒ" => "ggeul", "ë" => "ggeulg", "ë" => "ggeulm", "ë" => "ggeulb",
+ "ë" => "ggeuls", "ë‘" => "ggeult", "ë’" => "ggeulp", "ë“" => "ggeulh", "ë”" => "ggeum", "ë•" => "ggeub",
+ "ë–" => "ggeubs", "ë—" => "ggeus", "ë˜" => "ggeuss", "ë™" => "ggeung", "ë" => "ggeuj", "ë›" => "ggeuc",
+ "ëœ" => "ggeuk", "ë" => "ggeut", "ë" => "ggeup", "ëŸ" => "ggeuh", "ë " => "ggyi", "ë¡" => "ggyig",
+ "ë¢" => "ggyigg", "ë£" => "ggyigs", "ë¤" => "ggyin", "ë¥" => "ggyinj", "ë¦" => "ggyinh", "ë§" => "ggyid",
+ "ë¨" => "ggyil", "ë©" => "ggyilg", "ëª" => "ggyilm", "ë«" => "ggyilb", "ë¬" => "ggyils", "ë" => "ggyilt",
+ "ë®" => "ggyilp", "ë¯" => "ggyilh", "ë°" => "ggyim", "ë±" => "ggyib", "ë²" => "ggyibs", "ë³" => "ggyis",
+ "ë´" => "ggyiss", "ëµ" => "ggying", "ë¶" => "ggyij", "ë·" => "ggyic", "ë¸" => "ggyik", "ë¹" => "ggyit",
+ "ëº" => "ggyip", "ë»" => "ggyih", "ë¼" => "ggi", "ë½" => "ggig", "ë¾" => "ggigg", "ë¿" => "ggigs",
+ "ë‚€" => "ggin", "ë‚" => "gginj", "ë‚‚" => "gginh", "낃" => "ggid", "ë‚„" => "ggil", "ë‚…" => "ggilg",
+ "낆" => "ggilm", "낇" => "ggilb", "낈" => "ggils", "낉" => "ggilt", "ë‚" => "ggilp", "ë‚‹" => "ggilh",
+ "ë‚Œ" => "ggim", "ë‚" => "ggib", "ë‚" => "ggibs", "ë‚" => "ggis", "ë‚" => "ggiss", "ë‚‘" => "gging",
+ "ë‚’" => "ggij", "ë‚“" => "ggic", "ë‚”" => "ggik", "ë‚•" => "ggit", "ë‚–" => "ggip", "ë‚—" => "ggih",
+ "나" => "na", "ë‚™" => "nag", "ë‚" => "nagg", "ë‚›" => "nags", "ë‚œ" => "nan", "ë‚" => "nanj",
+ "ë‚" => "nanh", "ë‚Ÿ" => "nad", "ë‚ " => "nal", "ë‚¡" => "nalg", "ë‚¢" => "nalm", "ë‚£" => "nalb",
+ "낤" => "nals", "낥" => "nalt", "낦" => "nalp", "낧" => "nalh", "남" => "nam", "납" => "nab",
+ "낪" => "nabs", "ë‚«" => "nas", "났" => "nass", "ë‚" => "nang", "ë‚®" => "naj", "낯" => "nac",
+ "낰" => "nak", "낱" => "nat", "낲" => "nap", "낳" => "nah", "내" => "nae", "낵" => "naeg",
+ "낶" => "naegg", "낷" => "naegs", "낸" => "naen", "낹" => "naenj", "낺" => "naenh", "낻" => "naed",
+ "낼" => "nael", "낽" => "naelg", "낾" => "naelm", "ë‚¿" => "naelb", "냀" => "naels", "ëƒ" => "naelt",
+ "냂" => "naelp", "냃" => "naelh", "냄" => "naem", "냅" => "naeb", "냆" => "naebs", "냇" => "naes",
+ "냈" => "naess", "냉" => "naeng", "ëƒ" => "naej", "냋" => "naec", "냌" => "naek", "ëƒ" => "naet",
+ "ëƒ" => "naep", "ëƒ" => "naeh", "ëƒ" => "nya", "냑" => "nyag", "냒" => "nyagg", "냓" => "nyags",
+ "냔" => "nyan", "냕" => "nyanj", "냖" => "nyanh", "냗" => "nyad", "냘" => "nyal", "냙" => "nyalg",
+ "ëƒ" => "nyalm", "냛" => "nyalb", "냜" => "nyals", "ëƒ" => "nyalt", "ëƒ" => "nyalp", "냟" => "nyalh",
+ "ëƒ " => "nyam", "냡" => "nyab", "냢" => "nyabs", "냣" => "nyas", "냤" => "nyass", "냥" => "nyang",
+ "냦" => "nyaj", "냧" => "nyac", "냨" => "nyak", "냩" => "nyat", "냪" => "nyap", "냫" => "nyah",
+ "냬" => "nyae", "ëƒ" => "nyaeg", "냮" => "nyaegg", "냯" => "nyaegs", "냰" => "nyaen", "냱" => "nyaenj",
+ "냲" => "nyaenh", "냳" => "nyaed", "냴" => "nyael", "냵" => "nyaelg", "냶" => "nyaelm", "냷" => "nyaelb",
+ "냸" => "nyaels", "냹" => "nyaelt", "냺" => "nyaelp", "냻" => "nyaelh", "냼" => "nyaem", "냽" => "nyaeb",
+ "냾" => "nyaebs", "냿" => "nyaes", "ë„" => "nyaeng", "ë„‚" => "nyaej", "넃" => "nyaec", "ë„„" => "nyaek",
+ "ë„…" => "nyaet", "넆" => "nyaep", "넇" => "nyaeh", "너" => "neo", "넉" => "neog", "ë„" => "neogg",
+ "ë„‹" => "neogs", "ë„Œ" => "neon", "ë„" => "neonj", "ë„" => "neonh", "ë„" => "neod", "ë„" => "neol",
+ "ë„‘" => "neolg", "ë„’" => "neolm", "ë„“" => "neolb", "ë„”" => "neols", "ë„•" => "neolt", "ë„–" => "neolp",
+ "ë„—" => "neolh", "넘" => "neom", "ë„™" => "neob", "ë„" => "neobs", "ë„›" => "neos", "ë„œ" => "neoss",
+ "ë„" => "neong", "ë„" => "neoj", "ë„Ÿ" => "neoc", "ë„ " => "neok", "ë„¡" => "neot", "ë„¢" => "neop",
+ "넣" => "neoh", "네" => "ne", "넥" => "neg", "넦" => "negg", "넧" => "negs", "넨" => "nen",
+ "ë„©" => "nenj", "넪" => "nenh", "ë„«" => "ned", "넬" => "nel", "ë„" => "nelg", "ë„®" => "nelm",
+ "넯" => "nelb", "넰" => "nels", "넱" => "nelt", "넲" => "nelp", "넳" => "nelh", "넴" => "nem",
+ "넵" => "neb", "넶" => "nebs", "넷" => "nes", "넸" => "ness", "넹" => "neng", "넺" => "nej",
+ "넻" => "nec", "넼" => "nek", "넽" => "net", "넾" => "nep", "넿" => "neh", "녀" => "nyeo",
+ "ë…" => "nyeog", "ë…‚" => "nyeogg", "ë…ƒ" => "nyeogs", "ë…„" => "nyeon", "ë……" => "nyeonj", "ë…†" => "nyeonh",
+ "ë…‡" => "nyeod", "ë…ˆ" => "nyeol", "ë…‰" => "nyeolg", "ë…" => "nyeolm", "ë…‹" => "nyeolb", "ë…Œ" => "nyeols",
+ "ë…" => "nyeolt", "ë…" => "nyeolp", "ë…" => "nyeolh", "ë…" => "nyeom", "ë…‘" => "nyeob", "ë…’" => "nyeobs",
+ "ë…“" => "nyeos", "ë…”" => "nyeoss", "ë…•" => "nyeong", "ë…–" => "nyeoj", "ë…—" => "nyeoc", "ë…˜" => "nyeok",
+ "ë…™" => "nyeot", "ë…" => "nyeop", "ë…›" => "nyeoh", "ë…œ" => "nye", "ë…" => "nyeg", "ë…" => "nyegg",
+ "ë…Ÿ" => "nyegs", "ë… " => "nyen", "ë…¡" => "nyenj", "ë…¢" => "nyenh", "ë…£" => "nyed", "ë…¤" => "nyel",
+ "ë…¥" => "nyelg", "ë…¦" => "nyelm", "ë…§" => "nyelb", "ë…¨" => "nyels", "ë…©" => "nyelt", "ë…ª" => "nyelp",
+ "ë…«" => "nyelh", "ë…¬" => "nyem", "ë…" => "nyeb", "ë…®" => "nyebs", "ë…¯" => "nyes", "ë…°" => "nyess",
+ "ë…±" => "nyeng", "ë…²" => "nyej", "ë…³" => "nyec", "ë…´" => "nyek", "ë…µ" => "nyet", "ë…¶" => "nyep",
+ "ë…·" => "nyeh", "ë…¸" => "no", "ë…¹" => "nog", "ë…º" => "nogg", "ë…»" => "nogs", "ë…¼" => "non",
+ "ë…½" => "nonj", "ë…¾" => "nonh", "ë…¿" => "nod", "놀" => "nol", "ë†" => "nolg", "놂" => "nolm",
+ "놃" => "nolb", "놄" => "nols", "놅" => "nolt", "놆" => "nolp", "놇" => "nolh", "놈" => "nom",
+ "놉" => "nob", "ë†" => "nobs", "놋" => "nos", "놌" => "noss", "ë†" => "nong", "ë†" => "noj",
+ "ë†" => "noc", "ë†" => "nok", "놑" => "not", "높" => "nop", "놓" => "noh", "놔" => "nwa",
+ "놕" => "nwag", "놖" => "nwagg", "놗" => "nwags", "놘" => "nwan", "놙" => "nwanj", "ë†" => "nwanh",
+ "놛" => "nwad", "놜" => "nwal", "ë†" => "nwalg", "ë†" => "nwalm", "놟" => "nwalb", "ë† " => "nwals",
+ "놡" => "nwalt", "놢" => "nwalp", "놣" => "nwalh", "놤" => "nwam", "놥" => "nwab", "놦" => "nwabs",
+ "놧" => "nwas", "놨" => "nwass", "놩" => "nwang", "놪" => "nwaj", "놫" => "nwac", "놬" => "nwak",
+ "ë†" => "nwat", "놮" => "nwap", "놯" => "nwah", "놰" => "nwae", "놱" => "nwaeg", "놲" => "nwaegg",
+ "놳" => "nwaegs", "놴" => "nwaen", "놵" => "nwaenj", "놶" => "nwaenh", "놷" => "nwaed", "놸" => "nwael",
+ "놹" => "nwaelg", "놺" => "nwaelm", "놻" => "nwaelb", "놼" => "nwaels", "놽" => "nwaelt", "놾" => "nwaelp",
+ "놿" => "nwaelh", "뇀" => "nwaem", "ë‡" => "nwaeb", "뇂" => "nwaebs", "뇃" => "nwaes", "뇄" => "nwaess",
+ "뇅" => "nwaeng", "뇆" => "nwaej", "뇇" => "nwaec", "뇈" => "nwaek", "뇉" => "nwaet", "ë‡" => "nwaep",
+ "뇋" => "nwaeh", "뇌" => "noe", "ë‡" => "noeg", "ë‡" => "noegg", "ë‡" => "noegs", "ë‡" => "noen",
+ "뇑" => "noenj", "뇒" => "noenh", "뇓" => "noed", "뇔" => "noel", "뇕" => "noelg", "뇖" => "noelm",
+ "뇗" => "noelb", "뇘" => "noels", "뇙" => "noelt", "ë‡" => "noelp", "뇛" => "noelh", "뇜" => "noem",
+ "ë‡" => "noeb", "ë‡" => "noebs", "뇟" => "noes", "ë‡ " => "noess", "뇡" => "noeng", "뇢" => "noej",
+ "뇣" => "noec", "뇤" => "noek", "뇥" => "noet", "뇦" => "noep", "뇧" => "noeh", "뇨" => "nyo",
+ "뇩" => "nyog", "뇪" => "nyogg", "뇫" => "nyogs", "뇬" => "nyon", "ë‡" => "nyonj", "뇮" => "nyonh",
+ "뇯" => "nyod", "뇰" => "nyol", "뇱" => "nyolg", "뇲" => "nyolm", "뇳" => "nyolb", "뇴" => "nyols",
+ "뇵" => "nyolt", "뇶" => "nyolp", "뇷" => "nyolh", "뇸" => "nyom", "뇹" => "nyob", "뇺" => "nyobs",
+ "뇻" => "nyos", "뇼" => "nyoss", "뇽" => "nyong", "뇾" => "nyoj", "뇿" => "nyoc", "ëˆ" => "nyot",
+ "눂" => "nyop", "눃" => "nyoh", "누" => "nu", "눅" => "nug", "눆" => "nugg", "눇" => "nugs",
+ "눈" => "nun", "눉" => "nunj", "ëˆ" => "nunh", "눋" => "nud", "눌" => "nul", "ëˆ" => "nulg",
+ "ëˆ" => "nulm", "ëˆ" => "nulb", "ëˆ" => "nuls", "눑" => "nult", "눒" => "nulp", "눓" => "nulh",
+ "눔" => "num", "눕" => "nub", "눖" => "nubs", "눗" => "nus", "눘" => "nuss", "눙" => "nung",
+ "ëˆ" => "nuj", "눛" => "nuc", "눜" => "nuk", "ëˆ" => "nut", "ëˆ" => "nup", "눟" => "nuh",
+ "ëˆ " => "nweo", "눡" => "nweog", "눢" => "nweogg", "눣" => "nweogs", "눤" => "nweon", "눥" => "nweonj",
+ "눦" => "nweonh", "눧" => "nweod", "눨" => "nweol", "눩" => "nweolg", "눪" => "nweolm", "눫" => "nweolb",
+ "눬" => "nweols", "ëˆ" => "nweolt", "눮" => "nweolp", "눯" => "nweolh", "눰" => "nweom", "눱" => "nweob",
+ "눲" => "nweobs", "눳" => "nweos", "눴" => "nweoss", "눵" => "nweong", "눶" => "nweoj", "눷" => "nweoc",
+ "눸" => "nweok", "눹" => "nweot", "눺" => "nweop", "눻" => "nweoh", "눼" => "nwe", "눽" => "nweg",
+ "눾" => "nwegg", "눿" => "nwegs", "뉀" => "nwen", "ë‰" => "nwenj", "뉂" => "nwenh", "뉃" => "nwed",
+ "뉄" => "nwel", "뉅" => "nwelg", "뉆" => "nwelm", "뉇" => "nwelb", "뉈" => "nwels", "뉉" => "nwelt",
+ "ë‰" => "nwelp", "뉋" => "nwelh", "뉌" => "nwem", "ë‰" => "nweb", "ë‰" => "nwebs", "ë‰" => "nwes",
+ "ë‰" => "nwess", "뉑" => "nweng", "뉒" => "nwej", "뉓" => "nwec", "뉔" => "nwek", "뉕" => "nwet",
+ "뉖" => "nwep", "뉗" => "nweh", "뉘" => "nwi", "뉙" => "nwig", "ë‰" => "nwigg", "뉛" => "nwigs",
+ "뉜" => "nwin", "ë‰" => "nwinj", "ë‰" => "nwinh", "뉟" => "nwid", "ë‰ " => "nwil", "뉡" => "nwilg",
+ "뉢" => "nwilm", "뉣" => "nwilb", "뉤" => "nwils", "뉥" => "nwilt", "뉦" => "nwilp", "뉧" => "nwilh",
+ "뉨" => "nwim", "뉩" => "nwib", "뉪" => "nwibs", "뉫" => "nwis", "뉬" => "nwiss", "ë‰" => "nwing",
+ "뉮" => "nwij", "뉯" => "nwic", "뉰" => "nwik", "뉱" => "nwit", "뉲" => "nwip", "뉳" => "nwih",
+ "뉴" => "nyu", "뉵" => "nyug", "뉶" => "nyugg", "뉷" => "nyugs", "뉸" => "nyun", "뉹" => "nyunj",
+ "뉺" => "nyunh", "뉻" => "nyud", "뉼" => "nyul", "뉽" => "nyulg", "뉾" => "nyulm", "뉿" => "nyulb",
+ "ë€" => "nyuls", "ë" => "nyult", "ë‚" => "nyulp", "ëƒ" => "nyulh", "ë„" => "nyum", "ë…" => "nyub",
+ "ë†" => "nyubs", "ë‡" => "nyus", "ëˆ" => "nyuss", "ë‰" => "nyung", "ë" => "nyuj", "ë‹" => "nyuc",
+ "ëŒ" => "nyuk", "ë" => "nyut", "ë" => "nyup", "ë" => "nyuh", "ë" => "neu", "ë‘" => "neug",
+ "ë’" => "neugg", "ë“" => "neugs", "ë”" => "neun", "ë•" => "neunj", "ë–" => "neunh", "ë—" => "neud",
+ "ë˜" => "neul", "ë™" => "neulg", "ë" => "neulm", "ë›" => "neulb", "ëœ" => "neuls", "ë" => "neult",
+ "ë" => "neulp", "ëŸ" => "neulh", "ë " => "neum", "ë¡" => "neub", "ë¢" => "neubs", "ë£" => "neus",
+ "ë¤" => "neuss", "ë¥" => "neung", "ë¦" => "neuj", "ë§" => "neuc", "ë¨" => "neuk", "ë©" => "neut",
+ "ëª" => "neup", "ë«" => "neuh", "ë¬" => "nyi", "ë" => "nyig", "ë®" => "nyigg", "ë¯" => "nyigs",
+ "ë°" => "nyin", "ë±" => "nyinj", "ë²" => "nyinh", "ë³" => "nyid", "ë´" => "nyil", "ëµ" => "nyilg",
+ "ë¶" => "nyilm", "ë·" => "nyilb", "ë¸" => "nyils", "ë¹" => "nyilt", "ëº" => "nyilp", "ë»" => "nyilh",
+ "ë¼" => "nyim", "ë½" => "nyib", "ë¾" => "nyibs", "ë¿" => "nyis", "ë‹€" => "nyiss", "ë‹" => "nying",
+ "닂" => "nyij", "닃" => "nyic", "닄" => "nyik", "닅" => "nyit", "닆" => "nyip", "닇" => "nyih",
+ "니" => "ni", "닉" => "nig", "ë‹" => "nigg", "ë‹‹" => "nigs", "ë‹Œ" => "nin", "ë‹" => "ninj",
+ "ë‹" => "ninh", "ë‹" => "nid", "ë‹" => "nil", "ë‹‘" => "nilg", "ë‹’" => "nilm", "ë‹“" => "nilb",
+ "닔" => "nils", "닕" => "nilt", "닖" => "nilp", "닗" => "nilh", "님" => "nim", "닙" => "nib",
+ "ë‹" => "nibs", "ë‹›" => "nis", "ë‹œ" => "niss", "ë‹" => "ning", "ë‹" => "nij", "ë‹Ÿ" => "nic",
+ "ë‹ " => "nik", "ë‹¡" => "nit", "ë‹¢" => "nip", "ë‹£" => "nih", "다" => "da", "ë‹¥" => "dag",
+ "닦" => "dagg", "닧" => "dags", "단" => "dan", "닩" => "danj", "닪" => "danh", "닫" => "dad",
+ "달" => "dal", "ë‹" => "dalg", "ë‹®" => "dalm", "닯" => "dalb", "ë‹°" => "dals", "닱" => "dalt",
+ "닲" => "dalp", "닳" => "dalh", "담" => "dam", "답" => "dab", "닶" => "dabs", "닷" => "das",
+ "닸" => "dass", "당" => "dang", "닺" => "daj", "닻" => "dac", "닼" => "dak", "닽" => "dat",
+ "닾" => "dap", "ë‹¿" => "dah", "ëŒ" => "daeg", "댂" => "daegg", "댃" => "daegs", "댄" => "daen",
+ "댅" => "daenj", "댆" => "daenh", "댇" => "daed", "댈" => "dael", "댉" => "daelg", "ëŒ" => "daelm",
+ "댋" => "daelb", "댌" => "daels", "ëŒ" => "daelt", "ëŒ" => "daelp", "ëŒ" => "daelh", "ëŒ" => "daem",
+ "댑" => "daeb", "댒" => "daebs", "댓" => "daes", "댔" => "daess", "댕" => "daeng", "댖" => "daej",
+ "댗" => "daec", "댘" => "daek", "댙" => "daet", "ëŒ" => "daep", "댛" => "daeh", "댜" => "dya",
+ "ëŒ" => "dyag", "ëŒ" => "dyagg", "댟" => "dyags", "ëŒ " => "dyan", "댡" => "dyanj", "댢" => "dyanh",
+ "댣" => "dyad", "댤" => "dyal", "댥" => "dyalg", "댦" => "dyalm", "댧" => "dyalb", "댨" => "dyals",
+ "댩" => "dyalt", "댪" => "dyalp", "댫" => "dyalh", "댬" => "dyam", "ëŒ" => "dyab", "댮" => "dyabs",
+ "댯" => "dyas", "댰" => "dyass", "댱" => "dyang", "댲" => "dyaj", "댳" => "dyac", "댴" => "dyak",
+ "댵" => "dyat", "댶" => "dyap", "댷" => "dyah", "댸" => "dyae", "댹" => "dyaeg", "댺" => "dyaegg",
+ "댻" => "dyaegs", "댼" => "dyaen", "댽" => "dyaenj", "댾" => "dyaenh", "댿" => "dyaed", "ë€" => "dyael",
+ "ë" => "dyaelg", "ë‚" => "dyaelm", "ëƒ" => "dyaelb", "ë„" => "dyaels", "ë…" => "dyaelt", "ë†" => "dyaelp",
+ "ë‡" => "dyaelh", "ëˆ" => "dyaem", "ë‰" => "dyaeb", "ë" => "dyaebs", "ë‹" => "dyaes", "ëŒ" => "dyaess",
+ "ë" => "dyaeng", "ë" => "dyaej", "ë" => "dyaec", "ë" => "dyaek", "ë‘" => "dyaet", "ë’" => "dyaep",
+ "ë“" => "dyaeh", "ë”" => "deo", "ë•" => "deog", "ë–" => "deogg", "ë—" => "deogs", "ë˜" => "deon",
+ "ë™" => "deonj", "ë" => "deonh", "ë›" => "deod", "ëœ" => "deol", "ë" => "deolg", "ë" => "deolm",
+ "ëŸ" => "deolb", "ë " => "deols", "ë¡" => "deolt", "ë¢" => "deolp", "ë£" => "deolh", "ë¤" => "deom",
+ "ë¥" => "deob", "ë¦" => "deobs", "ë§" => "deos", "ë¨" => "deoss", "ë©" => "deong", "ëª" => "deoj",
+ "ë«" => "deoc", "ë¬" => "deok", "ë" => "deot", "ë®" => "deop", "ë¯" => "deoh", "ë°" => "de",
+ "ë±" => "deg", "ë²" => "degg", "ë³" => "degs", "ë´" => "den", "ëµ" => "denj", "ë¶" => "denh",
+ "ë·" => "ded", "ë¸" => "del", "ë¹" => "delg", "ëº" => "delm", "ë»" => "delb", "ë¼" => "dels",
+ "ë½" => "delt", "ë¾" => "delp", "ë¿" => "delh", "ë€" => "dem", "ë" => "deb", "ë‚" => "debs",
+ "ëƒ" => "des", "ë„" => "dess", "ë…" => "deng", "ë†" => "dej", "ë‡" => "dec", "ëˆ" => "dek",
+ "ë‰" => "det", "ë" => "dep", "ë‹" => "deh", "ëŒ" => "dyeo", "ë" => "dyeog", "ë" => "dyeogg",
+ "ë" => "dyeogs", "ë" => "dyeon", "ë‘" => "dyeonj", "ë’" => "dyeonh", "ë“" => "dyeod", "ë”" => "dyeol",
+ "ë•" => "dyeolg", "ë–" => "dyeolm", "ë—" => "dyeolb", "ë˜" => "dyeols", "ë™" => "dyeolt", "ë" => "dyeolp",
+ "ë›" => "dyeolh", "ëœ" => "dyeom", "ë" => "dyeob", "ë" => "dyeobs", "ëŸ" => "dyeos", "ë " => "dyeoss",
+ "ë¡" => "dyeong", "ë¢" => "dyeoj", "ë£" => "dyeoc", "ë¤" => "dyeok", "ë¥" => "dyeot", "ë¦" => "dyeop",
+ "ë§" => "dyeoh", "ë¨" => "dye", "ë©" => "dyeg", "ëª" => "dyegg", "ë«" => "dyegs", "ë¬" => "dyen",
+ "ë" => "dyenj", "ë®" => "dyenh", "ë¯" => "dyed", "ë°" => "dyel", "ë±" => "dyelg", "ë²" => "dyelm",
+ "ë³" => "dyelb", "ë´" => "dyels", "ëµ" => "dyelt", "ë¶" => "dyelp", "ë·" => "dyelh", "ë¸" => "dyem",
+ "ë¹" => "dyeb", "ëº" => "dyebs", "ë»" => "dyes", "ë¼" => "dyess", "ë½" => "dyeng", "ë¾" => "dyej",
+ "ë¿" => "dyec", "ë€" => "dyek", "ë" => "dyet", "ë‚" => "dyep", "ëƒ" => "dyeh", "ë„" => "do",
+ "ë…" => "dog", "ë†" => "dogg", "ë‡" => "dogs", "ëˆ" => "don", "ë‰" => "donj", "ë" => "donh",
+ "ë‹" => "dod", "ëŒ" => "dol", "ë" => "dolg", "ë" => "dolm", "ë" => "dolb", "ë" => "dols",
+ "ë‘" => "dolt", "ë’" => "dolp", "ë“" => "dolh", "ë”" => "dom", "ë•" => "dob", "ë–" => "dobs",
+ "ë—" => "dos", "ë˜" => "doss", "ë™" => "dong", "ë" => "doj", "ë›" => "doc", "ëœ" => "dok",
+ "ë" => "dot", "ë" => "dop", "ëŸ" => "doh", "ë " => "dwa", "ë¡" => "dwag", "ë¢" => "dwagg",
+ "ë£" => "dwags", "ë¤" => "dwan", "ë¥" => "dwanj", "ë¦" => "dwanh", "ë§" => "dwad", "ë¨" => "dwal",
+ "ë©" => "dwalg", "ëª" => "dwalm", "ë«" => "dwalb", "ë¬" => "dwals", "ë" => "dwalt", "ë®" => "dwalp",
+ "ë¯" => "dwalh", "ë°" => "dwam", "ë±" => "dwab", "ë²" => "dwabs", "ë³" => "dwas", "ë´" => "dwass",
+ "ëµ" => "dwang", "ë¶" => "dwaj", "ë·" => "dwac", "ë¸" => "dwak", "ë¹" => "dwat", "ëº" => "dwap",
+ "ë»" => "dwah", "ë¼" => "dwae", "ë½" => "dwaeg", "ë¾" => "dwaegg", "ë¿" => "dwaegs", "ë" => "dwaenj",
+ "ë‚" => "dwaenh", "ëƒ" => "dwaed", "ë„" => "dwael", "ë…" => "dwaelg", "ë†" => "dwaelm", "ë‡" => "dwaelb",
+ "ëˆ" => "dwaels", "ë‰" => "dwaelt", "ë" => "dwaelp", "ë‹" => "dwaelh", "ëŒ" => "dwaem", "ë" => "dwaeb",
+ "ë" => "dwaebs", "ë" => "dwaes", "ë" => "dwaess", "ë‘" => "dwaeng", "ë’" => "dwaej", "ë“" => "dwaec",
+ "ë”" => "dwaek", "ë•" => "dwaet", "ë–" => "dwaep", "ë—" => "dwaeh", "ë˜" => "doe", "ë™" => "doeg",
+ "ë" => "doegg", "ë›" => "doegs", "ëœ" => "doen", "ë" => "doenj", "ë" => "doenh", "ëŸ" => "doed",
+ "ë " => "doel", "ë¡" => "doelg", "ë¢" => "doelm", "ë£" => "doelb", "ë¤" => "doels", "ë¥" => "doelt",
+ "ë¦" => "doelp", "ë§" => "doelh", "ë¨" => "doem", "ë©" => "doeb", "ëª" => "doebs", "ë«" => "does",
+ "ë¬" => "doess", "ë" => "doeng", "ë®" => "doej", "ë¯" => "doec", "ë°" => "doek", "ë±" => "doet",
+ "ë²" => "doep", "ë³" => "doeh", "ë´" => "dyo", "ëµ" => "dyog", "ë¶" => "dyogg", "ë·" => "dyogs",
+ "ë¸" => "dyon", "ë¹" => "dyonj", "ëº" => "dyonh", "ë»" => "dyod", "ë¼" => "dyol", "ë½" => "dyolg",
+ "ë¾" => "dyolm", "ë¿" => "dyolb", "ë‘€" => "dyols", "ë‘" => "dyolt", "ë‘‚" => "dyolp", "둃" => "dyolh",
+ "둄" => "dyom", "둅" => "dyob", "둆" => "dyobs", "둇" => "dyos", "둈" => "dyoss", "둉" => "dyong",
+ "ë‘" => "dyoj", "ë‘‹" => "dyoc", "ë‘Œ" => "dyok", "ë‘" => "dyot", "ë‘" => "dyop", "ë‘" => "dyoh",
+ "ë‘" => "du", "ë‘‘" => "dug", "ë‘’" => "dugg", "ë‘“" => "dugs", "ë‘”" => "dun", "ë‘•" => "dunj",
+ "ë‘–" => "dunh", "ë‘—" => "dud", "둘" => "dul", "ë‘™" => "dulg", "ë‘" => "dulm", "ë‘›" => "dulb",
+ "ë‘œ" => "duls", "ë‘" => "dult", "ë‘" => "dulp", "ë‘Ÿ" => "dulh", "ë‘ " => "dum", "ë‘¡" => "dub",
+ "둢" => "dubs", "둣" => "dus", "둤" => "duss", "둥" => "dung", "둦" => "duj", "둧" => "duc",
+ "둨" => "duk", "ë‘©" => "dut", "둪" => "dup", "ë‘«" => "duh", "둬" => "dweo", "ë‘" => "dweog",
+ "둮" => "dweogg", "둯" => "dweogs", "둰" => "dweon", "둱" => "dweonj", "둲" => "dweonh", "둳" => "dweod",
+ "둴" => "dweol", "둵" => "dweolg", "둶" => "dweolm", "둷" => "dweolb", "둸" => "dweols", "둹" => "dweolt",
+ "둺" => "dweolp", "둻" => "dweolh", "둼" => "dweom", "둽" => "dweob", "둾" => "dweobs", "둿" => "dweos",
+ "ë’€" => "dweoss", "ë’" => "dweong", "ë’‚" => "dweoj", "ë’ƒ" => "dweoc", "ë’„" => "dweok", "ë’…" => "dweot",
+ "ë’†" => "dweop", "ë’‡" => "dweoh", "ë’ˆ" => "dwe", "ë’‰" => "dweg", "ë’" => "dwegg", "ë’‹" => "dwegs",
+ "ë’Œ" => "dwen", "ë’" => "dwenj", "ë’" => "dwenh", "ë’" => "dwed", "ë’" => "dwel", "ë’‘" => "dwelg",
+ "ë’’" => "dwelm", "ë’“" => "dwelb", "ë’”" => "dwels", "ë’•" => "dwelt", "ë’–" => "dwelp", "ë’—" => "dwelh",
+ "ë’˜" => "dwem", "ë’™" => "dweb", "ë’" => "dwebs", "ë’›" => "dwes", "ë’œ" => "dwess", "ë’" => "dweng",
+ "ë’" => "dwej", "ë’Ÿ" => "dwec", "ë’ " => "dwek", "ë’¡" => "dwet", "ë’¢" => "dwep", "ë’£" => "dweh",
+ "ë’¤" => "dwi", "ë’¥" => "dwig", "ë’¦" => "dwigg", "ë’§" => "dwigs", "ë’¨" => "dwin", "ë’©" => "dwinj",
+ "ë’ª" => "dwinh", "ë’«" => "dwid", "ë’¬" => "dwil", "ë’" => "dwilg", "ë’®" => "dwilm", "ë’¯" => "dwilb",
+ "ë’°" => "dwils", "ë’±" => "dwilt", "ë’²" => "dwilp", "ë’³" => "dwilh", "ë’´" => "dwim", "ë’µ" => "dwib",
+ "ë’¶" => "dwibs", "ë’·" => "dwis", "ë’¸" => "dwiss", "ë’¹" => "dwing", "ë’º" => "dwij", "ë’»" => "dwic",
+ "ë’¼" => "dwik", "ë’½" => "dwit", "ë’¾" => "dwip", "ë’¿" => "dwih", "ë“€" => "dyu", "ë“" => "dyug",
+ "듂" => "dyugg", "듃" => "dyugs", "듄" => "dyun", "듅" => "dyunj", "듆" => "dyunh", "듇" => "dyud",
+ "듈" => "dyul", "듉" => "dyulg", "ë“" => "dyulm", "ë“‹" => "dyulb", "ë“Œ" => "dyuls", "ë“" => "dyult",
+ "ë“" => "dyulp", "ë“" => "dyulh", "ë“" => "dyum", "ë“‘" => "dyub", "ë“’" => "dyubs", "ë““" => "dyus",
+ "듔" => "dyuss", "듕" => "dyung", "듖" => "dyuj", "듗" => "dyuc", "듘" => "dyuk", "듙" => "dyut",
+ "ë“" => "dyup", "ë“›" => "dyuh", "ë“œ" => "deu", "ë“" => "deug", "ë“" => "deugg", "ë“Ÿ" => "deugs",
+ "ë“ " => "deun", "ë“¡" => "deunj", "ë“¢" => "deunh", "ë“£" => "deud", "들" => "deul", "ë“¥" => "deulg",
+ "듦" => "deulm", "듧" => "deulb", "듨" => "deuls", "듩" => "deult", "듪" => "deulp", "듫" => "deulh",
+ "듬" => "deum", "ë“" => "deub", "ë“®" => "deubs", "듯" => "deus", "ë“°" => "deuss", "등" => "deung",
+ "듲" => "deuj", "듳" => "deuc", "듴" => "deuk", "듵" => "deut", "듶" => "deup", "듷" => "deuh",
+ "듸" => "dyi", "듹" => "dyig", "듺" => "dyigg", "듻" => "dyigs", "듼" => "dyin", "듽" => "dyinj",
+ "듾" => "dyinh", "ë“¿" => "dyid", "ë”" => "dyilg", "딂" => "dyilm", "딃" => "dyilb", "딄" => "dyils",
+ "ë”…" => "dyilt", "딆" => "dyilp", "딇" => "dyilh", "딈" => "dyim", "딉" => "dyib", "ë”" => "dyibs",
+ "딋" => "dyis", "딌" => "dyiss", "ë”" => "dying", "ë”" => "dyij", "ë”" => "dyic", "ë”" => "dyik",
+ "딑" => "dyit", "딒" => "dyip", "딓" => "dyih", "디" => "di", "딕" => "dig", "딖" => "digg",
+ "ë”—" => "digs", "딘" => "din", "ë”™" => "dinj", "ë”" => "dinh", "ë”›" => "did", "딜" => "dil",
+ "ë”" => "dilg", "ë”" => "dilm", "딟" => "dilb", "ë” " => "dils", "딡" => "dilt", "딢" => "dilp",
+ "딣" => "dilh", "딤" => "dim", "딥" => "dib", "딦" => "dibs", "딧" => "dis", "딨" => "diss",
+ "딩" => "ding", "딪" => "dij", "딫" => "dic", "딬" => "dik", "ë”" => "dit", "ë”®" => "dip",
+ "딯" => "dih", "따" => "dda", "딱" => "ddag", "딲" => "ddagg", "딳" => "ddags", "딴" => "ddan",
+ "딵" => "ddanj", "딶" => "ddanh", "딷" => "ddad", "딸" => "ddal", "딹" => "ddalg", "딺" => "ddalm",
+ "딻" => "ddalb", "딼" => "ddals", "딽" => "ddalt", "딾" => "ddalp", "딿" => "ddalh", "땀" => "ddam",
+ "ë•" => "ddab", "ë•‚" => "ddabs", "땃" => "ddas", "ë•„" => "ddass", "ë•…" => "ddang", "땆" => "ddaj",
+ "땇" => "ddac", "땈" => "ddak", "땉" => "ddat", "ë•" => "ddap", "ë•‹" => "ddah", "ë•Œ" => "ddae",
+ "ë•" => "ddaeg", "ë•" => "ddaegg", "ë•" => "ddaegs", "ë•" => "ddaen", "ë•‘" => "ddaenj", "ë•’" => "ddaenh",
+ "땓" => "ddaed", "땔" => "ddael", "땕" => "ddaelg", "땖" => "ddaelm", "땗" => "ddaelb", "땘" => "ddaels",
+ "ë•™" => "ddaelt", "ë•" => "ddaelp", "ë•›" => "ddaelh", "ë•œ" => "ddaem", "ë•" => "ddaeb", "ë•" => "ddaebs",
+ "ë•Ÿ" => "ddaes", "ë• " => "ddaess", "ë•¡" => "ddaeng", "ë•¢" => "ddaej", "ë•£" => "ddaec", "땤" => "ddaek",
+ "땥" => "ddaet", "땦" => "ddaep", "땧" => "ddaeh", "땨" => "ddya", "땩" => "ddyag", "땪" => "ddyagg",
+ "ë•«" => "ddyags", "땬" => "ddyan", "ë•" => "ddyanj", "ë•®" => "ddyanh", "땯" => "ddyad", "ë•°" => "ddyal",
+ "땱" => "ddyalg", "땲" => "ddyalm", "땳" => "ddyalb", "땴" => "ddyals", "땵" => "ddyalt", "땶" => "ddyalp",
+ "땷" => "ddyalh", "땸" => "ddyam", "땹" => "ddyab", "땺" => "ddyabs", "땻" => "ddyas", "땼" => "ddyass",
+ "땽" => "ddyang", "땾" => "ddyaj", "ë•¿" => "ddyac", "ë–€" => "ddyak", "ë–" => "ddyat", "ë–‚" => "ddyap",
+ "ë–ƒ" => "ddyah", "ë–„" => "ddyae", "ë–…" => "ddyaeg", "ë–†" => "ddyaegg", "ë–‡" => "ddyaegs", "ë–ˆ" => "ddyaen",
+ "ë–‰" => "ddyaenj", "ë–" => "ddyaenh", "ë–‹" => "ddyaed", "ë–Œ" => "ddyael", "ë–" => "ddyaelg", "ë–" => "ddyaelm",
+ "ë–" => "ddyaelb", "ë–" => "ddyaels", "ë–‘" => "ddyaelt", "ë–’" => "ddyaelp", "ë–“" => "ddyaelh", "ë–”" => "ddyaem",
+ "ë–•" => "ddyaeb", "ë––" => "ddyaebs", "ë–—" => "ddyaes", "ë–˜" => "ddyaess", "ë–™" => "ddyaeng", "ë–" => "ddyaej",
+ "ë–›" => "ddyaec", "ë–œ" => "ddyaek", "ë–" => "ddyaet", "ë–" => "ddyaep", "ë–Ÿ" => "ddyaeh", "ë– " => "ddeo",
+ "ë–¡" => "ddeog", "ë–¢" => "ddeogg", "ë–£" => "ddeogs", "ë–¤" => "ddeon", "ë–¥" => "ddeonj", "ë–¦" => "ddeonh",
+ "ë–§" => "ddeod", "ë–¨" => "ddeol", "ë–©" => "ddeolg", "ë–ª" => "ddeolm", "ë–«" => "ddeolb", "ë–¬" => "ddeols",
+ "ë–" => "ddeolt", "ë–®" => "ddeolp", "ë–¯" => "ddeolh", "ë–°" => "ddeom", "ë–±" => "ddeob", "ë–²" => "ddeobs",
+ "ë–³" => "ddeos", "ë–´" => "ddeoss", "ë–µ" => "ddeong", "ë–¶" => "ddeoj", "ë–·" => "ddeoc", "ë–¸" => "ddeok",
+ "ë–¹" => "ddeot", "ë–º" => "ddeop", "ë–»" => "ddeoh", "ë–¼" => "dde", "ë–½" => "ddeg", "ë–¾" => "ddegg",
+ "ë–¿" => "ddegs", "ë—€" => "dden", "ë—" => "ddenj", "ë—‚" => "ddenh", "ë—ƒ" => "dded", "ë—„" => "ddel",
+ "ë—…" => "ddelg", "ë—†" => "ddelm", "ë—‡" => "ddelb", "ë—ˆ" => "ddels", "ë—‰" => "ddelt", "ë—" => "ddelp",
+ "ë—‹" => "ddelh", "ë—Œ" => "ddem", "ë—" => "ddeb", "ë—" => "ddebs", "ë—" => "ddes", "ë—" => "ddess",
+ "ë—‘" => "ddeng", "ë—’" => "ddej", "ë—“" => "ddec", "ë—”" => "ddek", "ë—•" => "ddet", "ë—–" => "ddep",
+ "ë——" => "ddeh", "ë—˜" => "ddyeo", "ë—™" => "ddyeog", "ë—" => "ddyeogg", "ë—›" => "ddyeogs", "ë—œ" => "ddyeon",
+ "ë—" => "ddyeonj", "ë—" => "ddyeonh", "ë—Ÿ" => "ddyeod", "ë— " => "ddyeol", "ë—¡" => "ddyeolg", "ë—¢" => "ddyeolm",
+ "ë—£" => "ddyeolb", "ë—¤" => "ddyeols", "ë—¥" => "ddyeolt", "ë—¦" => "ddyeolp", "ë—§" => "ddyeolh", "ë—¨" => "ddyeom",
+ "ë—©" => "ddyeob", "ë—ª" => "ddyeobs", "ë—«" => "ddyeos", "ë—¬" => "ddyeoss", "ë—" => "ddyeong", "ë—®" => "ddyeoj",
+ "ë—¯" => "ddyeoc", "ë—°" => "ddyeok", "ë—±" => "ddyeot", "ë—²" => "ddyeop", "ë—³" => "ddyeoh", "ë—´" => "ddye",
+ "ë—µ" => "ddyeg", "ë—¶" => "ddyegg", "ë—·" => "ddyegs", "ë—¸" => "ddyen", "ë—¹" => "ddyenj", "ë—º" => "ddyenh",
+ "ë—»" => "ddyed", "ë—¼" => "ddyel", "ë—½" => "ddyelg", "ë—¾" => "ddyelm", "ë—¿" => "ddyelb", "ë˜" => "ddyelt",
+ "똂" => "ddyelp", "똃" => "ddyelh", "똄" => "ddyem", "똅" => "ddyeb", "똆" => "ddyebs", "똇" => "ddyes",
+ "똈" => "ddyess", "똉" => "ddyeng", "ë˜" => "ddyej", "똋" => "ddyec", "똌" => "ddyek", "ë˜" => "ddyet",
+ "ë˜" => "ddyep", "ë˜" => "ddyeh", "ë˜" => "ddo", "똑" => "ddog", "똒" => "ddogg", "똓" => "ddogs",
+ "똔" => "ddon", "똕" => "ddonj", "똖" => "ddonh", "똗" => "ddod", "똘" => "ddol", "똙" => "ddolg",
+ "ë˜" => "ddolm", "똛" => "ddolb", "똜" => "ddols", "ë˜" => "ddolt", "ë˜" => "ddolp", "똟" => "ddolh",
+ "ë˜ " => "ddom", "똡" => "ddob", "똢" => "ddobs", "똣" => "ddos", "똤" => "ddoss", "똥" => "ddong",
+ "똦" => "ddoj", "똧" => "ddoc", "똨" => "ddok", "똩" => "ddot", "똪" => "ddop", "똫" => "ddoh",
+ "똬" => "ddwa", "ë˜" => "ddwag", "똮" => "ddwagg", "똯" => "ddwags", "똰" => "ddwan", "똱" => "ddwanj",
+ "똲" => "ddwanh", "똳" => "ddwad", "똴" => "ddwal", "똵" => "ddwalg", "똶" => "ddwalm", "똷" => "ddwalb",
+ "똸" => "ddwals", "똹" => "ddwalt", "똺" => "ddwalp", "똻" => "ddwalh", "똼" => "ddwam", "똽" => "ddwab",
+ "똾" => "ddwabs", "똿" => "ddwas", "뙀" => "ddwass", "ë™" => "ddwang", "뙂" => "ddwaj", "뙃" => "ddwac",
+ "뙄" => "ddwak", "뙅" => "ddwat", "뙆" => "ddwap", "뙇" => "ddwah", "뙈" => "ddwae", "뙉" => "ddwaeg",
+ "ë™" => "ddwaegg", "뙋" => "ddwaegs", "뙌" => "ddwaen", "ë™" => "ddwaenj", "ë™" => "ddwaenh", "ë™" => "ddwaed",
+ "ë™" => "ddwael", "뙑" => "ddwaelg", "ë™’" => "ddwaelm", "뙓" => "ddwaelb", "ë™”" => "ddwaels", "뙕" => "ddwaelt",
+ "ë™–" => "ddwaelp", "ë™—" => "ddwaelh", "뙘" => "ddwaem", "ë™™" => "ddwaeb", "ë™" => "ddwaebs", "ë™›" => "ddwaes",
+ "뙜" => "ddwaess", "ë™" => "ddwaeng", "ë™" => "ddwaej", "뙟" => "ddwaec", "ë™ " => "ddwaek", "뙡" => "ddwaet",
+ "뙢" => "ddwaep", "뙣" => "ddwaeh", "뙤" => "ddoe", "뙥" => "ddoeg", "뙦" => "ddoegg", "뙧" => "ddoegs",
+ "뙨" => "ddoen", "뙩" => "ddoenj", "뙪" => "ddoenh", "뙫" => "ddoed", "뙬" => "ddoel", "ë™" => "ddoelg",
+ "뙮" => "ddoelm", "뙯" => "ddoelb", "뙰" => "ddoels", "뙱" => "ddoelt", "뙲" => "ddoelp", "뙳" => "ddoelh",
+ "뙴" => "ddoem", "뙵" => "ddoeb", "뙶" => "ddoebs", "뙷" => "ddoes", "뙸" => "ddoess", "뙹" => "ddoeng",
+ "뙺" => "ddoej", "뙻" => "ddoec", "뙼" => "ddoek", "뙽" => "ddoet", "뙾" => "ddoep", "뙿" => "ddoeh",
+ "ë€" => "ddyo", "ë" => "ddyog", "ë‚" => "ddyogg", "ëƒ" => "ddyogs", "ë„" => "ddyon", "ë…" => "ddyonj",
+ "ë†" => "ddyonh", "ë‡" => "ddyod", "ëˆ" => "ddyol", "ë‰" => "ddyolg", "ë" => "ddyolm", "ë‹" => "ddyolb",
+ "ëŒ" => "ddyols", "ë" => "ddyolt", "ë" => "ddyolp", "ë" => "ddyolh", "ë" => "ddyom", "ë‘" => "ddyob",
+ "ë’" => "ddyobs", "ë“" => "ddyos", "ë”" => "ddyoss", "ë•" => "ddyong", "ë–" => "ddyoj", "ë—" => "ddyoc",
+ "ë˜" => "ddyok", "ë™" => "ddyot", "ë" => "ddyop", "ë›" => "ddyoh", "ëœ" => "ddu", "ë" => "ddug",
+ "ë" => "ddugg", "ëŸ" => "ddugs", "ë " => "ddun", "ë¡" => "ddunj", "ë¢" => "ddunh", "ë£" => "ddud",
+ "ë¤" => "ddul", "ë¥" => "ddulg", "ë¦" => "ddulm", "ë§" => "ddulb", "ë¨" => "dduls", "ë©" => "ddult",
+ "ëª" => "ddulp", "ë«" => "ddulh", "ë¬" => "ddum", "ë" => "ddub", "ë®" => "ddubs", "ë¯" => "ddus",
+ "ë°" => "dduss", "ë±" => "ddung", "ë²" => "dduj", "ë³" => "dduc", "ë´" => "dduk", "ëµ" => "ddut",
+ "ë¶" => "ddup", "ë·" => "dduh", "ë¸" => "ddweo", "ë¹" => "ddweog", "ëº" => "ddweogg", "ë»" => "ddweogs",
+ "ë¼" => "ddweon", "ë½" => "ddweonj", "ë¾" => "ddweonh", "ë¿" => "ddweod", "뛀" => "ddweol", "ë›" => "ddweolg",
+ "뛂" => "ddweolm", "뛃" => "ddweolb", "뛄" => "ddweols", "뛅" => "ddweolt", "뛆" => "ddweolp", "뛇" => "ddweolh",
+ "뛈" => "ddweom", "뛉" => "ddweob", "ë›" => "ddweobs", "뛋" => "ddweos", "뛌" => "ddweoss", "ë›" => "ddweong",
+ "ë›" => "ddweoj", "ë›" => "ddweoc", "ë›" => "ddweok", "뛑" => "ddweot", "ë›’" => "ddweop", "뛓" => "ddweoh",
+ "뛔" => "ddwe", "뛕" => "ddweg", "뛖" => "ddwegg", "뛗" => "ddwegs", "뛘" => "ddwen", "뛙" => "ddwenj",
+ "ë›" => "ddwenh", "ë››" => "ddwed", "뛜" => "ddwel", "ë›" => "ddwelg", "ë›" => "ddwelm", "뛟" => "ddwelb",
+ "ë› " => "ddwels", "뛡" => "ddwelt", "뛢" => "ddwelp", "뛣" => "ddwelh", "뛤" => "ddwem", "뛥" => "ddweb",
+ "뛦" => "ddwebs", "뛧" => "ddwes", "뛨" => "ddwess", "뛩" => "ddweng", "뛪" => "ddwej", "뛫" => "ddwec",
+ "뛬" => "ddwek", "ë›" => "ddwet", "ë›®" => "ddwep", "뛯" => "ddweh", "ë›°" => "ddwi", "ë›±" => "ddwig",
+ "뛲" => "ddwigg", "뛳" => "ddwigs", "뛴" => "ddwin", "뛵" => "ddwinj", "뛶" => "ddwinh", "뛷" => "ddwid",
+ "뛸" => "ddwil", "뛹" => "ddwilg", "뛺" => "ddwilm", "뛻" => "ddwilb", "뛼" => "ddwils", "뛽" => "ddwilt",
+ "뛾" => "ddwilp", "뛿" => "ddwilh", "ëœ" => "ddwib", "뜂" => "ddwibs", "뜃" => "ddwis", "뜄" => "ddwiss",
+ "뜅" => "ddwing", "뜆" => "ddwij", "뜇" => "ddwic", "뜈" => "ddwik", "뜉" => "ddwit", "ëœ" => "ddwip",
+ "뜋" => "ddwih", "뜌" => "ddyu", "ëœ" => "ddyug", "ëœ" => "ddyugg", "ëœ" => "ddyugs", "ëœ" => "ddyun",
+ "뜑" => "ddyunj", "뜒" => "ddyunh", "뜓" => "ddyud", "뜔" => "ddyul", "뜕" => "ddyulg", "뜖" => "ddyulm",
+ "뜗" => "ddyulb", "뜘" => "ddyuls", "뜙" => "ddyult", "ëœ" => "ddyulp", "뜛" => "ddyulh", "뜜" => "ddyum",
+ "ëœ" => "ddyub", "ëœ" => "ddyubs", "뜟" => "ddyus", "ëœ " => "ddyuss", "뜡" => "ddyung", "뜢" => "ddyuj",
+ "뜣" => "ddyuc", "뜤" => "ddyuk", "뜥" => "ddyut", "뜦" => "ddyup", "뜧" => "ddyuh", "뜨" => "ddeu",
+ "뜩" => "ddeug", "뜪" => "ddeugg", "뜫" => "ddeugs", "뜬" => "ddeun", "ëœ" => "ddeunj", "뜮" => "ddeunh",
+ "뜯" => "ddeud", "뜰" => "ddeul", "뜱" => "ddeulg", "뜲" => "ddeulm", "뜳" => "ddeulb", "뜴" => "ddeuls",
+ "뜵" => "ddeult", "뜶" => "ddeulp", "뜷" => "ddeulh", "뜸" => "ddeum", "뜹" => "ddeub", "뜺" => "ddeubs",
+ "뜻" => "ddeus", "뜼" => "ddeuss", "뜽" => "ddeung", "뜾" => "ddeuj", "뜿" => "ddeuc", "ë€" => "ddeuk",
+ "ë" => "ddeut", "ë‚" => "ddeup", "ëƒ" => "ddeuh", "ë„" => "ddyi", "ë…" => "ddyig", "ë†" => "ddyigg",
+ "ë‡" => "ddyigs", "ëˆ" => "ddyin", "ë‰" => "ddyinj", "ë" => "ddyinh", "ë‹" => "ddyid", "ëŒ" => "ddyil",
+ "ë" => "ddyilg", "ë" => "ddyilm", "ë" => "ddyilb", "ë" => "ddyils", "ë‘" => "ddyilt", "ë’" => "ddyilp",
+ "ë“" => "ddyilh", "ë”" => "ddyim", "ë•" => "ddyib", "ë–" => "ddyibs", "ë—" => "ddyis", "ë˜" => "ddyiss",
+ "ë™" => "ddying", "ë" => "ddyij", "ë›" => "ddyic", "ëœ" => "ddyik", "ë" => "ddyit", "ë" => "ddyip",
+ "ëŸ" => "ddyih", "ë " => "ddi", "ë¡" => "ddig", "ë¢" => "ddigg", "ë£" => "ddigs", "ë¤" => "ddin",
+ "ë¥" => "ddinj", "ë¦" => "ddinh", "ë§" => "ddid", "ë¨" => "ddil", "ë©" => "ddilg", "ëª" => "ddilm",
+ "ë«" => "ddilb", "ë¬" => "ddils", "ë" => "ddilt", "ë®" => "ddilp", "ë¯" => "ddilh", "ë°" => "ddim",
+ "ë±" => "ddib", "ë²" => "ddibs", "ë³" => "ddis", "ë´" => "ddiss", "ëµ" => "dding", "ë¶" => "ddij",
+ "ë·" => "ddic", "ë¸" => "ddik", "ë¹" => "ddit", "ëº" => "ddip", "ë»" => "ddih", "ë¼" => "ra",
+ "ë½" => "rag", "ë¾" => "ragg", "ë¿" => "rags", "ë€" => "ran", "ë" => "ranj", "ë‚" => "ranh",
+ "ëƒ" => "rad", "ë„" => "ral", "ë…" => "ralg", "ë†" => "ralm", "ë‡" => "ralb", "ëˆ" => "rals",
+ "ë‰" => "ralt", "ë" => "ralp", "ë‹" => "ralh", "ëŒ" => "ram", "ë" => "rab", "ë" => "rabs",
+ "ë" => "ras", "ë" => "rass", "ë‘" => "rang", "ë’" => "raj", "ë“" => "rac", "ë”" => "rak",
+ "ë•" => "rat", "ë–" => "rap", "ë—" => "rah", "ë˜" => "rae", "ë™" => "raeg", "ë" => "raegg",
+ "ë›" => "raegs", "ëœ" => "raen", "ë" => "raenj", "ë" => "raenh", "ëŸ" => "raed", "ë " => "rael",
+ "ë¡" => "raelg", "ë¢" => "raelm", "ë£" => "raelb", "ë¤" => "raels", "ë¥" => "raelt", "ë¦" => "raelp",
+ "ë§" => "raelh", "ë¨" => "raem", "ë©" => "raeb", "ëª" => "raebs", "ë«" => "raes", "ë¬" => "raess",
+ "ë" => "raeng", "ë®" => "raej", "ë¯" => "raec", "ë°" => "raek", "ë±" => "raet", "ë²" => "raep",
+ "ë³" => "raeh", "ë´" => "rya", "ëµ" => "ryag", "ë¶" => "ryagg", "ë·" => "ryags", "ë¸" => "ryan",
+ "ë¹" => "ryanj", "ëº" => "ryanh", "ë»" => "ryad", "ë¼" => "ryal", "ë½" => "ryalg", "ë¾" => "ryalm",
+ "ë¿" => "ryalb", "럀" => "ryals", "ëŸ" => "ryalt", "럂" => "ryalp", "럃" => "ryalh", "럄" => "ryam",
+ "럅" => "ryab", "럆" => "ryabs", "럇" => "ryas", "럈" => "ryass", "량" => "ryang", "ëŸ" => "ryaj",
+ "럋" => "ryac", "럌" => "ryak", "ëŸ" => "ryat", "ëŸ" => "ryap", "ëŸ" => "ryah", "ëŸ" => "ryae",
+ "럑" => "ryaeg", "럒" => "ryaegg", "럓" => "ryaegs", "럔" => "ryaen", "럕" => "ryaenj", "럖" => "ryaenh",
+ "럗" => "ryaed", "럘" => "ryael", "럙" => "ryaelg", "ëŸ" => "ryaelm", "럛" => "ryaelb", "럜" => "ryaels",
+ "ëŸ" => "ryaelt", "ëŸ" => "ryaelp", "럟" => "ryaelh", "ëŸ " => "ryaem", "럡" => "ryaeb", "럢" => "ryaebs",
+ "럣" => "ryaes", "럤" => "ryaess", "럥" => "ryaeng", "럦" => "ryaej", "럧" => "ryaec", "럨" => "ryaek",
+ "럩" => "ryaet", "럪" => "ryaep", "럫" => "ryaeh", "러" => "reo", "ëŸ" => "reog", "럮" => "reogg",
+ "럯" => "reogs", "런" => "reon", "럱" => "reonj", "럲" => "reonh", "럳" => "reod", "럴" => "reol",
+ "럵" => "reolg", "럶" => "reolm", "럷" => "reolb", "럸" => "reols", "럹" => "reolt", "럺" => "reolp",
+ "럻" => "reolh", "럼" => "reom", "럽" => "reob", "럾" => "reobs", "럿" => "reos", "ë " => "reong",
+ "ë ‚" => "reoj", "ë ƒ" => "reoc", "ë „" => "reok", "ë …" => "reot", "ë †" => "reop", "ë ‡" => "reoh",
+ "ë ˆ" => "re", "ë ‰" => "reg", "ë " => "regg", "ë ‹" => "regs", "ë Œ" => "ren", "ë " => "renj",
+ "ë " => "renh", "ë " => "red", "ë " => "rel", "ë ‘" => "relg", "ë ’" => "relm", "ë “" => "relb",
+ "ë ”" => "rels", "ë •" => "relt", "ë –" => "relp", "ë —" => "relh", "ë ˜" => "rem", "ë ™" => "reb",
+ "ë " => "rebs", "ë ›" => "res", "ë œ" => "ress", "ë " => "reng", "ë " => "rej", "ë Ÿ" => "rec",
+ "ë " => "rek", "ë ¡" => "ret", "ë ¢" => "rep", "ë £" => "reh", "ë ¤" => "ryeo", "ë ¥" => "ryeog",
+ "ë ¦" => "ryeogg", "ë §" => "ryeogs", "ë ¨" => "ryeon", "ë ©" => "ryeonj", "ë ª" => "ryeonh", "ë «" => "ryeod",
+ "ë ¬" => "ryeol", "ë " => "ryeolg", "ë ®" => "ryeolm", "ë ¯" => "ryeolb", "ë °" => "ryeols", "ë ±" => "ryeolt",
+ "ë ²" => "ryeolp", "ë ³" => "ryeolh", "ë ´" => "ryeom", "ë µ" => "ryeob", "ë ¶" => "ryeobs", "ë ·" => "ryeos",
+ "ë ¸" => "ryeoss", "ë ¹" => "ryeong", "ë º" => "ryeoj", "ë »" => "ryeoc", "ë ¼" => "ryeok", "ë ½" => "ryeot",
+ "ë ¾" => "ryeop", "ë ¿" => "ryeoh", "ë¡€" => "rye", "ë¡" => "ryeg", "ë¡‚" => "ryegg", "롃" => "ryegs",
+ "롄" => "ryen", "롅" => "ryenj", "롆" => "ryenh", "롇" => "ryed", "롈" => "ryel", "롉" => "ryelg",
+ "ë¡" => "ryelm", "ë¡‹" => "ryelb", "ë¡Œ" => "ryels", "ë¡" => "ryelt", "ë¡" => "ryelp", "ë¡" => "ryelh",
+ "ë¡" => "ryem", "ë¡‘" => "ryeb", "ë¡’" => "ryebs", "ë¡“" => "ryes", "ë¡”" => "ryess", "ë¡•" => "ryeng",
+ "ë¡–" => "ryej", "ë¡—" => "ryec", "롘" => "ryek", "ë¡™" => "ryet", "ë¡" => "ryep", "ë¡›" => "ryeh",
+ "ë¡œ" => "ro", "ë¡" => "rog", "ë¡" => "rogg", "ë¡Ÿ" => "rogs", "ë¡ " => "ron", "ë¡¡" => "ronj",
+ "롢" => "ronh", "롣" => "rod", "롤" => "rol", "롥" => "rolg", "롦" => "rolm", "롧" => "rolb",
+ "롨" => "rols", "ë¡©" => "rolt", "롪" => "rolp", "ë¡«" => "rolh", "롬" => "rom", "ë¡" => "rob",
+ "롮" => "robs", "롯" => "ros", "롰" => "ross", "롱" => "rong", "롲" => "roj", "롳" => "roc",
+ "롴" => "rok", "롵" => "rot", "롶" => "rop", "롷" => "roh", "롸" => "rwa", "롹" => "rwag",
+ "롺" => "rwagg", "롻" => "rwags", "롼" => "rwan", "롽" => "rwanj", "롾" => "rwanh", "롿" => "rwad",
+ "뢀" => "rwal", "ë¢" => "rwalg", "뢂" => "rwalm", "뢃" => "rwalb", "뢄" => "rwals", "뢅" => "rwalt",
+ "뢆" => "rwalp", "뢇" => "rwalh", "뢈" => "rwam", "뢉" => "rwab", "ë¢" => "rwabs", "뢋" => "rwas",
+ "뢌" => "rwass", "ë¢" => "rwang", "ë¢" => "rwaj", "ë¢" => "rwac", "ë¢" => "rwak", "뢑" => "rwat",
+ "뢒" => "rwap", "뢓" => "rwah", "뢔" => "rwae", "뢕" => "rwaeg", "뢖" => "rwaegg", "뢗" => "rwaegs",
+ "뢘" => "rwaen", "뢙" => "rwaenj", "ë¢" => "rwaenh", "뢛" => "rwaed", "뢜" => "rwael", "ë¢" => "rwaelg",
+ "ë¢" => "rwaelm", "뢟" => "rwaelb", "ë¢ " => "rwaels", "뢡" => "rwaelt", "뢢" => "rwaelp", "뢣" => "rwaelh",
+ "뢤" => "rwaem", "뢥" => "rwaeb", "뢦" => "rwaebs", "뢧" => "rwaes", "뢨" => "rwaess", "뢩" => "rwaeng",
+ "뢪" => "rwaej", "뢫" => "rwaec", "뢬" => "rwaek", "ë¢" => "rwaet", "뢮" => "rwaep", "뢯" => "rwaeh",
+ "뢰" => "roe", "뢱" => "roeg", "뢲" => "roegg", "뢳" => "roegs", "뢴" => "roen", "뢵" => "roenj",
+ "뢶" => "roenh", "뢷" => "roed", "뢸" => "roel", "뢹" => "roelg", "뢺" => "roelm", "뢻" => "roelb",
+ "뢼" => "roels", "뢽" => "roelt", "뢾" => "roelp", "뢿" => "roelh", "룀" => "roem", "ë£" => "roeb",
+ "룂" => "roebs", "룃" => "roes", "룄" => "roess", "룅" => "roeng", "룆" => "roej", "룇" => "roec",
+ "룈" => "roek", "룉" => "roet", "ë£" => "roep", "룋" => "roeh", "료" => "ryo", "ë£" => "ryog",
+ "ë£" => "ryogg", "ë£" => "ryogs", "ë£" => "ryon", "룑" => "ryonj", "룒" => "ryonh", "룓" => "ryod",
+ "룔" => "ryol", "룕" => "ryolg", "룖" => "ryolm", "룗" => "ryolb", "룘" => "ryols", "룙" => "ryolt",
+ "ë£" => "ryolp", "룛" => "ryolh", "룜" => "ryom", "ë£" => "ryob", "ë£" => "ryobs", "룟" => "ryos",
+ "ë£ " => "ryoss", "룡" => "ryong", "룢" => "ryoj", "룣" => "ryoc", "룤" => "ryok", "룥" => "ryot",
+ "룦" => "ryop", "룧" => "ryoh", "루" => "ru", "룩" => "rug", "룪" => "rugg", "룫" => "rugs",
+ "룬" => "run", "ë£" => "runj", "룮" => "runh", "룯" => "rud", "룰" => "rul", "룱" => "rulg",
+ "룲" => "rulm", "룳" => "rulb", "룴" => "ruls", "룵" => "rult", "룶" => "rulp", "룷" => "rulh",
+ "룸" => "rum", "룹" => "rub", "룺" => "rubs", "룻" => "rus", "룼" => "russ", "룽" => "rung",
+ "룾" => "ruj", "룿" => "ruc", "ë¤" => "rut", "뤂" => "rup", "뤃" => "ruh", "뤄" => "rweo",
+ "뤅" => "rweog", "뤆" => "rweogg", "뤇" => "rweogs", "뤈" => "rweon", "뤉" => "rweonj", "ë¤" => "rweonh",
+ "뤋" => "rweod", "뤌" => "rweol", "ë¤" => "rweolg", "ë¤" => "rweolm", "ë¤" => "rweolb", "ë¤" => "rweols",
+ "뤑" => "rweolt", "뤒" => "rweolp", "뤓" => "rweolh", "뤔" => "rweom", "뤕" => "rweob", "뤖" => "rweobs",
+ "뤗" => "rweos", "뤘" => "rweoss", "뤙" => "rweong", "ë¤" => "rweoj", "뤛" => "rweoc", "뤜" => "rweok",
+ "ë¤" => "rweot", "ë¤" => "rweop", "뤟" => "rweoh", "ë¤ " => "rwe", "뤡" => "rweg", "뤢" => "rwegg",
+ "뤣" => "rwegs", "뤤" => "rwen", "뤥" => "rwenj", "뤦" => "rwenh", "뤧" => "rwed", "뤨" => "rwel",
+ "뤩" => "rwelg", "뤪" => "rwelm", "뤫" => "rwelb", "뤬" => "rwels", "ë¤" => "rwelt", "뤮" => "rwelp",
+ "뤯" => "rwelh", "뤰" => "rwem", "뤱" => "rweb", "뤲" => "rwebs", "뤳" => "rwes", "뤴" => "rwess",
+ "뤵" => "rweng", "뤶" => "rwej", "뤷" => "rwec", "뤸" => "rwek", "뤹" => "rwet", "뤺" => "rwep",
+ "뤻" => "rweh", "뤼" => "rwi", "뤽" => "rwig", "뤾" => "rwigg", "뤿" => "rwigs", "륀" => "rwin",
+ "ë¥" => "rwinj", "륂" => "rwinh", "륃" => "rwid", "륄" => "rwil", "륅" => "rwilg", "륆" => "rwilm",
+ "륇" => "rwilb", "륈" => "rwils", "륉" => "rwilt", "ë¥" => "rwilp", "륋" => "rwilh", "륌" => "rwim",
+ "ë¥" => "rwib", "ë¥" => "rwibs", "ë¥" => "rwis", "ë¥" => "rwiss", "륑" => "rwing", "륒" => "rwij",
+ "륓" => "rwic", "륔" => "rwik", "륕" => "rwit", "륖" => "rwip", "륗" => "rwih", "류" => "ryu",
+ "륙" => "ryug", "ë¥" => "ryugg", "륛" => "ryugs", "륜" => "ryun", "ë¥" => "ryunj", "ë¥" => "ryunh",
+ "륟" => "ryud", "ë¥ " => "ryul", "륡" => "ryulg", "륢" => "ryulm", "륣" => "ryulb", "륤" => "ryuls",
+ "륥" => "ryult", "륦" => "ryulp", "륧" => "ryulh", "륨" => "ryum", "륩" => "ryub", "륪" => "ryubs",
+ "륫" => "ryus", "륬" => "ryuss", "ë¥" => "ryung", "륮" => "ryuj", "륯" => "ryuc", "륰" => "ryuk",
+ "륱" => "ryut", "륲" => "ryup", "륳" => "ryuh", "르" => "reu", "륵" => "reug", "륶" => "reugg",
+ "륷" => "reugs", "른" => "reun", "륹" => "reunj", "륺" => "reunh", "륻" => "reud", "를" => "reul",
+ "륽" => "reulg", "륾" => "reulm", "륿" => "reulb", "릀" => "reuls", "ë¦" => "reult", "릂" => "reulp",
+ "릃" => "reulh", "름" => "reum", "릅" => "reub", "릆" => "reubs", "릇" => "reus", "릈" => "reuss",
+ "릉" => "reung", "ë¦" => "reuj", "릋" => "reuc", "릌" => "reuk", "ë¦" => "reut", "ë¦" => "reup",
+ "ë¦" => "reuh", "ë¦" => "ryi", "릑" => "ryig", "릒" => "ryigg", "릓" => "ryigs", "릔" => "ryin",
+ "릕" => "ryinj", "릖" => "ryinh", "릗" => "ryid", "릘" => "ryil", "릙" => "ryilg", "ë¦" => "ryilm",
+ "릛" => "ryilb", "릜" => "ryils", "ë¦" => "ryilt", "ë¦" => "ryilp", "릟" => "ryilh", "ë¦ " => "ryim",
+ "릡" => "ryib", "릢" => "ryibs", "릣" => "ryis", "릤" => "ryiss", "릥" => "rying", "릦" => "ryij",
+ "릧" => "ryic", "릨" => "ryik", "릩" => "ryit", "릪" => "ryip", "릫" => "ryih", "리" => "ri",
+ "ë¦" => "rig", "릮" => "rigg", "릯" => "rigs", "린" => "rin", "릱" => "rinj", "릲" => "rinh",
+ "릳" => "rid", "릴" => "ril", "릵" => "rilg", "릶" => "rilm", "릷" => "rilb", "릸" => "rils",
+ "릹" => "rilt", "릺" => "rilp", "릻" => "rilh", "림" => "rim", "립" => "rib", "릾" => "ribs",
+ "릿" => "ris", "맀" => "riss", "ë§" => "ring", "맂" => "rij", "맃" => "ric", "맄" => "rik",
+ "맅" => "rit", "맆" => "rip", "맇" => "rih", "마" => "ma", "막" => "mag", "ë§" => "magg",
+ "맋" => "mags", "만" => "man", "ë§" => "manj", "ë§" => "manh", "ë§" => "mad", "ë§" => "mal",
+ "맑" => "malg", "맒" => "malm", "맓" => "malb", "맔" => "mals", "맕" => "malt", "맖" => "malp",
+ "맗" => "malh", "맘" => "mam", "맙" => "mab", "ë§" => "mabs", "맛" => "mas", "맜" => "mass",
+ "ë§" => "mang", "ë§" => "maj", "맟" => "mac", "ë§ " => "mak", "맡" => "mat", "맢" => "map",
+ "맣" => "mah", "매" => "mae", "맥" => "maeg", "맦" => "maegg", "맧" => "maegs", "맨" => "maen",
+ "맩" => "maenj", "맪" => "maenh", "맫" => "maed", "맬" => "mael", "ë§" => "maelg", "맮" => "maelm",
+ "맯" => "maelb", "맰" => "maels", "맱" => "maelt", "맲" => "maelp", "맳" => "maelh", "맴" => "maem",
+ "맵" => "maeb", "맶" => "maebs", "맷" => "maes", "맸" => "maess", "맹" => "maeng", "맺" => "maej",
+ "맻" => "maec", "맼" => "maek", "맽" => "maet", "맾" => "maep", "맿" => "maeh", "ë¨" => "myag",
+ "먂" => "myagg", "먃" => "myags", "먄" => "myan", "먅" => "myanj", "먆" => "myanh", "먇" => "myad",
+ "먈" => "myal", "먉" => "myalg", "ë¨" => "myalm", "먋" => "myalb", "먌" => "myals", "ë¨" => "myalt",
+ "ë¨" => "myalp", "ë¨" => "myalh", "ë¨" => "myam", "먑" => "myab", "먒" => "myabs", "먓" => "myas",
+ "먔" => "myass", "먕" => "myang", "먖" => "myaj", "먗" => "myac", "먘" => "myak", "먙" => "myat",
+ "ë¨" => "myap", "먛" => "myah", "먜" => "myae", "ë¨" => "myaeg", "ë¨" => "myaegg", "먟" => "myaegs",
+ "ë¨ " => "myaen", "먡" => "myaenj", "먢" => "myaenh", "먣" => "myaed", "먤" => "myael", "먥" => "myaelg",
+ "먦" => "myaelm", "먧" => "myaelb", "먨" => "myaels", "먩" => "myaelt", "먪" => "myaelp", "먫" => "myaelh",
+ "먬" => "myaem", "ë¨" => "myaeb", "먮" => "myaebs", "먯" => "myaes", "먰" => "myaess", "먱" => "myaeng",
+ "먲" => "myaej", "먳" => "myaec", "먴" => "myaek", "먵" => "myaet", "먶" => "myaep", "먷" => "myaeh",
+ "머" => "meo", "먹" => "meog", "먺" => "meogg", "먻" => "meogs", "먼" => "meon", "먽" => "meonj",
+ "먾" => "meonh", "먿" => "meod", "ë©€" => "meol", "ë©" => "meolg", "ë©‚" => "meolm", "멃" => "meolb",
+ "멄" => "meols", "멅" => "meolt", "멆" => "meolp", "멇" => "meolh", "멈" => "meom", "멉" => "meob",
+ "ë©" => "meobs", "ë©‹" => "meos", "ë©Œ" => "meoss", "ë©" => "meong", "ë©" => "meoj", "ë©" => "meoc",
+ "ë©" => "meok", "ë©‘" => "meot", "ë©’" => "meop", "ë©“" => "meoh", "ë©”" => "me", "ë©•" => "meg",
+ "ë©–" => "megg", "ë©—" => "megs", "멘" => "men", "ë©™" => "menj", "ë©" => "menh", "ë©›" => "med",
+ "ë©œ" => "mel", "ë©" => "melg", "ë©" => "melm", "ë©Ÿ" => "melb", "ë© " => "mels", "ë©¡" => "melt",
+ "멢" => "melp", "멣" => "melh", "멤" => "mem", "멥" => "meb", "멦" => "mebs", "멧" => "mes",
+ "멨" => "mess", "ë©©" => "meng", "멪" => "mej", "ë©«" => "mec", "멬" => "mek", "ë©" => "met",
+ "멮" => "mep", "멯" => "meh", "며" => "myeo", "멱" => "myeog", "멲" => "myeogg", "멳" => "myeogs",
+ "면" => "myeon", "멵" => "myeonj", "멶" => "myeonh", "멷" => "myeod", "멸" => "myeol", "멹" => "myeolg",
+ "멺" => "myeolm", "멻" => "myeolb", "멼" => "myeols", "멽" => "myeolt", "멾" => "myeolp", "멿" => "myeolh",
+ "몀" => "myeom", "ëª" => "myeob", "몂" => "myeobs", "몃" => "myeos", "몄" => "myeoss", "명" => "myeong",
+ "몆" => "myeoj", "몇" => "myeoc", "몈" => "myeok", "몉" => "myeot", "ëª" => "myeop", "몋" => "myeoh",
+ "몌" => "mye", "ëª" => "myeg", "ëª" => "myegg", "ëª" => "myegs", "ëª" => "myen", "몑" => "myenj",
+ "몒" => "myenh", "몓" => "myed", "몔" => "myel", "몕" => "myelg", "몖" => "myelm", "몗" => "myelb",
+ "몘" => "myels", "몙" => "myelt", "ëª" => "myelp", "몛" => "myelh", "몜" => "myem", "ëª" => "myeb",
+ "ëª" => "myebs", "몟" => "myes", "ëª " => "myess", "몡" => "myeng", "몢" => "myej", "몣" => "myec",
+ "몤" => "myek", "몥" => "myet", "몦" => "myep", "몧" => "myeh", "모" => "mo", "목" => "mog",
+ "몪" => "mogg", "몫" => "mogs", "몬" => "mon", "ëª" => "monj", "몮" => "monh", "몯" => "mod",
+ "몰" => "mol", "몱" => "molg", "몲" => "molm", "몳" => "molb", "몴" => "mols", "몵" => "molt",
+ "몶" => "molp", "몷" => "molh", "몸" => "mom", "몹" => "mob", "몺" => "mobs", "못" => "mos",
+ "몼" => "moss", "몽" => "mong", "몾" => "moj", "몿" => "moc", "ë«€" => "mok", "ë«" => "mot",
+ "뫂" => "mop", "뫃" => "moh", "뫄" => "mwa", "뫅" => "mwag", "뫆" => "mwagg", "뫇" => "mwags",
+ "뫈" => "mwan", "뫉" => "mwanj", "ë«" => "mwanh", "ë«‹" => "mwad", "ë«Œ" => "mwal", "ë«" => "mwalg",
+ "ë«" => "mwalm", "ë«" => "mwalb", "ë«" => "mwals", "ë«‘" => "mwalt", "ë«’" => "mwalp", "ë«“" => "mwalh",
+ "뫔" => "mwam", "뫕" => "mwab", "뫖" => "mwabs", "뫗" => "mwas", "뫘" => "mwass", "뫙" => "mwang",
+ "ë«" => "mwaj", "ë«›" => "mwac", "ë«œ" => "mwak", "ë«" => "mwat", "ë«" => "mwap", "ë«Ÿ" => "mwah",
+ "ë« " => "mwae", "ë«¡" => "mwaeg", "ë«¢" => "mwaegg", "ë«£" => "mwaegs", "뫤" => "mwaen", "ë«¥" => "mwaenj",
+ "뫦" => "mwaenh", "뫧" => "mwaed", "뫨" => "mwael", "뫩" => "mwaelg", "뫪" => "mwaelm", "뫫" => "mwaelb",
+ "뫬" => "mwaels", "ë«" => "mwaelt", "ë«®" => "mwaelp", "뫯" => "mwaelh", "ë«°" => "mwaem", "뫱" => "mwaeb",
+ "뫲" => "mwaebs", "뫳" => "mwaes", "뫴" => "mwaess", "뫵" => "mwaeng", "뫶" => "mwaej", "뫷" => "mwaec",
+ "뫸" => "mwaek", "뫹" => "mwaet", "뫺" => "mwaep", "뫻" => "mwaeh", "뫼" => "moe", "뫽" => "moeg",
+ "뫾" => "moegg", "ë«¿" => "moegs", "ë¬" => "moenj", "묂" => "moenh", "묃" => "moed", "묄" => "moel",
+ "묅" => "moelg", "묆" => "moelm", "묇" => "moelb", "묈" => "moels", "묉" => "moelt", "ë¬" => "moelp",
+ "묋" => "moelh", "묌" => "moem", "ë¬" => "moeb", "ë¬" => "moebs", "ë¬" => "moes", "ë¬" => "moess",
+ "묑" => "moeng", "묒" => "moej", "묓" => "moec", "묔" => "moek", "묕" => "moet", "묖" => "moep",
+ "묗" => "moeh", "묘" => "myo", "묙" => "myog", "ë¬" => "myogg", "묛" => "myogs", "묜" => "myon",
+ "ë¬" => "myonj", "ë¬" => "myonh", "묟" => "myod", "ë¬ " => "myol", "묡" => "myolg", "묢" => "myolm",
+ "묣" => "myolb", "묤" => "myols", "묥" => "myolt", "묦" => "myolp", "묧" => "myolh", "묨" => "myom",
+ "묩" => "myob", "묪" => "myobs", "묫" => "myos", "묬" => "myoss", "ë¬" => "myong", "묮" => "myoj",
+ "묯" => "myoc", "묰" => "myok", "묱" => "myot", "묲" => "myop", "묳" => "myoh", "무" => "mu",
+ "묵" => "mug", "묶" => "mugg", "묷" => "mugs", "문" => "mun", "묹" => "munj", "묺" => "munh",
+ "묻" => "mud", "물" => "mul", "묽" => "mulg", "묾" => "mulm", "묿" => "mulb", "ë€" => "muls",
+ "ë" => "mult", "ë‚" => "mulp", "ëƒ" => "mulh", "ë„" => "mum", "ë…" => "mub", "ë†" => "mubs",
+ "ë‡" => "mus", "ëˆ" => "muss", "ë‰" => "mung", "ë" => "muj", "ë‹" => "muc", "ëŒ" => "muk",
+ "ë" => "mut", "ë" => "mup", "ë" => "muh", "ë" => "mweo", "ë‘" => "mweog", "ë’" => "mweogg",
+ "ë“" => "mweogs", "ë”" => "mweon", "ë•" => "mweonj", "ë–" => "mweonh", "ë—" => "mweod", "ë˜" => "mweol",
+ "ë™" => "mweolg", "ë" => "mweolm", "ë›" => "mweolb", "ëœ" => "mweols", "ë" => "mweolt", "ë" => "mweolp",
+ "ëŸ" => "mweolh", "ë " => "mweom", "ë¡" => "mweob", "ë¢" => "mweobs", "ë£" => "mweos", "ë¤" => "mweoss",
+ "ë¥" => "mweong", "ë¦" => "mweoj", "ë§" => "mweoc", "ë¨" => "mweok", "ë©" => "mweot", "ëª" => "mweop",
+ "ë«" => "mweoh", "ë¬" => "mwe", "ë" => "mweg", "ë®" => "mwegg", "ë¯" => "mwegs", "ë°" => "mwen",
+ "ë±" => "mwenj", "ë²" => "mwenh", "ë³" => "mwed", "ë´" => "mwel", "ëµ" => "mwelg", "ë¶" => "mwelm",
+ "ë·" => "mwelb", "ë¸" => "mwels", "ë¹" => "mwelt", "ëº" => "mwelp", "ë»" => "mwelh", "ë¼" => "mwem",
+ "ë½" => "mweb", "ë¾" => "mwebs", "ë¿" => "mwes", "뮀" => "mwess", "ë®" => "mweng", "뮂" => "mwej",
+ "뮃" => "mwec", "뮄" => "mwek", "뮅" => "mwet", "뮆" => "mwep", "뮇" => "mweh", "뮈" => "mwi",
+ "뮉" => "mwig", "ë®" => "mwigg", "뮋" => "mwigs", "뮌" => "mwin", "ë®" => "mwinj", "ë®" => "mwinh",
+ "ë®" => "mwid", "ë®" => "mwil", "뮑" => "mwilg", "ë®’" => "mwilm", "뮓" => "mwilb", "ë®”" => "mwils",
+ "뮕" => "mwilt", "ë®–" => "mwilp", "ë®—" => "mwilh", "뮘" => "mwim", "ë®™" => "mwib", "ë®" => "mwibs",
+ "ë®›" => "mwis", "뮜" => "mwiss", "ë®" => "mwing", "ë®" => "mwij", "뮟" => "mwic", "ë® " => "mwik",
+ "뮡" => "mwit", "뮢" => "mwip", "뮣" => "mwih", "뮤" => "myu", "뮥" => "myug", "뮦" => "myugg",
+ "뮧" => "myugs", "뮨" => "myun", "뮩" => "myunj", "뮪" => "myunh", "뮫" => "myud", "뮬" => "myul",
+ "ë®" => "myulg", "ë®®" => "myulm", "뮯" => "myulb", "ë®°" => "myuls", "ë®±" => "myult", "뮲" => "myulp",
+ "뮳" => "myulh", "뮴" => "myum", "뮵" => "myub", "뮶" => "myubs", "뮷" => "myus", "뮸" => "myuss",
+ "뮹" => "myung", "뮺" => "myuj", "뮻" => "myuc", "뮼" => "myuk", "뮽" => "myut", "뮾" => "myup",
+ "뮿" => "myuh", "므" => "meu", "ë¯" => "meug", "믂" => "meugg", "믃" => "meugs", "믄" => "meun",
+ "믅" => "meunj", "믆" => "meunh", "믇" => "meud", "믈" => "meul", "믉" => "meulg", "ë¯" => "meulm",
+ "믋" => "meulb", "믌" => "meuls", "ë¯" => "meult", "ë¯" => "meulp", "ë¯" => "meulh", "ë¯" => "meum",
+ "믑" => "meub", "믒" => "meubs", "믓" => "meus", "믔" => "meuss", "믕" => "meung", "믖" => "meuj",
+ "믗" => "meuc", "믘" => "meuk", "믙" => "meut", "ë¯" => "meup", "믛" => "meuh", "믜" => "myi",
+ "ë¯" => "myig", "ë¯" => "myigg", "믟" => "myigs", "ë¯ " => "myin", "믡" => "myinj", "믢" => "myinh",
+ "믣" => "myid", "믤" => "myil", "믥" => "myilg", "믦" => "myilm", "믧" => "myilb", "믨" => "myils",
+ "믩" => "myilt", "믪" => "myilp", "믫" => "myilh", "믬" => "myim", "ë¯" => "myib", "믮" => "myibs",
+ "믯" => "myis", "믰" => "myiss", "믱" => "mying", "믲" => "myij", "믳" => "myic", "믴" => "myik",
+ "믵" => "myit", "믶" => "myip", "믷" => "myih", "미" => "mi", "믹" => "mig", "믺" => "migg",
+ "믻" => "migs", "민" => "min", "믽" => "minj", "믾" => "minh", "믿" => "mid", "ë°" => "milg",
+ "ë°‚" => "milm", "ë°ƒ" => "milb", "ë°„" => "mils", "ë°…" => "milt", "ë°†" => "milp", "ë°‡" => "milh",
+ "ë°ˆ" => "mim", "ë°‰" => "mib", "ë°" => "mibs", "ë°‹" => "mis", "ë°Œ" => "miss", "ë°" => "ming",
+ "ë°" => "mij", "ë°" => "mic", "ë°" => "mik", "ë°‘" => "mit", "ë°’" => "mip", "ë°“" => "mih",
+ "ë°”" => "ba", "ë°•" => "bag", "ë°–" => "bagg", "ë°—" => "bags", "ë°˜" => "ban", "ë°™" => "banj",
+ "ë°" => "banh", "ë°›" => "bad", "ë°œ" => "bal", "ë°" => "balg", "ë°" => "balm", "ë°Ÿ" => "balb",
+ "ë° " => "bals", "ë°¡" => "balt", "ë°¢" => "balp", "ë°£" => "balh", "ë°¤" => "bam", "ë°¥" => "bab",
+ "ë°¦" => "babs", "ë°§" => "bas", "ë°¨" => "bass", "ë°©" => "bang", "ë°ª" => "baj", "ë°«" => "bac",
+ "ë°¬" => "bak", "ë°" => "bat", "ë°®" => "bap", "ë°¯" => "bah", "ë°°" => "bae", "ë°±" => "baeg",
+ "ë°²" => "baegg", "ë°³" => "baegs", "ë°´" => "baen", "ë°µ" => "baenj", "ë°¶" => "baenh", "ë°·" => "baed",
+ "ë°¸" => "bael", "ë°¹" => "baelg", "ë°º" => "baelm", "ë°»" => "baelb", "ë°¼" => "baels", "ë°½" => "baelt",
+ "ë°¾" => "baelp", "ë°¿" => "baelh", "ë±€" => "baem", "ë±" => "baeb", "뱂" => "baebs", "뱃" => "baes",
+ "뱄" => "baess", "뱅" => "baeng", "뱆" => "baej", "뱇" => "baec", "뱈" => "baek", "뱉" => "baet",
+ "ë±" => "baep", "뱋" => "baeh", "뱌" => "bya", "ë±" => "byag", "ë±" => "byagg", "ë±" => "byags",
+ "ë±" => "byan", "뱑" => "byanj", "ë±’" => "byanh", "뱓" => "byad", "ë±”" => "byal", "뱕" => "byalg",
+ "ë±–" => "byalm", "ë±—" => "byalb", "뱘" => "byals", "ë±™" => "byalt", "ë±" => "byalp", "ë±›" => "byalh",
+ "뱜" => "byam", "ë±" => "byab", "ë±" => "byabs", "뱟" => "byas", "ë± " => "byass", "뱡" => "byang",
+ "뱢" => "byaj", "뱣" => "byac", "뱤" => "byak", "뱥" => "byat", "뱦" => "byap", "뱧" => "byah",
+ "뱨" => "byae", "뱩" => "byaeg", "뱪" => "byaegg", "뱫" => "byaegs", "뱬" => "byaen", "ë±" => "byaenj",
+ "뱮" => "byaenh", "뱯" => "byaed", "뱰" => "byael", "뱱" => "byaelg", "뱲" => "byaelm", "뱳" => "byaelb",
+ "뱴" => "byaels", "뱵" => "byaelt", "뱶" => "byaelp", "뱷" => "byaelh", "뱸" => "byaem", "뱹" => "byaeb",
+ "뱺" => "byaebs", "뱻" => "byaes", "뱼" => "byaess", "뱽" => "byaeng", "뱾" => "byaej", "뱿" => "byaec",
+ "ë²€" => "byaek", "ë²" => "byaet", "벂" => "byaep", "벃" => "byaeh", "버" => "beo", "ë²…" => "beog",
+ "벆" => "beogg", "벇" => "beogs", "번" => "beon", "벉" => "beonj", "ë²" => "beonh", "벋" => "beod",
+ "벌" => "beol", "ë²" => "beolg", "ë²" => "beolm", "ë²" => "beolb", "ë²" => "beols", "벑" => "beolt",
+ "벒" => "beolp", "벓" => "beolh", "범" => "beom", "법" => "beob", "벖" => "beobs", "벗" => "beos",
+ "벘" => "beoss", "ë²™" => "beong", "ë²" => "beoj", "ë²›" => "beoc", "벜" => "beok", "ë²" => "beot",
+ "ë²" => "beop", "벟" => "beoh", "ë² " => "be", "벡" => "beg", "ë²¢" => "begg", "ë²£" => "begs",
+ "벤" => "ben", "벥" => "benj", "벦" => "benh", "벧" => "bed", "벨" => "bel", "벩" => "belg",
+ "벪" => "belm", "벫" => "belb", "벬" => "bels", "ë²" => "belt", "ë²®" => "belp", "벯" => "belh",
+ "ë²°" => "bem", "ë²±" => "beb", "ë²²" => "bebs", "ë²³" => "bes", "ë²´" => "bess", "ë²µ" => "beng",
+ "벶" => "bej", "벷" => "bec", "벸" => "bek", "벹" => "bet", "벺" => "bep", "벻" => "beh",
+ "ë²¼" => "byeo", "ë²½" => "byeog", "ë²¾" => "byeogg", "벿" => "byeogs", "ë³€" => "byeon", "ë³" => "byeonj",
+ "볂" => "byeonh", "볃" => "byeod", "별" => "byeol", "볅" => "byeolg", "볆" => "byeolm", "볇" => "byeolb",
+ "볈" => "byeols", "볉" => "byeolt", "ë³" => "byeolp", "볋" => "byeolh", "볌" => "byeom", "ë³" => "byeob",
+ "ë³" => "byeobs", "ë³" => "byeos", "ë³" => "byeoss", "병" => "byeong", "ë³’" => "byeoj", "볓" => "byeoc",
+ "볔" => "byeok", "볕" => "byeot", "볖" => "byeop", "볗" => "byeoh", "볘" => "bye", "볙" => "byeg",
+ "ë³" => "byegg", "ë³›" => "byegs", "볜" => "byen", "ë³" => "byenj", "ë³" => "byenh", "볟" => "byed",
+ "ë³ " => "byel", "볡" => "byelg", "ë³¢" => "byelm", "ë³£" => "byelb", "볤" => "byels", "ë³¥" => "byelt",
+ "볦" => "byelp", "볧" => "byelh", "볨" => "byem", "볩" => "byeb", "볪" => "byebs", "볫" => "byes",
+ "볬" => "byess", "ë³" => "byeng", "ë³®" => "byej", "볯" => "byec", "ë³°" => "byek", "ë³±" => "byet",
+ "볲" => "byep", "볳" => "byeh", "보" => "bo", "복" => "bog", "볶" => "bogg", "볷" => "bogs",
+ "본" => "bon", "볹" => "bonj", "볺" => "bonh", "볻" => "bod", "볼" => "bol", "볽" => "bolg",
+ "ë³¾" => "bolm", "볿" => "bolb", "ë´" => "bolt", "ë´‚" => "bolp", "ë´ƒ" => "bolh", "ë´„" => "bom",
+ "ë´…" => "bob", "ë´†" => "bobs", "ë´‡" => "bos", "ë´ˆ" => "boss", "ë´‰" => "bong", "ë´" => "boj",
+ "ë´‹" => "boc", "ë´Œ" => "bok", "ë´" => "bot", "ë´" => "bop", "ë´" => "boh", "ë´" => "bwa",
+ "ë´‘" => "bwag", "ë´’" => "bwagg", "ë´“" => "bwags", "ë´”" => "bwan", "ë´•" => "bwanj", "ë´–" => "bwanh",
+ "ë´—" => "bwad", "ë´˜" => "bwal", "ë´™" => "bwalg", "ë´" => "bwalm", "ë´›" => "bwalb", "ë´œ" => "bwals",
+ "ë´" => "bwalt", "ë´" => "bwalp", "ë´Ÿ" => "bwalh", "ë´ " => "bwam", "ë´¡" => "bwab", "ë´¢" => "bwabs",
+ "ë´£" => "bwas", "ë´¤" => "bwass", "ë´¥" => "bwang", "ë´¦" => "bwaj", "ë´§" => "bwac", "ë´¨" => "bwak",
+ "ë´©" => "bwat", "ë´ª" => "bwap", "ë´«" => "bwah", "ë´¬" => "bwae", "ë´" => "bwaeg", "ë´®" => "bwaegg",
+ "ë´¯" => "bwaegs", "ë´°" => "bwaen", "ë´±" => "bwaenj", "ë´²" => "bwaenh", "ë´³" => "bwaed", "ë´´" => "bwael",
+ "ë´µ" => "bwaelg", "ë´¶" => "bwaelm", "ë´·" => "bwaelb", "ë´¸" => "bwaels", "ë´¹" => "bwaelt", "ë´º" => "bwaelp",
+ "ë´»" => "bwaelh", "ë´¼" => "bwaem", "ë´½" => "bwaeb", "ë´¾" => "bwaebs", "ë´¿" => "bwaes", "ëµ€" => "bwaess",
+ "ëµ" => "bwaeng", "뵂" => "bwaej", "뵃" => "bwaec", "뵄" => "bwaek", "ëµ…" => "bwaet", "뵆" => "bwaep",
+ "뵇" => "bwaeh", "뵈" => "boe", "뵉" => "boeg", "ëµ" => "boegg", "뵋" => "boegs", "뵌" => "boen",
+ "ëµ" => "boenj", "ëµ" => "boenh", "ëµ" => "boed", "ëµ" => "boel", "뵑" => "boelg", "ëµ’" => "boelm",
+ "뵓" => "boelb", "뵔" => "boels", "뵕" => "boelt", "뵖" => "boelp", "뵗" => "boelh", "뵘" => "boem",
+ "ëµ™" => "boeb", "ëµ" => "boebs", "ëµ›" => "boes", "뵜" => "boess", "ëµ" => "boeng", "ëµ" => "boej",
+ "뵟" => "boec", "ëµ " => "boek", "뵡" => "boet", "ëµ¢" => "boep", "ëµ£" => "boeh", "뵤" => "byo",
+ "뵥" => "byog", "뵦" => "byogg", "뵧" => "byogs", "뵨" => "byon", "뵩" => "byonj", "뵪" => "byonh",
+ "뵫" => "byod", "뵬" => "byol", "ëµ" => "byolg", "ëµ®" => "byolm", "뵯" => "byolb", "ëµ°" => "byols",
+ "뵱" => "byolt", "뵲" => "byolp", "뵳" => "byolh", "뵴" => "byom", "뵵" => "byob", "뵶" => "byobs",
+ "뵷" => "byos", "뵸" => "byoss", "뵹" => "byong", "뵺" => "byoj", "뵻" => "byoc", "뵼" => "byok",
+ "ëµ½" => "byot", "ëµ¾" => "byop", "뵿" => "byoh", "부" => "bu", "ë¶" => "bug", "붂" => "bugg",
+ "붃" => "bugs", "분" => "bun", "붅" => "bunj", "붆" => "bunh", "붇" => "bud", "불" => "bul",
+ "붉" => "bulg", "ë¶" => "bulm", "붋" => "bulb", "붌" => "buls", "ë¶" => "bult", "ë¶" => "bulp",
+ "ë¶" => "bulh", "ë¶" => "bum", "붑" => "bub", "붒" => "bubs", "붓" => "bus", "붔" => "buss",
+ "붕" => "bung", "붖" => "buj", "붗" => "buc", "붘" => "buk", "붙" => "but", "ë¶" => "bup",
+ "붛" => "buh", "붜" => "bweo", "ë¶" => "bweog", "ë¶" => "bweogg", "붟" => "bweogs", "ë¶ " => "bweon",
+ "붡" => "bweonj", "붢" => "bweonh", "붣" => "bweod", "붤" => "bweol", "붥" => "bweolg", "붦" => "bweolm",
+ "붧" => "bweolb", "붨" => "bweols", "붩" => "bweolt", "붪" => "bweolp", "붫" => "bweolh", "붬" => "bweom",
+ "ë¶" => "bweob", "붮" => "bweobs", "붯" => "bweos", "붰" => "bweoss", "붱" => "bweong", "붲" => "bweoj",
+ "붳" => "bweoc", "붴" => "bweok", "붵" => "bweot", "붶" => "bweop", "붷" => "bweoh", "붸" => "bwe",
+ "붹" => "bweg", "붺" => "bwegg", "붻" => "bwegs", "붼" => "bwen", "붽" => "bwenj", "붾" => "bwenh",
+ "붿" => "bwed", "ë·€" => "bwel", "ë·" => "bwelg", "ë·‚" => "bwelm", "ë·ƒ" => "bwelb", "ë·„" => "bwels",
+ "ë·…" => "bwelt", "ë·†" => "bwelp", "ë·‡" => "bwelh", "ë·ˆ" => "bwem", "ë·‰" => "bweb", "ë·" => "bwebs",
+ "ë·‹" => "bwes", "ë·Œ" => "bwess", "ë·" => "bweng", "ë·" => "bwej", "ë·" => "bwec", "ë·" => "bwek",
+ "ë·‘" => "bwet", "ë·’" => "bwep", "ë·“" => "bweh", "ë·”" => "bwi", "ë·•" => "bwig", "ë·–" => "bwigg",
+ "ë·—" => "bwigs", "ë·˜" => "bwin", "ë·™" => "bwinj", "ë·" => "bwinh", "ë·›" => "bwid", "ë·œ" => "bwil",
+ "ë·" => "bwilg", "ë·" => "bwilm", "ë·Ÿ" => "bwilb", "ë· " => "bwils", "ë·¡" => "bwilt", "ë·¢" => "bwilp",
+ "ë·£" => "bwilh", "ë·¤" => "bwim", "ë·¥" => "bwib", "ë·¦" => "bwibs", "ë·§" => "bwis", "ë·¨" => "bwiss",
+ "ë·©" => "bwing", "ë·ª" => "bwij", "ë·«" => "bwic", "ë·¬" => "bwik", "ë·" => "bwit", "ë·®" => "bwip",
+ "ë·¯" => "bwih", "ë·°" => "byu", "ë·±" => "byug", "ë·²" => "byugg", "ë·³" => "byugs", "ë·´" => "byun",
+ "ë·µ" => "byunj", "ë·¶" => "byunh", "ë··" => "byud", "ë·¸" => "byul", "ë·¹" => "byulg", "ë·º" => "byulm",
+ "ë·»" => "byulb", "ë·¼" => "byuls", "ë·½" => "byult", "ë·¾" => "byulp", "ë·¿" => "byulh", "ë¸" => "byub",
+ "븂" => "byubs", "븃" => "byus", "븄" => "byuss", "븅" => "byung", "븆" => "byuj", "븇" => "byuc",
+ "븈" => "byuk", "븉" => "byut", "ë¸" => "byup", "븋" => "byuh", "브" => "beu", "ë¸" => "beug",
+ "ë¸" => "beugg", "ë¸" => "beugs", "ë¸" => "beun", "븑" => "beunj", "븒" => "beunh", "븓" => "beud",
+ "블" => "beul", "븕" => "beulg", "븖" => "beulm", "븗" => "beulb", "븘" => "beuls", "븙" => "beult",
+ "ë¸" => "beulp", "븛" => "beulh", "븜" => "beum", "ë¸" => "beub", "ë¸" => "beubs", "븟" => "beus",
+ "ë¸ " => "beuss", "븡" => "beung", "븢" => "beuj", "븣" => "beuc", "븤" => "beuk", "븥" => "beut",
+ "븦" => "beup", "븧" => "beuh", "븨" => "byi", "븩" => "byig", "븪" => "byigg", "븫" => "byigs",
+ "븬" => "byin", "ë¸" => "byinj", "븮" => "byinh", "븯" => "byid", "븰" => "byil", "븱" => "byilg",
+ "븲" => "byilm", "븳" => "byilb", "븴" => "byils", "븵" => "byilt", "븶" => "byilp", "븷" => "byilh",
+ "븸" => "byim", "븹" => "byib", "븺" => "byibs", "븻" => "byis", "븼" => "byiss", "븽" => "bying",
+ "븾" => "byij", "븿" => "byic", "ë¹€" => "byik", "ë¹" => "byit", "빂" => "byip", "빃" => "byih",
+ "비" => "bi", "빅" => "big", "빆" => "bigg", "빇" => "bigs", "빈" => "bin", "빉" => "binj",
+ "ë¹" => "binh", "빋" => "bid", "빌" => "bil", "ë¹" => "bilg", "ë¹" => "bilm", "ë¹" => "bilb",
+ "ë¹" => "bils", "빑" => "bilt", "ë¹’" => "bilp", "빓" => "bilh", "ë¹”" => "bim", "빕" => "bib",
+ "ë¹–" => "bibs", "ë¹—" => "bis", "빘" => "biss", "ë¹™" => "bing", "ë¹" => "bij", "ë¹›" => "bic",
+ "빜" => "bik", "ë¹" => "bit", "ë¹" => "bip", "빟" => "bih", "ë¹ " => "bba", "빡" => "bbag",
+ "빢" => "bbagg", "빣" => "bbags", "빤" => "bban", "빥" => "bbanj", "빦" => "bbanh", "빧" => "bbad",
+ "빨" => "bbal", "빩" => "bbalg", "빪" => "bbalm", "빫" => "bbalb", "빬" => "bbals", "ë¹" => "bbalt",
+ "빮" => "bbalp", "빯" => "bbalh", "빰" => "bbam", "빱" => "bbab", "빲" => "bbabs", "빳" => "bbas",
+ "빴" => "bbass", "빵" => "bbang", "빶" => "bbaj", "빷" => "bbac", "빸" => "bbak", "빹" => "bbat",
+ "빺" => "bbap", "빻" => "bbah", "빼" => "bbae", "빽" => "bbaeg", "빾" => "bbaegg", "빿" => "bbaegs",
+ "뺀" => "bbaen", "ëº" => "bbaenj", "뺂" => "bbaenh", "뺃" => "bbaed", "뺄" => "bbael", "뺅" => "bbaelg",
+ "뺆" => "bbaelm", "뺇" => "bbaelb", "뺈" => "bbaels", "뺉" => "bbaelt", "ëº" => "bbaelp", "뺋" => "bbaelh",
+ "뺌" => "bbaem", "ëº" => "bbaeb", "ëº" => "bbaebs", "ëº" => "bbaes", "ëº" => "bbaess", "뺑" => "bbaeng",
+ "뺒" => "bbaej", "뺓" => "bbaec", "뺔" => "bbaek", "뺕" => "bbaet", "뺖" => "bbaep", "뺗" => "bbaeh",
+ "뺘" => "bbya", "뺙" => "bbyag", "ëº" => "bbyagg", "뺛" => "bbyags", "뺜" => "bbyan", "ëº" => "bbyanj",
+ "ëº" => "bbyanh", "뺟" => "bbyad", "ëº " => "bbyal", "뺡" => "bbyalg", "뺢" => "bbyalm", "뺣" => "bbyalb",
+ "뺤" => "bbyals", "뺥" => "bbyalt", "뺦" => "bbyalp", "뺧" => "bbyalh", "뺨" => "bbyam", "뺩" => "bbyab",
+ "뺪" => "bbyabs", "뺫" => "bbyas", "뺬" => "bbyass", "ëº" => "bbyang", "뺮" => "bbyaj", "뺯" => "bbyac",
+ "뺰" => "bbyak", "뺱" => "bbyat", "뺲" => "bbyap", "뺳" => "bbyah", "뺴" => "bbyae", "뺵" => "bbyaeg",
+ "뺶" => "bbyaegg", "뺷" => "bbyaegs", "뺸" => "bbyaen", "뺹" => "bbyaenj", "뺺" => "bbyaenh", "뺻" => "bbyaed",
+ "뺼" => "bbyael", "뺽" => "bbyaelg", "뺾" => "bbyaelm", "뺿" => "bbyaelb", "뻀" => "bbyaels", "ë»" => "bbyaelt",
+ "뻂" => "bbyaelp", "뻃" => "bbyaelh", "뻄" => "bbyaem", "뻅" => "bbyaeb", "뻆" => "bbyaebs", "뻇" => "bbyaes",
+ "뻈" => "bbyaess", "뻉" => "bbyaeng", "ë»" => "bbyaej", "뻋" => "bbyaec", "뻌" => "bbyaek", "ë»" => "bbyaet",
+ "ë»" => "bbyaep", "ë»" => "bbyaeh", "ë»" => "bbeo", "뻑" => "bbeog", "ë»’" => "bbeogg", "뻓" => "bbeogs",
+ "뻔" => "bbeon", "뻕" => "bbeonj", "뻖" => "bbeonh", "뻗" => "bbeod", "뻘" => "bbeol", "뻙" => "bbeolg",
+ "ë»" => "bbeolm", "ë»›" => "bbeolb", "뻜" => "bbeols", "ë»" => "bbeolt", "ë»" => "bbeolp", "뻟" => "bbeolh",
+ "ë» " => "bbeom", "뻡" => "bbeob", "뻢" => "bbeobs", "뻣" => "bbeos", "뻤" => "bbeoss", "뻥" => "bbeong",
+ "뻦" => "bbeoj", "뻧" => "bbeoc", "뻨" => "bbeok", "뻩" => "bbeot", "뻪" => "bbeop", "뻫" => "bbeoh",
+ "뻬" => "bbe", "ë»" => "bbeg", "ë»®" => "bbegg", "뻯" => "bbegs", "ë»°" => "bben", "ë»±" => "bbenj",
+ "뻲" => "bbenh", "뻳" => "bbed", "뻴" => "bbel", "뻵" => "bbelg", "뻶" => "bbelm", "뻷" => "bbelb",
+ "뻸" => "bbels", "뻹" => "bbelt", "뻺" => "bbelp", "뻻" => "bbelh", "뻼" => "bbem", "뻽" => "bbeb",
+ "뻾" => "bbebs", "뻿" => "bbes", "ë¼" => "bbeng", "뼂" => "bbej", "뼃" => "bbec", "뼄" => "bbek",
+ "ë¼…" => "bbet", "뼆" => "bbep", "뼇" => "bbeh", "뼈" => "bbyeo", "뼉" => "bbyeog", "ë¼" => "bbyeogg",
+ "뼋" => "bbyeogs", "뼌" => "bbyeon", "ë¼" => "bbyeonj", "ë¼" => "bbyeonh", "ë¼" => "bbyeod", "ë¼" => "bbyeol",
+ "뼑" => "bbyeolg", "뼒" => "bbyeolm", "뼓" => "bbyeolb", "뼔" => "bbyeols", "뼕" => "bbyeolt", "뼖" => "bbyeolp",
+ "ë¼—" => "bbyeolh", "뼘" => "bbyeom", "ë¼™" => "bbyeob", "ë¼" => "bbyeobs", "ë¼›" => "bbyeos", "뼜" => "bbyeoss",
+ "ë¼" => "bbyeong", "ë¼" => "bbyeoj", "뼟" => "bbyeoc", "ë¼ " => "bbyeok", "뼡" => "bbyeot", "ë¼¢" => "bbyeop",
+ "뼣" => "bbyeoh", "뼤" => "bbye", "뼥" => "bbyeg", "뼦" => "bbyegg", "뼧" => "bbyegs", "뼨" => "bbyen",
+ "뼩" => "bbyenj", "뼪" => "bbyenh", "뼫" => "bbyed", "뼬" => "bbyel", "ë¼" => "bbyelg", "ë¼®" => "bbyelm",
+ "뼯" => "bbyelb", "뼰" => "bbyels", "뼱" => "bbyelt", "뼲" => "bbyelp", "뼳" => "bbyelh", "뼴" => "bbyem",
+ "뼵" => "bbyeb", "뼶" => "bbyebs", "뼷" => "bbyes", "뼸" => "bbyess", "뼹" => "bbyeng", "뼺" => "bbyej",
+ "뼻" => "bbyec", "뼼" => "bbyek", "뼽" => "bbyet", "뼾" => "bbyep", "뼿" => "bbyeh", "뽀" => "bbo",
+ "ë½" => "bbog", "뽂" => "bbogg", "뽃" => "bbogs", "뽄" => "bbon", "ë½…" => "bbonj", "뽆" => "bbonh",
+ "뽇" => "bbod", "뽈" => "bbol", "뽉" => "bbolg", "ë½" => "bbolm", "뽋" => "bbolb", "뽌" => "bbols",
+ "ë½" => "bbolt", "ë½" => "bbolp", "ë½" => "bbolh", "ë½" => "bbom", "뽑" => "bbob", "ë½’" => "bbobs",
+ "뽓" => "bbos", "뽔" => "bboss", "뽕" => "bbong", "뽖" => "bboj", "뽗" => "bboc", "뽘" => "bbok",
+ "ë½™" => "bbot", "ë½" => "bbop", "ë½›" => "bboh", "뽜" => "bbwa", "ë½" => "bbwag", "ë½" => "bbwagg",
+ "뽟" => "bbwags", "ë½ " => "bbwan", "뽡" => "bbwanj", "ë½¢" => "bbwanh", "ë½£" => "bbwad", "뽤" => "bbwal",
+ "뽥" => "bbwalg", "뽦" => "bbwalm", "뽧" => "bbwalb", "뽨" => "bbwals", "뽩" => "bbwalt", "뽪" => "bbwalp",
+ "뽫" => "bbwalh", "뽬" => "bbwam", "ë½" => "bbwab", "ë½®" => "bbwabs", "뽯" => "bbwas", "ë½°" => "bbwass",
+ "뽱" => "bbwang", "뽲" => "bbwaj", "뽳" => "bbwac", "뽴" => "bbwak", "뽵" => "bbwat", "뽶" => "bbwap",
+ "뽷" => "bbwah", "뽸" => "bbwae", "뽹" => "bbwaeg", "뽺" => "bbwaegg", "뽻" => "bbwaegs", "뽼" => "bbwaen",
+ "ë½½" => "bbwaenj", "ë½¾" => "bbwaenh", "뽿" => "bbwaed", "ë¾€" => "bbwael", "ë¾" => "bbwaelg", "뾂" => "bbwaelm",
+ "뾃" => "bbwaelb", "뾄" => "bbwaels", "뾅" => "bbwaelt", "뾆" => "bbwaelp", "뾇" => "bbwaelh", "뾈" => "bbwaem",
+ "뾉" => "bbwaeb", "ë¾" => "bbwaebs", "뾋" => "bbwaes", "뾌" => "bbwaess", "ë¾" => "bbwaeng", "ë¾" => "bbwaej",
+ "ë¾" => "bbwaec", "ë¾" => "bbwaek", "뾑" => "bbwaet", "ë¾’" => "bbwaep", "뾓" => "bbwaeh", "ë¾”" => "bboe",
+ "뾕" => "bboeg", "ë¾–" => "bboegg", "ë¾—" => "bboegs", "뾘" => "bboen", "ë¾™" => "bboenj", "ë¾" => "bboenh",
+ "ë¾›" => "bboed", "뾜" => "bboel", "ë¾" => "bboelg", "ë¾" => "bboelm", "뾟" => "bboelb", "ë¾ " => "bboels",
+ "뾡" => "bboelt", "뾢" => "bboelp", "뾣" => "bboelh", "뾤" => "bboem", "뾥" => "bboeb", "뾦" => "bboebs",
+ "뾧" => "bboes", "뾨" => "bboess", "뾩" => "bboeng", "뾪" => "bboej", "뾫" => "bboec", "뾬" => "bboek",
+ "ë¾" => "bboet", "ë¾®" => "bboep", "뾯" => "bboeh", "ë¾°" => "bbyo", "ë¾±" => "bbyog", "ë¾²" => "bbyogg",
+ "뾳" => "bbyogs", "뾴" => "bbyon", "뾵" => "bbyonj", "뾶" => "bbyonh", "뾷" => "bbyod", "뾸" => "bbyol",
+ "뾹" => "bbyolg", "뾺" => "bbyolm", "뾻" => "bbyolb", "뾼" => "bbyols", "뾽" => "bbyolt", "뾾" => "bbyolp",
+ "뾿" => "bbyolh", "ë¿€" => "bbyom", "ë¿" => "bbyob", "ë¿‚" => "bbyobs", "뿃" => "bbyos", "ë¿„" => "bbyoss",
+ "ë¿…" => "bbyong", "뿆" => "bbyoj", "뿇" => "bbyoc", "뿈" => "bbyok", "뿉" => "bbyot", "ë¿" => "bbyop",
+ "ë¿‹" => "bbyoh", "ë¿Œ" => "bbu", "ë¿" => "bbug", "ë¿" => "bbugg", "ë¿" => "bbugs", "ë¿" => "bbun",
+ "ë¿‘" => "bbunj", "ë¿’" => "bbunh", "ë¿“" => "bbud", "ë¿”" => "bbul", "ë¿•" => "bbulg", "ë¿–" => "bbulm",
+ "ë¿—" => "bbulb", "뿘" => "bbuls", "ë¿™" => "bbult", "ë¿" => "bbulp", "ë¿›" => "bbulh", "ë¿œ" => "bbum",
+ "ë¿" => "bbub", "ë¿" => "bbubs", "ë¿Ÿ" => "bbus", "ë¿ " => "bbuss", "ë¿¡" => "bbung", "ë¿¢" => "bbuj",
+ "뿣" => "bbuc", "뿤" => "bbuk", "뿥" => "bbut", "뿦" => "bbup", "뿧" => "bbuh", "뿨" => "bbweo",
+ "ë¿©" => "bbweog", "뿪" => "bbweogg", "ë¿«" => "bbweogs", "뿬" => "bbweon", "ë¿" => "bbweonj", "ë¿®" => "bbweonh",
+ "뿯" => "bbweod", "뿰" => "bbweol", "뿱" => "bbweolg", "뿲" => "bbweolm", "뿳" => "bbweolb", "뿴" => "bbweols",
+ "뿵" => "bbweolt", "뿶" => "bbweolp", "뿷" => "bbweolh", "뿸" => "bbweom", "뿹" => "bbweob", "뿺" => "bbweobs",
+ "ë¿»" => "bbweos", "뿼" => "bbweoss", "뿽" => "bbweong", "뿾" => "bbweoj", "ë¿¿" => "bbweoc", "́€" => "bbweot",
+ "́€‚" => "bbweop", "́€ƒ" => "bbweoh", "́€„" => "bbwe", "́€…" => "bbweg", "́€†" => "bbwegg", "́€‡" => "bbwegs",
+ "́€ˆ" => "bbwen", "́€‰" => "bbwenj", "́€" => "bbwenh", "́€‹" => "bbwed", "́€Œ" => "bbwel", "́€" => "bbwelg",
+ "́€" => "bbwelm", "́€" => "bbwelb", "́€" => "bbwels", "́€‘" => "bbwelt", "́€’" => "bbwelp", "́€“" => "bbwelh",
+ "́€”" => "bbwem", "́€•" => "bbweb", "́€–" => "bbwebs", "́€—" => "bbwes", "́€˜" => "bbwess", "́€™" => "bbweng",
+ "́€" => "bbwej", "́€›" => "bbwec", "́€œ" => "bbwek", "́€" => "bbwet", "́€" => "bbwep", "́€Ÿ" => "bbweh",
+ "́€ " => "bbwi", "́€¡" => "bbwig", "́€¢" => "bbwigg", "́€£" => "bbwigs", "́€¤" => "bbwin", "́€¥" => "bbwinj",
+ "́€¦" => "bbwinh", "́€§" => "bbwid", "́€¨" => "bbwil", "́€©" => "bbwilg", "́€ª" => "bbwilm", "́€«" => "bbwilb",
+ "́€¬" => "bbwils", "́€" => "bbwilt", "́€®" => "bbwilp", "́€¯" => "bbwilh", "́€°" => "bbwim", "́€±" => "bbwib",
+ "́€²" => "bbwibs", "́€³" => "bbwis", "́€´" => "bbwiss", "́€µ" => "bbwing", "́€¶" => "bbwij", "́€·" => "bbwic",
+ "́€¸" => "bbwik", "́€¹" => "bbwit", "́€º" => "bbwip", "́€»" => "bbwih", "́€¼" => "bbyu", "́€½" => "bbyug",
+ "́€¾" => "bbyugg", "́€¿" => "bbyugs", "́€" => "bbyun", "́" => "bbyunj", "́‚" => "bbyunh", "́ƒ" => "bbyud",
+ "́„" => "bbyul", "́…" => "bbyulg", "́†" => "bbyulm", "́‡" => "bbyulb", "́ˆ" => "bbyuls", "́‰" => "bbyult",
+ "́" => "bbyulp", "́‹" => "bbyulh", "́Œ" => "bbyum", "́" => "bbyub", "́" => "bbyubs", "́" => "bbyus",
+ "́" => "bbyuss", "́‘" => "bbyung", "́’" => "bbyuj", "́“" => "bbyuc", "́”" => "bbyuk", "́•" => "bbyut",
+ "́–" => "bbyup", "́—" => "bbyuh", "́˜" => "bbeu", "́™" => "bbeug", "́" => "bbeugg", "́›" => "bbeugs",
+ "́œ" => "bbeun", "́" => "bbeunj", "́" => "bbeunh", "́Ÿ" => "bbeud", "́ " => "bbeul", "́¡" => "bbeulg",
+ "́¢" => "bbeulm", "́£" => "bbeulb", "́¤" => "bbeuls", "́¥" => "bbeult", "́¦" => "bbeulp", "́§" => "bbeulh",
+ "́¨" => "bbeum", "́©" => "bbeub", "́ª" => "bbeubs", "́«" => "bbeus", "́¬" => "bbeuss", "́" => "bbeung",
+ "́®" => "bbeuj", "́¯" => "bbeuc", "́°" => "bbeuk", "́±" => "bbeut", "́²" => "bbeup", "́³" => "bbeuh",
+ "́´" => "bbyi", "́µ" => "bbyig", "́¶" => "bbyigg", "́·" => "bbyigs", "́¸" => "bbyin", "́¹" => "bbyinj",
+ "́º" => "bbyinh", "́»" => "bbyid", "́¼" => "bbyil", "́½" => "bbyilg", "́¾" => "bbyilm", "́¿" => "bbyilb",
+ "́‚€" => "bbyils", "́‚" => "bbyilt", "́‚‚" => "bbyilp", "́‚ƒ" => "bbyilh", "́‚„" => "bbyim", "́‚…" => "bbyib",
+ "́‚†" => "bbyibs", "́‚‡" => "bbyis", "́‚ˆ" => "bbyiss", "́‚‰" => "bbying", "́‚" => "bbyij", "́‚‹" => "bbyic",
+ "́‚Œ" => "bbyik", "́‚" => "bbyit", "́‚" => "bbyip", "́‚" => "bbyih", "́‚" => "bbi", "́‚‘" => "bbig",
+ "́‚’" => "bbigg", "́‚“" => "bbigs", "́‚”" => "bbin", "́‚•" => "bbinj", "́‚–" => "bbinh", "́‚—" => "bbid",
+ "́‚˜" => "bbil", "́‚™" => "bbilg", "́‚" => "bbilm", "́‚›" => "bbilb", "́‚œ" => "bbils", "́‚" => "bbilt",
+ "́‚" => "bbilp", "́‚Ÿ" => "bbilh", "́‚ " => "bbim", "́‚¡" => "bbib", "́‚¢" => "bbibs", "́‚£" => "bbis",
+ "́‚¤" => "bbiss", "́‚¥" => "bbing", "́‚¦" => "bbij", "́‚§" => "bbic", "́‚¨" => "bbik", "́‚©" => "bbit",
+ "́‚ª" => "bbip", "́‚«" => "bbih", "́‚¬" => "sa", "́‚" => "sag", "́‚®" => "sagg", "́‚¯" => "sags",
+ "́‚°" => "san", "́‚±" => "sanj", "́‚²" => "sanh", "́‚³" => "sad", "́‚´" => "sal", "́‚µ" => "salg",
+ "́‚¶" => "salm", "́‚·" => "salb", "́‚¸" => "sals", "́‚¹" => "salt", "́‚º" => "salp", "́‚»" => "salh",
+ "́‚¼" => "sam", "́‚½" => "sab", "́‚¾" => "sabs", "́‚¿" => "sas", "́ƒ€" => "sass", "́ƒ" => "sang",
+ "́ƒ‚" => "saj", "́ƒƒ" => "sac", "́ƒ„" => "sak", "́ƒ…" => "sat", "́ƒ†" => "sap", "́ƒ‡" => "sah",
+ "́ƒˆ" => "sae", "́ƒ‰" => "saeg", "́ƒ" => "saegg", "́ƒ‹" => "saegs", "́ƒŒ" => "saen", "́ƒ" => "saenj",
+ "́ƒ" => "saenh", "́ƒ" => "saed", "́ƒ" => "sael", "́ƒ‘" => "saelg", "́ƒ’" => "saelm", "́ƒ“" => "saelb",
+ "́ƒ”" => "saels", "́ƒ•" => "saelt", "́ƒ–" => "saelp", "́ƒ—" => "saelh", "́ƒ˜" => "saem", "́ƒ™" => "saeb",
+ "́ƒ" => "saebs", "́ƒ›" => "saes", "́ƒœ" => "saess", "́ƒ" => "saeng", "́ƒ" => "saej", "́ƒŸ" => "saec",
+ "́ƒ " => "saek", "́ƒ¡" => "saet", "́ƒ¢" => "saep", "́ƒ£" => "saeh", "́ƒ¤" => "sya", "́ƒ¥" => "syag",
+ "́ƒ¦" => "syagg", "́ƒ§" => "syags", "́ƒ¨" => "syan", "́ƒ©" => "syanj", "́ƒª" => "syanh", "́ƒ«" => "syad",
+ "́ƒ¬" => "syal", "́ƒ" => "syalg", "́ƒ®" => "syalm", "́ƒ¯" => "syalb", "́ƒ°" => "syals", "́ƒ±" => "syalt",
+ "́ƒ²" => "syalp", "́ƒ³" => "syalh", "́ƒ´" => "syam", "́ƒµ" => "syab", "́ƒ¶" => "syabs", "́ƒ·" => "syas",
+ "́ƒ¸" => "syass", "́ƒ¹" => "syang", "́ƒº" => "syaj", "́ƒ»" => "syac", "́ƒ¼" => "syak", "́ƒ½" => "syat",
+ "́ƒ¾" => "syap", "́ƒ¿" => "syah", "́„" => "syaeg", "́„‚" => "syaegg", "́„ƒ" => "syaegs", "́„„" => "syaen",
+ "́„…" => "syaenj", "́„†" => "syaenh", "́„‡" => "syaed", "́„ˆ" => "syael", "́„‰" => "syaelg", "́„" => "syaelm",
+ "́„‹" => "syaelb", "́„Œ" => "syaels", "́„" => "syaelt", "́„" => "syaelp", "́„" => "syaelh", "́„" => "syaem",
+ "́„‘" => "syaeb", "́„’" => "syaebs", "́„“" => "syaes", "́„”" => "syaess", "́„•" => "syaeng", "́„–" => "syaej",
+ "́„—" => "syaec", "́„˜" => "syaek", "́„™" => "syaet", "́„" => "syaep", "́„›" => "syaeh", "́„œ" => "seo",
+ "́„" => "seog", "́„" => "seogg", "́„Ÿ" => "seogs", "́„ " => "seon", "́„¡" => "seonj", "́„¢" => "seonh",
+ "́„£" => "seod", "́„¤" => "seol", "́„¥" => "seolg", "́„¦" => "seolm", "́„§" => "seolb", "́„¨" => "seols",
+ "́„©" => "seolt", "́„ª" => "seolp", "́„«" => "seolh", "́„¬" => "seom", "́„" => "seob", "́„®" => "seobs",
+ "́„¯" => "seos", "́„°" => "seoss", "́„±" => "seong", "́„²" => "seoj", "́„³" => "seoc", "́„´" => "seok",
+ "́„µ" => "seot", "́„¶" => "seop", "́„·" => "seoh", "́„¸" => "se", "́„¹" => "seg", "́„º" => "segg",
+ "́„»" => "segs", "́„¼" => "sen", "́„½" => "senj", "́„¾" => "senh", "́„¿" => "sed", "́…€" => "sel",
+ "́…" => "selg", "́…‚" => "selm", "́…ƒ" => "selb", "́…„" => "sels", "́……" => "selt", "́…†" => "selp",
+ "́…‡" => "selh", "́…ˆ" => "sem", "́…‰" => "seb", "́…" => "sebs", "́…‹" => "ses", "́…Œ" => "sess",
+ "́…" => "seng", "́…" => "sej", "́…" => "sec", "́…" => "sek", "́…‘" => "set", "́…’" => "sep",
+ "́…“" => "seh", "́…”" => "syeo", "́…•" => "syeog", "́…–" => "syeogg", "́…—" => "syeogs", "́…˜" => "syeon",
+ "́…™" => "syeonj", "́…" => "syeonh", "́…›" => "syeod", "́…œ" => "syeol", "́…" => "syeolg", "́…" => "syeolm",
+ "́…Ÿ" => "syeolb", "́… " => "syeols", "́…¡" => "syeolt", "́…¢" => "syeolp", "́…£" => "syeolh", "́…¤" => "syeom",
+ "́…¥" => "syeob", "́…¦" => "syeobs", "́…§" => "syeos", "́…¨" => "syeoss", "́…©" => "syeong", "́…ª" => "syeoj",
+ "́…«" => "syeoc", "́…¬" => "syeok", "́…" => "syeot", "́…®" => "syeop", "́…¯" => "syeoh", "́…°" => "sye",
+ "́…±" => "syeg", "́…²" => "syegg", "́…³" => "syegs", "́…´" => "syen", "́…µ" => "syenj", "́…¶" => "syenh",
+ "́…·" => "syed", "́…¸" => "syel", "́…¹" => "syelg", "́…º" => "syelm", "́…»" => "syelb", "́…¼" => "syels",
+ "́…½" => "syelt", "́…¾" => "syelp", "́…¿" => "syelh", "́†€" => "syem", "́†" => "syeb", "́†‚" => "syebs",
+ "́†ƒ" => "syes", "́†„" => "syess", "́†…" => "syeng", "́††" => "syej", "́†‡" => "syec", "́†ˆ" => "syek",
+ "́†‰" => "syet", "́†" => "syep", "́†‹" => "syeh", "́†Œ" => "so", "́†" => "sog", "́†" => "sogg",
+ "́†" => "sogs", "́†" => "son", "́†‘" => "sonj", "́†’" => "sonh", "́†“" => "sod", "́†”" => "sol",
+ "́†•" => "solg", "́†–" => "solm", "́†—" => "solb", "́†˜" => "sols", "́†™" => "solt", "́†" => "solp",
+ "́†›" => "solh", "́†œ" => "som", "́†" => "sob", "́†" => "sobs", "́†Ÿ" => "sos", "́† " => "soss",
+ "́†¡" => "song", "́†¢" => "soj", "́†£" => "soc", "́†¤" => "sok", "́†¥" => "sot", "́†¦" => "sop",
+ "́†§" => "soh", "́†¨" => "swa", "́†©" => "swag", "́†ª" => "swagg", "́†«" => "swags", "́†¬" => "swan",
+ "́†" => "swanj", "́†®" => "swanh", "́†¯" => "swad", "́†°" => "swal", "́†±" => "swalg", "́†²" => "swalm",
+ "́†³" => "swalb", "́†´" => "swals", "́†µ" => "swalt", "́†¶" => "swalp", "́†·" => "swalh", "́†¸" => "swam",
+ "́†¹" => "swab", "́†º" => "swabs", "́†»" => "swas", "́†¼" => "swass", "́†½" => "swang", "́†¾" => "swaj",
+ "́†¿" => "swac", "́‡€" => "swak", "́‡" => "swat", "́‡‚" => "swap", "́‡ƒ" => "swah", "́‡„" => "swae",
+ "́‡…" => "swaeg", "́‡†" => "swaegg", "́‡‡" => "swaegs", "́‡ˆ" => "swaen", "́‡‰" => "swaenj", "́‡" => "swaenh",
+ "́‡‹" => "swaed", "́‡Œ" => "swael", "́‡" => "swaelg", "́‡" => "swaelm", "́‡" => "swaelb", "́‡" => "swaels",
+ "́‡‘" => "swaelt", "́‡’" => "swaelp", "́‡“" => "swaelh", "́‡”" => "swaem", "́‡•" => "swaeb", "́‡–" => "swaebs",
+ "́‡—" => "swaes", "́‡˜" => "swaess", "́‡™" => "swaeng", "́‡" => "swaej", "́‡›" => "swaec", "́‡œ" => "swaek",
+ "́‡" => "swaet", "́‡" => "swaep", "́‡Ÿ" => "swaeh", "́‡ " => "soe", "́‡¡" => "soeg", "́‡¢" => "soegg",
+ "́‡£" => "soegs", "́‡¤" => "soen", "́‡¥" => "soenj", "́‡¦" => "soenh", "́‡§" => "soed", "́‡¨" => "soel",
+ "́‡©" => "soelg", "́‡ª" => "soelm", "́‡«" => "soelb", "́‡¬" => "soels", "́‡" => "soelt", "́‡®" => "soelp",
+ "́‡¯" => "soelh", "́‡°" => "soem", "́‡±" => "soeb", "́‡²" => "soebs", "́‡³" => "soes", "́‡´" => "soess",
+ "́‡µ" => "soeng", "́‡¶" => "soej", "́‡·" => "soec", "́‡¸" => "soek", "́‡¹" => "soet", "́‡º" => "soep",
+ "́‡»" => "soeh", "́‡¼" => "syo", "́‡½" => "syog", "́‡¾" => "syogg", "́‡¿" => "syogs", "́ˆ" => "syonj",
+ "́ˆ‚" => "syonh", "́ˆƒ" => "syod", "́ˆ„" => "syol", "́ˆ…" => "syolg", "́ˆ†" => "syolm", "́ˆ‡" => "syolb",
+ "́ˆˆ" => "syols", "́ˆ‰" => "syolt", "́ˆ" => "syolp", "́ˆ‹" => "syolh", "́ˆŒ" => "syom", "́ˆ" => "syob",
+ "́ˆ" => "syobs", "́ˆ" => "syos", "́ˆ" => "syoss", "́ˆ‘" => "syong", "́ˆ’" => "syoj", "́ˆ“" => "syoc",
+ "́ˆ”" => "syok", "́ˆ•" => "syot", "́ˆ–" => "syop", "́ˆ—" => "syoh", "́ˆ˜" => "su", "́ˆ™" => "sug",
+ "́ˆ" => "sugg", "́ˆ›" => "sugs", "́ˆœ" => "sun", "́ˆ" => "sunj", "́ˆ" => "sunh", "́ˆŸ" => "sud",
+ "́ˆ " => "sul", "́ˆ¡" => "sulg", "́ˆ¢" => "sulm", "́ˆ£" => "sulb", "́ˆ¤" => "suls", "́ˆ¥" => "sult",
+ "́ˆ¦" => "sulp", "́ˆ§" => "sulh", "́ˆ¨" => "sum", "́ˆ©" => "sub", "́ˆª" => "subs", "́ˆ«" => "sus",
+ "́ˆ¬" => "suss", "́ˆ" => "sung", "́ˆ®" => "suj", "́ˆ¯" => "suc", "́ˆ°" => "suk", "́ˆ±" => "sut",
+ "́ˆ²" => "sup", "́ˆ³" => "suh", "́ˆ´" => "sweo", "́ˆµ" => "sweog", "́ˆ¶" => "sweogg", "́ˆ·" => "sweogs",
+ "́ˆ¸" => "sweon", "́ˆ¹" => "sweonj", "́ˆº" => "sweonh", "́ˆ»" => "sweod", "́ˆ¼" => "sweol", "́ˆ½" => "sweolg",
+ "́ˆ¾" => "sweolm", "́ˆ¿" => "sweolb", "́‰€" => "sweols", "́‰" => "sweolt", "́‰‚" => "sweolp", "́‰ƒ" => "sweolh",
+ "́‰„" => "sweom", "́‰…" => "sweob", "́‰†" => "sweobs", "́‰‡" => "sweos", "́‰ˆ" => "sweoss", "́‰‰" => "sweong",
+ "́‰" => "sweoj", "́‰‹" => "sweoc", "́‰Œ" => "sweok", "́‰" => "sweot", "́‰" => "sweop", "́‰" => "sweoh",
+ "́‰" => "swe", "́‰‘" => "sweg", "́‰’" => "swegg", "́‰“" => "swegs", "́‰”" => "swen", "́‰•" => "swenj",
+ "́‰–" => "swenh", "́‰—" => "swed", "́‰˜" => "swel", "́‰™" => "swelg", "́‰" => "swelm", "́‰›" => "swelb",
+ "́‰œ" => "swels", "́‰" => "swelt", "́‰" => "swelp", "́‰Ÿ" => "swelh", "́‰ " => "swem", "́‰¡" => "sweb",
+ "́‰¢" => "swebs", "́‰£" => "swes", "́‰¤" => "swess", "́‰¥" => "sweng", "́‰¦" => "swej", "́‰§" => "swec",
+ "́‰¨" => "swek", "́‰©" => "swet", "́‰ª" => "swep", "́‰«" => "sweh", "́‰¬" => "swi", "́‰" => "swig",
+ "́‰®" => "swigg", "́‰¯" => "swigs", "́‰°" => "swin", "́‰±" => "swinj", "́‰²" => "swinh", "́‰³" => "swid",
+ "́‰´" => "swil", "́‰µ" => "swilg", "́‰¶" => "swilm", "́‰·" => "swilb", "́‰¸" => "swils", "́‰¹" => "swilt",
+ "́‰º" => "swilp", "́‰»" => "swilh", "́‰¼" => "swim", "́‰½" => "swib", "́‰¾" => "swibs", "́‰¿" => "swis",
+ "́€" => "swiss", "́" => "swing", "́‚" => "swij", "́ƒ" => "swic", "́„" => "swik", "́…" => "swit",
+ "́†" => "swip", "́‡" => "swih", "́ˆ" => "syu", "́‰" => "syug", "́" => "syugg", "́‹" => "syugs",
+ "́Œ" => "syun", "́" => "syunj", "́" => "syunh", "́" => "syud", "́" => "syul", "́‘" => "syulg",
+ "́’" => "syulm", "́“" => "syulb", "́”" => "syuls", "́•" => "syult", "́–" => "syulp", "́—" => "syulh",
+ "́˜" => "syum", "́™" => "syub", "́" => "syubs", "́›" => "syus", "́œ" => "syuss", "́" => "syung",
+ "́" => "syuj", "́Ÿ" => "syuc", "́ " => "syuk", "́¡" => "syut", "́¢" => "syup", "́£" => "syuh",
+ "́¤" => "seu", "́¥" => "seug", "́¦" => "seugg", "́§" => "seugs", "́¨" => "seun", "́©" => "seunj",
+ "́ª" => "seunh", "́«" => "seud", "́¬" => "seul", "́" => "seulg", "́®" => "seulm", "́¯" => "seulb",
+ "́°" => "seuls", "́±" => "seult", "́²" => "seulp", "́³" => "seulh", "́´" => "seum", "́µ" => "seub",
+ "́¶" => "seubs", "́·" => "seus", "́¸" => "seuss", "́¹" => "seung", "́º" => "seuj", "́»" => "seuc",
+ "́¼" => "seuk", "́½" => "seut", "́¾" => "seup", "́¿" => "seuh", "́‹€" => "syi", "́‹" => "syig",
+ "́‹‚" => "syigg", "́‹ƒ" => "syigs", "́‹„" => "syin", "́‹…" => "syinj", "́‹†" => "syinh", "́‹‡" => "syid",
+ "́‹ˆ" => "syil", "́‹‰" => "syilg", "́‹" => "syilm", "́‹‹" => "syilb", "́‹Œ" => "syils", "́‹" => "syilt",
+ "́‹" => "syilp", "́‹" => "syilh", "́‹" => "syim", "́‹‘" => "syib", "́‹’" => "syibs", "́‹“" => "syis",
+ "́‹”" => "syiss", "́‹•" => "sying", "́‹–" => "syij", "́‹—" => "syic", "́‹˜" => "syik", "́‹™" => "syit",
+ "́‹" => "syip", "́‹›" => "syih", "́‹œ" => "si", "́‹" => "sig", "́‹" => "sigg", "́‹Ÿ" => "sigs",
+ "́‹ " => "sin", "́‹¡" => "sinj", "́‹¢" => "sinh", "́‹£" => "sid", "́‹¤" => "sil", "́‹¥" => "silg",
+ "́‹¦" => "silm", "́‹§" => "silb", "́‹¨" => "sils", "́‹©" => "silt", "́‹ª" => "silp", "́‹«" => "silh",
+ "́‹¬" => "sim", "́‹" => "sib", "́‹®" => "sibs", "́‹¯" => "sis", "́‹°" => "siss", "́‹±" => "sing",
+ "́‹²" => "sij", "́‹³" => "sic", "́‹´" => "sik", "́‹µ" => "sit", "́‹¶" => "sip", "́‹·" => "sih",
+ "́‹¸" => "ssa", "́‹¹" => "ssag", "́‹º" => "ssagg", "́‹»" => "ssags", "́‹¼" => "ssan", "́‹½" => "ssanj",
+ "́‹¾" => "ssanh", "́‹¿" => "ssad", "́Œ" => "ssalg", "́Œ‚" => "ssalm", "́Œƒ" => "ssalb", "́Œ„" => "ssals",
+ "́Œ…" => "ssalt", "́Œ†" => "ssalp", "́Œ‡" => "ssalh", "́Œˆ" => "ssam", "́Œ‰" => "ssab", "́Œ" => "ssabs",
+ "́Œ‹" => "ssas", "́ŒŒ" => "ssass", "́Œ" => "ssang", "́Œ" => "ssaj", "́Œ" => "ssac", "́Œ" => "ssak",
+ "́Œ‘" => "ssat", "́Œ’" => "ssap", "́Œ“" => "ssah", "́Œ”" => "ssae", "́Œ•" => "ssaeg", "́Œ–" => "ssaegg",
+ "́Œ—" => "ssaegs", "́Œ˜" => "ssaen", "́Œ™" => "ssaenj", "́Œ" => "ssaenh", "́Œ›" => "ssaed", "́Œœ" => "ssael",
+ "́Œ" => "ssaelg", "́Œ" => "ssaelm", "́ŒŸ" => "ssaelb", "́Œ " => "ssaels", "́Œ¡" => "ssaelt", "́Œ¢" => "ssaelp",
+ "́Œ£" => "ssaelh", "́Œ¤" => "ssaem", "́Œ¥" => "ssaeb", "́Œ¦" => "ssaebs", "́Œ§" => "ssaes", "́Œ¨" => "ssaess",
+ "́Œ©" => "ssaeng", "́Œª" => "ssaej", "́Œ«" => "ssaec", "́Œ¬" => "ssaek", "́Œ" => "ssaet", "́Œ®" => "ssaep",
+ "́Œ¯" => "ssaeh", "́Œ°" => "ssya", "́Œ±" => "ssyag", "́Œ²" => "ssyagg", "́Œ³" => "ssyags", "́Œ´" => "ssyan",
+ "́Œµ" => "ssyanj", "́Œ¶" => "ssyanh", "́Œ·" => "ssyad", "́Œ¸" => "ssyal", "́Œ¹" => "ssyalg", "́Œº" => "ssyalm",
+ "́Œ»" => "ssyalb", "́Œ¼" => "ssyals", "́Œ½" => "ssyalt", "́Œ¾" => "ssyalp", "́Œ¿" => "ssyalh", "́€" => "ssyam",
+ "́" => "ssyab", "́‚" => "ssyabs", "́ƒ" => "ssyas", "́„" => "ssyass", "́…" => "ssyang", "́†" => "ssyaj",
+ "́‡" => "ssyac", "́ˆ" => "ssyak", "́‰" => "ssyat", "́" => "ssyap", "́‹" => "ssyah", "́Œ" => "ssyae",
+ "́" => "ssyaeg", "́" => "ssyaegg", "́" => "ssyaegs", "́" => "ssyaen", "́‘" => "ssyaenj", "́’" => "ssyaenh",
+ "́“" => "ssyaed", "́”" => "ssyael", "́•" => "ssyaelg", "́–" => "ssyaelm", "́—" => "ssyaelb", "́˜" => "ssyaels",
+ "́™" => "ssyaelt", "́" => "ssyaelp", "́›" => "ssyaelh", "́œ" => "ssyaem", "́" => "ssyaeb", "́" => "ssyaebs",
+ "́Ÿ" => "ssyaes", "́ " => "ssyaess", "́¡" => "ssyaeng", "́¢" => "ssyaej", "́£" => "ssyaec", "́¤" => "ssyaek",
+ "́¥" => "ssyaet", "́¦" => "ssyaep", "́§" => "ssyaeh", "́¨" => "sseo", "́©" => "sseog", "́ª" => "sseogg",
+ "́«" => "sseogs", "́¬" => "sseon", "́" => "sseonj", "́®" => "sseonh", "́¯" => "sseod", "́°" => "sseol",
+ "́±" => "sseolg", "́²" => "sseolm", "́³" => "sseolb", "́´" => "sseols", "́µ" => "sseolt", "́¶" => "sseolp",
+ "́·" => "sseolh", "́¸" => "sseom", "́¹" => "sseob", "́º" => "sseobs", "́»" => "sseos", "́¼" => "sseoss",
+ "́½" => "sseong", "́¾" => "sseoj", "́¿" => "sseoc", "́€" => "sseok", "́" => "sseot", "́‚" => "sseop",
+ "́ƒ" => "sseoh", "́„" => "sse", "́…" => "sseg", "́†" => "ssegg", "́‡" => "ssegs", "́ˆ" => "ssen",
+ "́‰" => "ssenj", "́" => "ssenh", "́‹" => "ssed", "́Œ" => "ssel", "́" => "sselg", "́" => "sselm",
+ "́" => "sselb", "́" => "ssels", "́‘" => "sselt", "́’" => "sselp", "́“" => "sselh", "́”" => "ssem",
+ "́•" => "sseb", "́–" => "ssebs", "́—" => "sses", "́˜" => "ssess", "́™" => "sseng", "́" => "ssej",
+ "́›" => "ssec", "́œ" => "ssek", "́" => "sset", "́" => "ssep", "́Ÿ" => "sseh", "́ " => "ssyeo",
+ "́¡" => "ssyeog", "́¢" => "ssyeogg", "́£" => "ssyeogs", "́¤" => "ssyeon", "́¥" => "ssyeonj", "́¦" => "ssyeonh",
+ "́§" => "ssyeod", "́¨" => "ssyeol", "́©" => "ssyeolg", "́ª" => "ssyeolm", "́«" => "ssyeolb", "́¬" => "ssyeols",
+ "́" => "ssyeolt", "́®" => "ssyeolp", "́¯" => "ssyeolh", "́°" => "ssyeom", "́±" => "ssyeob", "́²" => "ssyeobs",
+ "́³" => "ssyeos", "́´" => "ssyeoss", "́µ" => "ssyeong", "́¶" => "ssyeoj", "́·" => "ssyeoc", "́¸" => "ssyeok",
+ "́¹" => "ssyeot", "́º" => "ssyeop", "́»" => "ssyeoh", "́¼" => "ssye", "́½" => "ssyeg", "́¾" => "ssyegg",
+ "́¿" => "ssyegs", "́€" => "ssyen", "́" => "ssyenj", "́‚" => "ssyenh", "́ƒ" => "ssyed", "́„" => "ssyel",
+ "́…" => "ssyelg", "́†" => "ssyelm", "́‡" => "ssyelb", "́ˆ" => "ssyels", "́‰" => "ssyelt", "́" => "ssyelp",
+ "́‹" => "ssyelh", "́Œ" => "ssyem", "́" => "ssyeb", "́" => "ssyebs", "́" => "ssyes", "́" => "ssyess",
+ "́‘" => "ssyeng", "́’" => "ssyej", "́“" => "ssyec", "́”" => "ssyek", "́•" => "ssyet", "́–" => "ssyep",
+ "́—" => "ssyeh", "́˜" => "sso", "́™" => "ssog", "́" => "ssogg", "́›" => "ssogs", "́œ" => "sson",
+ "́" => "ssonj", "́" => "ssonh", "́Ÿ" => "ssod", "́ " => "ssol", "́¡" => "ssolg", "́¢" => "ssolm",
+ "́£" => "ssolb", "́¤" => "ssols", "́¥" => "ssolt", "́¦" => "ssolp", "́§" => "ssolh", "́¨" => "ssom",
+ "́©" => "ssob", "́ª" => "ssobs", "́«" => "ssos", "́¬" => "ssoss", "́" => "ssong", "́®" => "ssoj",
+ "́¯" => "ssoc", "́°" => "ssok", "́±" => "ssot", "́²" => "ssop", "́³" => "ssoh", "́´" => "sswa",
+ "́µ" => "sswag", "́¶" => "sswagg", "́·" => "sswags", "́¸" => "sswan", "́¹" => "sswanj", "́º" => "sswanh",
+ "́»" => "sswad", "́¼" => "sswal", "́½" => "sswalg", "́¾" => "sswalm", "́¿" => "sswalb", "́" => "sswalt",
+ "́‚" => "sswalp", "́ƒ" => "sswalh", "́„" => "sswam", "́…" => "sswab", "́†" => "sswabs", "́‡" => "sswas",
+ "́ˆ" => "sswass", "́‰" => "sswang", "́" => "sswaj", "́‹" => "sswac", "́Œ" => "sswak", "́" => "sswat",
+ "́" => "sswap", "́" => "sswah", "́" => "sswae", "́‘" => "sswaeg", "́’" => "sswaegg", "́“" => "sswaegs",
+ "́”" => "sswaen", "́•" => "sswaenj", "́–" => "sswaenh", "́—" => "sswaed", "́˜" => "sswael", "́™" => "sswaelg",
+ "́" => "sswaelm", "́›" => "sswaelb", "́œ" => "sswaels", "́" => "sswaelt", "́" => "sswaelp", "́Ÿ" => "sswaelh",
+ "́ " => "sswaem", "́¡" => "sswaeb", "́¢" => "sswaebs", "́£" => "sswaes", "́¤" => "sswaess", "́¥" => "sswaeng",
+ "́¦" => "sswaej", "́§" => "sswaec", "́¨" => "sswaek", "́©" => "sswaet", "́ª" => "sswaep", "́«" => "sswaeh",
+ "́¬" => "ssoe", "́" => "ssoeg", "́®" => "ssoegg", "́¯" => "ssoegs", "́°" => "ssoen", "́±" => "ssoenj",
+ "́²" => "ssoenh", "́³" => "ssoed", "́´" => "ssoel", "́µ" => "ssoelg", "́¶" => "ssoelm", "́·" => "ssoelb",
+ "́¸" => "ssoels", "́¹" => "ssoelt", "́º" => "ssoelp", "́»" => "ssoelh", "́¼" => "ssoem", "́½" => "ssoeb",
+ "́¾" => "ssoebs", "́¿" => "ssoes", "́‘€" => "ssoess", "́‘" => "ssoeng", "́‘‚" => "ssoej", "́‘ƒ" => "ssoec",
+ "́‘„" => "ssoek", "́‘…" => "ssoet", "́‘†" => "ssoep", "́‘‡" => "ssoeh", "́‘ˆ" => "ssyo", "́‘‰" => "ssyog",
+ "́‘" => "ssyogg", "́‘‹" => "ssyogs", "́‘Œ" => "ssyon", "́‘" => "ssyonj", "́‘" => "ssyonh", "́‘" => "ssyod",
+ "́‘" => "ssyol", "́‘‘" => "ssyolg", "́‘’" => "ssyolm", "́‘“" => "ssyolb", "́‘”" => "ssyols", "́‘•" => "ssyolt",
+ "́‘–" => "ssyolp", "́‘—" => "ssyolh", "́‘˜" => "ssyom", "́‘™" => "ssyob", "́‘" => "ssyobs", "́‘›" => "ssyos",
+ "́‘œ" => "ssyoss", "́‘" => "ssyong", "́‘" => "ssyoj", "́‘Ÿ" => "ssyoc", "́‘ " => "ssyok", "́‘¡" => "ssyot",
+ "́‘¢" => "ssyop", "́‘£" => "ssyoh", "́‘¤" => "ssu", "́‘¥" => "ssug", "́‘¦" => "ssugg", "́‘§" => "ssugs",
+ "́‘¨" => "ssun", "́‘©" => "ssunj", "́‘ª" => "ssunh", "́‘«" => "ssud", "́‘¬" => "ssul", "́‘" => "ssulg",
+ "́‘®" => "ssulm", "́‘¯" => "ssulb", "́‘°" => "ssuls", "́‘±" => "ssult", "́‘²" => "ssulp", "́‘³" => "ssulh",
+ "́‘´" => "ssum", "́‘µ" => "ssub", "́‘¶" => "ssubs", "́‘·" => "ssus", "́‘¸" => "ssuss", "́‘¹" => "ssung",
+ "́‘º" => "ssuj", "́‘»" => "ssuc", "́‘¼" => "ssuk", "́‘½" => "ssut", "́‘¾" => "ssup", "́‘¿" => "ssuh",
+ "́’€" => "ssweo", "́’" => "ssweog", "́’‚" => "ssweogg", "́’ƒ" => "ssweogs", "́’„" => "ssweon", "́’…" => "ssweonj",
+ "́’†" => "ssweonh", "́’‡" => "ssweod", "́’ˆ" => "ssweol", "́’‰" => "ssweolg", "́’" => "ssweolm", "́’‹" => "ssweolb",
+ "́’Œ" => "ssweols", "́’" => "ssweolt", "́’" => "ssweolp", "́’" => "ssweolh", "́’" => "ssweom", "́’‘" => "ssweob",
+ "́’’" => "ssweobs", "́’“" => "ssweos", "́’”" => "ssweoss", "́’•" => "ssweong", "́’–" => "ssweoj", "́’—" => "ssweoc",
+ "́’˜" => "ssweok", "́’™" => "ssweot", "́’" => "ssweop", "́’›" => "ssweoh", "́’œ" => "sswe", "́’" => "ssweg",
+ "́’" => "sswegg", "́’Ÿ" => "sswegs", "́’ " => "sswen", "́’¡" => "sswenj", "́’¢" => "sswenh", "́’£" => "sswed",
+ "́’¤" => "sswel", "́’¥" => "sswelg", "́’¦" => "sswelm", "́’§" => "sswelb", "́’¨" => "sswels", "́’©" => "sswelt",
+ "́’ª" => "sswelp", "́’«" => "sswelh", "́’¬" => "sswem", "́’" => "ssweb", "́’®" => "sswebs", "́’¯" => "sswes",
+ "́’°" => "sswess", "́’±" => "ssweng", "́’²" => "sswej", "́’³" => "sswec", "́’´" => "sswek", "́’µ" => "sswet",
+ "́’¶" => "sswep", "́’·" => "ssweh", "́’¸" => "sswi", "́’¹" => "sswig", "́’º" => "sswigg", "́’»" => "sswigs",
+ "́’¼" => "sswin", "́’½" => "sswinj", "́’¾" => "sswinh", "́’¿" => "sswid", "́“€" => "sswil", "́“" => "sswilg",
+ "́“‚" => "sswilm", "́“ƒ" => "sswilb", "́“„" => "sswils", "́“…" => "sswilt", "́“†" => "sswilp", "́“‡" => "sswilh",
+ "́“ˆ" => "sswim", "́“‰" => "sswib", "́“" => "sswibs", "́“‹" => "sswis", "́“Œ" => "sswiss", "́“" => "sswing",
+ "́“" => "sswij", "́“" => "sswic", "́“" => "sswik", "́“‘" => "sswit", "́“’" => "sswip", "́““" => "sswih",
+ "́“”" => "ssyu", "́“•" => "ssyug", "́“–" => "ssyugg", "́“—" => "ssyugs", "́“˜" => "ssyun", "́“™" => "ssyunj",
+ "́“" => "ssyunh", "́“›" => "ssyud", "́“œ" => "ssyul", "́“" => "ssyulg", "́“" => "ssyulm", "́“Ÿ" => "ssyulb",
+ "́“ " => "ssyuls", "́“¡" => "ssyult", "́“¢" => "ssyulp", "́“£" => "ssyulh", "́“¤" => "ssyum", "́“¥" => "ssyub",
+ "́“¦" => "ssyubs", "́“§" => "ssyus", "́“¨" => "ssyuss", "́“©" => "ssyung", "́“ª" => "ssyuj", "́“«" => "ssyuc",
+ "́“¬" => "ssyuk", "́“" => "ssyut", "́“®" => "ssyup", "́“¯" => "ssyuh", "́“°" => "sseu", "́“±" => "sseug",
+ "́“²" => "sseugg", "́“³" => "sseugs", "́“´" => "sseun", "́“µ" => "sseunj", "́“¶" => "sseunh", "́“·" => "sseud",
+ "́“¸" => "sseul", "́“¹" => "sseulg", "́“º" => "sseulm", "́“»" => "sseulb", "́“¼" => "sseuls", "́“½" => "sseult",
+ "́“¾" => "sseulp", "́“¿" => "sseulh", "́”" => "sseub", "́”‚" => "sseubs", "́”ƒ" => "sseus", "́”„" => "sseuss",
+ "́”…" => "sseung", "́”†" => "sseuj", "́”‡" => "sseuc", "́”ˆ" => "sseuk", "́”‰" => "sseut", "́”" => "sseup",
+ "́”‹" => "sseuh", "́”Œ" => "ssyi", "́”" => "ssyig", "́”" => "ssyigg", "́”" => "ssyigs", "́”" => "ssyin",
+ "́”‘" => "ssyinj", "́”’" => "ssyinh", "́”“" => "ssyid", "́””" => "ssyil", "́”•" => "ssyilg", "́”–" => "ssyilm",
+ "́”—" => "ssyilb", "́”˜" => "ssyils", "́”™" => "ssyilt", "́”" => "ssyilp", "́”›" => "ssyilh", "́”œ" => "ssyim",
+ "́”" => "ssyib", "́”" => "ssyibs", "́”Ÿ" => "ssyis", "́” " => "ssyiss", "́”¡" => "ssying", "́”¢" => "ssyij",
+ "́”£" => "ssyic", "́”¤" => "ssyik", "́”¥" => "ssyit", "́”¦" => "ssyip", "́”§" => "ssyih", "́”¨" => "ssi",
+ "́”©" => "ssig", "́”ª" => "ssigg", "́”«" => "ssigs", "́”¬" => "ssin", "́”" => "ssinj", "́”®" => "ssinh",
+ "́”¯" => "ssid", "́”°" => "ssil", "́”±" => "ssilg", "́”²" => "ssilm", "́”³" => "ssilb", "́”´" => "ssils",
+ "́”µ" => "ssilt", "́”¶" => "ssilp", "́”·" => "ssilh", "́”¸" => "ssim", "́”¹" => "ssib", "́”º" => "ssibs",
+ "́”»" => "ssis", "́”¼" => "ssiss", "́”½" => "ssing", "́”¾" => "ssij", "́”¿" => "ssic", "́•€" => "ssik",
+ "́•" => "ssit", "́•‚" => "ssip", "́•ƒ" => "ssih", "́•„" => "a", "́•…" => "ag", "́•†" => "agg",
+ "́•‡" => "ags", "́•ˆ" => "an", "́•‰" => "anj", "́•" => "anh", "́•‹" => "ad", "́•Œ" => "al",
+ "́•" => "alg", "́•" => "alm", "́•" => "alb", "́•" => "als", "́•‘" => "alt", "́•’" => "alp",
+ "́•“" => "alh", "́•”" => "am", "́••" => "ab", "́•–" => "abs", "́•—" => "as", "́•˜" => "ass",
+ "́•™" => "ang", "́•" => "aj", "́•›" => "ac", "́•œ" => "ak", "́•" => "at", "́•" => "ap",
+ "́•Ÿ" => "ah", "́• " => "ae", "́•¡" => "aeg", "́•¢" => "aegg", "́•£" => "aegs", "́•¤" => "aen",
+ "́•¥" => "aenj", "́•¦" => "aenh", "́•§" => "aed", "́•¨" => "ael", "́•©" => "aelg", "́•ª" => "aelm",
+ "́•«" => "aelb", "́•¬" => "aels", "́•" => "aelt", "́•®" => "aelp", "́•¯" => "aelh", "́•°" => "aem",
+ "́•±" => "aeb", "́•²" => "aebs", "́•³" => "aes", "́•´" => "aess", "́•µ" => "aeng", "́•¶" => "aej",
+ "́•·" => "aec", "́•¸" => "aek", "́•¹" => "aet", "́•º" => "aep", "́•»" => "aeh", "́•¼" => "ya",
+ "́•½" => "yag", "́•¾" => "yagg", "́•¿" => "yags", "́–€" => "yan", "́–" => "yanj", "́–‚" => "yanh",
+ "́–ƒ" => "yad", "́–„" => "yal", "́–…" => "yalg", "́–†" => "yalm", "́–‡" => "yalb", "́–ˆ" => "yals",
+ "́–‰" => "yalt", "́–" => "yalp", "́–‹" => "yalh", "́–Œ" => "yam", "́–" => "yab", "́–" => "yabs",
+ "́–" => "yas", "́–" => "yass", "́–‘" => "yang", "́–’" => "yaj", "́–“" => "yac", "́–”" => "yak",
+ "́–•" => "yat", "́––" => "yap", "́–—" => "yah", "́–˜" => "yae", "́–™" => "yaeg", "́–" => "yaegg",
+ "́–›" => "yaegs", "́–œ" => "yaen", "́–" => "yaenj", "́–" => "yaenh", "́–Ÿ" => "yaed", "́– " => "yael",
+ "́–¡" => "yaelg", "́–¢" => "yaelm", "́–£" => "yaelb", "́–¤" => "yaels", "́–¥" => "yaelt", "́–¦" => "yaelp",
+ "́–§" => "yaelh", "́–¨" => "yaem", "́–©" => "yaeb", "́–ª" => "yaebs", "́–«" => "yaes", "́–¬" => "yaess",
+ "́–" => "yaeng", "́–®" => "yaej", "́–¯" => "yaec", "́–°" => "yaek", "́–±" => "yaet", "́–²" => "yaep",
+ "́–³" => "yaeh", "́–´" => "eo", "́–µ" => "eog", "́–¶" => "eogg", "́–·" => "eogs", "́–¸" => "eon",
+ "́–¹" => "eonj", "́–º" => "eonh", "́–»" => "eod", "́–¼" => "eol", "́–½" => "eolg", "́–¾" => "eolm",
+ "́–¿" => "eolb", "́—€" => "eols", "́—" => "eolt", "́—‚" => "eolp", "́—ƒ" => "eolh", "́—„" => "eom",
+ "́—…" => "eob", "́—†" => "eobs", "́—‡" => "eos", "́—ˆ" => "eoss", "́—‰" => "eong", "́—" => "eoj",
+ "́—‹" => "eoc", "́—Œ" => "eok", "́—" => "eot", "́—" => "eop", "́—" => "eoh", "́—" => "e",
+ "́—‘" => "eg", "́—’" => "egg", "́—“" => "egs", "́—”" => "en", "́—•" => "enj", "́—–" => "enh",
+ "́——" => "ed", "́—˜" => "el", "́—™" => "elg", "́—" => "elm", "́—›" => "elb", "́—œ" => "els",
+ "́—" => "elt", "́—" => "elp", "́—Ÿ" => "elh", "́— " => "em", "́—¡" => "eb", "́—¢" => "ebs",
+ "́—£" => "es", "́—¤" => "ess", "́—¥" => "eng", "́—¦" => "ej", "́—§" => "ec", "́—¨" => "ek",
+ "́—©" => "et", "́—ª" => "ep", "́—«" => "eh", "́—¬" => "yeo", "́—" => "yeog", "́—®" => "yeogg",
+ "́—¯" => "yeogs", "́—°" => "yeon", "́—±" => "yeonj", "́—²" => "yeonh", "́—³" => "yeod", "́—´" => "yeol",
+ "́—µ" => "yeolg", "́—¶" => "yeolm", "́—·" => "yeolb", "́—¸" => "yeols", "́—¹" => "yeolt", "́—º" => "yeolp",
+ "́—»" => "yeolh", "́—¼" => "yeom", "́—½" => "yeob", "́—¾" => "yeobs", "́—¿" => "yeos", "́˜" => "yeong",
+ "́˜‚" => "yeoj", "́˜ƒ" => "yeoc", "́˜„" => "yeok", "́˜…" => "yeot", "́˜†" => "yeop", "́˜‡" => "yeoh",
+ "́˜ˆ" => "ye", "́˜‰" => "yeg", "́˜" => "yegg", "́˜‹" => "yegs", "́˜Œ" => "yen", "́˜" => "yenj",
+ "́˜" => "yenh", "́˜" => "yed", "́˜" => "yel", "́˜‘" => "yelg", "́˜’" => "yelm", "́˜“" => "yelb",
+ "́˜”" => "yels", "́˜•" => "yelt", "́˜–" => "yelp", "́˜—" => "yelh", "́˜˜" => "yem", "́˜™" => "yeb",
+ "́˜" => "yebs", "́˜›" => "yes", "́˜œ" => "yess", "́˜" => "yeng", "́˜" => "yej", "́˜Ÿ" => "yec",
+ "́˜ " => "yek", "́˜¡" => "yet", "́˜¢" => "yep", "́˜£" => "yeh", "́˜¤" => "o", "́˜¥" => "og",
+ "́˜¦" => "ogg", "́˜§" => "ogs", "́˜¨" => "on", "́˜©" => "onj", "́˜ª" => "onh", "́˜«" => "od",
+ "́˜¬" => "ol", "́˜" => "olg", "́˜®" => "olm", "́˜¯" => "olb", "́˜°" => "ols", "́˜±" => "olt",
+ "́˜²" => "olp", "́˜³" => "olh", "́˜´" => "om", "́˜µ" => "ob", "́˜¶" => "obs", "́˜·" => "os",
+ "́˜¸" => "oss", "́˜¹" => "ong", "́˜º" => "oj", "́˜»" => "oc", "́˜¼" => "ok", "́˜½" => "ot",
+ "́˜¾" => "op", "́˜¿" => "oh", "́™€" => "wa", "́™" => "wag", "́™‚" => "wagg", "́™ƒ" => "wags",
+ "́™„" => "wan", "́™…" => "wanj", "́™†" => "wanh", "́™‡" => "wad", "́™ˆ" => "wal", "́™‰" => "walg",
+ "́™" => "walm", "́™‹" => "walb", "́™Œ" => "wals", "́™" => "walt", "́™" => "walp", "́™" => "walh",
+ "́™" => "wam", "́™‘" => "wab", "́™’" => "wabs", "́™“" => "was", "́™”" => "wass", "́™•" => "wang",
+ "́™–" => "waj", "́™—" => "wac", "́™˜" => "wak", "́™™" => "wat", "́™" => "wap", "́™›" => "wah",
+ "́™œ" => "wae", "́™" => "waeg", "́™" => "waegg", "́™Ÿ" => "waegs", "́™ " => "waen", "́™¡" => "waenj",
+ "́™¢" => "waenh", "́™£" => "waed", "́™¤" => "wael", "́™¥" => "waelg", "́™¦" => "waelm", "́™§" => "waelb",
+ "́™¨" => "waels", "́™©" => "waelt", "́™ª" => "waelp", "́™«" => "waelh", "́™¬" => "waem", "́™" => "waeb",
+ "́™®" => "waebs", "́™¯" => "waes", "́™°" => "waess", "́™±" => "waeng", "́™²" => "waej", "́™³" => "waec",
+ "́™´" => "waek", "́™µ" => "waet", "́™¶" => "waep", "́™·" => "waeh", "́™¸" => "oe", "́™¹" => "oeg",
+ "́™º" => "oegg", "́™»" => "oegs", "́™¼" => "oen", "́™½" => "oenj", "́™¾" => "oenh", "́™¿" => "oed",
+ "́€" => "oel", "́" => "oelg", "́‚" => "oelm", "́ƒ" => "oelb", "́„" => "oels", "́…" => "oelt",
+ "́†" => "oelp", "́‡" => "oelh", "́ˆ" => "oem", "́‰" => "oeb", "́" => "oebs", "́‹" => "oes",
+ "́Œ" => "oess", "́" => "oeng", "́" => "oej", "́" => "oec", "́" => "oek", "́‘" => "oet",
+ "́’" => "oep", "́“" => "oeh", "́”" => "yo", "́•" => "yog", "́–" => "yogg", "́—" => "yogs",
+ "́˜" => "yon", "́™" => "yonj", "́" => "yonh", "́›" => "yod", "́œ" => "yol", "́" => "yolg",
+ "́" => "yolm", "́Ÿ" => "yolb", "́ " => "yols", "́¡" => "yolt", "́¢" => "yolp", "́£" => "yolh",
+ "́¤" => "yom", "́¥" => "yob", "́¦" => "yobs", "́§" => "yos", "́¨" => "yoss", "́©" => "yong",
+ "́ª" => "yoj", "́«" => "yoc", "́¬" => "yok", "́" => "yot", "́®" => "yop", "́¯" => "yoh",
+ "́°" => "u", "́±" => "ug", "́²" => "ugg", "́³" => "ugs", "́´" => "un", "́µ" => "unj",
+ "́¶" => "unh", "́·" => "ud", "́¸" => "ul", "́¹" => "ulg", "́º" => "ulm", "́»" => "ulb",
+ "́¼" => "uls", "́½" => "ult", "́¾" => "ulp", "́¿" => "ulh", "́›€" => "um", "́›" => "ub",
+ "́›‚" => "ubs", "́›ƒ" => "us", "́›„" => "uss", "́›…" => "ung", "́›†" => "uj", "́›‡" => "uc",
+ "́›ˆ" => "uk", "́›‰" => "ut", "́›" => "up", "́›‹" => "uh", "́›Œ" => "weo", "́›" => "weog",
+ "́›" => "weogg", "́›" => "weogs", "́›" => "weon", "́›‘" => "weonj", "́›’" => "weonh", "́›“" => "weod",
+ "́›”" => "weol", "́›•" => "weolg", "́›–" => "weolm", "́›—" => "weolb", "́›˜" => "weols", "́›™" => "weolt",
+ "́›" => "weolp", "́››" => "weolh", "́›œ" => "weom", "́›" => "weob", "́›" => "weobs", "́›Ÿ" => "weos",
+ "́› " => "weoss", "́›¡" => "weong", "́›¢" => "weoj", "́›£" => "weoc", "́›¤" => "weok", "́›¥" => "weot",
+ "́›¦" => "weop", "́›§" => "weoh", "́›¨" => "we", "́›©" => "weg", "́›ª" => "wegg", "́›«" => "wegs",
+ "́›¬" => "wen", "́›" => "wenj", "́›®" => "wenh", "́›¯" => "wed", "́›°" => "wel", "́›±" => "welg",
+ "́›²" => "welm", "́›³" => "welb", "́›´" => "wels", "́›µ" => "welt", "́›¶" => "welp", "́›·" => "welh",
+ "́›¸" => "wem", "́›¹" => "web", "́›º" => "webs", "́›»" => "wes", "́›¼" => "wess", "́›½" => "weng",
+ "́›¾" => "wej", "́›¿" => "wec", "́œ" => "wet", "́œ‚" => "wep", "́œƒ" => "weh", "́œ„" => "wi",
+ "́œ…" => "wig", "́œ†" => "wigg", "́œ‡" => "wigs", "́œˆ" => "win", "́œ‰" => "winj", "́œ" => "winh",
+ "́œ‹" => "wid", "́œŒ" => "wil", "́œ" => "wilg", "́œ" => "wilm", "́œ" => "wilb", "́œ" => "wils",
+ "́œ‘" => "wilt", "́œ’" => "wilp", "́œ“" => "wilh", "́œ”" => "wim", "́œ•" => "wib", "́œ–" => "wibs",
+ "́œ—" => "wis", "́œ˜" => "wiss", "́œ™" => "wing", "́œ" => "wij", "́œ›" => "wic", "́œœ" => "wik",
+ "́œ" => "wit", "́œ" => "wip", "́œŸ" => "wih", "́œ " => "yu", "́œ¡" => "yug", "́œ¢" => "yugg",
+ "́œ£" => "yugs", "́œ¤" => "yun", "́œ¥" => "yunj", "́œ¦" => "yunh", "́œ§" => "yud", "́œ¨" => "yul",
+ "́œ©" => "yulg", "́œª" => "yulm", "́œ«" => "yulb", "́œ¬" => "yuls", "́œ" => "yult", "́œ®" => "yulp",
+ "́œ¯" => "yulh", "́œ°" => "yum", "́œ±" => "yub", "́œ²" => "yubs", "́œ³" => "yus", "́œ´" => "yuss",
+ "́œµ" => "yung", "́œ¶" => "yuj", "́œ·" => "yuc", "́œ¸" => "yuk", "́œ¹" => "yut", "́œº" => "yup",
+ "́œ»" => "yuh", "́œ¼" => "eu", "́œ½" => "eug", "́œ¾" => "eugg", "́œ¿" => "eugs", "́€" => "eun",
+ "́" => "eunj", "́‚" => "eunh", "́ƒ" => "eud", "́„" => "eul", "́…" => "eulg", "́†" => "eulm",
+ "́‡" => "eulb", "́ˆ" => "euls", "́‰" => "eult", "́" => "eulp", "́‹" => "eulh", "́Œ" => "eum",
+ "́" => "eub", "́" => "eubs", "́" => "eus", "́" => "euss", "́‘" => "eung", "́’" => "euj",
+ "́“" => "euc", "́”" => "euk", "́•" => "eut", "́–" => "eup", "́—" => "euh", "́˜" => "yi",
+ "́™" => "yig", "́" => "yigg", "́›" => "yigs", "́œ" => "yin", "́" => "yinj", "́" => "yinh",
+ "́Ÿ" => "yid", "́ " => "yil", "́¡" => "yilg", "́¢" => "yilm", "́£" => "yilb", "́¤" => "yils",
+ "́¥" => "yilt", "́¦" => "yilp", "́§" => "yilh", "́¨" => "yim", "́©" => "yib", "́ª" => "yibs",
+ "́«" => "yis", "́¬" => "yiss", "́" => "ying", "́®" => "yij", "́¯" => "yic", "́°" => "yik",
+ "́±" => "yit", "́²" => "yip", "́³" => "yih", "́´" => "i", "́µ" => "ig", "́¶" => "igg",
+ "́·" => "igs", "́¸" => "in", "́¹" => "inj", "́º" => "inh", "́»" => "id", "́¼" => "il",
+ "́½" => "ilg", "́¾" => "ilm", "́¿" => "ilb", "́€" => "ils", "́" => "ilt", "́‚" => "ilp",
+ "́ƒ" => "ilh", "́„" => "im", "́…" => "ib", "́†" => "ibs", "́‡" => "is", "́ˆ" => "iss",
+ "́‰" => "ing", "́" => "ij", "́‹" => "ic", "́Œ" => "ik", "́" => "it", "́" => "ip",
+ "́" => "ih", "́" => "ja", "́‘" => "jag", "́’" => "jagg", "́“" => "jags", "́”" => "jan",
+ "́•" => "janj", "́–" => "janh", "́—" => "jad", "́˜" => "jal", "́™" => "jalg", "́" => "jalm",
+ "́›" => "jalb", "́œ" => "jals", "́" => "jalt", "́" => "jalp", "́Ÿ" => "jalh", "́ " => "jam",
+ "́¡" => "jab", "́¢" => "jabs", "́£" => "jas", "́¤" => "jass", "́¥" => "jang", "́¦" => "jaj",
+ "́§" => "jac", "́¨" => "jak", "́©" => "jat", "́ª" => "jap", "́«" => "jah", "́¬" => "jae",
+ "́" => "jaeg", "́®" => "jaegg", "́¯" => "jaegs", "́°" => "jaen", "́±" => "jaenj", "́²" => "jaenh",
+ "́³" => "jaed", "́´" => "jael", "́µ" => "jaelg", "́¶" => "jaelm", "́·" => "jaelb", "́¸" => "jaels",
+ "́¹" => "jaelt", "́º" => "jaelp", "́»" => "jaelh", "́¼" => "jaem", "́½" => "jaeb", "́¾" => "jaebs",
+ "́¿" => "jaes", "́Ÿ€" => "jaess", "́Ÿ" => "jaeng", "́Ÿ‚" => "jaej", "́Ÿƒ" => "jaec", "́Ÿ„" => "jaek",
+ "́Ÿ…" => "jaet", "́Ÿ†" => "jaep", "́Ÿ‡" => "jaeh", "́Ÿˆ" => "jya", "́Ÿ‰" => "jyag", "́Ÿ" => "jyagg",
+ "́Ÿ‹" => "jyags", "́ŸŒ" => "jyan", "́Ÿ" => "jyanj", "́Ÿ" => "jyanh", "́Ÿ" => "jyad", "́Ÿ" => "jyal",
+ "́Ÿ‘" => "jyalg", "́Ÿ’" => "jyalm", "́Ÿ“" => "jyalb", "́Ÿ”" => "jyals", "́Ÿ•" => "jyalt", "́Ÿ–" => "jyalp",
+ "́Ÿ—" => "jyalh", "́Ÿ˜" => "jyam", "́Ÿ™" => "jyab", "́Ÿ" => "jyabs", "́Ÿ›" => "jyas", "́Ÿœ" => "jyass",
+ "́Ÿ" => "jyang", "́Ÿ" => "jyaj", "́ŸŸ" => "jyac", "́Ÿ " => "jyak", "́Ÿ¡" => "jyat", "́Ÿ¢" => "jyap",
+ "́Ÿ£" => "jyah", "́Ÿ¤" => "jyae", "́Ÿ¥" => "jyaeg", "́Ÿ¦" => "jyaegg", "́Ÿ§" => "jyaegs", "́Ÿ¨" => "jyaen",
+ "́Ÿ©" => "jyaenj", "́Ÿª" => "jyaenh", "́Ÿ«" => "jyaed", "́Ÿ¬" => "jyael", "́Ÿ" => "jyaelg", "́Ÿ®" => "jyaelm",
+ "́Ÿ¯" => "jyaelb", "́Ÿ°" => "jyaels", "́Ÿ±" => "jyaelt", "́Ÿ²" => "jyaelp", "́Ÿ³" => "jyaelh", "́Ÿ´" => "jyaem",
+ "́Ÿµ" => "jyaeb", "́Ÿ¶" => "jyaebs", "́Ÿ·" => "jyaes", "́Ÿ¸" => "jyaess", "́Ÿ¹" => "jyaeng", "́Ÿº" => "jyaej",
+ "́Ÿ»" => "jyaec", "́Ÿ¼" => "jyaek", "́Ÿ½" => "jyaet", "́Ÿ¾" => "jyaep", "́Ÿ¿" => "jyaeh", "́ " => "jeog",
+ "́ ‚" => "jeogg", "́ ƒ" => "jeogs", "́ „" => "jeon", "́ …" => "jeonj", "́ †" => "jeonh", "́ ‡" => "jeod",
+ "́ ˆ" => "jeol", "́ ‰" => "jeolg", "́ " => "jeolm", "́ ‹" => "jeolb", "́ Œ" => "jeols", "́ " => "jeolt",
+ "́ " => "jeolp", "́ " => "jeolh", "́ " => "jeom", "́ ‘" => "jeob", "́ ’" => "jeobs", "́ “" => "jeos",
+ "́ ”" => "jeoss", "́ •" => "jeong", "́ –" => "jeoj", "́ —" => "jeoc", "́ ˜" => "jeok", "́ ™" => "jeot",
+ "́ " => "jeop", "́ ›" => "jeoh", "́ œ" => "je", "́ " => "jeg", "́ " => "jegg", "́ Ÿ" => "jegs",
+ "́ " => "jen", "́ ¡" => "jenj", "́ ¢" => "jenh", "́ £" => "jed", "́ ¤" => "jel", "́ ¥" => "jelg",
+ "́ ¦" => "jelm", "́ §" => "jelb", "́ ¨" => "jels", "́ ©" => "jelt", "́ ª" => "jelp", "́ «" => "jelh",
+ "́ ¬" => "jem", "́ " => "jeb", "́ ®" => "jebs", "́ ¯" => "jes", "́ °" => "jess", "́ ±" => "jeng",
+ "́ ²" => "jej", "́ ³" => "jec", "́ ´" => "jek", "́ µ" => "jet", "́ ¶" => "jep", "́ ·" => "jeh",
+ "́ ¸" => "jyeo", "́ ¹" => "jyeog", "́ º" => "jyeogg", "́ »" => "jyeogs", "́ ¼" => "jyeon", "́ ½" => "jyeonj",
+ "́ ¾" => "jyeonh", "́ ¿" => "jyeod", "́¡€" => "jyeol", "́¡" => "jyeolg", "́¡‚" => "jyeolm", "́¡ƒ" => "jyeolb",
+ "́¡„" => "jyeols", "́¡…" => "jyeolt", "́¡†" => "jyeolp", "́¡‡" => "jyeolh", "́¡ˆ" => "jyeom", "́¡‰" => "jyeob",
+ "́¡" => "jyeobs", "́¡‹" => "jyeos", "́¡Œ" => "jyeoss", "́¡" => "jyeong", "́¡" => "jyeoj", "́¡" => "jyeoc",
+ "́¡" => "jyeok", "́¡‘" => "jyeot", "́¡’" => "jyeop", "́¡“" => "jyeoh", "́¡”" => "jye", "́¡•" => "jyeg",
+ "́¡–" => "jyegg", "́¡—" => "jyegs", "́¡˜" => "jyen", "́¡™" => "jyenj", "́¡" => "jyenh", "́¡›" => "jyed",
+ "́¡œ" => "jyel", "́¡" => "jyelg", "́¡" => "jyelm", "́¡Ÿ" => "jyelb", "́¡ " => "jyels", "́¡¡" => "jyelt",
+ "́¡¢" => "jyelp", "́¡£" => "jyelh", "́¡¤" => "jyem", "́¡¥" => "jyeb", "́¡¦" => "jyebs", "́¡§" => "jyes",
+ "́¡¨" => "jyess", "́¡©" => "jyeng", "́¡ª" => "jyej", "́¡«" => "jyec", "́¡¬" => "jyek", "́¡" => "jyet",
+ "́¡®" => "jyep", "́¡¯" => "jyeh", "́¡°" => "jo", "́¡±" => "jog", "́¡²" => "jogg", "́¡³" => "jogs",
+ "́¡´" => "jon", "́¡µ" => "jonj", "́¡¶" => "jonh", "́¡·" => "jod", "́¡¸" => "jol", "́¡¹" => "jolg",
+ "́¡º" => "jolm", "́¡»" => "jolb", "́¡¼" => "jols", "́¡½" => "jolt", "́¡¾" => "jolp", "́¡¿" => "jolh",
+ "́¢€" => "jom", "́¢" => "job", "́¢‚" => "jobs", "́¢ƒ" => "jos", "́¢„" => "joss", "́¢…" => "jong",
+ "́¢†" => "joj", "́¢‡" => "joc", "́¢ˆ" => "jok", "́¢‰" => "jot", "́¢" => "jop", "́¢‹" => "joh",
+ "́¢Œ" => "jwa", "́¢" => "jwag", "́¢" => "jwagg", "́¢" => "jwags", "́¢" => "jwan", "́¢‘" => "jwanj",
+ "́¢’" => "jwanh", "́¢“" => "jwad", "́¢”" => "jwal", "́¢•" => "jwalg", "́¢–" => "jwalm", "́¢—" => "jwalb",
+ "́¢˜" => "jwals", "́¢™" => "jwalt", "́¢" => "jwalp", "́¢›" => "jwalh", "́¢œ" => "jwam", "́¢" => "jwab",
+ "́¢" => "jwabs", "́¢Ÿ" => "jwas", "́¢ " => "jwass", "́¢¡" => "jwang", "́¢¢" => "jwaj", "́¢£" => "jwac",
+ "́¢¤" => "jwak", "́¢¥" => "jwat", "́¢¦" => "jwap", "́¢§" => "jwah", "́¢¨" => "jwae", "́¢©" => "jwaeg",
+ "́¢ª" => "jwaegg", "́¢«" => "jwaegs", "́¢¬" => "jwaen", "́¢" => "jwaenj", "́¢®" => "jwaenh", "́¢¯" => "jwaed",
+ "́¢°" => "jwael", "́¢±" => "jwaelg", "́¢²" => "jwaelm", "́¢³" => "jwaelb", "́¢´" => "jwaels", "́¢µ" => "jwaelt",
+ "́¢¶" => "jwaelp", "́¢·" => "jwaelh", "́¢¸" => "jwaem", "́¢¹" => "jwaeb", "́¢º" => "jwaebs", "́¢»" => "jwaes",
+ "́¢¼" => "jwaess", "́¢½" => "jwaeng", "́¢¾" => "jwaej", "́¢¿" => "jwaec", "́£€" => "jwaek", "́£" => "jwaet",
+ "́£‚" => "jwaep", "́£ƒ" => "jwaeh", "́£„" => "joe", "́£…" => "joeg", "́£†" => "joegg", "́£‡" => "joegs",
+ "́£ˆ" => "joen", "́£‰" => "joenj", "́£" => "joenh", "́£‹" => "joed", "́£Œ" => "joel", "́£" => "joelg",
+ "́£" => "joelm", "́£" => "joelb", "́£" => "joels", "́£‘" => "joelt", "́£’" => "joelp", "́£“" => "joelh",
+ "́£”" => "joem", "́£•" => "joeb", "́£–" => "joebs", "́£—" => "joes", "́£˜" => "joess", "́£™" => "joeng",
+ "́£" => "joej", "́£›" => "joec", "́£œ" => "joek", "́£" => "joet", "́£" => "joep", "́£Ÿ" => "joeh",
+ "́£ " => "jyo", "́£¡" => "jyog", "́£¢" => "jyogg", "́££" => "jyogs", "́£¤" => "jyon", "́£¥" => "jyonj",
+ "́£¦" => "jyonh", "́£§" => "jyod", "́£¨" => "jyol", "́£©" => "jyolg", "́£ª" => "jyolm", "́£«" => "jyolb",
+ "́£¬" => "jyols", "́£" => "jyolt", "́£®" => "jyolp", "́£¯" => "jyolh", "́£°" => "jyom", "́£±" => "jyob",
+ "́£²" => "jyobs", "́£³" => "jyos", "́£´" => "jyoss", "́£µ" => "jyong", "́£¶" => "jyoj", "́£·" => "jyoc",
+ "́£¸" => "jyok", "́£¹" => "jyot", "́£º" => "jyop", "́£»" => "jyoh", "́£¼" => "ju", "́£½" => "jug",
+ "́£¾" => "jugg", "́£¿" => "jugs", "́¤" => "junj", "́¤‚" => "junh", "́¤ƒ" => "jud", "́¤„" => "jul",
+ "́¤…" => "julg", "́¤†" => "julm", "́¤‡" => "julb", "́¤ˆ" => "juls", "́¤‰" => "jult", "́¤" => "julp",
+ "́¤‹" => "julh", "́¤Œ" => "jum", "́¤" => "jub", "́¤" => "jubs", "́¤" => "jus", "́¤" => "juss",
+ "́¤‘" => "jung", "́¤’" => "juj", "́¤“" => "juc", "́¤”" => "juk", "́¤•" => "jut", "́¤–" => "jup",
+ "́¤—" => "juh", "́¤˜" => "jweo", "́¤™" => "jweog", "́¤" => "jweogg", "́¤›" => "jweogs", "́¤œ" => "jweon",
+ "́¤" => "jweonj", "́¤" => "jweonh", "́¤Ÿ" => "jweod", "́¤ " => "jweol", "́¤¡" => "jweolg", "́¤¢" => "jweolm",
+ "́¤£" => "jweolb", "́¤¤" => "jweols", "́¤¥" => "jweolt", "́¤¦" => "jweolp", "́¤§" => "jweolh", "́¤¨" => "jweom",
+ "́¤©" => "jweob", "́¤ª" => "jweobs", "́¤«" => "jweos", "́¤¬" => "jweoss", "́¤" => "jweong", "́¤®" => "jweoj",
+ "́¤¯" => "jweoc", "́¤°" => "jweok", "́¤±" => "jweot", "́¤²" => "jweop", "́¤³" => "jweoh", "́¤´" => "jwe",
+ "́¤µ" => "jweg", "́¤¶" => "jwegg", "́¤·" => "jwegs", "́¤¸" => "jwen", "́¤¹" => "jwenj", "́¤º" => "jwenh",
+ "́¤»" => "jwed", "́¤¼" => "jwel", "́¤½" => "jwelg", "́¤¾" => "jwelm", "́¤¿" => "jwelb", "́¥€" => "jwels",
+ "́¥" => "jwelt", "́¥‚" => "jwelp", "́¥ƒ" => "jwelh", "́¥„" => "jwem", "́¥…" => "jweb", "́¥†" => "jwebs",
+ "́¥‡" => "jwes", "́¥ˆ" => "jwess", "́¥‰" => "jweng", "́¥" => "jwej", "́¥‹" => "jwec", "́¥Œ" => "jwek",
+ "́¥" => "jwet", "́¥" => "jwep", "́¥" => "jweh", "́¥" => "jwi", "́¥‘" => "jwig", "́¥’" => "jwigg",
+ "́¥“" => "jwigs", "́¥”" => "jwin", "́¥•" => "jwinj", "́¥–" => "jwinh", "́¥—" => "jwid", "́¥˜" => "jwil",
+ "́¥™" => "jwilg", "́¥" => "jwilm", "́¥›" => "jwilb", "́¥œ" => "jwils", "́¥" => "jwilt", "́¥" => "jwilp",
+ "́¥Ÿ" => "jwilh", "́¥ " => "jwim", "́¥¡" => "jwib", "́¥¢" => "jwibs", "́¥£" => "jwis", "́¥¤" => "jwiss",
+ "́¥¥" => "jwing", "́¥¦" => "jwij", "́¥§" => "jwic", "́¥¨" => "jwik", "́¥©" => "jwit", "́¥ª" => "jwip",
+ "́¥«" => "jwih", "́¥¬" => "jyu", "́¥" => "jyug", "́¥®" => "jyugg", "́¥¯" => "jyugs", "́¥°" => "jyun",
+ "́¥±" => "jyunj", "́¥²" => "jyunh", "́¥³" => "jyud", "́¥´" => "jyul", "́¥µ" => "jyulg", "́¥¶" => "jyulm",
+ "́¥·" => "jyulb", "́¥¸" => "jyuls", "́¥¹" => "jyult", "́¥º" => "jyulp", "́¥»" => "jyulh", "́¥¼" => "jyum",
+ "́¥½" => "jyub", "́¥¾" => "jyubs", "́¥¿" => "jyus", "́¦€" => "jyuss", "́¦" => "jyung", "́¦‚" => "jyuj",
+ "́¦ƒ" => "jyuc", "́¦„" => "jyuk", "́¦…" => "jyut", "́¦†" => "jyup", "́¦‡" => "jyuh", "́¦ˆ" => "jeu",
+ "́¦‰" => "jeug", "́¦" => "jeugg", "́¦‹" => "jeugs", "́¦Œ" => "jeun", "́¦" => "jeunj", "́¦" => "jeunh",
+ "́¦" => "jeud", "́¦" => "jeul", "́¦‘" => "jeulg", "́¦’" => "jeulm", "́¦“" => "jeulb", "́¦”" => "jeuls",
+ "́¦•" => "jeult", "́¦–" => "jeulp", "́¦—" => "jeulh", "́¦˜" => "jeum", "́¦™" => "jeub", "́¦" => "jeubs",
+ "́¦›" => "jeus", "́¦œ" => "jeuss", "́¦" => "jeung", "́¦" => "jeuj", "́¦Ÿ" => "jeuc", "́¦ " => "jeuk",
+ "́¦¡" => "jeut", "́¦¢" => "jeup", "́¦£" => "jeuh", "́¦¤" => "jyi", "́¦¥" => "jyig", "́¦¦" => "jyigg",
+ "́¦§" => "jyigs", "́¦¨" => "jyin", "́¦©" => "jyinj", "́¦ª" => "jyinh", "́¦«" => "jyid", "́¦¬" => "jyil",
+ "́¦" => "jyilg", "́¦®" => "jyilm", "́¦¯" => "jyilb", "́¦°" => "jyils", "́¦±" => "jyilt", "́¦²" => "jyilp",
+ "́¦³" => "jyilh", "́¦´" => "jyim", "́¦µ" => "jyib", "́¦¶" => "jyibs", "́¦·" => "jyis", "́¦¸" => "jyiss",
+ "́¦¹" => "jying", "́¦º" => "jyij", "́¦»" => "jyic", "́¦¼" => "jyik", "́¦½" => "jyit", "́¦¾" => "jyip",
+ "́¦¿" => "jyih", "́§€" => "ji", "́§" => "jig", "́§‚" => "jigg", "́§ƒ" => "jigs", "́§„" => "jin",
+ "́§…" => "jinj", "́§†" => "jinh", "́§‡" => "jid", "́§ˆ" => "jil", "́§‰" => "jilg", "́§" => "jilm",
+ "́§‹" => "jilb", "́§Œ" => "jils", "́§" => "jilt", "́§" => "jilp", "́§" => "jilh", "́§" => "jim",
+ "́§‘" => "jib", "́§’" => "jibs", "́§“" => "jis", "́§”" => "jiss", "́§•" => "jing", "́§–" => "jij",
+ "́§—" => "jic", "́§˜" => "jik", "́§™" => "jit", "́§" => "jip", "́§›" => "jih", "́§œ" => "jja",
+ "́§" => "jjag", "́§" => "jjagg", "́§Ÿ" => "jjags", "́§ " => "jjan", "́§¡" => "jjanj", "́§¢" => "jjanh",
+ "́§£" => "jjad", "́§¤" => "jjal", "́§¥" => "jjalg", "́§¦" => "jjalm", "́§§" => "jjalb", "́§¨" => "jjals",
+ "́§©" => "jjalt", "́§ª" => "jjalp", "́§«" => "jjalh", "́§¬" => "jjam", "́§" => "jjab", "́§®" => "jjabs",
+ "́§¯" => "jjas", "́§°" => "jjass", "́§±" => "jjang", "́§²" => "jjaj", "́§³" => "jjac", "́§´" => "jjak",
+ "́§µ" => "jjat", "́§¶" => "jjap", "́§·" => "jjah", "́§¸" => "jjae", "́§¹" => "jjaeg", "́§º" => "jjaegg",
+ "́§»" => "jjaegs", "́§¼" => "jjaen", "́§½" => "jjaenj", "́§¾" => "jjaenh", "́§¿" => "jjaed", "́¨" => "jjaelg",
+ "́¨‚" => "jjaelm", "́¨ƒ" => "jjaelb", "́¨„" => "jjaels", "́¨…" => "jjaelt", "́¨†" => "jjaelp", "́¨‡" => "jjaelh",
+ "́¨ˆ" => "jjaem", "́¨‰" => "jjaeb", "́¨" => "jjaebs", "́¨‹" => "jjaes", "́¨Œ" => "jjaess", "́¨" => "jjaeng",
+ "́¨" => "jjaej", "́¨" => "jjaec", "́¨" => "jjaek", "́¨‘" => "jjaet", "́¨’" => "jjaep", "́¨“" => "jjaeh",
+ "́¨”" => "jjya", "́¨•" => "jjyag", "́¨–" => "jjyagg", "́¨—" => "jjyags", "́¨˜" => "jjyan", "́¨™" => "jjyanj",
+ "́¨" => "jjyanh", "́¨›" => "jjyad", "́¨œ" => "jjyal", "́¨" => "jjyalg", "́¨" => "jjyalm", "́¨Ÿ" => "jjyalb",
+ "́¨ " => "jjyals", "́¨¡" => "jjyalt", "́¨¢" => "jjyalp", "́¨£" => "jjyalh", "́¨¤" => "jjyam", "́¨¥" => "jjyab",
+ "́¨¦" => "jjyabs", "́¨§" => "jjyas", "́¨¨" => "jjyass", "́¨©" => "jjyang", "́¨ª" => "jjyaj", "́¨«" => "jjyac",
+ "́¨¬" => "jjyak", "́¨" => "jjyat", "́¨®" => "jjyap", "́¨¯" => "jjyah", "́¨°" => "jjyae", "́¨±" => "jjyaeg",
+ "́¨²" => "jjyaegg", "́¨³" => "jjyaegs", "́¨´" => "jjyaen", "́¨µ" => "jjyaenj", "́¨¶" => "jjyaenh", "́¨·" => "jjyaed",
+ "́¨¸" => "jjyael", "́¨¹" => "jjyaelg", "́¨º" => "jjyaelm", "́¨»" => "jjyaelb", "́¨¼" => "jjyaels", "́¨½" => "jjyaelt",
+ "́¨¾" => "jjyaelp", "́¨¿" => "jjyaelh", "́©€" => "jjyaem", "́©" => "jjyaeb", "́©‚" => "jjyaebs", "́©ƒ" => "jjyaes",
+ "́©„" => "jjyaess", "́©…" => "jjyaeng", "́©†" => "jjyaej", "́©‡" => "jjyaec", "́©ˆ" => "jjyaek", "́©‰" => "jjyaet",
+ "́©" => "jjyaep", "́©‹" => "jjyaeh", "́©Œ" => "jjeo", "́©" => "jjeog", "́©" => "jjeogg", "́©" => "jjeogs",
+ "́©" => "jjeon", "́©‘" => "jjeonj", "́©’" => "jjeonh", "́©“" => "jjeod", "́©”" => "jjeol", "́©•" => "jjeolg",
+ "́©–" => "jjeolm", "́©—" => "jjeolb", "́©˜" => "jjeols", "́©™" => "jjeolt", "́©" => "jjeolp", "́©›" => "jjeolh",
+ "́©œ" => "jjeom", "́©" => "jjeob", "́©" => "jjeobs", "́©Ÿ" => "jjeos", "́© " => "jjeoss", "́©¡" => "jjeong",
+ "́©¢" => "jjeoj", "́©£" => "jjeoc", "́©¤" => "jjeok", "́©¥" => "jjeot", "́©¦" => "jjeop", "́©§" => "jjeoh",
+ "́©¨" => "jje", "́©©" => "jjeg", "́©ª" => "jjegg", "́©«" => "jjegs", "́©¬" => "jjen", "́©" => "jjenj",
+ "́©®" => "jjenh", "́©¯" => "jjed", "́©°" => "jjel", "́©±" => "jjelg", "́©²" => "jjelm", "́©³" => "jjelb",
+ "́©´" => "jjels", "́©µ" => "jjelt", "́©¶" => "jjelp", "́©·" => "jjelh", "́©¸" => "jjem", "́©¹" => "jjeb",
+ "́©º" => "jjebs", "́©»" => "jjes", "́©¼" => "jjess", "́©½" => "jjeng", "́©¾" => "jjej", "́©¿" => "jjec",
+ "́ª€" => "jjek", "́ª" => "jjet", "́ª‚" => "jjep", "́ªƒ" => "jjeh", "́ª„" => "jjyeo", "́ª…" => "jjyeog",
+ "́ª†" => "jjyeogg", "́ª‡" => "jjyeogs", "́ªˆ" => "jjyeon", "́ª‰" => "jjyeonj", "́ª" => "jjyeonh", "́ª‹" => "jjyeod",
+ "́ªŒ" => "jjyeol", "́ª" => "jjyeolg", "́ª" => "jjyeolm", "́ª" => "jjyeolb", "́ª" => "jjyeols", "́ª‘" => "jjyeolt",
+ "́ª’" => "jjyeolp", "́ª“" => "jjyeolh", "́ª”" => "jjyeom", "́ª•" => "jjyeob", "́ª–" => "jjyeobs", "́ª—" => "jjyeos",
+ "́ª˜" => "jjyeoss", "́ª™" => "jjyeong", "́ª" => "jjyeoj", "́ª›" => "jjyeoc", "́ªœ" => "jjyeok", "́ª" => "jjyeot",
+ "́ª" => "jjyeop", "́ªŸ" => "jjyeoh", "́ª " => "jjye", "́ª¡" => "jjyeg", "́ª¢" => "jjyegg", "́ª£" => "jjyegs",
+ "́ª¤" => "jjyen", "́ª¥" => "jjyenj", "́ª¦" => "jjyenh", "́ª§" => "jjyed", "́ª¨" => "jjyel", "́ª©" => "jjyelg",
+ "́ªª" => "jjyelm", "́ª«" => "jjyelb", "́ª¬" => "jjyels", "́ª" => "jjyelt", "́ª®" => "jjyelp", "́ª¯" => "jjyelh",
+ "́ª°" => "jjyem", "́ª±" => "jjyeb", "́ª²" => "jjyebs", "́ª³" => "jjyes", "́ª´" => "jjyess", "́ªµ" => "jjyeng",
+ "́ª¶" => "jjyej", "́ª·" => "jjyec", "́ª¸" => "jjyek", "́ª¹" => "jjyet", "́ªº" => "jjyep", "́ª»" => "jjyeh",
+ "́ª¼" => "jjo", "́ª½" => "jjog", "́ª¾" => "jjogg", "́ª¿" => "jjogs", "́«€" => "jjon", "́«" => "jjonj",
+ "́«‚" => "jjonh", "́«ƒ" => "jjod", "́«„" => "jjol", "́«…" => "jjolg", "́«†" => "jjolm", "́«‡" => "jjolb",
+ "́«ˆ" => "jjols", "́«‰" => "jjolt", "́«" => "jjolp", "́«‹" => "jjolh", "́«Œ" => "jjom", "́«" => "jjob",
+ "́«" => "jjobs", "́«" => "jjos", "́«" => "jjoss", "́«‘" => "jjong", "́«’" => "jjoj", "́«“" => "jjoc",
+ "́«”" => "jjok", "́«•" => "jjot", "́«–" => "jjop", "́«—" => "jjoh", "́«˜" => "jjwa", "́«™" => "jjwag",
+ "́«" => "jjwagg", "́«›" => "jjwags", "́«œ" => "jjwan", "́«" => "jjwanj", "́«" => "jjwanh", "́«Ÿ" => "jjwad",
+ "́« " => "jjwal", "́«¡" => "jjwalg", "́«¢" => "jjwalm", "́«£" => "jjwalb", "́«¤" => "jjwals", "́«¥" => "jjwalt",
+ "́«¦" => "jjwalp", "́«§" => "jjwalh", "́«¨" => "jjwam", "́«©" => "jjwab", "́«ª" => "jjwabs", "́««" => "jjwas",
+ "́«¬" => "jjwass", "́«" => "jjwang", "́«®" => "jjwaj", "́«¯" => "jjwac", "́«°" => "jjwak", "́«±" => "jjwat",
+ "́«²" => "jjwap", "́«³" => "jjwah", "́«´" => "jjwae", "́«µ" => "jjwaeg", "́«¶" => "jjwaegg", "́«·" => "jjwaegs",
+ "́«¸" => "jjwaen", "́«¹" => "jjwaenj", "́«º" => "jjwaenh", "́«»" => "jjwaed", "́«¼" => "jjwael", "́«½" => "jjwaelg",
+ "́«¾" => "jjwaelm", "́«¿" => "jjwaelb", "́¬" => "jjwaelt", "́¬‚" => "jjwaelp", "́¬ƒ" => "jjwaelh", "́¬„" => "jjwaem",
+ "́¬…" => "jjwaeb", "́¬†" => "jjwaebs", "́¬‡" => "jjwaes", "́¬ˆ" => "jjwaess", "́¬‰" => "jjwaeng", "́¬" => "jjwaej",
+ "́¬‹" => "jjwaec", "́¬Œ" => "jjwaek", "́¬" => "jjwaet", "́¬" => "jjwaep", "́¬" => "jjwaeh", "́¬" => "jjoe",
+ "́¬‘" => "jjoeg", "́¬’" => "jjoegg", "́¬“" => "jjoegs", "́¬”" => "jjoen", "́¬•" => "jjoenj", "́¬–" => "jjoenh",
+ "́¬—" => "jjoed", "́¬˜" => "jjoel", "́¬™" => "jjoelg", "́¬" => "jjoelm", "́¬›" => "jjoelb", "́¬œ" => "jjoels",
+ "́¬" => "jjoelt", "́¬" => "jjoelp", "́¬Ÿ" => "jjoelh", "́¬ " => "jjoem", "́¬¡" => "jjoeb", "́¬¢" => "jjoebs",
+ "́¬£" => "jjoes", "́¬¤" => "jjoess", "́¬¥" => "jjoeng", "́¬¦" => "jjoej", "́¬§" => "jjoec", "́¬¨" => "jjoek",
+ "́¬©" => "jjoet", "́¬ª" => "jjoep", "́¬«" => "jjoeh", "́¬¬" => "jjyo", "́¬" => "jjyog", "́¬®" => "jjyogg",
+ "́¬¯" => "jjyogs", "́¬°" => "jjyon", "́¬±" => "jjyonj", "́¬²" => "jjyonh", "́¬³" => "jjyod", "́¬´" => "jjyol",
+ "́¬µ" => "jjyolg", "́¬¶" => "jjyolm", "́¬·" => "jjyolb", "́¬¸" => "jjyols", "́¬¹" => "jjyolt", "́¬º" => "jjyolp",
+ "́¬»" => "jjyolh", "́¬¼" => "jjyom", "́¬½" => "jjyob", "́¬¾" => "jjyobs", "́¬¿" => "jjyos", "́€" => "jjyoss",
+ "́" => "jjyong", "́‚" => "jjyoj", "́ƒ" => "jjyoc", "́„" => "jjyok", "́…" => "jjyot", "́†" => "jjyop",
+ "́‡" => "jjyoh", "́ˆ" => "jju", "́‰" => "jjug", "́" => "jjugg", "́‹" => "jjugs", "́Œ" => "jjun",
+ "́" => "jjunj", "́" => "jjunh", "́" => "jjud", "́" => "jjul", "́‘" => "jjulg", "́’" => "jjulm",
+ "́“" => "jjulb", "́”" => "jjuls", "́•" => "jjult", "́–" => "jjulp", "́—" => "jjulh", "́˜" => "jjum",
+ "́™" => "jjub", "́" => "jjubs", "́›" => "jjus", "́œ" => "jjuss", "́" => "jjung", "́" => "jjuj",
+ "́Ÿ" => "jjuc", "́ " => "jjuk", "́¡" => "jjut", "́¢" => "jjup", "́£" => "jjuh", "́¤" => "jjweo",
+ "́¥" => "jjweog", "́¦" => "jjweogg", "́§" => "jjweogs", "́¨" => "jjweon", "́©" => "jjweonj", "́ª" => "jjweonh",
+ "́«" => "jjweod", "́¬" => "jjweol", "́" => "jjweolg", "́®" => "jjweolm", "́¯" => "jjweolb", "́°" => "jjweols",
+ "́±" => "jjweolt", "́²" => "jjweolp", "́³" => "jjweolh", "́´" => "jjweom", "́µ" => "jjweob", "́¶" => "jjweobs",
+ "́·" => "jjweos", "́¸" => "jjweoss", "́¹" => "jjweong", "́º" => "jjweoj", "́»" => "jjweoc", "́¼" => "jjweok",
+ "́½" => "jjweot", "́¾" => "jjweop", "́¿" => "jjweoh", "́®€" => "jjwe", "́®" => "jjweg", "́®‚" => "jjwegg",
+ "́®ƒ" => "jjwegs", "́®„" => "jjwen", "́®…" => "jjwenj", "́®†" => "jjwenh", "́®‡" => "jjwed", "́®ˆ" => "jjwel",
+ "́®‰" => "jjwelg", "́®" => "jjwelm", "́®‹" => "jjwelb", "́®Œ" => "jjwels", "́®" => "jjwelt", "́®" => "jjwelp",
+ "́®" => "jjwelh", "́®" => "jjwem", "́®‘" => "jjweb", "́®’" => "jjwebs", "́®“" => "jjwes", "́®”" => "jjwess",
+ "́®•" => "jjweng", "́®–" => "jjwej", "́®—" => "jjwec", "́®˜" => "jjwek", "́®™" => "jjwet", "́®" => "jjwep",
+ "́®›" => "jjweh", "́®œ" => "jjwi", "́®" => "jjwig", "́®" => "jjwigg", "́®Ÿ" => "jjwigs", "́® " => "jjwin",
+ "́®¡" => "jjwinj", "́®¢" => "jjwinh", "́®£" => "jjwid", "́®¤" => "jjwil", "́®¥" => "jjwilg", "́®¦" => "jjwilm",
+ "́®§" => "jjwilb", "́®¨" => "jjwils", "́®©" => "jjwilt", "́®ª" => "jjwilp", "́®«" => "jjwilh", "́®¬" => "jjwim",
+ "́®" => "jjwib", "́®®" => "jjwibs", "́®¯" => "jjwis", "́®°" => "jjwiss", "́®±" => "jjwing", "́®²" => "jjwij",
+ "́®³" => "jjwic", "́®´" => "jjwik", "́®µ" => "jjwit", "́®¶" => "jjwip", "́®·" => "jjwih", "́®¸" => "jjyu",
+ "́®¹" => "jjyug", "́®º" => "jjyugg", "́®»" => "jjyugs", "́®¼" => "jjyun", "́®½" => "jjyunj", "́®¾" => "jjyunh",
+ "́®¿" => "jjyud", "́¯€" => "jjyul", "́¯" => "jjyulg", "́¯‚" => "jjyulm", "́¯ƒ" => "jjyulb", "́¯„" => "jjyuls",
+ "́¯…" => "jjyult", "́¯†" => "jjyulp", "́¯‡" => "jjyulh", "́¯ˆ" => "jjyum", "́¯‰" => "jjyub", "́¯" => "jjyubs",
+ "́¯‹" => "jjyus", "́¯Œ" => "jjyuss", "́¯" => "jjyung", "́¯" => "jjyuj", "́¯" => "jjyuc", "́¯" => "jjyuk",
+ "́¯‘" => "jjyut", "́¯’" => "jjyup", "́¯“" => "jjyuh", "́¯”" => "jjeu", "́¯•" => "jjeug", "́¯–" => "jjeugg",
+ "́¯—" => "jjeugs", "́¯˜" => "jjeun", "́¯™" => "jjeunj", "́¯" => "jjeunh", "́¯›" => "jjeud", "́¯œ" => "jjeul",
+ "́¯" => "jjeulg", "́¯" => "jjeulm", "́¯Ÿ" => "jjeulb", "́¯ " => "jjeuls", "́¯¡" => "jjeult", "́¯¢" => "jjeulp",
+ "́¯£" => "jjeulh", "́¯¤" => "jjeum", "́¯¥" => "jjeub", "́¯¦" => "jjeubs", "́¯§" => "jjeus", "́¯¨" => "jjeuss",
+ "́¯©" => "jjeung", "́¯ª" => "jjeuj", "́¯«" => "jjeuc", "́¯¬" => "jjeuk", "́¯" => "jjeut", "́¯®" => "jjeup",
+ "́¯¯" => "jjeuh", "́¯°" => "jjyi", "́¯±" => "jjyig", "́¯²" => "jjyigg", "́¯³" => "jjyigs", "́¯´" => "jjyin",
+ "́¯µ" => "jjyinj", "́¯¶" => "jjyinh", "́¯·" => "jjyid", "́¯¸" => "jjyil", "́¯¹" => "jjyilg", "́¯º" => "jjyilm",
+ "́¯»" => "jjyilb", "́¯¼" => "jjyils", "́¯½" => "jjyilt", "́¯¾" => "jjyilp", "́¯¿" => "jjyilh", "́°" => "jjyib",
+ "́°‚" => "jjyibs", "́°ƒ" => "jjyis", "́°„" => "jjyiss", "́°…" => "jjying", "́°†" => "jjyij", "́°‡" => "jjyic",
+ "́°ˆ" => "jjyik", "́°‰" => "jjyit", "́°" => "jjyip", "́°‹" => "jjyih", "́°Œ" => "jji", "́°" => "jjig",
+ "́°" => "jjigg", "́°" => "jjigs", "́°" => "jjin", "́°‘" => "jjinj", "́°’" => "jjinh", "́°“" => "jjid",
+ "́°”" => "jjil", "́°•" => "jjilg", "́°–" => "jjilm", "́°—" => "jjilb", "́°˜" => "jjils", "́°™" => "jjilt",
+ "́°" => "jjilp", "́°›" => "jjilh", "́°œ" => "jjim", "́°" => "jjib", "́°" => "jjibs", "́°Ÿ" => "jjis",
+ "́° " => "jjiss", "́°¡" => "jjing", "́°¢" => "jjij", "́°£" => "jjic", "́°¤" => "jjik", "́°¥" => "jjit",
+ "́°¦" => "jjip", "́°§" => "jjih", "́°¨" => "ca", "́°©" => "cag", "́°ª" => "cagg", "́°«" => "cags",
+ "́°¬" => "can", "́°" => "canj", "́°®" => "canh", "́°¯" => "cad", "́°°" => "cal", "́°±" => "calg",
+ "́°²" => "calm", "́°³" => "calb", "́°´" => "cals", "́°µ" => "calt", "́°¶" => "calp", "́°·" => "calh",
+ "́°¸" => "cam", "́°¹" => "cab", "́°º" => "cabs", "́°»" => "cas", "́°¼" => "cass", "́°½" => "cang",
+ "́°¾" => "caj", "́°¿" => "cac", "́±€" => "cak", "́±" => "cat", "́±‚" => "cap", "́±ƒ" => "cah",
+ "́±„" => "cae", "́±…" => "caeg", "́±†" => "caegg", "́±‡" => "caegs", "́±ˆ" => "caen", "́±‰" => "caenj",
+ "́±" => "caenh", "́±‹" => "caed", "́±Œ" => "cael", "́±" => "caelg", "́±" => "caelm", "́±" => "caelb",
+ "́±" => "caels", "́±‘" => "caelt", "́±’" => "caelp", "́±“" => "caelh", "́±”" => "caem", "́±•" => "caeb",
+ "́±–" => "caebs", "́±—" => "caes", "́±˜" => "caess", "́±™" => "caeng", "́±" => "caej", "́±›" => "caec",
+ "́±œ" => "caek", "́±" => "caet", "́±" => "caep", "́±Ÿ" => "caeh", "́± " => "cya", "́±¡" => "cyag",
+ "́±¢" => "cyagg", "́±£" => "cyags", "́±¤" => "cyan", "́±¥" => "cyanj", "́±¦" => "cyanh", "́±§" => "cyad",
+ "́±¨" => "cyal", "́±©" => "cyalg", "́±ª" => "cyalm", "́±«" => "cyalb", "́±¬" => "cyals", "́±" => "cyalt",
+ "́±®" => "cyalp", "́±¯" => "cyalh", "́±°" => "cyam", "́±±" => "cyab", "́±²" => "cyabs", "́±³" => "cyas",
+ "́±´" => "cyass", "́±µ" => "cyang", "́±¶" => "cyaj", "́±·" => "cyac", "́±¸" => "cyak", "́±¹" => "cyat",
+ "́±º" => "cyap", "́±»" => "cyah", "́±¼" => "cyae", "́±½" => "cyaeg", "́±¾" => "cyaegg", "́±¿" => "cyaegs",
+ "́²€" => "cyaen", "́²" => "cyaenj", "́²‚" => "cyaenh", "́²ƒ" => "cyaed", "́²„" => "cyael", "́²…" => "cyaelg",
+ "́²†" => "cyaelm", "́²‡" => "cyaelb", "́²ˆ" => "cyaels", "́²‰" => "cyaelt", "́²" => "cyaelp", "́²‹" => "cyaelh",
+ "́²Œ" => "cyaem", "́²" => "cyaeb", "́²" => "cyaebs", "́²" => "cyaes", "́²" => "cyaess", "́²‘" => "cyaeng",
+ "́²’" => "cyaej", "́²“" => "cyaec", "́²”" => "cyaek", "́²•" => "cyaet", "́²–" => "cyaep", "́²—" => "cyaeh",
+ "́²˜" => "ceo", "́²™" => "ceog", "́²" => "ceogg", "́²›" => "ceogs", "́²œ" => "ceon", "́²" => "ceonj",
+ "́²" => "ceonh", "́²Ÿ" => "ceod", "́² " => "ceol", "́²¡" => "ceolg", "́²¢" => "ceolm", "́²£" => "ceolb",
+ "́²¤" => "ceols", "́²¥" => "ceolt", "́²¦" => "ceolp", "́²§" => "ceolh", "́²¨" => "ceom", "́²©" => "ceob",
+ "́²ª" => "ceobs", "́²«" => "ceos", "́²¬" => "ceoss", "́²" => "ceong", "́²®" => "ceoj", "́²¯" => "ceoc",
+ "́²°" => "ceok", "́²±" => "ceot", "́²²" => "ceop", "́²³" => "ceoh", "́²´" => "ce", "́²µ" => "ceg",
+ "́²¶" => "cegg", "́²·" => "cegs", "́²¸" => "cen", "́²¹" => "cenj", "́²º" => "cenh", "́²»" => "ced",
+ "́²¼" => "cel", "́²½" => "celg", "́²¾" => "celm", "́²¿" => "celb", "́³€" => "cels", "́³" => "celt",
+ "́³‚" => "celp", "́³ƒ" => "celh", "́³„" => "cem", "́³…" => "ceb", "́³†" => "cebs", "́³‡" => "ces",
+ "́³ˆ" => "cess", "́³‰" => "ceng", "́³" => "cej", "́³‹" => "cec", "́³Œ" => "cek", "́³" => "cet",
+ "́³" => "cep", "́³" => "ceh", "́³" => "cyeo", "́³‘" => "cyeog", "́³’" => "cyeogg", "́³“" => "cyeogs",
+ "́³”" => "cyeon", "́³•" => "cyeonj", "́³–" => "cyeonh", "́³—" => "cyeod", "́³˜" => "cyeol", "́³™" => "cyeolg",
+ "́³" => "cyeolm", "́³›" => "cyeolb", "́³œ" => "cyeols", "́³" => "cyeolt", "́³" => "cyeolp", "́³Ÿ" => "cyeolh",
+ "́³ " => "cyeom", "́³¡" => "cyeob", "́³¢" => "cyeobs", "́³£" => "cyeos", "́³¤" => "cyeoss", "́³¥" => "cyeong",
+ "́³¦" => "cyeoj", "́³§" => "cyeoc", "́³¨" => "cyeok", "́³©" => "cyeot", "́³ª" => "cyeop", "́³«" => "cyeoh",
+ "́³¬" => "cye", "́³" => "cyeg", "́³®" => "cyegg", "́³¯" => "cyegs", "́³°" => "cyen", "́³±" => "cyenj",
+ "́³²" => "cyenh", "́³³" => "cyed", "́³´" => "cyel", "́³µ" => "cyelg", "́³¶" => "cyelm", "́³·" => "cyelb",
+ "́³¸" => "cyels", "́³¹" => "cyelt", "́³º" => "cyelp", "́³»" => "cyelh", "́³¼" => "cyem", "́³½" => "cyeb",
+ "́³¾" => "cyebs", "́³¿" => "cyes", "́´" => "cyeng", "́´‚" => "cyej", "́´ƒ" => "cyec", "́´„" => "cyek",
+ "́´…" => "cyet", "́´†" => "cyep", "́´‡" => "cyeh", "́´ˆ" => "co", "́´‰" => "cog", "́´" => "cogg",
+ "́´‹" => "cogs", "́´Œ" => "con", "́´" => "conj", "́´" => "conh", "́´" => "cod", "́´" => "col",
+ "́´‘" => "colg", "́´’" => "colm", "́´“" => "colb", "́´”" => "cols", "́´•" => "colt", "́´–" => "colp",
+ "́´—" => "colh", "́´˜" => "com", "́´™" => "cob", "́´" => "cobs", "́´›" => "cos", "́´œ" => "coss",
+ "́´" => "cong", "́´" => "coj", "́´Ÿ" => "coc", "́´ " => "cok", "́´¡" => "cot", "́´¢" => "cop",
+ "́´£" => "coh", "́´¤" => "cwa", "́´¥" => "cwag", "́´¦" => "cwagg", "́´§" => "cwags", "́´¨" => "cwan",
+ "́´©" => "cwanj", "́´ª" => "cwanh", "́´«" => "cwad", "́´¬" => "cwal", "́´" => "cwalg", "́´®" => "cwalm",
+ "́´¯" => "cwalb", "́´°" => "cwals", "́´±" => "cwalt", "́´²" => "cwalp", "́´³" => "cwalh", "́´´" => "cwam",
+ "́´µ" => "cwab", "́´¶" => "cwabs", "́´·" => "cwas", "́´¸" => "cwass", "́´¹" => "cwang", "́´º" => "cwaj",
+ "́´»" => "cwac", "́´¼" => "cwak", "́´½" => "cwat", "́´¾" => "cwap", "́´¿" => "cwah", "́µ€" => "cwae",
+ "́µ" => "cwaeg", "́µ‚" => "cwaegg", "́µƒ" => "cwaegs", "́µ„" => "cwaen", "́µ…" => "cwaenj", "́µ†" => "cwaenh",
+ "́µ‡" => "cwaed", "́µˆ" => "cwael", "́µ‰" => "cwaelg", "́µ" => "cwaelm", "́µ‹" => "cwaelb", "́µŒ" => "cwaels",
+ "́µ" => "cwaelt", "́µ" => "cwaelp", "́µ" => "cwaelh", "́µ" => "cwaem", "́µ‘" => "cwaeb", "́µ’" => "cwaebs",
+ "́µ“" => "cwaes", "́µ”" => "cwaess", "́µ•" => "cwaeng", "́µ–" => "cwaej", "́µ—" => "cwaec", "́µ˜" => "cwaek",
+ "́µ™" => "cwaet", "́µ" => "cwaep", "́µ›" => "cwaeh", "́µœ" => "coe", "́µ" => "coeg", "́µ" => "coegg",
+ "́µŸ" => "coegs", "́µ " => "coen", "́µ¡" => "coenj", "́µ¢" => "coenh", "́µ£" => "coed", "́µ¤" => "coel",
+ "́µ¥" => "coelg", "́µ¦" => "coelm", "́µ§" => "coelb", "́µ¨" => "coels", "́µ©" => "coelt", "́µª" => "coelp",
+ "́µ«" => "coelh", "́µ¬" => "coem", "́µ" => "coeb", "́µ®" => "coebs", "́µ¯" => "coes", "́µ°" => "coess",
+ "́µ±" => "coeng", "́µ²" => "coej", "́µ³" => "coec", "́µ´" => "coek", "́µµ" => "coet", "́µ¶" => "coep",
+ "́µ·" => "coeh", "́µ¸" => "cyo", "́µ¹" => "cyog", "́µº" => "cyogg", "́µ»" => "cyogs", "́µ¼" => "cyon",
+ "́µ½" => "cyonj", "́µ¾" => "cyonh", "́µ¿" => "cyod", "́¶€" => "cyol", "́¶" => "cyolg", "́¶‚" => "cyolm",
+ "́¶ƒ" => "cyolb", "́¶„" => "cyols", "́¶…" => "cyolt", "́¶†" => "cyolp", "́¶‡" => "cyolh", "́¶ˆ" => "cyom",
+ "́¶‰" => "cyob", "́¶" => "cyobs", "́¶‹" => "cyos", "́¶Œ" => "cyoss", "́¶" => "cyong", "́¶" => "cyoj",
+ "́¶" => "cyoc", "́¶" => "cyok", "́¶‘" => "cyot", "́¶’" => "cyop", "́¶“" => "cyoh", "́¶”" => "cu",
+ "́¶•" => "cug", "́¶–" => "cugg", "́¶—" => "cugs", "́¶˜" => "cun", "́¶™" => "cunj", "́¶" => "cunh",
+ "́¶›" => "cud", "́¶œ" => "cul", "́¶" => "culg", "́¶" => "culm", "́¶Ÿ" => "culb", "́¶ " => "culs",
+ "́¶¡" => "cult", "́¶¢" => "culp", "́¶£" => "culh", "́¶¤" => "cum", "́¶¥" => "cub", "́¶¦" => "cubs",
+ "́¶§" => "cus", "́¶¨" => "cuss", "́¶©" => "cung", "́¶ª" => "cuj", "́¶«" => "cuc", "́¶¬" => "cuk",
+ "́¶" => "cut", "́¶®" => "cup", "́¶¯" => "cuh", "́¶°" => "cweo", "́¶±" => "cweog", "́¶²" => "cweogg",
+ "́¶³" => "cweogs", "́¶´" => "cweon", "́¶µ" => "cweonj", "́¶¶" => "cweonh", "́¶·" => "cweod", "́¶¸" => "cweol",
+ "́¶¹" => "cweolg", "́¶º" => "cweolm", "́¶»" => "cweolb", "́¶¼" => "cweols", "́¶½" => "cweolt", "́¶¾" => "cweolp",
+ "́¶¿" => "cweolh", "́·€" => "cweom", "́·" => "cweob", "́·‚" => "cweobs", "́·ƒ" => "cweos", "́·„" => "cweoss",
+ "́·…" => "cweong", "́·†" => "cweoj", "́·‡" => "cweoc", "́·ˆ" => "cweok", "́·‰" => "cweot", "́·" => "cweop",
+ "́·‹" => "cweoh", "́·Œ" => "cwe", "́·" => "cweg", "́·" => "cwegg", "́·" => "cwegs", "́·" => "cwen",
+ "́·‘" => "cwenj", "́·’" => "cwenh", "́·“" => "cwed", "́·”" => "cwel", "́·•" => "cwelg", "́·–" => "cwelm",
+ "́·—" => "cwelb", "́·˜" => "cwels", "́·™" => "cwelt", "́·" => "cwelp", "́·›" => "cwelh", "́·œ" => "cwem",
+ "́·" => "cweb", "́·" => "cwebs", "́·Ÿ" => "cwes", "́· " => "cwess", "́·¡" => "cweng", "́·¢" => "cwej",
+ "́·£" => "cwec", "́·¤" => "cwek", "́·¥" => "cwet", "́·¦" => "cwep", "́·§" => "cweh", "́·¨" => "cwi",
+ "́·©" => "cwig", "́·ª" => "cwigg", "́·«" => "cwigs", "́·¬" => "cwin", "́·" => "cwinj", "́·®" => "cwinh",
+ "́·¯" => "cwid", "́·°" => "cwil", "́·±" => "cwilg", "́·²" => "cwilm", "́·³" => "cwilb", "́·´" => "cwils",
+ "́·µ" => "cwilt", "́·¶" => "cwilp", "́··" => "cwilh", "́·¸" => "cwim", "́·¹" => "cwib", "́·º" => "cwibs",
+ "́·»" => "cwis", "́·¼" => "cwiss", "́·½" => "cwing", "́·¾" => "cwij", "́·¿" => "cwic", "́¸" => "cwit",
+ "́¸‚" => "cwip", "́¸ƒ" => "cwih", "́¸„" => "cyu", "́¸…" => "cyug", "́¸†" => "cyugg", "́¸‡" => "cyugs",
+ "́¸ˆ" => "cyun", "́¸‰" => "cyunj", "́¸" => "cyunh", "́¸‹" => "cyud", "́¸Œ" => "cyul", "́¸" => "cyulg",
+ "́¸" => "cyulm", "́¸" => "cyulb", "́¸" => "cyuls", "́¸‘" => "cyult", "́¸’" => "cyulp", "́¸“" => "cyulh",
+ "́¸”" => "cyum", "́¸•" => "cyub", "́¸–" => "cyubs", "́¸—" => "cyus", "́¸˜" => "cyuss", "́¸™" => "cyung",
+ "́¸" => "cyuj", "́¸›" => "cyuc", "́¸œ" => "cyuk", "́¸" => "cyut", "́¸" => "cyup", "́¸Ÿ" => "cyuh",
+ "́¸ " => "ceu", "́¸¡" => "ceug", "́¸¢" => "ceugg", "́¸£" => "ceugs", "́¸¤" => "ceun", "́¸¥" => "ceunj",
+ "́¸¦" => "ceunh", "́¸§" => "ceud", "́¸¨" => "ceul", "́¸©" => "ceulg", "́¸ª" => "ceulm", "́¸«" => "ceulb",
+ "́¸¬" => "ceuls", "́¸" => "ceult", "́¸®" => "ceulp", "́¸¯" => "ceulh", "́¸°" => "ceum", "́¸±" => "ceub",
+ "́¸²" => "ceubs", "́¸³" => "ceus", "́¸´" => "ceuss", "́¸µ" => "ceung", "́¸¶" => "ceuj", "́¸·" => "ceuc",
+ "́¸¸" => "ceuk", "́¸¹" => "ceut", "́¸º" => "ceup", "́¸»" => "ceuh", "́¸¼" => "cyi", "́¸½" => "cyig",
+ "́¸¾" => "cyigg", "́¸¿" => "cyigs", "́¹€" => "cyin", "́¹" => "cyinj", "́¹‚" => "cyinh", "́¹ƒ" => "cyid",
+ "́¹„" => "cyil", "́¹…" => "cyilg", "́¹†" => "cyilm", "́¹‡" => "cyilb", "́¹ˆ" => "cyils", "́¹‰" => "cyilt",
+ "́¹" => "cyilp", "́¹‹" => "cyilh", "́¹Œ" => "cyim", "́¹" => "cyib", "́¹" => "cyibs", "́¹" => "cyis",
+ "́¹" => "cyiss", "́¹‘" => "cying", "́¹’" => "cyij", "́¹“" => "cyic", "́¹”" => "cyik", "́¹•" => "cyit",
+ "́¹–" => "cyip", "́¹—" => "cyih", "́¹˜" => "ci", "́¹™" => "cig", "́¹" => "cigg", "́¹›" => "cigs",
+ "́¹œ" => "cin", "́¹" => "cinj", "́¹" => "cinh", "́¹Ÿ" => "cid", "́¹ " => "cil", "́¹¡" => "cilg",
+ "́¹¢" => "cilm", "́¹£" => "cilb", "́¹¤" => "cils", "́¹¥" => "cilt", "́¹¦" => "cilp", "́¹§" => "cilh",
+ "́¹¨" => "cim", "́¹©" => "cib", "́¹ª" => "cibs", "́¹«" => "cis", "́¹¬" => "ciss", "́¹" => "cing",
+ "́¹®" => "cij", "́¹¯" => "cic", "́¹°" => "cik", "́¹±" => "cit", "́¹²" => "cip", "́¹³" => "cih",
+ "́¹´" => "ka", "́¹µ" => "kag", "́¹¶" => "kagg", "́¹·" => "kags", "́¹¸" => "kan", "́¹¹" => "kanj",
+ "́¹º" => "kanh", "́¹»" => "kad", "́¹¼" => "kal", "́¹½" => "kalg", "́¹¾" => "kalm", "́¹¿" => "kalb",
+ "́º€" => "kals", "́º" => "kalt", "́º‚" => "kalp", "́ºƒ" => "kalh", "́º„" => "kam", "́º…" => "kab",
+ "́º†" => "kabs", "́º‡" => "kas", "́ºˆ" => "kass", "́º‰" => "kang", "́º" => "kaj", "́º‹" => "kac",
+ "́ºŒ" => "kak", "́º" => "kat", "́º" => "kap", "́º" => "kah", "́º" => "kae", "́º‘" => "kaeg",
+ "́º’" => "kaegg", "́º“" => "kaegs", "́º”" => "kaen", "́º•" => "kaenj", "́º–" => "kaenh", "́º—" => "kaed",
+ "́º˜" => "kael", "́º™" => "kaelg", "́º" => "kaelm", "́º›" => "kaelb", "́ºœ" => "kaels", "́º" => "kaelt",
+ "́º" => "kaelp", "́ºŸ" => "kaelh", "́º " => "kaem", "́º¡" => "kaeb", "́º¢" => "kaebs", "́º£" => "kaes",
+ "́º¤" => "kaess", "́º¥" => "kaeng", "́º¦" => "kaej", "́º§" => "kaec", "́º¨" => "kaek", "́º©" => "kaet",
+ "́ºª" => "kaep", "́º«" => "kaeh", "́º¬" => "kya", "́º" => "kyag", "́º®" => "kyagg", "́º¯" => "kyags",
+ "́º°" => "kyan", "́º±" => "kyanj", "́º²" => "kyanh", "́º³" => "kyad", "́º´" => "kyal", "́ºµ" => "kyalg",
+ "́º¶" => "kyalm", "́º·" => "kyalb", "́º¸" => "kyals", "́º¹" => "kyalt", "́ºº" => "kyalp", "́º»" => "kyalh",
+ "́º¼" => "kyam", "́º½" => "kyab", "́º¾" => "kyabs", "́º¿" => "kyas", "́»€" => "kyass", "́»" => "kyang",
+ "́»‚" => "kyaj", "́»ƒ" => "kyac", "́»„" => "kyak", "́»…" => "kyat", "́»†" => "kyap", "́»‡" => "kyah",
+ "́»ˆ" => "kyae", "́»‰" => "kyaeg", "́»" => "kyaegg", "́»‹" => "kyaegs", "́»Œ" => "kyaen", "́»" => "kyaenj",
+ "́»" => "kyaenh", "́»" => "kyaed", "́»" => "kyael", "́»‘" => "kyaelg", "́»’" => "kyaelm", "́»“" => "kyaelb",
+ "́»”" => "kyaels", "́»•" => "kyaelt", "́»–" => "kyaelp", "́»—" => "kyaelh", "́»˜" => "kyaem", "́»™" => "kyaeb",
+ "́»" => "kyaebs", "́»›" => "kyaes", "́»œ" => "kyaess", "́»" => "kyaeng", "́»" => "kyaej", "́»Ÿ" => "kyaec",
+ "́» " => "kyaek", "́»¡" => "kyaet", "́»¢" => "kyaep", "́»£" => "kyaeh", "́»¤" => "keo", "́»¥" => "keog",
+ "́»¦" => "keogg", "́»§" => "keogs", "́»¨" => "keon", "́»©" => "keonj", "́»ª" => "keonh", "́»«" => "keod",
+ "́»¬" => "keol", "́»" => "keolg", "́»®" => "keolm", "́»¯" => "keolb", "́»°" => "keols", "́»±" => "keolt",
+ "́»²" => "keolp", "́»³" => "keolh", "́»´" => "keom", "́»µ" => "keob", "́»¶" => "keobs", "́»·" => "keos",
+ "́»¸" => "keoss", "́»¹" => "keong", "́»º" => "keoj", "́»»" => "keoc", "́»¼" => "keok", "́»½" => "keot",
+ "́»¾" => "keop", "́»¿" => "keoh", "́¼" => "keg", "́¼‚" => "kegg", "́¼ƒ" => "kegs", "́¼„" => "ken",
+ "́¼…" => "kenj", "́¼†" => "kenh", "́¼‡" => "ked", "́¼ˆ" => "kel", "́¼‰" => "kelg", "́¼" => "kelm",
+ "́¼‹" => "kelb", "́¼Œ" => "kels", "́¼" => "kelt", "́¼" => "kelp", "́¼" => "kelh", "́¼" => "kem",
+ "́¼‘" => "keb", "́¼’" => "kebs", "́¼“" => "kes", "́¼”" => "kess", "́¼•" => "keng", "́¼–" => "kej",
+ "́¼—" => "kec", "́¼˜" => "kek", "́¼™" => "ket", "́¼" => "kep", "́¼›" => "keh", "́¼œ" => "kyeo",
+ "́¼" => "kyeog", "́¼" => "kyeogg", "́¼Ÿ" => "kyeogs", "́¼ " => "kyeon", "́¼¡" => "kyeonj", "́¼¢" => "kyeonh",
+ "́¼£" => "kyeod", "́¼¤" => "kyeol", "́¼¥" => "kyeolg", "́¼¦" => "kyeolm", "́¼§" => "kyeolb", "́¼¨" => "kyeols",
+ "́¼©" => "kyeolt", "́¼ª" => "kyeolp", "́¼«" => "kyeolh", "́¼¬" => "kyeom", "́¼" => "kyeob", "́¼®" => "kyeobs",
+ "́¼¯" => "kyeos", "́¼°" => "kyeoss", "́¼±" => "kyeong", "́¼²" => "kyeoj", "́¼³" => "kyeoc", "́¼´" => "kyeok",
+ "́¼µ" => "kyeot", "́¼¶" => "kyeop", "́¼·" => "kyeoh", "́¼¸" => "kye", "́¼¹" => "kyeg", "́¼º" => "kyegg",
+ "́¼»" => "kyegs", "́¼¼" => "kyen", "́¼½" => "kyenj", "́¼¾" => "kyenh", "́¼¿" => "kyed", "́½€" => "kyel",
+ "́½" => "kyelg", "́½‚" => "kyelm", "́½ƒ" => "kyelb", "́½„" => "kyels", "́½…" => "kyelt", "́½†" => "kyelp",
+ "́½‡" => "kyelh", "́½ˆ" => "kyem", "́½‰" => "kyeb", "́½" => "kyebs", "́½‹" => "kyes", "́½Œ" => "kyess",
+ "́½" => "kyeng", "́½" => "kyej", "́½" => "kyec", "́½" => "kyek", "́½‘" => "kyet", "́½’" => "kyep",
+ "́½“" => "kyeh", "́½”" => "ko", "́½•" => "kog", "́½–" => "kogg", "́½—" => "kogs", "́½˜" => "kon",
+ "́½™" => "konj", "́½" => "konh", "́½›" => "kod", "́½œ" => "kol", "́½" => "kolg", "́½" => "kolm",
+ "́½Ÿ" => "kolb", "́½ " => "kols", "́½¡" => "kolt", "́½¢" => "kolp", "́½£" => "kolh", "́½¤" => "kom",
+ "́½¥" => "kob", "́½¦" => "kobs", "́½§" => "kos", "́½¨" => "koss", "́½©" => "kong", "́½ª" => "koj",
+ "́½«" => "koc", "́½¬" => "kok", "́½" => "kot", "́½®" => "kop", "́½¯" => "koh", "́½°" => "kwa",
+ "́½±" => "kwag", "́½²" => "kwagg", "́½³" => "kwags", "́½´" => "kwan", "́½µ" => "kwanj", "́½¶" => "kwanh",
+ "́½·" => "kwad", "́½¸" => "kwal", "́½¹" => "kwalg", "́½º" => "kwalm", "́½»" => "kwalb", "́½¼" => "kwals",
+ "́½½" => "kwalt", "́½¾" => "kwalp", "́½¿" => "kwalh", "́¾€" => "kwam", "́¾" => "kwab", "́¾‚" => "kwabs",
+ "́¾ƒ" => "kwas", "́¾„" => "kwass", "́¾…" => "kwang", "́¾†" => "kwaj", "́¾‡" => "kwac", "́¾ˆ" => "kwak",
+ "́¾‰" => "kwat", "́¾" => "kwap", "́¾‹" => "kwah", "́¾Œ" => "kwae", "́¾" => "kwaeg", "́¾" => "kwaegg",
+ "́¾" => "kwaegs", "́¾" => "kwaen", "́¾‘" => "kwaenj", "́¾’" => "kwaenh", "́¾“" => "kwaed", "́¾”" => "kwael",
+ "́¾•" => "kwaelg", "́¾–" => "kwaelm", "́¾—" => "kwaelb", "́¾˜" => "kwaels", "́¾™" => "kwaelt", "́¾" => "kwaelp",
+ "́¾›" => "kwaelh", "́¾œ" => "kwaem", "́¾" => "kwaeb", "́¾" => "kwaebs", "́¾Ÿ" => "kwaes", "́¾ " => "kwaess",
+ "́¾¡" => "kwaeng", "́¾¢" => "kwaej", "́¾£" => "kwaec", "́¾¤" => "kwaek", "́¾¥" => "kwaet", "́¾¦" => "kwaep",
+ "́¾§" => "kwaeh", "́¾¨" => "koe", "́¾©" => "koeg", "́¾ª" => "koegg", "́¾«" => "koegs", "́¾¬" => "koen",
+ "́¾" => "koenj", "́¾®" => "koenh", "́¾¯" => "koed", "́¾°" => "koel", "́¾±" => "koelg", "́¾²" => "koelm",
+ "́¾³" => "koelb", "́¾´" => "koels", "́¾µ" => "koelt", "́¾¶" => "koelp", "́¾·" => "koelh", "́¾¸" => "koem",
+ "́¾¹" => "koeb", "́¾º" => "koebs", "́¾»" => "koes", "́¾¼" => "koess", "́¾½" => "koeng", "́¾¾" => "koej",
+ "́¾¿" => "koec", "́¿€" => "koek", "́¿" => "koet", "́¿‚" => "koep", "́¿ƒ" => "koeh", "́¿„" => "kyo",
+ "́¿…" => "kyog", "́¿†" => "kyogg", "́¿‡" => "kyogs", "́¿ˆ" => "kyon", "́¿‰" => "kyonj", "́¿" => "kyonh",
+ "́¿‹" => "kyod", "́¿Œ" => "kyol", "́¿" => "kyolg", "́¿" => "kyolm", "́¿" => "kyolb", "́¿" => "kyols",
+ "́¿‘" => "kyolt", "́¿’" => "kyolp", "́¿“" => "kyolh", "́¿”" => "kyom", "́¿•" => "kyob", "́¿–" => "kyobs",
+ "́¿—" => "kyos", "́¿˜" => "kyoss", "́¿™" => "kyong", "́¿" => "kyoj", "́¿›" => "kyoc", "́¿œ" => "kyok",
+ "́¿" => "kyot", "́¿" => "kyop", "́¿Ÿ" => "kyoh", "́¿ " => "ku", "́¿¡" => "kug", "́¿¢" => "kugg",
+ "́¿£" => "kugs", "́¿¤" => "kun", "́¿¥" => "kunj", "́¿¦" => "kunh", "́¿§" => "kud", "́¿¨" => "kul",
+ "́¿©" => "kulg", "́¿ª" => "kulm", "́¿«" => "kulb", "́¿¬" => "kuls", "́¿" => "kult", "́¿®" => "kulp",
+ "́¿¯" => "kulh", "́¿°" => "kum", "́¿±" => "kub", "́¿²" => "kubs", "́¿³" => "kus", "́¿´" => "kuss",
+ "́¿µ" => "kung", "́¿¶" => "kuj", "́¿·" => "kuc", "́¿¸" => "kuk", "́¿¹" => "kut", "́¿º" => "kup",
+ "́¿»" => "kuh", "́¿¼" => "kweo", "́¿½" => "kweog", "́¿¾" => "kweogg", "́¿¿" => "kweogs", "í€" => "kweonj",
+ "퀂" => "kweonh", "퀃" => "kweod", "퀄" => "kweol", "퀅" => "kweolg", "퀆" => "kweolm", "퀇" => "kweolb",
+ "퀈" => "kweols", "퀉" => "kweolt", "í€" => "kweolp", "퀋" => "kweolh", "퀌" => "kweom", "í€" => "kweob",
+ "í€" => "kweobs", "í€" => "kweos", "í€" => "kweoss", "퀑" => "kweong", "퀒" => "kweoj", "퀓" => "kweoc",
+ "퀔" => "kweok", "퀕" => "kweot", "퀖" => "kweop", "퀗" => "kweoh", "퀘" => "kwe", "퀙" => "kweg",
+ "í€" => "kwegg", "퀛" => "kwegs", "퀜" => "kwen", "í€" => "kwenj", "í€" => "kwenh", "퀟" => "kwed",
+ "í€ " => "kwel", "퀡" => "kwelg", "퀢" => "kwelm", "퀣" => "kwelb", "퀤" => "kwels", "퀥" => "kwelt",
+ "퀦" => "kwelp", "퀧" => "kwelh", "퀨" => "kwem", "퀩" => "kweb", "퀪" => "kwebs", "퀫" => "kwes",
+ "퀬" => "kwess", "í€" => "kweng", "퀮" => "kwej", "퀯" => "kwec", "퀰" => "kwek", "퀱" => "kwet",
+ "퀲" => "kwep", "퀳" => "kweh", "퀴" => "kwi", "퀵" => "kwig", "퀶" => "kwigg", "퀷" => "kwigs",
+ "퀸" => "kwin", "퀹" => "kwinj", "퀺" => "kwinh", "퀻" => "kwid", "퀼" => "kwil", "퀽" => "kwilg",
+ "퀾" => "kwilm", "퀿" => "kwilb", "í€" => "kwils", "í" => "kwilt", "í‚" => "kwilp", "íƒ" => "kwilh",
+ "í„" => "kwim", "í…" => "kwib", "í†" => "kwibs", "í‡" => "kwis", "íˆ" => "kwiss", "í‰" => "kwing",
+ "í" => "kwij", "í‹" => "kwic", "íŒ" => "kwik", "í" => "kwit", "í" => "kwip", "í" => "kwih",
+ "í" => "kyu", "í‘" => "kyug", "í’" => "kyugg", "í“" => "kyugs", "í”" => "kyun", "í•" => "kyunj",
+ "í–" => "kyunh", "í—" => "kyud", "í˜" => "kyul", "í™" => "kyulg", "í" => "kyulm", "í›" => "kyulb",
+ "íœ" => "kyuls", "í" => "kyult", "í" => "kyulp", "íŸ" => "kyulh", "í " => "kyum", "í¡" => "kyub",
+ "í¢" => "kyubs", "í£" => "kyus", "í¤" => "kyuss", "í¥" => "kyung", "í¦" => "kyuj", "í§" => "kyuc",
+ "í¨" => "kyuk", "í©" => "kyut", "íª" => "kyup", "í«" => "kyuh", "í¬" => "keu", "í" => "keug",
+ "í®" => "keugg", "í¯" => "keugs", "í°" => "keun", "í±" => "keunj", "í²" => "keunh", "í³" => "keud",
+ "í´" => "keul", "íµ" => "keulg", "í¶" => "keulm", "í·" => "keulb", "í¸" => "keuls", "í¹" => "keult",
+ "íº" => "keulp", "í»" => "keulh", "í¼" => "keum", "í½" => "keub", "í¾" => "keubs", "í¿" => "keus",
+ "í‚€" => "keuss", "í‚" => "keung", "í‚‚" => "keuj", "킃" => "keuc", "í‚„" => "keuk", "í‚…" => "keut",
+ "킆" => "keup", "킇" => "keuh", "킈" => "kyi", "킉" => "kyig", "í‚" => "kyigg", "í‚‹" => "kyigs",
+ "í‚Œ" => "kyin", "í‚" => "kyinj", "í‚" => "kyinh", "í‚" => "kyid", "í‚" => "kyil", "í‚‘" => "kyilg",
+ "í‚’" => "kyilm", "í‚“" => "kyilb", "í‚”" => "kyils", "í‚•" => "kyilt", "í‚–" => "kyilp", "í‚—" => "kyilh",
+ "킘" => "kyim", "í‚™" => "kyib", "í‚" => "kyibs", "í‚›" => "kyis", "í‚œ" => "kyiss", "í‚" => "kying",
+ "í‚" => "kyij", "í‚Ÿ" => "kyic", "í‚ " => "kyik", "í‚¡" => "kyit", "í‚¢" => "kyip", "í‚£" => "kyih",
+ "키" => "ki", "킥" => "kig", "킦" => "kigg", "킧" => "kigs", "킨" => "kin", "킩" => "kinj",
+ "킪" => "kinh", "í‚«" => "kid", "킬" => "kil", "í‚" => "kilg", "í‚®" => "kilm", "킯" => "kilb",
+ "킰" => "kils", "킱" => "kilt", "킲" => "kilp", "킳" => "kilh", "킴" => "kim", "킵" => "kib",
+ "킶" => "kibs", "킷" => "kis", "킸" => "kiss", "킹" => "king", "킺" => "kij", "킻" => "kic",
+ "킼" => "kik", "킽" => "kit", "킾" => "kip", "í‚¿" => "kih", "타" => "ta", "íƒ" => "tag",
+ "탂" => "tagg", "탃" => "tags", "탄" => "tan", "탅" => "tanj", "탆" => "tanh", "탇" => "tad",
+ "탈" => "tal", "탉" => "talg", "íƒ" => "talm", "탋" => "talb", "탌" => "tals", "íƒ" => "talt",
+ "íƒ" => "talp", "íƒ" => "talh", "íƒ" => "tam", "탑" => "tab", "탒" => "tabs", "탓" => "tas",
+ "탔" => "tass", "탕" => "tang", "탖" => "taj", "탗" => "tac", "탘" => "tak", "탙" => "tat",
+ "íƒ" => "tap", "탛" => "tah", "태" => "tae", "íƒ" => "taeg", "íƒ" => "taegg", "탟" => "taegs",
+ "íƒ " => "taen", "탡" => "taenj", "탢" => "taenh", "탣" => "taed", "탤" => "tael", "탥" => "taelg",
+ "탦" => "taelm", "탧" => "taelb", "탨" => "taels", "탩" => "taelt", "탪" => "taelp", "탫" => "taelh",
+ "탬" => "taem", "íƒ" => "taeb", "탮" => "taebs", "탯" => "taes", "탰" => "taess", "탱" => "taeng",
+ "탲" => "taej", "탳" => "taec", "탴" => "taek", "탵" => "taet", "탶" => "taep", "탷" => "taeh",
+ "탸" => "tya", "탹" => "tyag", "탺" => "tyagg", "탻" => "tyags", "탼" => "tyan", "탽" => "tyanj",
+ "탾" => "tyanh", "탿" => "tyad", "í„" => "tyalg", "í„‚" => "tyalm", "턃" => "tyalb", "í„„" => "tyals",
+ "í„…" => "tyalt", "턆" => "tyalp", "턇" => "tyalh", "턈" => "tyam", "턉" => "tyab", "í„" => "tyabs",
+ "í„‹" => "tyas", "í„Œ" => "tyass", "í„" => "tyang", "í„" => "tyaj", "í„" => "tyac", "í„" => "tyak",
+ "í„‘" => "tyat", "í„’" => "tyap", "í„“" => "tyah", "í„”" => "tyae", "í„•" => "tyaeg", "í„–" => "tyaegg",
+ "í„—" => "tyaegs", "턘" => "tyaen", "í„™" => "tyaenj", "í„" => "tyaenh", "í„›" => "tyaed", "í„œ" => "tyael",
+ "í„" => "tyaelg", "í„" => "tyaelm", "í„Ÿ" => "tyaelb", "í„ " => "tyaels", "í„¡" => "tyaelt", "í„¢" => "tyaelp",
+ "턣" => "tyaelh", "턤" => "tyaem", "턥" => "tyaeb", "턦" => "tyaebs", "턧" => "tyaes", "턨" => "tyaess",
+ "í„©" => "tyaeng", "턪" => "tyaej", "í„«" => "tyaec", "턬" => "tyaek", "í„" => "tyaet", "í„®" => "tyaep",
+ "턯" => "tyaeh", "터" => "teo", "턱" => "teog", "턲" => "teogg", "턳" => "teogs", "턴" => "teon",
+ "턵" => "teonj", "턶" => "teonh", "턷" => "teod", "털" => "teol", "턹" => "teolg", "턺" => "teolm",
+ "턻" => "teolb", "턼" => "teols", "턽" => "teolt", "턾" => "teolp", "턿" => "teolh", "텀" => "teom",
+ "í…" => "teob", "í…‚" => "teobs", "í…ƒ" => "teos", "í…„" => "teoss", "í……" => "teong", "í…†" => "teoj",
+ "í…‡" => "teoc", "í…ˆ" => "teok", "í…‰" => "teot", "í…" => "teop", "í…‹" => "teoh", "í…Œ" => "te",
+ "í…" => "teg", "í…" => "tegg", "í…" => "tegs", "í…" => "ten", "í…‘" => "tenj", "í…’" => "tenh",
+ "í…“" => "ted", "í…”" => "tel", "í…•" => "telg", "í…–" => "telm", "í…—" => "telb", "í…˜" => "tels",
+ "í…™" => "telt", "í…" => "telp", "í…›" => "telh", "í…œ" => "tem", "í…" => "teb", "í…" => "tebs",
+ "í…Ÿ" => "tes", "í… " => "tess", "í…¡" => "teng", "í…¢" => "tej", "í…£" => "tec", "í…¤" => "tek",
+ "í…¥" => "tet", "í…¦" => "tep", "í…§" => "teh", "í…¨" => "tyeo", "í…©" => "tyeog", "í…ª" => "tyeogg",
+ "í…«" => "tyeogs", "í…¬" => "tyeon", "í…" => "tyeonj", "í…®" => "tyeonh", "í…¯" => "tyeod", "í…°" => "tyeol",
+ "í…±" => "tyeolg", "í…²" => "tyeolm", "í…³" => "tyeolb", "í…´" => "tyeols", "í…µ" => "tyeolt", "í…¶" => "tyeolp",
+ "í…·" => "tyeolh", "í…¸" => "tyeom", "í…¹" => "tyeob", "í…º" => "tyeobs", "í…»" => "tyeos", "í…¼" => "tyeoss",
+ "í…½" => "tyeong", "í…¾" => "tyeoj", "í…¿" => "tyeoc", "톀" => "tyeok", "í†" => "tyeot", "톂" => "tyeop",
+ "톃" => "tyeoh", "톄" => "tye", "톅" => "tyeg", "톆" => "tyegg", "톇" => "tyegs", "톈" => "tyen",
+ "톉" => "tyenj", "í†" => "tyenh", "톋" => "tyed", "톌" => "tyel", "í†" => "tyelg", "í†" => "tyelm",
+ "í†" => "tyelb", "í†" => "tyels", "톑" => "tyelt", "톒" => "tyelp", "톓" => "tyelh", "톔" => "tyem",
+ "톕" => "tyeb", "톖" => "tyebs", "톗" => "tyes", "톘" => "tyess", "톙" => "tyeng", "í†" => "tyej",
+ "톛" => "tyec", "톜" => "tyek", "í†" => "tyet", "í†" => "tyep", "톟" => "tyeh", "í† " => "to",
+ "톡" => "tog", "톢" => "togg", "톣" => "togs", "톤" => "ton", "톥" => "tonj", "톦" => "tonh",
+ "톧" => "tod", "톨" => "tol", "톩" => "tolg", "톪" => "tolm", "톫" => "tolb", "톬" => "tols",
+ "í†" => "tolt", "톮" => "tolp", "톯" => "tolh", "톰" => "tom", "톱" => "tob", "톲" => "tobs",
+ "톳" => "tos", "톴" => "toss", "통" => "tong", "톶" => "toj", "톷" => "toc", "톸" => "tok",
+ "톹" => "tot", "톺" => "top", "톻" => "toh", "톼" => "twa", "톽" => "twag", "톾" => "twagg",
+ "톿" => "twags", "퇀" => "twan", "í‡" => "twanj", "퇂" => "twanh", "퇃" => "twad", "퇄" => "twal",
+ "퇅" => "twalg", "퇆" => "twalm", "퇇" => "twalb", "퇈" => "twals", "퇉" => "twalt", "í‡" => "twalp",
+ "퇋" => "twalh", "퇌" => "twam", "í‡" => "twab", "í‡" => "twabs", "í‡" => "twas", "í‡" => "twass",
+ "퇑" => "twang", "퇒" => "twaj", "퇓" => "twac", "퇔" => "twak", "퇕" => "twat", "퇖" => "twap",
+ "퇗" => "twah", "퇘" => "twae", "퇙" => "twaeg", "í‡" => "twaegg", "퇛" => "twaegs", "퇜" => "twaen",
+ "í‡" => "twaenj", "í‡" => "twaenh", "퇟" => "twaed", "í‡ " => "twael", "퇡" => "twaelg", "퇢" => "twaelm",
+ "퇣" => "twaelb", "퇤" => "twaels", "퇥" => "twaelt", "퇦" => "twaelp", "퇧" => "twaelh", "퇨" => "twaem",
+ "퇩" => "twaeb", "퇪" => "twaebs", "퇫" => "twaes", "퇬" => "twaess", "í‡" => "twaeng", "퇮" => "twaej",
+ "퇯" => "twaec", "퇰" => "twaek", "퇱" => "twaet", "퇲" => "twaep", "퇳" => "twaeh", "퇴" => "toe",
+ "퇵" => "toeg", "퇶" => "toegg", "퇷" => "toegs", "퇸" => "toen", "퇹" => "toenj", "퇺" => "toenh",
+ "퇻" => "toed", "퇼" => "toel", "퇽" => "toelg", "퇾" => "toelm", "퇿" => "toelb", "íˆ" => "toelt",
+ "툂" => "toelp", "툃" => "toelh", "툄" => "toem", "툅" => "toeb", "툆" => "toebs", "툇" => "toes",
+ "툈" => "toess", "툉" => "toeng", "íˆ" => "toej", "툋" => "toec", "툌" => "toek", "íˆ" => "toet",
+ "íˆ" => "toep", "íˆ" => "toeh", "íˆ" => "tyo", "툑" => "tyog", "툒" => "tyogg", "툓" => "tyogs",
+ "툔" => "tyon", "툕" => "tyonj", "툖" => "tyonh", "툗" => "tyod", "툘" => "tyol", "툙" => "tyolg",
+ "íˆ" => "tyolm", "툛" => "tyolb", "툜" => "tyols", "íˆ" => "tyolt", "íˆ" => "tyolp", "툟" => "tyolh",
+ "íˆ " => "tyom", "툡" => "tyob", "툢" => "tyobs", "툣" => "tyos", "툤" => "tyoss", "툥" => "tyong",
+ "툦" => "tyoj", "툧" => "tyoc", "툨" => "tyok", "툩" => "tyot", "툪" => "tyop", "툫" => "tyoh",
+ "투" => "tu", "íˆ" => "tug", "툮" => "tugg", "툯" => "tugs", "툰" => "tun", "툱" => "tunj",
+ "툲" => "tunh", "툳" => "tud", "툴" => "tul", "툵" => "tulg", "툶" => "tulm", "툷" => "tulb",
+ "툸" => "tuls", "툹" => "tult", "툺" => "tulp", "툻" => "tulh", "툼" => "tum", "툽" => "tub",
+ "툾" => "tubs", "툿" => "tus", "퉀" => "tuss", "í‰" => "tung", "퉂" => "tuj", "퉃" => "tuc",
+ "퉄" => "tuk", "퉅" => "tut", "퉆" => "tup", "퉇" => "tuh", "퉈" => "tweo", "퉉" => "tweog",
+ "í‰" => "tweogg", "퉋" => "tweogs", "퉌" => "tweon", "í‰" => "tweonj", "í‰" => "tweonh", "í‰" => "tweod",
+ "í‰" => "tweol", "퉑" => "tweolg", "퉒" => "tweolm", "퉓" => "tweolb", "퉔" => "tweols", "퉕" => "tweolt",
+ "퉖" => "tweolp", "퉗" => "tweolh", "퉘" => "tweom", "퉙" => "tweob", "í‰" => "tweobs", "퉛" => "tweos",
+ "퉜" => "tweoss", "í‰" => "tweong", "í‰" => "tweoj", "퉟" => "tweoc", "í‰ " => "tweok", "퉡" => "tweot",
+ "퉢" => "tweop", "퉣" => "tweoh", "퉤" => "twe", "퉥" => "tweg", "퉦" => "twegg", "퉧" => "twegs",
+ "퉨" => "twen", "퉩" => "twenj", "퉪" => "twenh", "퉫" => "twed", "퉬" => "twel", "í‰" => "twelg",
+ "퉮" => "twelm", "퉯" => "twelb", "퉰" => "twels", "퉱" => "twelt", "퉲" => "twelp", "퉳" => "twelh",
+ "퉴" => "twem", "퉵" => "tweb", "퉶" => "twebs", "퉷" => "twes", "퉸" => "twess", "퉹" => "tweng",
+ "퉺" => "twej", "퉻" => "twec", "퉼" => "twek", "퉽" => "twet", "퉾" => "twep", "퉿" => "tweh",
+ "í€" => "twi", "í" => "twig", "í‚" => "twigg", "íƒ" => "twigs", "í„" => "twin", "í…" => "twinj",
+ "í†" => "twinh", "í‡" => "twid", "íˆ" => "twil", "í‰" => "twilg", "í" => "twilm", "í‹" => "twilb",
+ "íŒ" => "twils", "í" => "twilt", "í" => "twilp", "í" => "twilh", "í" => "twim", "í‘" => "twib",
+ "í’" => "twibs", "í“" => "twis", "í”" => "twiss", "í•" => "twing", "í–" => "twij", "í—" => "twic",
+ "í˜" => "twik", "í™" => "twit", "í" => "twip", "í›" => "twih", "íœ" => "tyu", "í" => "tyug",
+ "í" => "tyugg", "íŸ" => "tyugs", "í " => "tyun", "í¡" => "tyunj", "í¢" => "tyunh", "í£" => "tyud",
+ "í¤" => "tyul", "í¥" => "tyulg", "í¦" => "tyulm", "í§" => "tyulb", "í¨" => "tyuls", "í©" => "tyult",
+ "íª" => "tyulp", "í«" => "tyulh", "í¬" => "tyum", "í" => "tyub", "í®" => "tyubs", "í¯" => "tyus",
+ "í°" => "tyuss", "í±" => "tyung", "í²" => "tyuj", "í³" => "tyuc", "í´" => "tyuk", "íµ" => "tyut",
+ "í¶" => "tyup", "í·" => "tyuh", "í¸" => "teu", "í¹" => "teug", "íº" => "teugg", "í»" => "teugs",
+ "í¼" => "teun", "í½" => "teunj", "í¾" => "teunh", "í¿" => "teud", "í‹€" => "teul", "í‹" => "teulg",
+ "틂" => "teulm", "틃" => "teulb", "틄" => "teuls", "틅" => "teult", "틆" => "teulp", "틇" => "teulh",
+ "틈" => "teum", "틉" => "teub", "í‹" => "teubs", "í‹‹" => "teus", "í‹Œ" => "teuss", "í‹" => "teung",
+ "í‹" => "teuj", "í‹" => "teuc", "í‹" => "teuk", "í‹‘" => "teut", "í‹’" => "teup", "í‹“" => "teuh",
+ "틔" => "tyi", "틕" => "tyig", "틖" => "tyigg", "틗" => "tyigs", "틘" => "tyin", "틙" => "tyinj",
+ "í‹" => "tyinh", "í‹›" => "tyid", "í‹œ" => "tyil", "í‹" => "tyilg", "í‹" => "tyilm", "í‹Ÿ" => "tyilb",
+ "í‹ " => "tyils", "í‹¡" => "tyilt", "í‹¢" => "tyilp", "í‹£" => "tyilh", "틤" => "tyim", "í‹¥" => "tyib",
+ "틦" => "tyibs", "틧" => "tyis", "틨" => "tyiss", "틩" => "tying", "틪" => "tyij", "틫" => "tyic",
+ "틬" => "tyik", "í‹" => "tyit", "í‹®" => "tyip", "틯" => "tyih", "í‹°" => "ti", "틱" => "tig",
+ "틲" => "tigg", "틳" => "tigs", "틴" => "tin", "틵" => "tinj", "틶" => "tinh", "틷" => "tid",
+ "틸" => "til", "틹" => "tilg", "틺" => "tilm", "틻" => "tilb", "틼" => "tils", "틽" => "tilt",
+ "틾" => "tilp", "í‹¿" => "tilh", "íŒ" => "tib", "팂" => "tibs", "팃" => "tis", "팄" => "tiss",
+ "팅" => "ting", "팆" => "tij", "팇" => "tic", "팈" => "tik", "팉" => "tit", "íŒ" => "tip",
+ "팋" => "tih", "파" => "pa", "íŒ" => "pag", "íŒ" => "pagg", "íŒ" => "pags", "íŒ" => "pan",
+ "팑" => "panj", "팒" => "panh", "팓" => "pad", "팔" => "pal", "팕" => "palg", "팖" => "palm",
+ "팗" => "palb", "팘" => "pals", "팙" => "palt", "íŒ" => "palp", "팛" => "palh", "팜" => "pam",
+ "íŒ" => "pab", "íŒ" => "pabs", "팟" => "pas", "íŒ " => "pass", "팡" => "pang", "팢" => "paj",
+ "팣" => "pac", "팤" => "pak", "팥" => "pat", "팦" => "pap", "팧" => "pah", "패" => "pae",
+ "팩" => "paeg", "팪" => "paegg", "팫" => "paegs", "팬" => "paen", "íŒ" => "paenj", "팮" => "paenh",
+ "팯" => "paed", "팰" => "pael", "팱" => "paelg", "팲" => "paelm", "팳" => "paelb", "팴" => "paels",
+ "팵" => "paelt", "팶" => "paelp", "팷" => "paelh", "팸" => "paem", "팹" => "paeb", "팺" => "paebs",
+ "팻" => "paes", "팼" => "paess", "팽" => "paeng", "팾" => "paej", "팿" => "paec", "í€" => "paek",
+ "í" => "paet", "í‚" => "paep", "íƒ" => "paeh", "í„" => "pya", "í…" => "pyag", "í†" => "pyagg",
+ "í‡" => "pyags", "íˆ" => "pyan", "í‰" => "pyanj", "í" => "pyanh", "í‹" => "pyad", "íŒ" => "pyal",
+ "í" => "pyalg", "í" => "pyalm", "í" => "pyalb", "í" => "pyals", "í‘" => "pyalt", "í’" => "pyalp",
+ "í“" => "pyalh", "í”" => "pyam", "í•" => "pyab", "í–" => "pyabs", "í—" => "pyas", "í˜" => "pyass",
+ "í™" => "pyang", "í" => "pyaj", "í›" => "pyac", "íœ" => "pyak", "í" => "pyat", "í" => "pyap",
+ "íŸ" => "pyah", "í " => "pyae", "í¡" => "pyaeg", "í¢" => "pyaegg", "í£" => "pyaegs", "í¤" => "pyaen",
+ "í¥" => "pyaenj", "í¦" => "pyaenh", "í§" => "pyaed", "í¨" => "pyael", "í©" => "pyaelg", "íª" => "pyaelm",
+ "í«" => "pyaelb", "í¬" => "pyaels", "í" => "pyaelt", "í®" => "pyaelp", "í¯" => "pyaelh", "í°" => "pyaem",
+ "í±" => "pyaeb", "í²" => "pyaebs", "í³" => "pyaes", "í´" => "pyaess", "íµ" => "pyaeng", "í¶" => "pyaej",
+ "í·" => "pyaec", "í¸" => "pyaek", "í¹" => "pyaet", "íº" => "pyaep", "í»" => "pyaeh", "í¼" => "peo",
+ "í½" => "peog", "í¾" => "peogg", "í¿" => "peogs", "í€" => "peon", "í" => "peonj", "í‚" => "peonh",
+ "íƒ" => "peod", "í„" => "peol", "í…" => "peolg", "í†" => "peolm", "í‡" => "peolb", "íˆ" => "peols",
+ "í‰" => "peolt", "í" => "peolp", "í‹" => "peolh", "íŒ" => "peom", "í" => "peob", "í" => "peobs",
+ "í" => "peos", "í" => "peoss", "í‘" => "peong", "í’" => "peoj", "í“" => "peoc", "í”" => "peok",
+ "í•" => "peot", "í–" => "peop", "í—" => "peoh", "í˜" => "pe", "í™" => "peg", "í" => "pegg",
+ "í›" => "pegs", "íœ" => "pen", "í" => "penj", "í" => "penh", "íŸ" => "ped", "í " => "pel",
+ "í¡" => "pelg", "í¢" => "pelm", "í£" => "pelb", "í¤" => "pels", "í¥" => "pelt", "í¦" => "pelp",
+ "í§" => "pelh", "í¨" => "pem", "í©" => "peb", "íª" => "pebs", "í«" => "pes", "í¬" => "pess",
+ "í" => "peng", "í®" => "pej", "í¯" => "pec", "í°" => "pek", "í±" => "pet", "í²" => "pep",
+ "í³" => "peh", "í´" => "pyeo", "íµ" => "pyeog", "í¶" => "pyeogg", "í·" => "pyeogs", "í¸" => "pyeon",
+ "í¹" => "pyeonj", "íº" => "pyeonh", "í»" => "pyeod", "í¼" => "pyeol", "í½" => "pyeolg", "í¾" => "pyeolm",
+ "í¿" => "pyeolb", "í€" => "pyeols", "í" => "pyeolt", "í‚" => "pyeolp", "íƒ" => "pyeolh", "í„" => "pyeom",
+ "í…" => "pyeob", "í†" => "pyeobs", "í‡" => "pyeos", "íˆ" => "pyeoss", "í‰" => "pyeong", "í" => "pyeoj",
+ "í‹" => "pyeoc", "íŒ" => "pyeok", "í" => "pyeot", "í" => "pyeop", "í" => "pyeoh", "í" => "pye",
+ "í‘" => "pyeg", "í’" => "pyegg", "í“" => "pyegs", "í”" => "pyen", "í•" => "pyenj", "í–" => "pyenh",
+ "í—" => "pyed", "í˜" => "pyel", "í™" => "pyelg", "í" => "pyelm", "í›" => "pyelb", "íœ" => "pyels",
+ "í" => "pyelt", "í" => "pyelp", "íŸ" => "pyelh", "í " => "pyem", "í¡" => "pyeb", "í¢" => "pyebs",
+ "í£" => "pyes", "í¤" => "pyess", "í¥" => "pyeng", "í¦" => "pyej", "í§" => "pyec", "í¨" => "pyek",
+ "í©" => "pyet", "íª" => "pyep", "í«" => "pyeh", "í¬" => "po", "í" => "pog", "í®" => "pogg",
+ "í¯" => "pogs", "í°" => "pon", "í±" => "ponj", "í²" => "ponh", "í³" => "pod", "í´" => "pol",
+ "íµ" => "polg", "í¶" => "polm", "í·" => "polb", "í¸" => "pols", "í¹" => "polt", "íº" => "polp",
+ "í»" => "polh", "í¼" => "pom", "í½" => "pob", "í¾" => "pobs", "í¿" => "pos", "í" => "pong",
+ "í‚" => "poj", "íƒ" => "poc", "í„" => "pok", "í…" => "pot", "í†" => "pop", "í‡" => "poh",
+ "íˆ" => "pwa", "í‰" => "pwag", "í" => "pwagg", "í‹" => "pwags", "íŒ" => "pwan", "í" => "pwanj",
+ "í" => "pwanh", "í" => "pwad", "í" => "pwal", "í‘" => "pwalg", "í’" => "pwalm", "í“" => "pwalb",
+ "í”" => "pwals", "í•" => "pwalt", "í–" => "pwalp", "í—" => "pwalh", "í˜" => "pwam", "í™" => "pwab",
+ "í" => "pwabs", "í›" => "pwas", "íœ" => "pwass", "í" => "pwang", "í" => "pwaj", "íŸ" => "pwac",
+ "í " => "pwak", "í¡" => "pwat", "í¢" => "pwap", "í£" => "pwah", "í¤" => "pwae", "í¥" => "pwaeg",
+ "í¦" => "pwaegg", "í§" => "pwaegs", "í¨" => "pwaen", "í©" => "pwaenj", "íª" => "pwaenh", "í«" => "pwaed",
+ "í¬" => "pwael", "í" => "pwaelg", "í®" => "pwaelm", "í¯" => "pwaelb", "í°" => "pwaels", "í±" => "pwaelt",
+ "í²" => "pwaelp", "í³" => "pwaelh", "í´" => "pwaem", "íµ" => "pwaeb", "í¶" => "pwaebs", "í·" => "pwaes",
+ "í¸" => "pwaess", "í¹" => "pwaeng", "íº" => "pwaej", "í»" => "pwaec", "í¼" => "pwaek", "í½" => "pwaet",
+ "í¾" => "pwaep", "í¿" => "pwaeh", "í‘€" => "poe", "í‘" => "poeg", "í‘‚" => "poegg", "푃" => "poegs",
+ "푄" => "poen", "푅" => "poenj", "푆" => "poenh", "푇" => "poed", "푈" => "poel", "푉" => "poelg",
+ "í‘" => "poelm", "í‘‹" => "poelb", "í‘Œ" => "poels", "í‘" => "poelt", "í‘" => "poelp", "í‘" => "poelh",
+ "í‘" => "poem", "í‘‘" => "poeb", "í‘’" => "poebs", "í‘“" => "poes", "í‘”" => "poess", "í‘•" => "poeng",
+ "í‘–" => "poej", "í‘—" => "poec", "푘" => "poek", "í‘™" => "poet", "í‘" => "poep", "í‘›" => "poeh",
+ "í‘œ" => "pyo", "í‘" => "pyog", "í‘" => "pyogg", "í‘Ÿ" => "pyogs", "í‘ " => "pyon", "í‘¡" => "pyonj",
+ "푢" => "pyonh", "푣" => "pyod", "푤" => "pyol", "푥" => "pyolg", "푦" => "pyolm", "푧" => "pyolb",
+ "푨" => "pyols", "í‘©" => "pyolt", "푪" => "pyolp", "í‘«" => "pyolh", "푬" => "pyom", "í‘" => "pyob",
+ "푮" => "pyobs", "푯" => "pyos", "푰" => "pyoss", "푱" => "pyong", "푲" => "pyoj", "푳" => "pyoc",
+ "푴" => "pyok", "푵" => "pyot", "푶" => "pyop", "푷" => "pyoh", "푸" => "pu", "푹" => "pug",
+ "푺" => "pugg", "푻" => "pugs", "푼" => "pun", "푽" => "punj", "푾" => "punh", "푿" => "pud",
+ "í’€" => "pul", "í’" => "pulg", "í’‚" => "pulm", "í’ƒ" => "pulb", "í’„" => "puls", "í’…" => "pult",
+ "í’†" => "pulp", "í’‡" => "pulh", "í’ˆ" => "pum", "í’‰" => "pub", "í’" => "pubs", "í’‹" => "pus",
+ "í’Œ" => "puss", "í’" => "pung", "í’" => "puj", "í’" => "puc", "í’" => "puk", "í’‘" => "put",
+ "í’’" => "pup", "í’“" => "puh", "í’”" => "pweo", "í’•" => "pweog", "í’–" => "pweogg", "í’—" => "pweogs",
+ "í’˜" => "pweon", "í’™" => "pweonj", "í’" => "pweonh", "í’›" => "pweod", "í’œ" => "pweol", "í’" => "pweolg",
+ "í’" => "pweolm", "í’Ÿ" => "pweolb", "í’ " => "pweols", "í’¡" => "pweolt", "í’¢" => "pweolp", "í’£" => "pweolh",
+ "í’¤" => "pweom", "í’¥" => "pweob", "í’¦" => "pweobs", "í’§" => "pweos", "í’¨" => "pweoss", "í’©" => "pweong",
+ "í’ª" => "pweoj", "í’«" => "pweoc", "í’¬" => "pweok", "í’" => "pweot", "í’®" => "pweop", "í’¯" => "pweoh",
+ "í’°" => "pwe", "í’±" => "pweg", "í’²" => "pwegg", "í’³" => "pwegs", "í’´" => "pwen", "í’µ" => "pwenj",
+ "í’¶" => "pwenh", "í’·" => "pwed", "í’¸" => "pwel", "í’¹" => "pwelg", "í’º" => "pwelm", "í’»" => "pwelb",
+ "í’¼" => "pwels", "í’½" => "pwelt", "í’¾" => "pwelp", "í’¿" => "pwelh", "í“€" => "pwem", "í“" => "pweb",
+ "퓂" => "pwebs", "퓃" => "pwes", "퓄" => "pwess", "퓅" => "pweng", "퓆" => "pwej", "퓇" => "pwec",
+ "퓈" => "pwek", "퓉" => "pwet", "í“" => "pwep", "í“‹" => "pweh", "í“Œ" => "pwi", "í“" => "pwig",
+ "í“" => "pwigg", "í“" => "pwigs", "í“" => "pwin", "í“‘" => "pwinj", "í“’" => "pwinh", "í““" => "pwid",
+ "퓔" => "pwil", "퓕" => "pwilg", "퓖" => "pwilm", "퓗" => "pwilb", "퓘" => "pwils", "퓙" => "pwilt",
+ "í“" => "pwilp", "í“›" => "pwilh", "í“œ" => "pwim", "í“" => "pwib", "í“" => "pwibs", "í“Ÿ" => "pwis",
+ "í“ " => "pwiss", "í“¡" => "pwing", "í“¢" => "pwij", "í“£" => "pwic", "퓤" => "pwik", "í“¥" => "pwit",
+ "퓦" => "pwip", "퓧" => "pwih", "퓨" => "pyu", "퓩" => "pyug", "퓪" => "pyugg", "퓫" => "pyugs",
+ "퓬" => "pyun", "í“" => "pyunj", "í“®" => "pyunh", "퓯" => "pyud", "í“°" => "pyul", "퓱" => "pyulg",
+ "퓲" => "pyulm", "퓳" => "pyulb", "퓴" => "pyuls", "퓵" => "pyult", "퓶" => "pyulp", "퓷" => "pyulh",
+ "퓸" => "pyum", "퓹" => "pyub", "퓺" => "pyubs", "퓻" => "pyus", "퓼" => "pyuss", "퓽" => "pyung",
+ "퓾" => "pyuj", "í“¿" => "pyuc", "í”" => "pyut", "픂" => "pyup", "픃" => "pyuh", "프" => "peu",
+ "í”…" => "peug", "픆" => "peugg", "픇" => "peugs", "픈" => "peun", "픉" => "peunj", "í”" => "peunh",
+ "픋" => "peud", "플" => "peul", "í”" => "peulg", "í”" => "peulm", "í”" => "peulb", "í”" => "peuls",
+ "픑" => "peult", "픒" => "peulp", "픓" => "peulh", "픔" => "peum", "픕" => "peub", "픖" => "peubs",
+ "í”—" => "peus", "픘" => "peuss", "í”™" => "peung", "í”" => "peuj", "í”›" => "peuc", "픜" => "peuk",
+ "í”" => "peut", "í”" => "peup", "픟" => "peuh", "í” " => "pyi", "픡" => "pyig", "픢" => "pyigg",
+ "픣" => "pyigs", "픤" => "pyin", "픥" => "pyinj", "픦" => "pyinh", "픧" => "pyid", "픨" => "pyil",
+ "픩" => "pyilg", "픪" => "pyilm", "픫" => "pyilb", "픬" => "pyils", "í”" => "pyilt", "í”®" => "pyilp",
+ "픯" => "pyilh", "픰" => "pyim", "픱" => "pyib", "픲" => "pyibs", "픳" => "pyis", "픴" => "pyiss",
+ "픵" => "pying", "픶" => "pyij", "픷" => "pyic", "픸" => "pyik", "픹" => "pyit", "픺" => "pyip",
+ "픻" => "pyih", "피" => "pi", "픽" => "pig", "픾" => "pigg", "픿" => "pigs", "핀" => "pin",
+ "í•" => "pinj", "í•‚" => "pinh", "핃" => "pid", "í•„" => "pil", "í•…" => "pilg", "핆" => "pilm",
+ "핇" => "pilb", "핈" => "pils", "핉" => "pilt", "í•" => "pilp", "í•‹" => "pilh", "í•Œ" => "pim",
+ "í•" => "pib", "í•" => "pibs", "í•" => "pis", "í•" => "piss", "í•‘" => "ping", "í•’" => "pij",
+ "핓" => "pic", "핔" => "pik", "핕" => "pit", "핖" => "pip", "핗" => "pih", "하" => "ha",
+ "í•™" => "hag", "í•" => "hagg", "í•›" => "hags", "í•œ" => "han", "í•" => "hanj", "í•" => "hanh",
+ "í•Ÿ" => "had", "í• " => "hal", "í•¡" => "halg", "í•¢" => "halm", "í•£" => "halb", "핤" => "hals",
+ "핥" => "halt", "핦" => "halp", "핧" => "halh", "함" => "ham", "합" => "hab", "핪" => "habs",
+ "í•«" => "has", "핬" => "hass", "í•" => "hang", "í•®" => "haj", "핯" => "hac", "í•°" => "hak",
+ "핱" => "hat", "핲" => "hap", "핳" => "hah", "해" => "hae", "핵" => "haeg", "핶" => "haegg",
+ "핷" => "haegs", "핸" => "haen", "핹" => "haenj", "핺" => "haenh", "핻" => "haed", "핼" => "hael",
+ "핽" => "haelg", "핾" => "haelm", "í•¿" => "haelb", "í–€" => "haels", "í–" => "haelt", "í–‚" => "haelp",
+ "í–ƒ" => "haelh", "í–„" => "haem", "í–…" => "haeb", "í–†" => "haebs", "í–‡" => "haes", "í–ˆ" => "haess",
+ "í–‰" => "haeng", "í–" => "haej", "í–‹" => "haec", "í–Œ" => "haek", "í–" => "haet", "í–" => "haep",
+ "í–" => "haeh", "í–" => "hya", "í–‘" => "hyag", "í–’" => "hyagg", "í–“" => "hyags", "í–”" => "hyan",
+ "í–•" => "hyanj", "í––" => "hyanh", "í–—" => "hyad", "í–˜" => "hyal", "í–™" => "hyalg", "í–" => "hyalm",
+ "í–›" => "hyalb", "í–œ" => "hyals", "í–" => "hyalt", "í–" => "hyalp", "í–Ÿ" => "hyalh", "í– " => "hyam",
+ "í–¡" => "hyab", "í–¢" => "hyabs", "í–£" => "hyas", "í–¤" => "hyass", "í–¥" => "hyang", "í–¦" => "hyaj",
+ "í–§" => "hyac", "í–¨" => "hyak", "í–©" => "hyat", "í–ª" => "hyap", "í–«" => "hyah", "í–¬" => "hyae",
+ "í–" => "hyaeg", "í–®" => "hyaegg", "í–¯" => "hyaegs", "í–°" => "hyaen", "í–±" => "hyaenj", "í–²" => "hyaenh",
+ "í–³" => "hyaed", "í–´" => "hyael", "í–µ" => "hyaelg", "í–¶" => "hyaelm", "í–·" => "hyaelb", "í–¸" => "hyaels",
+ "í–¹" => "hyaelt", "í–º" => "hyaelp", "í–»" => "hyaelh", "í–¼" => "hyaem", "í–½" => "hyaeb", "í–¾" => "hyaebs",
+ "í–¿" => "hyaes", "í—€" => "hyaess", "í—" => "hyaeng", "í—‚" => "hyaej", "í—ƒ" => "hyaec", "í—„" => "hyaek",
+ "í—…" => "hyaet", "í—†" => "hyaep", "í—‡" => "hyaeh", "í—ˆ" => "heo", "í—‰" => "heog", "í—" => "heogg",
+ "í—‹" => "heogs", "í—Œ" => "heon", "í—" => "heonj", "í—" => "heonh", "í—" => "heod", "í—" => "heol",
+ "í—‘" => "heolg", "í—’" => "heolm", "í—“" => "heolb", "í—”" => "heols", "í—•" => "heolt", "í—–" => "heolp",
+ "í——" => "heolh", "í—˜" => "heom", "í—™" => "heob", "í—" => "heobs", "í—›" => "heos", "í—œ" => "heoss",
+ "í—" => "heong", "í—" => "heoj", "í—Ÿ" => "heoc", "í— " => "heok", "í—¡" => "heot", "í—¢" => "heop",
+ "í—£" => "heoh", "í—¤" => "he", "í—¥" => "heg", "í—¦" => "hegg", "í—§" => "hegs", "í—¨" => "hen",
+ "í—©" => "henj", "í—ª" => "henh", "í—«" => "hed", "í—¬" => "hel", "í—" => "helg", "í—®" => "helm",
+ "í—¯" => "helb", "í—°" => "hels", "í—±" => "helt", "í—²" => "help", "í—³" => "helh", "í—´" => "hem",
+ "í—µ" => "heb", "í—¶" => "hebs", "í—·" => "hes", "í—¸" => "hess", "í—¹" => "heng", "í—º" => "hej",
+ "í—»" => "hec", "í—¼" => "hek", "í—½" => "het", "í—¾" => "hep", "í—¿" => "heh", "í˜" => "hyeog",
+ "혂" => "hyeogg", "혃" => "hyeogs", "현" => "hyeon", "혅" => "hyeonj", "혆" => "hyeonh", "혇" => "hyeod",
+ "혈" => "hyeol", "혉" => "hyeolg", "í˜" => "hyeolm", "혋" => "hyeolb", "혌" => "hyeols", "í˜" => "hyeolt",
+ "í˜" => "hyeolp", "í˜" => "hyeolh", "í˜" => "hyeom", "협" => "hyeob", "혒" => "hyeobs", "혓" => "hyeos",
+ "혔" => "hyeoss", "형" => "hyeong", "혖" => "hyeoj", "혗" => "hyeoc", "혘" => "hyeok", "혙" => "hyeot",
+ "í˜" => "hyeop", "혛" => "hyeoh", "혜" => "hye", "í˜" => "hyeg", "í˜" => "hyegg", "혟" => "hyegs",
+ "í˜ " => "hyen", "혡" => "hyenj", "혢" => "hyenh", "혣" => "hyed", "혤" => "hyel", "혥" => "hyelg",
+ "혦" => "hyelm", "혧" => "hyelb", "혨" => "hyels", "혩" => "hyelt", "혪" => "hyelp", "혫" => "hyelh",
+ "혬" => "hyem", "í˜" => "hyeb", "혮" => "hyebs", "혯" => "hyes", "혰" => "hyess", "혱" => "hyeng",
+ "혲" => "hyej", "혳" => "hyec", "혴" => "hyek", "혵" => "hyet", "혶" => "hyep", "혷" => "hyeh",
+ "호" => "ho", "혹" => "hog", "혺" => "hogg", "혻" => "hogs", "혼" => "hon", "혽" => "honj",
+ "혾" => "honh", "혿" => "hod", "홀" => "hol", "í™" => "holg", "홂" => "holm", "홃" => "holb",
+ "홄" => "hols", "홅" => "holt", "홆" => "holp", "홇" => "holh", "홈" => "hom", "홉" => "hob",
+ "í™" => "hobs", "홋" => "hos", "홌" => "hoss", "í™" => "hong", "í™" => "hoj", "í™" => "hoc",
+ "í™" => "hok", "홑" => "hot", "í™’" => "hop", "홓" => "hoh", "í™”" => "hwa", "확" => "hwag",
+ "í™–" => "hwagg", "í™—" => "hwags", "환" => "hwan", "í™™" => "hwanj", "í™" => "hwanh", "í™›" => "hwad",
+ "활" => "hwal", "í™" => "hwalg", "í™" => "hwalm", "홟" => "hwalb", "í™ " => "hwals", "홡" => "hwalt",
+ "홢" => "hwalp", "홣" => "hwalh", "홤" => "hwam", "홥" => "hwab", "홦" => "hwabs", "홧" => "hwas",
+ "홨" => "hwass", "황" => "hwang", "홪" => "hwaj", "홫" => "hwac", "홬" => "hwak", "í™" => "hwat",
+ "홮" => "hwap", "홯" => "hwah", "홰" => "hwae", "홱" => "hwaeg", "홲" => "hwaegg", "홳" => "hwaegs",
+ "홴" => "hwaen", "홵" => "hwaenj", "홶" => "hwaenh", "홷" => "hwaed", "홸" => "hwael", "홹" => "hwaelg",
+ "홺" => "hwaelm", "홻" => "hwaelb", "홼" => "hwaels", "홽" => "hwaelt", "홾" => "hwaelp", "홿" => "hwaelh",
+ "í€" => "hwaem", "í" => "hwaeb", "í‚" => "hwaebs", "íƒ" => "hwaes", "í„" => "hwaess", "í…" => "hwaeng",
+ "í†" => "hwaej", "í‡" => "hwaec", "íˆ" => "hwaek", "í‰" => "hwaet", "í" => "hwaep", "í‹" => "hwaeh",
+ "íŒ" => "hoe", "í" => "hoeg", "í" => "hoegg", "í" => "hoegs", "í" => "hoen", "í‘" => "hoenj",
+ "í’" => "hoenh", "í“" => "hoed", "í”" => "hoel", "í•" => "hoelg", "í–" => "hoelm", "í—" => "hoelb",
+ "í˜" => "hoels", "í™" => "hoelt", "í" => "hoelp", "í›" => "hoelh", "íœ" => "hoem", "í" => "hoeb",
+ "í" => "hoebs", "íŸ" => "hoes", "í " => "hoess", "í¡" => "hoeng", "í¢" => "hoej", "í£" => "hoec",
+ "í¤" => "hoek", "í¥" => "hoet", "í¦" => "hoep", "í§" => "hoeh", "í¨" => "hyo", "í©" => "hyog",
+ "íª" => "hyogg", "í«" => "hyogs", "í¬" => "hyon", "í" => "hyonj", "í®" => "hyonh", "í¯" => "hyod",
+ "í°" => "hyol", "í±" => "hyolg", "í²" => "hyolm", "í³" => "hyolb", "í´" => "hyols", "íµ" => "hyolt",
+ "í¶" => "hyolp", "í·" => "hyolh", "í¸" => "hyom", "í¹" => "hyob", "íº" => "hyobs", "í»" => "hyos",
+ "í¼" => "hyoss", "í½" => "hyong", "í¾" => "hyoj", "í¿" => "hyoc", "훀" => "hyok", "í›" => "hyot",
+ "훂" => "hyop", "훃" => "hyoh", "후" => "hu", "훅" => "hug", "훆" => "hugg", "훇" => "hugs",
+ "훈" => "hun", "훉" => "hunj", "í›" => "hunh", "훋" => "hud", "훌" => "hul", "í›" => "hulg",
+ "í›" => "hulm", "í›" => "hulb", "í›" => "huls", "훑" => "hult", "í›’" => "hulp", "훓" => "hulh",
+ "훔" => "hum", "훕" => "hub", "훖" => "hubs", "훗" => "hus", "훘" => "huss", "훙" => "hung",
+ "í›" => "huj", "í››" => "huc", "훜" => "huk", "í›" => "hut", "í›" => "hup", "훟" => "huh",
+ "í› " => "hweo", "훡" => "hweog", "훢" => "hweogg", "훣" => "hweogs", "훤" => "hweon", "훥" => "hweonj",
+ "훦" => "hweonh", "훧" => "hweod", "훨" => "hweol", "훩" => "hweolg", "훪" => "hweolm", "훫" => "hweolb",
+ "훬" => "hweols", "í›" => "hweolt", "í›®" => "hweolp", "훯" => "hweolh", "í›°" => "hweom", "í›±" => "hweob",
+ "훲" => "hweobs", "훳" => "hweos", "훴" => "hweoss", "훵" => "hweong", "훶" => "hweoj", "훷" => "hweoc",
+ "훸" => "hweok", "훹" => "hweot", "훺" => "hweop", "훻" => "hweoh", "훼" => "hwe", "훽" => "hweg",
+ "훾" => "hwegg", "훿" => "hwegs", "íœ" => "hwenj", "휂" => "hwenh", "휃" => "hwed", "휄" => "hwel",
+ "휅" => "hwelg", "휆" => "hwelm", "휇" => "hwelb", "휈" => "hwels", "휉" => "hwelt", "íœ" => "hwelp",
+ "휋" => "hwelh", "휌" => "hwem", "íœ" => "hweb", "íœ" => "hwebs", "íœ" => "hwes", "íœ" => "hwess",
+ "휑" => "hweng", "휒" => "hwej", "휓" => "hwec", "휔" => "hwek", "휕" => "hwet", "휖" => "hwep",
+ "휗" => "hweh", "휘" => "hwi", "휙" => "hwig", "íœ" => "hwigg", "휛" => "hwigs", "휜" => "hwin",
+ "íœ" => "hwinj", "íœ" => "hwinh", "휟" => "hwid", "íœ " => "hwil", "휡" => "hwilg", "휢" => "hwilm",
+ "휣" => "hwilb", "휤" => "hwils", "휥" => "hwilt", "휦" => "hwilp", "휧" => "hwilh", "휨" => "hwim",
+ "휩" => "hwib", "휪" => "hwibs", "휫" => "hwis", "휬" => "hwiss", "íœ" => "hwing", "휮" => "hwij",
+ "휯" => "hwic", "휰" => "hwik", "휱" => "hwit", "휲" => "hwip", "휳" => "hwih", "휴" => "hyu",
+ "휵" => "hyug", "휶" => "hyugg", "휷" => "hyugs", "휸" => "hyun", "휹" => "hyunj", "휺" => "hyunh",
+ "휻" => "hyud", "휼" => "hyul", "휽" => "hyulg", "휾" => "hyulm", "휿" => "hyulb", "í€" => "hyuls",
+ "í" => "hyult", "í‚" => "hyulp", "íƒ" => "hyulh", "í„" => "hyum", "í…" => "hyub", "í†" => "hyubs",
+ "í‡" => "hyus", "íˆ" => "hyuss", "í‰" => "hyung", "í" => "hyuj", "í‹" => "hyuc", "íŒ" => "hyuk",
+ "í" => "hyut", "í" => "hyup", "í" => "hyuh", "í" => "heu", "í‘" => "heug", "í’" => "heugg",
+ "í“" => "heugs", "í”" => "heun", "í•" => "heunj", "í–" => "heunh", "í—" => "heud", "í˜" => "heul",
+ "í™" => "heulg", "í" => "heulm", "í›" => "heulb", "íœ" => "heuls", "í" => "heult", "í" => "heulp",
+ "íŸ" => "heulh", "í " => "heum", "í¡" => "heub", "í¢" => "heubs", "í£" => "heus", "í¤" => "heuss",
+ "í¥" => "heung", "í¦" => "heuj", "í§" => "heuc", "í¨" => "heuk", "í©" => "heut", "íª" => "heup",
+ "í«" => "heuh", "í¬" => "hyi", "í" => "hyig", "í®" => "hyigg", "í¯" => "hyigs", "í°" => "hyin",
+ "í±" => "hyinj", "í²" => "hyinh", "í³" => "hyid", "í´" => "hyil", "íµ" => "hyilg", "í¶" => "hyilm",
+ "í·" => "hyilb", "í¸" => "hyils", "í¹" => "hyilt", "íº" => "hyilp", "í»" => "hyilh", "í¼" => "hyim",
+ "í½" => "hyib", "í¾" => "hyibs", "í¿" => "hyis", "í€" => "hyiss", "í" => "hying", "í‚" => "hyij",
+ "íƒ" => "hyic", "í„" => "hyik", "í…" => "hyit", "í†" => "hyip", "í‡" => "hyih", "íˆ" => "hi",
+ "í‰" => "hig", "í" => "higg", "í‹" => "higs", "íŒ" => "hin", "í" => "hinj", "í" => "hinh",
+ "í" => "hid", "í" => "hil", "í‘" => "hilg", "í’" => "hilm", "í“" => "hilb", "í”" => "hils",
+ "í•" => "hilt", "í–" => "hilp", "í—" => "hilh", "í˜" => "him", "í™" => "hib", "í" => "hibs",
+ "í›" => "his", "íœ" => "hiss", "í" => "hing", "í" => "hij", "íŸ" => "hic", "í " => "hik",
+ "í¡" => "hit", "í¢" => "hip", "í£" => "hih", "ï¤" => "Kayng", "車" => "Ke", "賈" => "Ko",
+ "滑" => "Kol", "串" => "Koc", "句" => "Kwi", "龜" => "Kwi", "龜" => "Kyun", "契" => "Kul",
+ "ï¤" => "Kum", "喇" => "Na", "奈" => "Na", "ï¤" => "Na", "ï¤" => "La", "ï¤" => "Na",
+ "ï¤" => "Na", "螺" => "Na", "裸" => "Na", "邏" => "Na", "樂" => "Nak", "洛" => "Nak",
+ "烙" => "Nak", "珞" => "Nak", "落" => "Nak", "酪" => "Nak", "ï¤" => "Nak", "亂" => "Nan",
+ "卵" => "Nan", "ï¤" => "Nan", "ï¤" => "Nan", "蘭" => "Nan", "ï¤ " => "Nan", "嵐" => "Nam",
+ "濫" => "Nam", "藍" => "Nam", "襤" => "Nam", "拉" => "Nap", "臘" => "Nap", "蠟" => "Nap",
+ "廊" => "Nang", "朗" => "Nang", "浪" => "Nang", "狼" => "Nang", "郎" => "Nang", "ï¤" => "Nay",
+ "冷" => "Nayng", "勞" => "No", "擄" => "No", "櫓" => "No", "爐" => "No", "盧" => "No",
+ "老" => "No", "蘆" => "No", "虜" => "No", "路" => "No", "露" => "No", "魯" => "No",
+ "鷺" => "No", "碌" => "Nok", "祿" => "Nok", "綠" => "Nok", "菉" => "Nok", "錄" => "Nok",
+ "鹿" => "Nok", "ï¥" => "Non", "壟" => "Nong", "弄" => "Nong", "籠" => "Nong", "聾" => "Nong",
+ "牢" => "Noy", "磊" => "Noy", "賂" => "Noy", "雷" => "Noy", "ï¥" => "Nwu", "屢" => "Nwu",
+ "樓" => "Nwu", "ï¥" => "Nwu", "ï¥" => "Nwu", "ï¥" => "Nwu", "ï¥" => "Nwu", "陋" => "Nwu",
+ "勒" => "Nuk", "肋" => "Nuk", "凜" => "Num", "凌" => "Nung", "稜" => "Nung", "綾" => "Nung",
+ "菱" => "Nung", "陵" => "Nung", "ï¥" => "Twu", "拏" => "La", "樂" => "Lak", "ï¥" => "Lak",
+ "ï¥" => "Lan", "寧" => "Lyeng", "ï¥ " => "Lo", "率" => "Lyul", "異" => "Li", "北" => "Pey",
+ "磻" => "Pen", "便" => "Pyen", "復" => "Pwu", "不" => "Pwul", "泌" => "Pi", "數" => "Sak",
+ "索" => "Sak", "參" => "Sam", "塞" => "Sayk", "ï¥" => "Sayng", "葉" => "Sep", "說" => "Sey",
+ "殺" => "Sway", "辰" => "Sin", "沈" => "Sim", "拾" => "Sip", "若" => "Ya", "掠" => "Yak",
+ "略" => "Yak", "亮" => "Yang", "兩" => "Yang", "凉" => "Yang", "梁" => "Yang", "糧" => "Yang",
+ "良" => "Yang", "諒" => "Yang", "量" => "Yang", "勵" => "Ye", "呂" => "Ye", "ï¦" => "Ye",
+ "廬" => "Ye", "旅" => "Ye", "濾" => "Ye", "礪" => "Ye", "閭" => "Ye", "驪" => "Ye",
+ "麗" => "Ye", "黎" => "Ye", "ï¦" => "Yek", "曆" => "Yek", "歷" => "Yek", "ï¦" => "Yek",
+ "ï¦" => "Yen", "ï¦" => "Yen", "ï¦" => "Yen", "撚" => "Yen", "漣" => "Yen", "煉" => "Yen",
+ "璉" => "Yen", "秊" => "Yen", "練" => "Yen", "聯" => "Yen", "輦" => "Yen", "蓮" => "Yen",
+ "ï¦" => "Yen", "鍊" => "Yen", "列" => "Yel", "ï¦" => "Yel", "ï¦" => "Yel", "烈" => "Yel",
+ "ï¦ " => "Yel", "說" => "Yel", "廉" => "Yem", "念" => "Yem", "捻" => "Yem", "殮" => "Yem",
+ "簾" => "Yem", "獵" => "Yep", "令" => "Yeng", "囹" => "Yeng", "寧" => "Yeng", "嶺" => "Yeng",
+ "怜" => "Yeng", "ï¦" => "Yeng", "瑩" => "Yeng", "羚" => "Yeng", "聆" => "Yeng", "鈴" => "Yeng",
+ "零" => "Yeng", "靈" => "Yeng", "領" => "Yeng", "例" => "Yey", "禮" => "Yey", "醴" => "Yey",
+ "隸" => "Yey", "惡" => "O", "了" => "Yo", "僚" => "Yo", "寮" => "Yo", "尿" => "Yo",
+ "料" => "Yo", "樂" => "Yo", "燎" => "Yo", "ï§" => "Yo", "蓼" => "Yo", "遼" => "Yo",
+ "龍" => "Yong", "暈" => "Wun", "阮" => "Wen", "劉" => "Yu", "杻" => "Yu", "柳" => "Yu",
+ "ï§" => "Yu", "溜" => "Yu", "琉" => "Yu", "ï§" => "Yu", "ï§" => "Yu", "ï§" => "Yu",
+ "ï§" => "Yu", "六" => "Yuk", "戮" => "Yuk", "陸" => "Yuk", "倫" => "Yun", "崙" => "Yun",
+ "淪" => "Yun", "輪" => "Yun", "律" => "Yul", "慄" => "Yul", "ï§" => "Yul", "率" => "Yul",
+ "隆" => "Yung", "ï§" => "I", "ï§" => "I", "履" => "I", "ï§ " => "I", "李" => "I",
+ "梨" => "I", "泥" => "I", "理" => "I", "痢" => "I", "罹" => "I", "裏" => "I",
+ "裡" => "I", "里" => "I", "離" => "I", "匿" => "Ik", "溺" => "Ik", "ï§" => "In",
+ "燐" => "In", "璘" => "In", "藺" => "In", "隣" => "In", "鱗" => "In", "麟" => "In",
+ "林" => "Im", "淋" => "Im", "臨" => "Im", "立" => "Ip", "笠" => "Ip", "粒" => "Ip",
+ "狀" => "Cang", "炙" => "Cek", "識" => "Ci", "什" => "Cip", "茶" => "Cha", "刺" => "Chek",
+ "ï¨" => "Thak", "拓" => "Thak", "糖" => "Thang", "宅" => "Thayk", "洞" => "Thong", "暴" => "Pho",
+ "輻" => "Phok", "行" => "Hang", "降" => "Hang", "ï¨" => "Hyen", "廓" => "Hwak", "兀" => "Wu",
+ "ï¨" => "Huo", "ï¨" => "Zhong", "晴" => "Qing", "凞" => "Xi", "猪" => "Zhu", "益" => "Yi",
+ "礼" => "Li", "神" => "Shen", "ï¨" => "Xiang", "福" => "Fu", "靖" => "Jing", "ï¨" => "Jing",
+ "ï¨" => "Yu", "ï¨ " => "Hagi", "諸" => "Zhu", "逸" => "Yi", "都" => "Du", "飯" => "Fan",
+ "飼" => "Si", "館" => "Guan", "ï¬" => "fi", "fl" => "fl", "ffi" => "ffi", "ffl" => "ffl",
+ "ſt" => "st", "st" => "st", "ﬓ" => "mn", "ﬔ" => "me", "ﬕ" => "mi", "ﬖ" => "vn",
+ "ﬗ" => "mkh", "ï¬" => "yi", "ײַ" => "ay", "ﬢ" => "d", "ﬣ" => "h", "ﬤ" => "k",
+ "ﬥ" => "l", "ﬦ" => "m", "ﬧ" => "m", "ﬨ" => "t", "שׁ" => "sh", "שׂ" => "s",
+ "שּׁ" => "sh", "ï¬" => "s", "אַ" => "a", "אָ" => "a", "בּ" => "b", "גּ" => "g",
+ "דּ" => "d", "הּ" => "h", "וּ" => "v", "זּ" => "z", "טּ" => "t", "יּ" => "y",
+ "ךּ" => "k", "כּ" => "k", "לּ" => "l", "מּ" => "l", "ï€" => "n", "ï" => "n",
+ "ïƒ" => "p", "ï„" => "p", "ï†" => "ts", "ï‡" => "ts", "ïˆ" => "r", "ï‰" => "sh",
+ "ï" => "t", "ï‹" => "vo", "ïŒ" => "b", "ï" => "k", "ï" => "p", "ï" => "l",
+ "1" => "1", "2" => "2", "3" => "3", "4" => "4", "5" => "5", "6" => "6",
+ "7" => "7", "8" => "8", "9" => "9", "A" => "A", "B" => "B", "C" => "C",
+ "D" => "D", "E" => "E", "F" => "F", "G" => "G", "H" => "H", "I" => "I",
+ "J" => "J", "K" => "K", "L" => "L", "ï¼" => "M", "ï¼®" => "N", "O" => "O",
+ "ï¼°" => "P", "ï¼±" => "Q", "ï¼²" => "R", "ï¼³" => "S", "ï¼´" => "T", "ï¼µ" => "U",
+ "V" => "V", "ï¼·" => "W", "X" => "X", "ï¼¹" => "Y", "Z" => "Z", "ï½" => "a",
+ "b" => "b", "c" => "c", "d" => "d", "e" => "e", "f" => "f", "g" => "g",
+ "h" => "h", "i" => "i", "ï½" => "j", "k" => "k", "l" => "l", "ï½" => "m",
+ "ï½" => "n", "ï½" => "o", "ï½" => "p", "q" => "q", "ï½’" => "r", "s" => "s",
+ "t" => "t", "u" => "u", "v" => "v", "w" => "w", "x" => "x", "y" => "y",
+ "ï½" => "z", "ヲ" => "wo", "ァ" => "a", "ィ" => "i", "ゥ" => "u", "ェ" => "e",
+ "ォ" => "o", "ャ" => "ya", "ï½" => "yu", "ï½®" => "yo", "ッ" => "tu", "ï½±" => "a",
+ "イ" => "i", "ウ" => "u", "エ" => "e", "オ" => "o", "カ" => "ka", "キ" => "ki",
+ "ク" => "ku", "ケ" => "ke", "コ" => "ko", "サ" => "sa", "シ" => "si", "ス" => "su",
+ "ï½¾" => "se", "ソ" => "so", "ï¾€" => "ta", "ï¾" => "ti", "ツ" => "tu", "テ" => "te",
+ "ト" => "to", "ナ" => "na", "ニ" => "ni", "ヌ" => "nu", "ネ" => "ne", "ノ" => "no",
+ "ï¾" => "ha", "ヒ" => "hi", "フ" => "hu", "ï¾" => "he", "ï¾" => "ho", "ï¾" => "ma",
+ "ï¾" => "mi", "ム" => "mu", "ï¾’" => "me", "モ" => "mo", "ï¾”" => "ya", "ユ" => "yu",
+ "ï¾–" => "yo", "ï¾—" => "ra", "リ" => "ri", "ï¾™" => "ru", "ï¾" => "re", "ï¾›" => "ro",
+ "ワ" => "wa", "ï¾" => "n", "ᄀ" => "g", "ï¾¢" => "gg", "ï¾£" => "gs", "ᄂ" => "n",
+ "ᆬ" => "nj", "ᆭ" => "nh", "ᄃ" => "d", "ᄄ" => "dd", "ᄅ" => "r", "ᆰ" => "lg",
+ "ᆱ" => "lm", "ᆲ" => "lb", "ï¾" => "ls", "ï¾®" => "lt", "ᆵ" => "lp", "ï¾°" => "rh",
+ "ᄆ" => "m", "ᄇ" => "b", "ᄈ" => "bb", "ᄡ" => "bs", "ᄉ" => "s", "ᄊ" => "ss",
+ "ᄌ" => "j", "ᄍ" => "jj", "ᄎ" => "c", "ᄏ" => "k", "ᄐ" => "t", "ᄑ" => "p",
+ "ᄒ" => "h", "ᅡ" => "a", "ᅢ" => "ae", "ᅣ" => "ya", "ᅤ" => "yae", "ᅥ" => "eo",
+ "ᅦ" => "e", "ï¿" => "yeo", "ï¿‹" => "ye", "ï¿Œ" => "o", "ï¿" => "wa", "ï¿" => "wae",
+ "ï¿" => "oe", "ï¿’" => "yo", "ï¿“" => "u", "ï¿”" => "weo", "ï¿•" => "we", "ï¿–" => "wi",
+ "ï¿—" => "yu", "ï¿" => "eu", "ï¿›" => "yi", "ï¿œ" => "i", "ï¿ " => "C", "ï¿¡" => "PS",
+ "¥" => "Y=", "₩" => "W=", "○" => "O"
+ );
+
+ static function utf8_to_ascii($str) {
+ static $keys = null;
+ static $values = null;
+ if (!$keys) {
+ $keys = array_keys(self::$UTF8_TRANSLATE);
+ $values = array_values(self::$UTF8_TRANSLATE);
+ }
+
+ return str_replace($keys, $values, $str);
+ }
+}
diff --git a/3.0/modules/transliterate/module.info b/3.0/modules/transliterate/module.info
new file mode 100644
index 00000000..fd01e44c
--- /dev/null
+++ b/3.0/modules/transliterate/module.info
@@ -0,0 +1,7 @@
+name = "Transliterate"
+description = "Transliterate UTF8 text to ASCII equivalents."
+version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:transliterate"
+discuss_url = "http://gallery.menalto.com/forum_module_transliterate"
diff --git a/3.0/modules/transliterate/tests/Transliterate_Helper_Test.php b/3.0/modules/transliterate/tests/Transliterate_Helper_Test.php
new file mode 100644
index 00000000..f4b82102
--- /dev/null
+++ b/3.0/modules/transliterate/tests/Transliterate_Helper_Test.php
@@ -0,0 +1,31 @@
+assert_equal("Te glossa mou edosan ellenike",
+ transliterate::utf8_to_ascii("Τη γλÏσσα μου Îδωσαν ελληνική"));
+ $this->assert_equal("Na bierieghu pustynnykh voln",
+ transliterate::utf8_to_ascii("ĐĐ° Đ±ĐµÑ€ĐµĐ³Ñƒ Đ¿ÑƒÑÑ‚Ñ‹Đ½Đ½Ñ‹Ñ… Đ²Đ¾Đ»Đ½"));
+ $this->assert_equal("vepxis tqaosani shot`a rust`aveli",
+ transliterate::utf8_to_ascii("ვეáƒáƒ®áƒ˜áƒ¡ ტყáƒáƒáƒ¡áƒáƒœáƒ˜ შáƒáƒ—რრუსთáƒáƒ•áƒ”áƒáƒ˜"));
+ $this->assert_equal("WoNengTunXiaBoLiErBuShangShenTi",
+ transliterate::utf8_to_ascii("我能å下ç»ç’ƒè€Œä¸ä¼¤èº«ä½“"));
+ }
+}
diff --git a/3.0/modules/unrest/module.info b/3.0/modules/unrest/module.info
index aa1c5399..84be9620 100644
--- a/3.0/modules/unrest/module.info
+++ b/3.0/modules/unrest/module.info
@@ -1,3 +1,7 @@
name = "Un-Rest API module"
description = "Shorter invocations for the Rest API"
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:unrest"
+discuss_url = "http://gallery.menalto.com/forum_module_unrest"
diff --git a/3.0/modules/user_albums/module.info b/3.0/modules/user_albums/module.info
index 8e685e8c..548ea98e 100644
--- a/3.0/modules/user_albums/module.info
+++ b/3.0/modules/user_albums/module.info
@@ -1,3 +1,7 @@
name = "User Albums"
description = "Create a personal album for new users"
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:user_albums"
+discuss_url = "http://gallery.menalto.com/forum_module_user_albums"
diff --git a/3.0/modules/user_chroot/module.info b/3.0/modules/user_chroot/module.info
index 45346556..f10a4d8e 100644
--- a/3.0/modules/user_chroot/module.info
+++ b/3.0/modules/user_chroot/module.info
@@ -1,3 +1,7 @@
name = "Chroot Users"
description = "Restrict access to one album."
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:user_chroot"
+discuss_url = "http://gallery.menalto.com/forum_module_user_chroot"
diff --git a/3.0/modules/user_homes/module.info b/3.0/modules/user_homes/module.info
index eecff6c9..44ac5c26 100644
--- a/3.0/modules/user_homes/module.info
+++ b/3.0/modules/user_homes/module.info
@@ -1,3 +1,7 @@
name = "User Homes"
description = "Allows users to have home galleries that they are redirected to when logged in."
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:user_homes"
+discuss_url = "http://gallery.menalto.com/forum_module_user_homes"
diff --git a/3.0/modules/user_info/module.info b/3.0/modules/user_info/module.info
index a762be40..bc5ce7af 100644
--- a/3.0/modules/user_info/module.info
+++ b/3.0/modules/user_info/module.info
@@ -1,3 +1,7 @@
name = "User Info"
description = "Logs Login, Logout, Failed Login, Re-Authenticate, and User Created Information"
version = 2
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:user_info"
+discuss_url = "http://gallery.menalto.com/forum_module_user_info"
diff --git a/3.0/modules/user_rest/module.info b/3.0/modules/user_rest/module.info
index a06762e1..7db6e24b 100644
--- a/3.0/modules/user_rest/module.info
+++ b/3.0/modules/user_rest/module.info
@@ -1,3 +1,7 @@
name = "REST User Resource"
description = "Provides access to user names via the RESTful API"
version = 2
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:user_rest"
+discuss_url = "http://gallery.menalto.com/forum_module_user_rest"
diff --git a/3.0/modules/videodimensions/module.info b/3.0/modules/videodimensions/module.info
index 3c377b9d..df1acc3d 100644
--- a/3.0/modules/videodimensions/module.info
+++ b/3.0/modules/videodimensions/module.info
@@ -1,3 +1,7 @@
name = "VideoDimensions"
description = "Manually edit the dimensions of a video."
version = 1
+author_name = "rWatcher"
+author_url = "http://codex.gallery2.org/User:RWatcher"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:videodimensions"
+discuss_url = "http://gallery.menalto.com/node/90069"
diff --git a/3.0/modules/videos/controllers/admin_videos.php b/3.0/modules/videos/controllers/admin_videos.php
index afeb4353..81d691cb 100644
--- a/3.0/modules/videos/controllers/admin_videos.php
+++ b/3.0/modules/videos/controllers/admin_videos.php
@@ -17,10 +17,14 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
+
+// rWatcher EDIT: This file used to be admin_server_add.php.
+// All occurences of server_add have been replaced with videos.
+
class Admin_Videos_Controller extends Admin_Controller {
public function index() {
$view = new Admin_View("admin.html");
- $view->page_title = t("Add videos from server");
+ $view->page_title = t("Add from server");
$view->content = new View("admin_videos.html");
$view->content->form = $this->_get_admin_form();
$paths = unserialize(module::get_var("videos", "authorized_paths", "a:0:{}"));
diff --git a/3.0/modules/videos/controllers/file_proxy.php b/3.0/modules/videos/controllers/file_proxy.php
new file mode 100644
index 00000000..f69bff1b
--- /dev/null
+++ b/3.0/modules/videos/controllers/file_proxy.php
@@ -0,0 +1,144 @@
+server("REQUEST_URI"));
+
+ // get rid of query parameters
+ // request_uri: gallery3/var/albums/foo/bar.jpg
+ $request_uri = preg_replace("/\?.*/", "", $request_uri);
+
+ // var_uri: gallery3/var/
+ $var_uri = url::file("var/");
+
+ // Make sure that the request is for a file inside var
+ $offset = strpos(rawurldecode($request_uri), $var_uri);
+ if ($offset !== 0) {
+ throw new Kohana_404_Exception();
+ }
+
+ // file_uri: albums/foo/bar.jpg
+ $file_uri = substr($request_uri, strlen($var_uri));
+
+ // type: albums
+ // path: foo/bar.jpg
+ list ($type, $path) = explode("/", $file_uri, 2);
+ if ($type != "resizes" && $type != "albums" && $type != "thumbs") {
+ throw new Kohana_404_Exception();
+ }
+
+ // If the last element is .album.jpg, pop that off since it's not a real item
+ $path = preg_replace("|/.album.jpg$|", "", $path);
+
+ $item = item::find_by_path($path);
+ if (!$item->loaded()) {
+ // We didn't turn it up. If we're looking for a .jpg then it's it's possible that we're
+ // requesting the thumbnail for a movie. In that case, the .flv, .mp4 or .m4v file would
+ // have been converted to a .jpg. So try some alternate types:
+ if (preg_match('/.jpg$/', $path)) {
+ // rWatcher Mod: look for videos with file extensions supported by the videos module in addition to flv mp4 and m4v
+ // Original Line: foreach (array("flv", "mp4", "m4v") as $ext) {
+ foreach (array_merge(array("flv", "mp4", "m4v"), unserialize(module::get_var("videos", "allowed_extensions"))) as $ext) {
+ $movie_path = preg_replace('/.jpg$/', ".$ext", $path);
+ $item = item::find_by_path($movie_path);
+ if ($item->loaded()) {
+ break;
+ }
+ }
+ }
+ // rWatcher Mod:
+ // If we're looking for a .flv then it's it's possible that we're requesting a flash resize
+ // for a movie.
+ if (strtolower(substr($path, strlen($path)-4)) == ".flv") {
+ $movie_path = str_ireplace(".flv", "", $path);
+ $item = ORM::factory("item")->where("relative_path_cache", "=", $movie_path)->find();
+ }
+ // END rWatcher Mod
+ }
+
+ if (!$item->loaded()) {
+ throw new Kohana_404_Exception();
+ }
+
+ // Make sure we have access to the item
+ if (!access::can("view", $item)) {
+ throw new Kohana_404_Exception();
+ }
+
+ // Make sure we have view_full access to the original
+ if ($type == "albums" && !access::can("view_full", $item)) {
+ throw new Kohana_404_Exception();
+ }
+
+ // Don't try to load a directory
+ if ($type == "albums" && $item->is_album()) {
+ throw new Kohana_404_Exception();
+ }
+
+ if ($type == "albums") {
+ $file = $item->file_path();
+ } else if ($type == "resizes") {
+ $file = $item->resize_path();
+ // rWatcher MOD
+ // If the resize is for a movie, assume it needs a .flv extension.
+ if ($item->is_movie()) {
+ $file = $file . ".flv";
+ }
+ // End rWatcher MOD
+ } else {
+ $file = $item->thumb_path();
+ }
+
+ if (!file_exists($file)) {
+ throw new Kohana_404_Exception();
+ }
+
+ header("Content-Length: " . filesize($file));
+
+ header("Pragma:");
+ // Check that the content hasn't expired or it wasn't changed since cached
+ expires::check(2592000, $item->updated);
+
+ // We don't need to save the session for this request
+ Session::instance()->abort_save();
+
+ expires::set(2592000, $item->updated); // 30 days
+
+ // Dump out the image. If the item is a movie, then its thumbnail will be a JPG.
+ if ($item->is_movie() && $type != "albums") {
+ header("Content-Type: image/jpeg");
+ } else {
+ header("Content-Type: $item->mime_type");
+ }
+ Kohana::close_buffers(false);
+ readfile($file);
+ }
+}
diff --git a/3.0/modules/videos/controllers/videos.php b/3.0/modules/videos/controllers/videos.php
index 78121ae4..34461b3e 100644
--- a/3.0/modules/videos/controllers/videos.php
+++ b/3.0/modules/videos/controllers/videos.php
@@ -17,6 +17,12 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
+
+// rWatcher Edit: This file used to be server_add.php.
+// All occurences of server_add have been replaced with videos.
+// Additional editing has also been done in three places to expand accepted file
+// extensions and to create resizes and an extra db entry for items_videos.
+
class Videos_Controller extends Admin_Controller {
public function browse($id) {
$paths = unserialize(module::get_var("videos", "authorized_paths"));
@@ -24,6 +30,12 @@ class Videos_Controller extends Admin_Controller {
$files[] = $path;
}
+ // Clean leftover task rows. There really should be support for this in the task framework
+ db::build()
+ ->where("task_id", "NOT IN", db::build()->select("id")->from("tasks"))
+ ->delete("videos_entries")
+ ->execute();
+
$item = ORM::factory("item", $id);
$view = new View("videos_tree_dialog.html");
$view->item = $item;
@@ -55,6 +67,7 @@ class Videos_Controller extends Admin_Controller {
}
if (!is_dir($file)) {
$ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
+ // rWatcher Edit
//if (!in_array($ext, array("gif", "jpeg", "jpg", "png", "flv", "mp4", "m4v"))) {
if (!in_array($ext, unserialize(module::get_var("videos", "allowed_extensions")))) {
continue;
@@ -74,23 +87,28 @@ class Videos_Controller extends Admin_Controller {
}
/**
- * Begin the task of adding files.
+ * Begin the task of adding photos.
*/
public function start() {
access::verify_csrf();
$item = ORM::factory("item", Input::instance()->get("item_id"));
- foreach (Input::instance()->post("paths") as $path) {
- if (videos::is_valid_path($path)) {
- $paths[] = array($path, null);
- }
- }
-
$task_def = Task_Definition::factory()
->callback("Videos_Controller::add")
- ->description(t("Add videos from the local server"))
+ ->description(t("Add photos or movies from the local server"))
->name(t("Add from server"));
- $task = task::create($task_def, array("item_id" => $item->id, "queue" => $paths));
+ $task = task::create($task_def, array("item_id" => $item->id));
+
+ foreach (Input::instance()->post("paths") as $path) {
+ if (videos::is_valid_path($path)) {
+ $entry = ORM::factory("videos_entry");
+ $entry->path = $path;
+ $entry->is_directory = intval(is_dir($path));
+ $entry->parent_id = null;
+ $entry->task_id = $task->id;
+ $entry->save();
+ }
+ }
json::reply(
array("result" => "started",
@@ -99,7 +117,7 @@ class Videos_Controller extends Admin_Controller {
}
/**
- * Run the task of adding files
+ * Run the task of adding photos
*/
function run($task_id) {
access::verify_csrf();
@@ -119,7 +137,7 @@ class Videos_Controller extends Admin_Controller {
/**
* This is the task code that adds photos and albums. It first examines all the target files
- * and creates a set of Server_Add_File_Models, then runs through the list of models and adds
+ * and creates a set of Server_Add_Entry_Models, then runs through the list of models and adds
* them one at a time.
*/
static function add($task) {
@@ -129,6 +147,7 @@ class Videos_Controller extends Admin_Controller {
switch ($mode) {
case "init":
$task->set("mode", "build-file-list");
+ $task->set("dirs_scanned", 0);
$task->percent_complete = 0;
$task->status = t("Starting up");
batch::start();
@@ -137,59 +156,64 @@ class Videos_Controller extends Admin_Controller {
case "build-file-list": // 0% to 10%
// We can't fit an arbitrary number of paths in a task, so store them in a separate table.
// Don't use an iterator here because we can't get enough control over it when we're dealing
- // with a deep hierarchy and we don't want to go over our time quota. The queue is in the
- // form [path, parent_id] where the parent_id refers to another Server_Add_File_Model. We
- // have this extra level of abstraction because we don't know its Item_Model id yet.
- $queue = $task->get("queue");
+ // with a deep hierarchy and we don't want to go over our time quota.
$paths = unserialize(module::get_var("videos", "authorized_paths"));
+ $dirs_scanned = $task->get("dirs_scanned");
+ while (microtime(true) - $start < 0.5) {
+ // Process every directory that doesn't yet have a parent id, these are the
+ // paths that we're importing.
+ $entry = ORM::factory("videos_entry")
+ ->where("task_id", "=", $task->id)
+ ->where("is_directory", "=", 1)
+ ->where("checked", "=", 0)
+ ->order_by("id", "ASC")
+ ->find();
- while ($queue && microtime(true) - $start < 0.5) {
- list($file, $parent_entry_id) = array_shift($queue);
- // Ignore the staging directories as directories to be imported.
- if (empty($paths[$file])) {
- $entry = ORM::factory("videos_file");
- $entry->task_id = $task->id;
- $entry->file = $file;
- $entry->parent_id = $parent_entry_id;
- $entry->save();
- $entry_id = $entry->id;
- } else {
- $entry_id = null;
- }
-
- $file = preg_quote($file);
- foreach (glob("$file/*") as $child) {
- if (is_dir($child)) {
- $queue[] = array($child, $entry_id);
- } else {
- $ext = strtolower(pathinfo($child, PATHINFO_EXTENSION));
- //if (in_array($ext, array("gif", "jpeg", "jpg", "png", "flv", "mp4", "m4v")) &&
- if (in_array($ext, unserialize(module::get_var("videos", "allowed_extensions"))) &&
- filesize($child) > 0) {
- $child_entry = ORM::factory("videos_file");
- $child_entry->task_id = $task->id;
- $child_entry->file = $child;
- $child_entry->parent_id = $entry_id;
- $child_entry->save();
- }
+ if ($entry->loaded()) {
+ $child_paths = glob(preg_quote($entry->path) . "/*");
+ if (!$child_paths) {
+ $child_paths = glob("{$entry->path}/*");
}
+ foreach ($child_paths as $child_path) {
+ if (!is_dir($child_path)) {
+ $ext = strtolower(pathinfo($child_path, PATHINFO_EXTENSION));
+ // rWatcher Edit.
+ //if (!in_array($ext, array("gif", "jpeg", "jpg", "png", "flv", "mp4", "m4v")) ||
+ // !filesize($child_path)) {
+ if (!in_array($ext, unserialize(module::get_var("videos", "allowed_extensions"))) ||
+ !filesize($child_path)) {
+ // Not importable, skip it.
+ continue;
+ }
+ }
+
+ $child_entry = ORM::factory("videos_entry");
+ $child_entry->task_id = $task->id;
+ $child_entry->path = $child_path;
+ $child_entry->parent_id = $entry->id; // null if the parent was a staging dir
+ $child_entry->is_directory = is_dir($child_path);
+ $child_entry->save();
+ }
+
+ // We've processed this entry, mark it as done.
+ $entry->checked = 1;
+ $entry->save();
+ $dirs_scanned++;
}
}
// We have no idea how long this can take because we have no idea how deep the tree
// hierarchy rabbit hole goes. Leave ourselves room here for 100 iterations and don't go
// over 10% in percent_complete.
- $task->set("queue", $queue);
+ $task->set("dirs_scanned", $dirs_scanned);
$task->percent_complete = min($task->percent_complete + 0.1, 10);
- $task->status = t2(
- "Found one file", "Found %count files",
- ORM::factory("videos_file")->where("task_id", "=", $task->id)->count_all());
+ $task->status = t2("Scanned one directory", "Scanned %count directories", $dirs_scanned);
- if (!$queue) {
+ if (!$entry->loaded()) {
$task->set("mode", "add-files");
$task->set(
"total_files",
- ORM::factory("videos_file")->where("task_id", "=", $task->id)->count_all());
+ ORM::factory("videos_entry")->where("task_id", "=", $task->id)->count_all());
$task->percent_complete = 10;
}
break;
@@ -201,7 +225,7 @@ class Videos_Controller extends Admin_Controller {
// Ordering by id ensures that we add them in the order that we created the entries, which
// will create albums first. Ignore entries which already have an Item_Model attached,
// they're done.
- $entries = ORM::factory("videos_file")
+ $entries = ORM::factory("videos_entry")
->where("task_id", "=", $task->id)
->where("item_id", "IS", null)
->order_by("id", "ASC")
@@ -220,43 +244,59 @@ class Videos_Controller extends Admin_Controller {
// Look up the parent item for this entry. By now it should exist, but if none was
// specified, then this belongs as a child of the current item.
- $parent_entry = ORM::factory("videos_file", $entry->parent_id);
+ $parent_entry = ORM::factory("videos_entry", $entry->parent_id);
if (!$parent_entry->loaded()) {
$parent = ORM::factory("item", $task->get("item_id"));
} else {
$parent = ORM::factory("item", $parent_entry->item_id);
}
- $name = basename($entry->file);
+ $name = basename($entry->path);
$title = item::convert_filename_to_title($name);
- if (is_dir($entry->file)) {
+ if ($entry->is_directory) {
$album = ORM::factory("item");
$album->type = "album";
$album->parent_id = $parent->id;
$album->name = $name;
$album->title = $title;
$album->owner_id = $owner_id;
+ $album->sort_order = $parent->sort_order;
+ $album->sort_column = $parent->sort_column;
$album->save();
$entry->item_id = $album->id;
} else {
try {
$extension = strtolower(pathinfo($name, PATHINFO_EXTENSION));
- if (in_array($extension, unserialize(module::get_var("videos", "allowed_extensions")))) {
+ if (in_array($extension, array("gif", "png", "jpg", "jpeg"))) {
+ $photo = ORM::factory("item");
+ $photo->type = "photo";
+ $photo->parent_id = $parent->id;
+ $photo->set_data_file($entry->path);
+ $photo->name = $name;
+ $photo->title = $title;
+ $photo->owner_id = $owner_id;
+ $photo->save();
+ $entry->item_id = $photo->id;
+ // rWatcher EDIT
+ //} else if (in_array($extension, array("flv", "mp4", "m4v"))) {
+ } else if (in_array($extension, unserialize(module::get_var("videos", "allowed_extensions")))) {
$movie = ORM::factory("item");
$movie->type = "movie";
$movie->parent_id = $parent->id;
- $movie->set_data_file($entry->file);
+ $movie->set_data_file($entry->path);
$movie->name = $name;
$movie->title = $title;
$movie->owner_id = $owner_id;
$movie->save();
$entry->item_id = $movie->id;
+ // rWatcher EDIT: Add record to items_video db.
$items_video = ORM::factory("items_video");
$items_video->item_id = $movie->id;
$items_video->save();
- if (file_exists($entry->file . ".flv")) {
- copy($entry->file . ".flv", $movie->resize_path() . ".flv");
- list ($vid_width, $vid_height, $mime_type) = movie::get_file_metadata($entry->file . ".flv");
+ // rWatcher EDIT: Scan for flv resizes and copy to resize directory.
+ if (file_exists($entry->path . ".flv")) {
+ copy($entry->path . ".flv", $movie->resize_path() . ".flv");
+ list ($vid_width, $vid_height, $mime_type) = movie::get_file_metadata($entry->path . ".flv");
$movie->height = $vid_height;
$movie->width = $vid_width;
$movie->save();
@@ -266,12 +306,12 @@ class Videos_Controller extends Admin_Controller {
// process. But just in, case.. set this to a non-null value so that we skip this
// entry.
$entry->item_id = 0;
- $task->log("Skipping unknown file type: $entry->file");
+ $task->log("Skipping unknown file type: {$entry->path}");
}
} catch (Exception $e) {
// This can happen if a photo file is invalid, like a BMP masquerading as a .jpg
$entry->item_id = 0;
- $task->log("Skipping invalid file: $entry->file");
+ $task->log("Skipping invalid file: {$entry->file}");
}
}
@@ -290,12 +330,11 @@ class Videos_Controller extends Admin_Controller {
$task->done = true;
$task->state = "success";
$task->percent_complete = 100;
- db::build()
- ->delete("videos_files")
+ ORM::factory("videos_entry")
->where("task_id", "=", $task->id)
- ->execute();
- message::info(t2("Successfully added one file",
- "Successfully added %count files",
+ ->delete_all();
+ message::info(t2("Successfully added one photo / album",
+ "Successfully added %count photos / albums",
$task->get("completed_files")));
}
}
diff --git a/3.0/modules/videos/css/videos.css b/3.0/modules/videos/css/videos.css
index 36746ab5..559e5481 100644
--- a/3.0/modules/videos/css/videos.css
+++ b/3.0/modules/videos/css/videos.css
@@ -1,23 +1,23 @@
-#g-server-add button {
+#g-videos button {
margin-bottom: .5em;
}
-#g-server-add-tree {
+#g-videos-tree {
cursor: pointer;
padding-left: 4px;
width: 95%;
}
-#g-server-add-tree li {
+#g-videos-tree li {
padding: 0;
float: none;
}
-#g-server-add-tree span.selected {
+#g-videos-tree span.selected {
background: #ddd;
}
-#g-server-add-tree {
+#g-videos-tree {
border: 1px solid #ccc;
height: 20em;
overflow: auto;
@@ -25,14 +25,14 @@
padding: .5em;
}
-#g-server-add ul ul li {
+#g-videos ul ul li {
padding-left: 1.2em;
}
-#g-server-add-paths li .ui-icon {
+#g-videos-paths li .ui-icon {
margin-top: .4em;
}
-#g-server-add-admin-form .textbox {
+#g-videos-admin-form .textbox {
width: 400px;
}
diff --git a/3.0/modules/videos/helpers/videos.php b/3.0/modules/videos/helpers/videos.php
index 6169e038..f6f3240d 100644
--- a/3.0/modules/videos/helpers/videos.php
+++ b/3.0/modules/videos/helpers/videos.php
@@ -17,6 +17,10 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
+
+// rWatcher edit: This file used to be server_add.php.
+// All occurences of server_add have been replaced with videos.
+
class videos_Core {
static function check_config($paths=null) {
if ($paths === null) {
diff --git a/3.0/modules/videos/helpers/videos_event.php b/3.0/modules/videos/helpers/videos_event.php
index 40f2a87f..2bcd53f0 100644
--- a/3.0/modules/videos/helpers/videos_event.php
+++ b/3.0/modules/videos/helpers/videos_event.php
@@ -17,6 +17,10 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
+
+// rWatcher Edit: This file used to be server_add_event.php.
+// All occurences of server_add have been replaced with videos.
+// Additionally, several new functions have been added.
class videos_event_Core {
static function admin_menu($menu, $theme) {
$menu->get("settings_menu")
@@ -34,7 +38,7 @@ class videos_event_Core {
is_writable($item->is_album() ? $item->file_path() : $item->parent()->file_path())) {
$menu->get("add_menu")
->append(Menu::factory("dialog")
- ->id("videos")
+ ->id("Videos")
->label(t("Add videos"))
->url(url::site("videos/browse/$item->id")));
}
diff --git a/3.0/modules/videos/helpers/videos_installer.php b/3.0/modules/videos/helpers/videos_installer.php
index 7bfca0db..36a1b423 100644
--- a/3.0/modules/videos/helpers/videos_installer.php
+++ b/3.0/modules/videos/helpers/videos_installer.php
@@ -17,36 +17,60 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
+
+// rWatcher Edit: This file was server_add_installer.
+// All occurences of server_add have been replaced with videos.
+// The installer has been edited to create an additional table and module variable.
+// The upgrader has been edited to skip everything before version 4, to keep version numbers in sync with server_add.
+
class videos_installer {
static function install() {
$db = Database::instance();
- $db->query("CREATE TABLE {videos_files} (
+ $db->query("CREATE TABLE {videos_entries} (
`id` int(9) NOT NULL auto_increment,
- `file` varchar(255) NOT NULL,
+ `checked` boolean default 0,
+ `is_directory` boolean default 0,
`item_id` int(9),
`parent_id` int(9),
+ `path` varchar(255) NOT NULL,
`task_id` int(9) NOT NULL,
PRIMARY KEY (`id`))
DEFAULT CHARSET=utf8;");
+
+ // rWatcher Edit: My Table.
$db->query("CREATE TABLE {items_videos} (
`id` int(9) NOT NULL auto_increment,
`item_id` int(9) NOT NULL,
PRIMARY KEY (`id`),
KEY (`item_id`, `id`))
DEFAULT CHARSET=utf8;");
+ // rWatcher Edit: My Variable.
module::set_var("videos", "allowed_extensions", serialize(array("avi", "mpg", "mpeg", "mov", "wmv", "asf", "mts")));
- module::set_version("videos", 1);
+
+ module::set_version("videos", 4);
videos::check_config();
}
+ static function upgrade($version) {
+ $db = Database::instance();
+
+ if ($version < 4) {
+ $db->query("DROP TABLE {videos_files}");
+ $db->query("CREATE TABLE {videos_entries} (
+ `id` int(9) NOT NULL auto_increment,
+ `checked` boolean default 0,
+ `is_directory` boolean default 0,
+ `item_id` int(9),
+ `parent_id` int(9),
+ `path` varchar(255) NOT NULL,
+ `task_id` int(9) NOT NULL,
+ PRIMARY KEY (`id`))
+ DEFAULT CHARSET=utf8;");
+ module::set_version("videos", $version = 4);
+ }
+ }
+
static function deactivate() {
site_status::clear("videos_configuration");
}
-
- static function uninstall() {
- $db = Database::instance();
- $db->query("DROP TABLE IF EXISTS {videos_files};");
- $db->query("DROP TABLE IF EXISTS {items_videos};");
- module::delete("videos");
- }
}
diff --git a/3.0/modules/videos/helpers/videos_theme.php b/3.0/modules/videos/helpers/videos_theme.php
index ea143c41..61200985 100644
--- a/3.0/modules/videos/helpers/videos_theme.php
+++ b/3.0/modules/videos/helpers/videos_theme.php
@@ -17,6 +17,12 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
+
+// rWatcher Edit: This file used to be server_add_theme.php.
+// All occurences of server_add have been replaced with videos.
+// Additionally, the head function has been reworked to provide a
+// download link for unplayable videos and references to admin.js are now admin_videos.js.
+
class videos_theme_Core {
static function head($theme) {
$buf = "";
@@ -30,27 +36,26 @@ class videos_theme_Core {
$items_video = ORM::factory("items_video")
->where("item_id", "=", $item->id)
->find();
- if ($items_video->loaded()) {
- $view = new View("videos_display_js.html");
- //$view->embed_code = addslashes($embedded_video->embed_code);
- return $buf . $view;
+ if (($items_video->loaded()) && (!file_exists($item->resize_path() . ".flv"))) {
+ $buf .= $theme->script("videos_download.js");
}
}
+ return $buf;
}
static function admin_head($theme) {
$buf = "";
if (strpos(Router::$current_uri, "admin/videos") !== false) {
- $buf .= $theme->css("videos.css");
- $buf .= $theme->css("jquery.autocomplete.css");
+ $buf .= $theme->css("videos.css")
+ . $theme->css("jquery.autocomplete.css");
$base = url::site("__ARGS__");
$csrf = access::csrf_token();
$buf .= "";
- $buf .= $theme->script("jquery.autocomplete.js");
- $buf .= $theme->script("admin_videos.js");
+ $buf .= $theme->script("jquery.autocomplete.js")
+ . $theme->script("admin_videos.js"); // rWatcher edit.
}
return $buf;
- }
-}
\ No newline at end of file
+ }
+}
diff --git a/3.0/modules/videos/js/admin_videos.js b/3.0/modules/videos/js/admin_videos.js
index 9bb61ed1..2a4f462c 100644
--- a/3.0/modules/videos/js/admin_videos.js
+++ b/3.0/modules/videos/js/admin_videos.js
@@ -2,6 +2,11 @@
* Set up autocomplete on the server path list
*
*/
+/**
+ * rWatcher Edit: This file used to be admin.js from server_add module.
+ * All occurences of server_add have been replaced with videos
+ *
+ */
$("document").ready(function() {
$("#g-path").autocomplete(
base_url.replace("__ARGS__", "admin/videos/autocomplete"), {max: 256});
diff --git a/3.0/modules/videos/js/videos.js b/3.0/modules/videos/js/videos.js
index 02dda4c0..27627193 100644
--- a/3.0/modules/videos/js/videos.js
+++ b/3.0/modules/videos/js/videos.js
@@ -1,36 +1,41 @@
+/**
+ * rWatcher Edit: This file used to be server_add.js from server_add module.
+ * All occurences of server-add have been replaced with videos
+ *
+ */
(function($) {
- $.widget("ui.gallery_server_add", {
+ $.widget("ui.gallery_videos", {
_init: function() {
var self = this;
- $("#g-server-add-add-button", this.element).click(function(event) {
+ $("#g-videos-add-button", this.element).click(function(event) {
event.preventDefault();
$(".g-progress-bar", this.element).
progressbar().
progressbar("value", 0);
- $("#g-server-add-progress", this.element).slideDown("fast", function() { self.start_add(); });
+ $("#g-videos-progress", this.element).slideDown("fast", function() { self.start_add(); });
});
- $("#g-server-add-pause-button", this.element).click(function(event) {
+ $("#g-videos-pause-button", this.element).click(function(event) {
self.pause = true;
- $("#g-server-add-pause-button", this.element).hide();
- $("#g-server-add-continue-button", this.element).show();
+ $("#g-videos-pause-button", this.element).hide();
+ $("#g-videos-continue-button", this.element).show();
});
- $("#g-server-add-continue-button", this.element).click(function(event) {
+ $("#g-videos-continue-button", this.element).click(function(event) {
self.pause = false;
- $("#g-server-add-pause-button", this.element).show();
- $("#g-server-add-continue-button", this.element).hide();
+ $("#g-videos-pause-button", this.element).show();
+ $("#g-videos-continue-button", this.element).hide();
self.run_add();
});
- $("#g-server-add-close-button", this.element).click(function(event) {
+ $("#g-videos-close-button", this.element).click(function(event) {
$("#g-dialog").dialog("close");
window.location.reload();
});
- $("#g-server-add-tree span.g-directory", this.element).dblclick(function(event) {
+ $("#g-videos-tree span.g-directory", this.element).dblclick(function(event) {
self.open_dir(event);
});
- $("#g-server-add-tree span.g-file, #g-server-add-tree span.g-directory", this.element).click(function(event) {
+ $("#g-videos-tree span.g-file, #g-videos-tree span.g-directory", this.element).click(function(event) {
self.select_file(event);
});
- $("#g-server-add-tree span.g-directory", this.element).dblclick(function(event) {
+ $("#g-videos-tree span.g-directory", this.element).dblclick(function(event) {
self.open_dir(event);
});
$("#g-dialog").bind("dialogclose", function(event, ui) {
@@ -48,8 +53,8 @@
paths.push($(this).attr("ref"));
});
- $("#g-server-add-add-button", this.element).hide();
- $("#g-server-add-pause-button", this.element).show();
+ $("#g-videos-add-button", this.element).hide();
+ $("#g-videos-pause-button", this.element).show();
$.ajax({
url: START_URL,
@@ -77,10 +82,10 @@
$("#g-status").html(data.status);
$(".g-progress-bar", self.element).progressbar("value", data.percent_complete);
if (data.done) {
- $("#g-server-add-progress", this.element).slideUp();
- $("#g-server-add-add-button", this.element).show();
- $("#g-server-add-pause-button", this.element).hide();
- $("#g-server-add-continue-button", this.element).hide();
+ $("#g-videos-progress", this.element).slideUp();
+ $("#g-videos-add-button", this.element).show();
+ $("#g-videos-pause-button", this.element).hide();
+ $("#g-videos-continue-button", this.element).hide();
} else {
if (!self.pause) {
setTimeout(function() { self.run_add(); }, 25);
@@ -99,11 +104,11 @@
$.ajax({
url: GET_CHILDREN_URL.replace("__PATH__", path),
success: function(data, textStatus) {
- $("#g-server-add-tree", self.element).html(data);
- $("#g-server-add-tree span.g-directory", self.element).dblclick(function(event) {
+ $("#g-videos-tree", self.element).html(data);
+ $("#g-videos-tree span.g-directory", self.element).dblclick(function(event) {
self.open_dir(event);
});
- $("#g-server-add-tree span.g-file, #g-server-add-tree span.g-directory", this.element).click(function(event) {
+ $("#g-videos-tree span.g-file, #g-videos-tree span.g-directory", this.element).click(function(event) {
self.select_file(event);
});
}
@@ -115,10 +120,10 @@
*/
select_file: function (event) {
$(event.target).toggleClass("selected");
- if ($("#g-server-add span.selected").length) {
- $("#g-server-add-add-button").enable(true).removeClass("ui-state-disabled");
+ if ($("#g-videos span.selected").length) {
+ $("#g-videos-add-button").enable(true).removeClass("ui-state-disabled");
} else {
- $("#g-server-add-add-button").enable(false).addClass("ui-state-disabled");
+ $("#g-videos-add-button").enable(false).addClass("ui-state-disabled");
}
}
});
diff --git a/3.0/modules/videos/js/videos_download.js b/3.0/modules/videos/js/videos_download.js
new file mode 100644
index 00000000..b0777ec2
--- /dev/null
+++ b/3.0/modules/videos/js/videos_download.js
@@ -0,0 +1,8 @@
+/**
+ * rWatcher Edit: This file is one of mine.
+ *
+ */
+$("document").ready(function() {
+ var original_url = document.getElementById('g-videos-full-url');
+ $("#g-movie").replaceWith("
");
+});
diff --git a/3.0/modules/videos/models/item.php b/3.0/modules/videos/models/item.php
new file mode 100644
index 00000000..171d664c
--- /dev/null
+++ b/3.0/modules/videos/models/item.php
@@ -0,0 +1,1030 @@
+loaded()) {
+ // Set reasonable defaults
+ $this->created = time();
+ $this->rand_key = random::percent();
+ $this->thumb_dirty = 1;
+ $this->resize_dirty = 1;
+ $this->sort_column = "created";
+ $this->sort_order = "ASC";
+ $this->owner_id = identity::active_user()->id;
+ }
+ }
+
+ /**
+ * Add a set of restrictions to any following queries to restrict access only to items
+ * viewable by the active user.
+ * @chainable
+ */
+ public function viewable() {
+ return item::viewable($this);
+ }
+
+ /**
+ * Is this item an album?
+ * @return true if it's an album
+ */
+ public function is_album() {
+ return $this->type == 'album';
+ }
+
+ /**
+ * Is this item a photo?
+ * @return true if it's a photo
+ */
+ public function is_photo() {
+ return $this->type == 'photo';
+ }
+
+ /**
+ * Is this item a movie?
+ * @return true if it's a movie
+ */
+ public function is_movie() {
+ return $this->type == 'movie';
+ }
+
+ public function delete($ignored_id=null) {
+ if (!$this->loaded()) {
+ // Concurrent deletes may result in this item already being gone. Ignore it.
+ return;
+ }
+
+ if ($this->id == 1) {
+ $v = new Validation(array("id"));
+ $v->add_error("id", "cant_delete_root_album");
+ ORM_Validation_Exception::handle_validation($this->table_name, $v);
+ }
+
+ $old = clone $this;
+ module::event("item_before_delete", $this);
+
+ $parent = $this->parent();
+ if ($parent->album_cover_item_id == $this->id) {
+ item::remove_album_cover($parent);
+ }
+
+ $path = $this->file_path();
+ $resize_path = $this->resize_path();
+ $thumb_path = $this->thumb_path();
+
+ parent::delete();
+ if (is_dir($path)) {
+ // Take some precautions against accidentally deleting way too much
+ $delete_resize_path = dirname($resize_path);
+ $delete_thumb_path = dirname($thumb_path);
+ if ($delete_resize_path == VARPATH . "resizes" ||
+ $delete_thumb_path == VARPATH . "thumbs" ||
+ $path == VARPATH . "albums") {
+ throw new Exception(
+ "@todo DELETING_TOO_MUCH ($delete_resize_path, $delete_thumb_path, $path)");
+ }
+ @dir::unlink($path);
+ @dir::unlink($delete_resize_path);
+ @dir::unlink($delete_thumb_path);
+ } else {
+ @unlink($path);
+ @unlink($resize_path);
+ @unlink($thumb_path);
+ }
+
+ module::event("item_deleted", $old);
+ }
+
+ /**
+ * Specify the path to the data file associated with this item. To actually associate it,
+ * you still have to call save().
+ * @chainable
+ */
+ public function set_data_file($data_file) {
+ $this->data_file = $data_file;
+ return $this;
+ }
+
+ /**
+ * Return the server-relative url to this item, eg:
+ * /gallery3/index.php/BobsWedding?page=2
+ * /gallery3/index.php/BobsWedding/Eating-Cake.jpg
+ *
+ * @param string $query the query string (eg "show=3")
+ */
+ public function url($query=null) {
+ $url = url::site($this->relative_url());
+ if ($query) {
+ $url .= "?$query";
+ }
+ return $url;
+ }
+
+ /**
+ * Return the full url to this item, eg:
+ * http://example.com/gallery3/index.php/BobsWedding?page=2
+ * http://example.com/gallery3/index.php/BobsWedding/Eating-Cake.jpg
+ *
+ * @param string $query the query string (eg "show=3")
+ */
+ public function abs_url($query=null) {
+ $url = url::abs_site($this->relative_url());
+ if ($query) {
+ $url .= "?$query";
+ }
+ return $url;
+ }
+
+ /**
+ * album: /var/albums/album1/album2
+ * photo: /var/albums/album1/album2/photo.jpg
+ */
+ public function file_path() {
+ return VARPATH . "albums/" . urldecode($this->relative_path());
+ }
+
+ /**
+ * album: http://example.com/gallery3/var/resizes/album1/
+ * photo: http://example.com/gallery3/var/albums/album1/photo.jpg
+ */
+ public function file_url($full_uri=false) {
+ $relative_path = "var/albums/" . $this->relative_path();
+ $cache_buster = $this->_cache_buster($this->file_path());
+ return ($full_uri ? url::abs_file($relative_path) : url::file($relative_path))
+ . $cache_buster;
+ }
+
+ /**
+ * album: /var/resizes/album1/.thumb.jpg
+ * photo: /var/albums/album1/photo.thumb.jpg
+ */
+ public function thumb_path() {
+ $base = VARPATH . "thumbs/" . urldecode($this->relative_path());
+ if ($this->is_photo()) {
+ return $base;
+ } else if ($this->is_album()) {
+ return $base . "/.album.jpg";
+ } else if ($this->is_movie()) {
+ // Replace the extension with jpg
+ return preg_replace("/...$/", "jpg", $base);
+ }
+ }
+
+ /**
+ * Return true if there is a thumbnail for this item.
+ */
+ public function has_thumb() {
+ return $this->thumb_width && $this->thumb_height;
+ }
+
+ /**
+ * album: http://example.com/gallery3/var/resizes/album1/.thumb.jpg
+ * photo: http://example.com/gallery3/var/albums/album1/photo.thumb.jpg
+ */
+ public function thumb_url($full_uri=false) {
+ $cache_buster = $this->_cache_buster($this->thumb_path());
+ $relative_path = "var/thumbs/" . $this->relative_path();
+ $base = ($full_uri ? url::abs_file($relative_path) : url::file($relative_path));
+ if ($this->is_photo()) {
+ return $base . $cache_buster;
+ } else if ($this->is_album()) {
+ return $base . "/.album.jpg" . $cache_buster;
+ } else if ($this->is_movie()) {
+ // Replace the extension with jpg
+ $base = preg_replace("/...$/", "jpg", $base);
+ return $base . $cache_buster;
+ }
+ }
+
+ /**
+ * album: /var/resizes/album1/.resize.jpg
+ * photo: /var/albums/album1/photo.resize.jpg
+ */
+ public function resize_path() {
+ return VARPATH . "resizes/" . urldecode($this->relative_path()) .
+ ($this->is_album() ? "/.album.jpg" : "");
+ }
+
+ /**
+ * album: http://example.com/gallery3/var/resizes/album1/.resize.jpg
+ * photo: http://example.com/gallery3/var/albums/album1/photo.resize.jpg
+ */
+ public function resize_url($full_uri=false) {
+ $relative_path = "var/resizes/" . $this->relative_path();
+ $cache_buster = $this->_cache_buster($this->resize_path());
+ return ($full_uri ? url::abs_file($relative_path) : url::file($relative_path)) .
+ ($this->is_album() ? "/.album.jpg" : "") . $cache_buster;
+ }
+
+ /**
+ * Rebuild the relative_path_cache and relative_url_cache.
+ */
+ private function _build_relative_caches() {
+ $names = array();
+ $slugs = array();
+ foreach (db::build()
+ ->select(array("name", "slug"))
+ ->from("items")
+ ->where("left_ptr", "<=", $this->left_ptr)
+ ->where("right_ptr", ">=", $this->right_ptr)
+ ->where("id", "<>", 1)
+ ->order_by("left_ptr", "ASC")
+ ->execute() as $row) {
+ // Don't encode the names segment
+ $names[] = rawurlencode($row->name);
+ $slugs[] = rawurlencode($row->slug);
+ }
+ $this->relative_path_cache = implode($names, "/");
+ $this->relative_url_cache = implode($slugs, "/");
+ return $this;
+ }
+
+ /**
+ * Return the relative path to this item's file. Note that the components of the path are
+ * urlencoded so if you want to use this as a filesystem path, you need to call urldecode
+ * on it.
+ * @return string
+ */
+ public function relative_path() {
+ if (!$this->loaded()) {
+ return;
+ }
+
+ if (!isset($this->relative_path_cache)) {
+ $this->_build_relative_caches()->save();
+ }
+ return $this->relative_path_cache;
+ }
+
+ /**
+ * Return the relative url to this item's file.
+ * @return string
+ */
+ public function relative_url() {
+ if (!$this->loaded()) {
+ return;
+ }
+
+ if (!isset($this->relative_url_cache)) {
+ $this->_build_relative_caches()->save();
+ }
+ return $this->relative_url_cache;
+ }
+
+ /**
+ * @see ORM::__get()
+ */
+ public function __get($column) {
+ if ($column == "owner") {
+ // This relationship depends on an outside module, which may not be present so handle
+ // failures gracefully.
+ try {
+ return identity::lookup_user($this->owner_id);
+ } catch (Exception $e) {
+ return null;
+ }
+ } else {
+ return parent::__get($column);
+ }
+ }
+
+ /**
+ * Handle any business logic necessary to create or modify an item.
+ * @see ORM::save()
+ *
+ * @return ORM Item_Model
+ */
+ public function save() {
+ $significant_changes = $this->changed;
+ unset($significant_changes["view_count"]);
+ unset($significant_changes["relative_url_cache"]);
+ unset($significant_changes["relative_path_cache"]);
+
+ if ((!empty($this->changed) && $significant_changes) || isset($this->data_file)) {
+ $this->updated = time();
+ if (!$this->loaded()) {
+ // Create a new item.
+ module::event("item_before_create", $this);
+
+ // Set a weight if it's missing. We don't do this in the constructor because it's not a
+ // simple assignment.
+ if (empty($this->weight)) {
+ $this->weight = item::get_max_weight();
+ }
+
+ // Make an url friendly slug from the name, if necessary
+ if (empty($this->slug)) {
+ $tmp = pathinfo($this->name, PATHINFO_FILENAME);
+ $tmp = preg_replace("/[^A-Za-z0-9-_]+/", "-", $tmp);
+ $this->slug = trim($tmp, "-");
+
+ // If the filename is all invalid characters, then the slug may be empty here. Pick a
+ // random value.
+ if (empty($this->slug)) {
+ $this->slug = (string)rand(1000, 9999);
+ }
+ }
+
+ // Get the width, height and mime type from our data file for photos and movies.
+ if ($this->is_photo() || $this->is_movie()) {
+ if ($this->is_photo()) {
+ list ($this->width, $this->height, $this->mime_type, $extension) =
+ photo::get_file_metadata($this->data_file);
+ } else if ($this->is_movie()) {
+ list ($this->width, $this->height, $this->mime_type, $extension) =
+ movie::get_file_metadata($this->data_file);
+ }
+
+ // Force an extension onto the name if necessary
+ $pi = pathinfo($this->data_file);
+ if (empty($pi["extension"])) {
+ $this->name = "{$this->name}.$extension";
+ }
+ }
+
+ $this->_randomize_name_or_slug_on_conflict();
+
+ parent::save();
+
+ // Build our url caches, then save again. We have to do this after it's already been
+ // saved once because we use only information from the database to build the paths. If we
+ // could depend on a save happening later we could defer this 2nd save.
+ $this->_build_relative_caches();
+ parent::save();
+
+ // Take any actions that we can only do once all our paths are set correctly after saving.
+ switch ($this->type) {
+ case "album":
+ mkdir($this->file_path());
+ mkdir(dirname($this->thumb_path()));
+ mkdir(dirname($this->resize_path()));
+ break;
+
+ case "photo":
+ case "movie":
+ // The thumb or resize may already exist in the case where a movie and a photo generate
+ // a thumbnail of the same name (eg, foo.flv movie and foo.jpg photo will generate
+ // foo.jpg thumbnail). If that happens, randomize and save again.
+ if (file_exists($this->resize_path()) ||
+ file_exists($this->thumb_path())) {
+ $pi = pathinfo($this->name);
+ $this->name = $pi["filename"] . "-" . random::int() . "." . $pi["extension"];
+ parent::save();
+ }
+
+ copy($this->data_file, $this->file_path());
+ break;
+ }
+
+ // This will almost definitely trigger another save, so put it at the end so that we're
+ // tail recursive. Null out the data file variable first, otherwise the next save will
+ // trigger an item_updated_data_file event.
+ $this->data_file = null;
+ module::event("item_created", $this);
+ } else {
+ // Update an existing item
+ module::event("item_before_update", $item);
+
+ // If any significant fields have changed, load up a copy of the original item and
+ // keep it around.
+ $original = ORM::factory("item", $this->id);
+ if (array_intersect($this->changed, array("parent_id", "name", "slug"))) {
+ $original->_build_relative_caches();
+ $this->relative_path_cache = null;
+ $this->relative_url_cache = null;
+ }
+
+ $this->_randomize_name_or_slug_on_conflict();
+
+ parent::save();
+
+ // Now update the filesystem and any database caches if there were significant value
+ // changes. If anything past this point fails, then we'll have an inconsistent database
+ // so this code should be as robust as we can make it.
+
+ // Update the MPTT pointers, if necessary. We have to do this before we generate any
+ // cached paths!
+ if ($original->parent_id != $this->parent_id) {
+ parent::move_to($this->parent());
+ }
+
+ if ($original->parent_id != $this->parent_id || $original->name != $this->name) {
+ // Move all of the items associated data files
+ @rename($original->file_path(), $this->file_path());
+ if ($this->is_album()) {
+ @rename(dirname($original->resize_path()), dirname($this->resize_path()));
+ @rename(dirname($original->thumb_path()), dirname($this->thumb_path()));
+ } else {
+ @rename($original->resize_path(), $this->resize_path());
+ @rename($original->thumb_path(), $this->thumb_path());
+ }
+
+ if ($original->parent_id != $this->parent_id) {
+ // This will result in 2 events since we'll still fire the item_updated event below
+ module::event("item_moved", $this, $original->parent());
+ }
+ }
+
+ // Changing the name, slug or parent ripples downwards
+ if ($this->is_album() &&
+ ($original->name != $this->name ||
+ $original->slug != $this->slug ||
+ $original->parent_id != $this->parent_id)) {
+ db::build()
+ ->update("items")
+ ->set("relative_url_cache", null)
+ ->set("relative_path_cache", null)
+ ->where("left_ptr", ">", $this->left_ptr)
+ ->where("right_ptr", "<", $this->right_ptr)
+ ->execute();
+ }
+
+ // Replace the data file, if requested.
+ // @todo: we don't handle the case where you swap in a file of a different mime type
+ // should we prevent that in validation? or in set_data_file()
+ if ($this->data_file && ($this->is_photo() || $this->is_movie())) {
+ copy($this->data_file, $this->file_path());
+
+ // Get the width, height and mime type from our data file for photos and movies.
+ if ($this->is_photo()) {
+ list ($this->width, $this->height) = photo::get_file_metadata($this->file_path());
+ } else if ($this->is_movie()) {
+ list ($this->width, $this->height) = movie::get_file_metadata($this->file_path());
+ }
+ $this->thumb_dirty = 1;
+ $this->resize_dirty = 1;
+ }
+
+ module::event("item_updated", $original, $this);
+
+ if ($this->data_file) {
+ // Null out the data file variable here, otherwise this event will trigger another
+ // save() which will think that we're doing another file move.
+ $this->data_file = null;
+ module::event("item_updated_data_file", $this);
+ }
+ }
+ } else if (!empty($this->changed)) {
+ // Insignificant changes only. Don't fire events or do any special checking to try to keep
+ // this lightweight.
+ parent::save();
+ }
+
+ return $this;
+ }
+
+ /**
+ * Check to see if there's another item that occupies the same name or slug that this item
+ * intends to use, and if so choose a new name/slug while preserving the extension.
+ * @todo Improve this. Random numbers are not user friendly
+ */
+ private function _randomize_name_or_slug_on_conflict() {
+ $base_name = pathinfo($this->name, PATHINFO_FILENAME);
+ $base_ext = pathinfo($this->name, PATHINFO_EXTENSION);
+ $base_slug = $this->slug;
+ while (ORM::factory("item")
+ ->where("parent_id", "=", $this->parent_id)
+ ->where("id", $this->id ? "<>" : "IS NOT", $this->id)
+ ->and_open()
+ ->where("name", "=", $this->name)
+ ->or_where("slug", "=", $this->slug)
+ ->close()
+ ->find()->id) {
+ $rand = random::int();
+ if ($base_ext) {
+ $this->name = "$base_name-$rand.$base_ext";
+ } else {
+ $this->name = "$base_name-$rand";
+ }
+ $this->slug = "$base_slug-$rand";
+ }
+ }
+
+ /**
+ * Return the Item_Model representing the cover for this album.
+ * @return Item_Model or null if there's no cover
+ */
+ public function album_cover() {
+ if (!$this->is_album()) {
+ return null;
+ }
+
+ if (empty($this->album_cover_item_id)) {
+ return null;
+ }
+
+ try {
+ return model_cache::get("item", $this->album_cover_item_id);
+ } catch (Exception $e) {
+ // It's possible (unlikely) that the item was deleted, if so keep going.
+ return null;
+ }
+ }
+
+ /**
+ * Find the position of the given child id in this album. The resulting value is 1-indexed, so
+ * the first child in the album is at position 1.
+ *
+ * This method stands as a backward compatibility for gallery 3.0, and will
+ * be deprecated in version 3.1.
+ */
+ public function get_position($child, $where=array()) {
+ return item::get_position($child, $where);
+ }
+
+ /**
+ * Return an
tag for the thumbnail.
+ * @param array $extra_attrs Extra attributes to add to the img tag
+ * @param int (optional) $max Maximum size of the thumbnail (default: null)
+ * @param boolean (optional) $center_vertically Center vertically (default: false)
+ * @return string
+ */
+ public function thumb_img($extra_attrs=array(), $max=null, $center_vertically=false) {
+ list ($height, $width) = $this->scale_dimensions($max);
+ if ($center_vertically && $max) {
+ // The constant is divide by 2 to calculate the file and 10 to convert to em
+ $margin_top = (int)(($max - $height) / 20);
+ $extra_attrs["style"] = "margin-top: {$margin_top}em";
+ $extra_attrs["title"] = $this->title;
+ }
+ $attrs = array_merge($extra_attrs,
+ array(
+ "src" => $this->thumb_url(),
+ "alt" => $this->title,
+ "width" => $width,
+ "height" => $height)
+ );
+ // html::image forces an absolute url which we don't want
+ return "
";
+ }
+
+ /**
+ * Calculate the largest width/height that fits inside the given maximum, while preserving the
+ * aspect ratio. Don't upscale.
+ * @param int $max Maximum size of the largest dimension
+ * @return array
+ */
+ public function scale_dimensions($max) {
+ $width = $this->thumb_width;
+ $height = $this->thumb_height;
+
+ if ($width <= $max && $height <= $max) {
+ return array($height, $width);
+ }
+
+ if ($height) {
+ if (isset($max)) {
+ if ($width > $height) {
+ $height = (int)($max * $height / $width);
+ $width = $max;
+ } else {
+ $width = (int)($max * $width / $height);
+ $height = $max;
+ }
+ }
+ } else {
+ // Missing thumbnail, can happen on albums with no photos yet.
+ // @todo we should enforce a placeholder for those albums.
+ $width = 0;
+ $height = 0;
+ }
+ return array($height, $width);
+ }
+
+ /**
+ * Return an
tag for the resize.
+ * @param array $extra_attrs Extra attributes to add to the img tag
+ * @return string
+ */
+ public function resize_img($extra_attrs) {
+ $attrs = array_merge($extra_attrs,
+ array("src" => $this->resize_url(),
+ "alt" => $this->title,
+ "width" => $this->resize_width,
+ "height" => $this->resize_height)
+ );
+ // html::image forces an absolute url which we don't want
+ return "
";
+ }
+
+ /**
+ * Return a flowplayer
- } ?>
+// rWatcher Edit: This file used to be server_add_entry.php.
+class Videos_Entry_Model_Core extends ORM {
+}
diff --git a/3.0/modules/videos/module.info b/3.0/modules/videos/module.info
index e20588d5..d32b53dd 100644
--- a/3.0/modules/videos/module.info
+++ b/3.0/modules/videos/module.info
@@ -1,3 +1,7 @@
name = "Videos"
description = "Allows authorized users to load videos directly from your web server"
-version = 1
+version = 4
+author_name = "rWatcher"
+author_url = "http://codex.gallery2.org/User:RWatcher"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:videos"
+discuss_url = "http://gallery.menalto.com/node/98149"
diff --git a/3.0/modules/videos/views/admin_videos.html.php b/3.0/modules/videos/views/admin_videos.html.php
index 6addb355..b3f108e5 100644
--- a/3.0/modules/videos/views/admin_videos.html.php
+++ b/3.0/modules/videos/views/admin_videos.html.php
@@ -1,10 +1,11 @@
+ // rWatcher Edit: This file used to be admin_server_add.html.php ?>
= t("Add videos from server administration") ?>
= $form ?>
= t("Authorized paths") ?>
-
+
if (empty($paths)): ?>
= t("No authorized image source paths defined yet") ?>
endif ?>
diff --git a/3.0/modules/videos/views/movieplayer.html.php b/3.0/modules/videos/views/movieplayer.html.php
index 1cf46cda..ad6ea3c7 100644
--- a/3.0/modules/videos/views/movieplayer.html.php
+++ b/3.0/modules/videos/views/movieplayer.html.php
@@ -1,10 +1,15 @@
+// rWatcher Edit: This is a combination of Gallery's movieplayer.html.php file and
+// some custom edits.
+
$items_video = ORM::factory("items_video")
->where("item_id", "=", $item->id)
->find();
if ($items_video->loaded() && file_exists($item->resize_path() . ".flv")) {
print html::anchor(str_replace("?m=", ".flv?m=", $item->resize_url(true)), "", $attrs);
+ } else if ($items_video->loaded() && !(file_exists($item->resize_path() . ".flv"))) {
+ print "file_url(true) . "\" class=\"g-movie\" id=\"g-videos-full-url\"> ";
} else {
print html::anchor($item->file_url(true), "", $attrs);
}
diff --git a/3.0/modules/videos/views/videos_tree.html.php b/3.0/modules/videos/views/videos_tree.html.php
index 91354329..366d4fb4 100644
--- a/3.0/modules/videos/views/videos_tree.html.php
+++ b/3.0/modules/videos/views/videos_tree.html.php
@@ -1,4 +1,5 @@
+ // rWatcher Edit: This file used to be server_add_tree.html.php ?>
diff --git a/3.0/modules/videos/views/videos_tree_dialog.html.php b/3.0/modules/videos/views/videos_tree_dialog.html.php
index a235ffbf..a0c0f7b7 100644
--- a/3.0/modules/videos/views/videos_tree_dialog.html.php
+++ b/3.0/modules/videos/views/videos_tree_dialog.html.php
@@ -1,13 +1,14 @@
+ // rWatcher Edit: This file used to be server_add_tree_dialog.html.php, server_add has been replaced with videos ?>
-
-
= t("Add Videos to '%title'", array("title" => html::purify($item->title))) ?>
+
+
= t("Add Photos to '%title'", array("title" => html::purify($item->title))) ?>
-
= t("Videos will be added to album:") ?>
+
= t("Photos will be added to album:") ?>
$i = 0 ?>
foreach ($item->parents() as $parent): ?>
@@ -17,35 +18,35 @@
= html::purify($item->title) ?>
-
+
-
+
-
= t("Add") ?>
-
+
= t("Pause") ?>
-
+
= t("Continue") ?>
-
+
= t("Close") ?>
diff --git a/3.0/modules/webdav/controllers/webdav.php b/3.0/modules/webdav/controllers/webdav.php
index da389d25..829de6ec 100644
--- a/3.0/modules/webdav/controllers/webdav.php
+++ b/3.0/modules/webdav/controllers/webdav.php
@@ -34,6 +34,7 @@ class WebDAV_Controller extends Controller {
$server->setBaseUri(url::site("webdav/gallery"));
// $server->addPlugin($lock);
$server->addPlugin($filter);
+ $server->addPlugin(new Sabre_DAV_Browser_GuessContentType());
if ($this->_authenticate()) {
$server->exec();
diff --git a/3.0/modules/webdav/module.info b/3.0/modules/webdav/module.info
index 05e66573..b078ce8f 100644
--- a/3.0/modules/webdav/module.info
+++ b/3.0/modules/webdav/module.info
@@ -1,3 +1,7 @@
name = "WebDAV"
description = "WebDAV interface to Gallery3"
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:webdav"
+discuss_url = "http://gallery.menalto.com/forum_module_webdav"
diff --git a/3.0/modules/win_platform/module.info b/3.0/modules/win_platform/module.info
new file mode 100644
index 00000000..de0c1a92
--- /dev/null
+++ b/3.0/modules/win_platform/module.info
@@ -0,0 +1,7 @@
+name = "Win Platform"
+description = "An alternate version of Gallery's admin dashboard platform information block for unsupported configurations."
+version = 1
+author_name = "rWatcher"
+author_url = "http://codex.gallery2.org/User:RWatcher"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:win_platform"
+discuss_url = "http://gallery.menalto.com/node/102809"
diff --git a/3.0/modules/win_platform/views/admin_block_platform.html.php b/3.0/modules/win_platform/views/admin_block_platform.html.php
new file mode 100644
index 00000000..f76f479b
--- /dev/null
+++ b/3.0/modules/win_platform/views/admin_block_platform.html.php
@@ -0,0 +1,28 @@
+
+
+
+ = t("Host name: %host_name", array("host_name" => php_uname("n"))) ?>
+
+
+ = t("Operating system: %os %version", array("os" => php_uname("s"), "version" => php_uname("r"))) ?>
+
+
+
+ = t("Apache: %apache_version", array("apache_version" => function_exists("apache_get_version") ? apache_get_version() : t("Unknown"))) ?>
+
+ = t("Server software: %apache_version", array("apache_version" => getenv("SERVER_SOFTWARE") != "" ? getenv("SERVER_SOFTWARE") : t("Unknown"))) ?>
+
+
+
+ = t("PHP: %php_version", array("php_version" => phpversion())) ?>
+
+
+ = t("MySQL: %mysql_version", array("mysql_version" => Database::instance()->query("SELECT version() as v")->current()->v)) ?>
+
+
+ = t("Server load: %load_average", array("load_average" => function_exists("sys_getloadavg") ? sys_getloadavg() : t("Unknown"))) ?>
+
+
+ = t("Graphics toolkit: %toolkit", array("toolkit" => module::get_var("gallery", "graphics_toolkit"))) ?>
+
+
\ No newline at end of file
diff --git a/3.0/modules/wordpress_auth/module.info b/3.0/modules/wordpress_auth/module.info
index 25c6cee0..e22f621d 100644
--- a/3.0/modules/wordpress_auth/module.info
+++ b/3.0/modules/wordpress_auth/module.info
@@ -1,3 +1,7 @@
name = "WordPress Authentication"
description = "Use a WordPress installation for authentication"
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:wordpress_auth"
+discuss_url = "http://gallery.menalto.com/forum_module_wordpress_auth"
diff --git a/3.0/themes/browny_admin_wind/css/screen-rtl.css b/3.0/themes/browny_admin_wind/css/screen-rtl.css
new file mode 100644
index 00000000..d9b26b1e
--- /dev/null
+++ b/3.0/themes/browny_admin_wind/css/screen-rtl.css
@@ -0,0 +1,401 @@
+/**
+ * Gallery 3 Browny Admin Wind Theme Right-to-Left Screen Styles
+ */
+
+.rtl {
+ direction: rtl;
+}
+
+#g-header,
+#g-content,
+#g-sidebar,
+#g-footer,
+caption,
+th,
+#g-dialog,
+.g-context-menu li a,
+.g-message-box li,
+#g-site-status li {
+ text-align: right;
+}
+
+.g-text-right {
+ text-align: left;
+}
+
+/* Lists ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-text li,
+.g-text li {
+ margin-left: 0;
+ margin-right: 1em;
+}
+
+/* Messages ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-error,
+.g-info,
+.g-success,
+.g-warning,
+#g-add-photos-status .g-success,
+#g-add-photos-status .g-error {
+ background-position: center right;
+ padding-right: 30px !important;
+}
+
+form li.g-error,
+form li.g-info,
+form li.g-success,
+form li.g-warning {
+ padding-right: 0 !important;
+}
+
+.g-left,
+.g-inline li,
+#g-content #g-album-grid .g-item,
+.sf-menu li,
+.g-breadcrumbs li,
+.g-paginator li,
+.g-buttonset li,
+.ui-icon-left .ui-icon,
+.g-short-form li,
+form ul ul li,
+input[type="submit"],
+input[type="reset"],
+input.checkbox,
+input[type=checkbox],
+input.radio,
+input[type=radio] {
+ float: right;
+}
+
+.g-right,
+.ui-icon-right .ui-icon {
+ float: left;
+}
+
+.g-inline li {
+ margin-right: 1em;
+}
+
+.g-inline li.g-first {
+ margin-right: 0;
+}
+
+.g-breadcrumbs li {
+ background: transparent url('../images/ico-separator-rtl.gif') no-repeat scroll right center;
+ padding: 1em 18px 1em 8px;
+}
+
+.g-breadcrumbs .g-first {
+ background: none;
+ padding-right: 0;
+}
+
+input.checkbox,
+input[type="checkbox"],
+input.radio,
+input[type="radio"] {
+ margin-right: 0;
+ margin-left: .4em;
+}
+
+#g-add-comment {
+ right: inherit;
+ left: 0;
+}
+
+.ui-icon-left .ui-icon {
+ margin-left: .2em;
+}
+
+.ui-icon-right .ui-icon {
+ margin-right: .2em;
+}
+
+.g-group h4 {
+ padding: .5em .5em .5em 0;
+}
+
+.g-group .g-user {
+ padding: .2em .5em 0 0;
+}
+
+/* RTL Corner radius ~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-buttonset .ui-corner-tl {
+ -moz-border-radius-topleft: 0;
+ -webkit-border-top-left-radius: 0;
+ border-top-left-radius: 0;
+ -moz-border-radius-topright: 5px !important;
+ -webkit-border-top-right-radius: 5px !important;
+ border-top-right-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-tr {
+ -moz-border-radius-topright: 0;
+ -webkit-border-top-right-radius: 0;
+ border-top-right-radius: 0;
+ -moz-border-radius-topleft: 5px !important;
+ -webkit-border-top-left-radius: 5px !important;
+ border-top-left-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-bl {
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-bottomright: 5px !important;
+ -webkit-border-bottom-right-radius: 5px !important;
+ border-bottom-right-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-br {
+ -moz-border-radius-bottomright: 0;
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomleft: 5px !important;
+ -webkit-border-bottom-left-radius: 5px !important;
+ border-bottom-left-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-right,
+.ui-progressbar .ui-corner-right {
+ -moz-border-radius-topright: 0;
+ -webkit-border-top-right-radius: 0;
+ border-top-right-radius: 0;
+ -moz-border-radius-topleft: 5px !important;
+ -webkit-border-top-left-radius: 5px !important;
+ border-top-left-radius: 5px !important;
+ -moz-border-radius-bottomright: 0;
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomleft: 5px !important;
+ -webkit-border-bottom-left-radius: 5px !important;
+ border-bottom-left-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-left,
+.ui-progressbar .ui-corner-left {
+ -moz-border-radius-topleft: 0;
+ -webkit-border-top-left-radius: 0;
+ border-top-left-radius: 0;
+ -moz-border-radius-topright: 5px !important;
+ -webkit-border-top-right-radius: 5px !important;
+ border-top-right-radius: 5px !important;
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-bottomright: 5px !important;
+ -webkit-border-bottom-right-radius: 5px !important;
+ border-bottom-right-radius: 5px !important;
+}
+
+/* RTL Superfish ~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.sf-menu a {
+ border-left: none;
+ border-right:1px solid #fff;
+}
+
+.sf-menu a.sf-with-ul {
+ padding-left: 2.25em;
+ padding-right: 1em;
+}
+
+.sf-sub-indicator {
+ left: .75em !important;
+ right: auto;
+ background: url('../../../lib/superfish/images/arrows-ffffff-rtl.png') no-repeat -10px -100px;
+}
+
+a > .sf-sub-indicator {
+ top: .8em;
+ background-position: -10px -100px;
+}
+
+a:focus > .sf-sub-indicator,
+a:hover > .sf-sub-indicator,
+a:active > .sf-sub-indicator,
+li:hover > a > .sf-sub-indicator,
+li.sfHover > a > .sf-sub-indicator {
+ background-position: 0 -100px;
+}
+
+.sf-menu ul .sf-sub-indicator {
+ background-position: 0 0;
+}
+
+.sf-menu ul a > .sf-sub-indicator {
+ background-position: -10px 0;
+}
+
+.sf-menu ul a:focus > .sf-sub-indicator,
+.sf-menu ul a:hover > .sf-sub-indicator,
+.sf-menu ul a:active > .sf-sub-indicator,
+.sf-menu ul li:hover > a > .sf-sub-indicator,
+.sf-menu ul li.sfHover > a > .sf-sub-indicator {
+ background-position: 0 0;
+}
+
+.sf-menu li:hover ul,
+.sf-menu li.sfHover ul {
+ right: 0;
+ left: auto;
+}
+
+ul.sf-menu li li:hover ul,
+ul.sf-menu li li.sfHover ul {
+ right: 12em;
+ left: auto;
+}
+ul.sf-menu li li li:hover ul,
+ul.sf-menu li li li.sfHover ul {
+ right: 12em;
+ left: auto;
+}
+
+.sf-shadow ul {
+ background: url('../../../lib/superfish/images/shadow.png') no-repeat bottom left;
+ padding: 0 0 9px 8px;
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-topright: 0;
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-top-right-radius: 0;
+ -webkit-border-bottom-left-radius: 0;
+ -moz-border-radius-topleft: 17px;
+ -moz-border-radius-bottomright: 17px;
+ -webkit-border-top-left-radius: 17px;
+ -webkit-border-bottom-right-radius: 17px;
+ border-top-left-radius: 17px;
+ border-bottom-right-radius: 17px;
+}
+
+/* RTL ThemeRoller ~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.ui-dialog .ui-dialog-titlebar {
+ padding: 0.5em 1em 0.3em 0.3em;
+}
+
+.ui-dialog .ui-dialog-title {
+ float: right;
+}
+
+.ui-dialog .ui-dialog-titlebar-close {
+ left: 0.3em;
+ right: auto;
+}
+
+.ui-tabs .ui-tabs-nav li {
+ float: right;
+}
+
+#g-content #g-album-grid .g-item,
+#g-site-theme,
+#g-admin-theme,
+.g-selected img,
+.g-available .g-block img,
+#g-content #g-photo-stream .g-item,
+li.g-group,
+#g-server-add-admin {
+ float: right;
+}
+
+#g-site-theme {
+ margin-right: 0;
+ margin-left: 1em;
+}
+
+#g-admin-graphics .g-available .g-block {
+ float: right;
+ margin-left: 1em;
+ margin-right: 0em;
+}
+
+#g-site-admin-menu {
+ left: auto;
+ right: 240px;
+}
+
+#g-header #g-login-menu {
+ float: left;
+}
+
+#g-header #g-login-menu li {
+ margin-left: 0;
+ padding-left: 0;
+ padding-right: 1.2em;
+}
+
+
+#g-sidebar .g-block-content {
+ padding-left: 0em;
+ padding-right: 1em;
+}
+
+.g-selected img,
+.g-available .g-block img {
+ margin: 0 0 1em 1em;
+}
+
+.g-button {
+ margin: 0 0 0 4px;
+}
+
+/* RTL paginator ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-paginator .g-info {
+ width: 35%;
+}
+
+.g-paginator .g-text-right {
+ margin-left: 0;
+}
+
+.g-paginator .ui-icon-seek-end {
+ background-position: -80px -160px;
+}
+
+.g-paginator .ui-icon-seek-next {
+ background-position: -48px -160px;
+}
+
+.g-paginator .ui-icon-seek-prev {
+ background-position: -32px -160px;
+}
+
+.g-paginator .ui-icon-seek-first {
+ background-position: -64px -160px;
+}
+
+#g-header #g-login-menu,
+#g-header #g-quick-search-form {
+ clear: left;
+ float: left;
+}
+
+#g-header #g-login-menu li {
+ margin-left: 0;
+ padding-left: 0;
+ padding-right: 1.2em;
+}
+
+#g-site-menu {
+ left: auto;
+ right: 240px;
+}
+
+#g-view-menu #g-slideshow-link {
+ background-image: url('../images/ico-view-slideshow-rtl.png');
+}
+
+#g-sidebar .g-block-content {
+ padding-right: 1em;
+ padding-left: 0;
+}
+
+#g-footer #g-credits li {
+ padding-left: 1.2em !important;
+ padding-right: 0;
+}
diff --git a/3.0/themes/browny_admin_wind/css/screen.css b/3.0/themes/browny_admin_wind/css/screen.css
index fbabbcc3..3824e59c 100644
--- a/3.0/themes/browny_admin_wind/css/screen.css
+++ b/3.0/themes/browny_admin_wind/css/screen.css
@@ -4,23 +4,30 @@
* @requires YUI reset, font, grids CSS
*
* Sheet organization:
- * 1) Basic HTML elements
- * 2) Reusable content blocks
- * 3) Page layout containers
- * 4) Content blocks in specific layout containers
- * 5) States and interactions
- * 6) Positioning and order
- * 7) Navigation and menus
- * 8) ThemeRoller
- * 9) jQuery and jQuery UI
- * 10) Right-to-left language styles
- * 11) More Browny
+ * 0) Pre Overrides
+ * 1) Basic HTML elements
+ * 2) Reusable content blocks
+ * 3) Page layout containers
+ * 4) Content blocks in specific layout containers
+ * 5) States and interactions
+ * 6) Positioning and order
+ * 7) Navigation and menus
+ * 8) jQuery and jQuery UI
+ * 9) More Browny
*
* @todo Review g-buttonset-vertical
*/
/** *******************************************************************
- * 1) Basic HTML elements
+ * 0) Pre Overrides
+ **********************************************************************/
+
+/* ThemeRoller overrides ~~~~~~~~~~~~~~ */
+
+@import "themeroller/ui.tabs.css";
+
+/** *******************************************************************
+ * 1) Basic HTML elements
**********************************************************************/
/* ~browny~ */
@@ -29,6 +36,21 @@ body, html {
font-family: 'Century gothic', Verdana, 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
}
+.ui-widget {
+ font-family: 'Century gothic', Verdana, 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
+}
+
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button {
+ font-family: 'Century gothic', Verdana, 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
+}
+
+select,
+input,
+button,
+textarea {
+ font: 99% 'Century gothic', Verdana, Arial, Helvetica, Clean, sans-serif;
+}
+
p {
margin-bottom: 1em;
text-shadow: 0px 1px 1px #F7F5F0;
@@ -67,13 +89,6 @@ h3 {
font-size: 1.2em;
}
-select,
-input,
-button,
-textarea {
- font: 99% 'Century gothic', Verdana, Arial, Helvetica, Clean, sans-serif;
-}
-
#l10n-client h2 {
text-shadow: none;
}
@@ -104,7 +119,25 @@ a:hover,
text-decoration: none;
}
+/* Lists ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+ul.g-text li,
+.g-text ul li {
+ list-style-type: disc;
+}
+
+ol.g-text li,
+.g-text ol li {
+ list-style-type: decimal;
+}
+
+.g-text li,
+.g-text li {
+ margin-left: 1em;
+}
+
/* Forms ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
form {
margin: 0;
}
@@ -284,22 +317,6 @@ fieldset {
margin-bottom: 0;
}
-fieldset {
- margin-bottom: 1em;
-}
-
-#g-content form ul li {
- padding: .4em 0;
-}
-
-#g-dialog form {
- width: 270px;
-}
-
-#g-dialog fieldset {
- margin-bottom: 0;
-}
-
/* Tables ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
table {
@@ -328,8 +345,22 @@ th {
white-space: nowrap;
}
+/* Text ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-text-small {
+ font-size: .8em;
+}
+
+.g-text-big {
+ font-size: 1.2em;
+}
+
+.g-text-right {
+ text-align: right;
+}
+
/** *******************************************************************
- * 2) Reusable content blocks
+ * 2) Reusable content blocks
*********************************************************************/
.g-block,
@@ -393,7 +424,8 @@ th {
.g-unavailable {
border-color: #999;
- opacity: 0.4;
+ color: black;
+ opacity: .6;
}
.g-info td {
@@ -401,10 +433,6 @@ th {
background-image: none;
}
-#g-maintenance-mode ul.g-message-block {
- margin-top: .5em;
-}
-
.g-success td {
background-color: transparent;
background-image: none;
@@ -427,15 +455,12 @@ th {
background-color: #fff;
}
-ul.enumeration li {
- list-style-type: disc;
- margin-left: 20px;
-}
-
/*** ******************************************************************
- * 3) Page layout containers
+ * 3) Page layout containers
*********************************************************************/
+
/* Dimension and scale ~~~~~~~~~~~~~~~~~~~ */
+
.g-one-quarter {
width: 25%;
}
@@ -512,7 +537,7 @@ ul.enumeration li {
}
/** *******************************************************************
- * 4) Content blocks in specific layout containers
+ * 4) Content blocks in specific layout containers
*********************************************************************/
/* Header ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
@@ -607,7 +632,7 @@ ul.enumeration li {
margin-right: 1em;
}
-/* Block admin ~~~~~~~~~~~~~~~~~~~~~~~~~ */
+/* Block admin ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
.g-admin-blocks-list {
float: left;
@@ -633,12 +658,14 @@ ul.enumeration li {
padding: .3em .8em;
}
-/* In-line editing ~~~~~~~~~~~~~~~~~~~~ */
+/* In-line editing ~~~~~~~~~~~~~~~~~~~~~~ */
+
#g-in-place-edit-message {
background-color: #FFF;
}
-/* Language options ~~~~~~~~~~~~~~~~~~~~~~~~ */
+/* Language options ~~~~~~~~~~~~~~~~~~~~~ */
+
#g-share-translations-form fieldset {
border: 0px;
margin: 0px;
@@ -823,7 +850,7 @@ form .g-error {
}
/** *******************************************************************
- * 7) Navigation and menus
+ * 7) Navigation and menus
*********************************************************************/
/* Site Menu ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
@@ -840,16 +867,9 @@ form .g-error {
}
/** *******************************************************************
- * 8) ThemeRoller Theme
- **********************************************************************/
-/* ~browny~ */
-
-/* ThemeRoller overrides ~~~~~~~~~~~~~~ */
-@import "themeroller/ui.tabs.css";
-
-/** *******************************************************************
- * 9) jQuery and jQuery UI
+ * 8) jQuery and jQuery UI
*********************************************************************/
+
/* Generic block container ~~~~~~~~~~~~~~~ */
.g-block {
@@ -923,16 +943,16 @@ button {
display: inline-block;
}
-/* Status and validation messages ~~~~ */
+/* Status and validation messages ~~~~~~~~~ */
.g-message-block {
background-position: .4em .3em;
border: 1px solid #ccc;
padding: 0;
+ margin-bottom: 1em;
}
#g-action-status {
- margin-bottom: 1em;
}
#g-action-status li,
@@ -1002,7 +1022,7 @@ div#g-action-status {
width: 40%;
}
-/* Dialogs and panels ~~~~~~~~~~~~~~~~~~ */
+/* Dialogs and panels ~~~~~~~~~~~~~~~~~~~~ */
#g-dialog {
text-align: left;
@@ -1021,7 +1041,7 @@ div#g-action-status {
padding: 1em;
}
-/* Inline layout ~~~~~~~~~~ */
+/* Inline layout ~~~~~~~~~~~~~~~~~~~~~~~~ */
.g-inline li {
float: left;
@@ -1033,19 +1053,20 @@ div#g-action-status {
margin-left: 0;
}
-/* Superfish menu overrides ~~~~~~~~~~~ */
+/* Superfish menu overrides ~~~~~~~~~~~~~~ */
+
.sf-menu ul {
- width: 12em;
+ width: 12em;
}
ul.sf-menu li li:hover ul,
ul.sf-menu li li.sfHover ul {
- left: 12em;
+ left: 12em;
}
ul.sf-menu li li li:hover ul,
ul.sf-menu li li li.sfHover ul {
- left: 12em;
+ left: 12em;
}
/* ~browny~ */
@@ -1061,13 +1082,13 @@ ul.sf-menu li li li.sfHover ul {
/* ~browny~ */
.sf-menu a {
- border-top: 1px solid #e0cbae;
+ border-top: 1px solid #e0cbae;
}
/* ~browny~ */
.sf-menu li {
- background: #d3b07e url('../images/ui-bg_highlight-soft_45_d3b07e_1x100.png') 50% 50% repeat-x;
- text-shadow: 0px 1px 1px #fff;
+ background: #d3b07e url('../images/ui-bg_highlight-soft_45_d3b07e_1x100.png') 50% 50% repeat-x;
+ text-shadow: 0px 1px 1px #fff;
}
/* ~browny~ */
@@ -1076,11 +1097,16 @@ ul.sf-menu li li li.sfHover ul {
.sf-menu a:focus,
.sf-menu a:hover,
.sf-menu a:active {
- background: #e0cbae;
+ background: #e0cbae;
}
/* jQuery UI Dialog ~~~~~~~~~~~~~~~~~~~ */
+.ui-widget-overlay {
+ background: #000;
+ opacity: .7;
+}
+
#g-admin-dashboard .ui-state-highlight,
#g-sidebar .ui-state-highlight {
height: 2em;
@@ -1100,326 +1126,18 @@ ul.sf-menu li li li.sfHover ul {
text-shadow: 0px 1px 1px #fff;
}
-.ui-widget {
- font-family: 'Century gothic', Verdana, 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
-}
-
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button {
- font-family: 'Century gothic', Verdana, 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
-}
-
/** *******************************************************************
- * 10) Right to left styles
- *********************************************************************/
-
-.rtl {
- direction: rtl;
-}
-
-.rtl #g-header,
-.rtl #g-content,
-.rtl #g-sidebar,
-.rtl #g-footer,
-.rtl caption,
-.rtl th,
-.rtl #g-dialog,
-.rtl .g-context-menu li a,
-.rtl .g-message-box li,
-.rtl #g-site-status li {
- text-align: right;
-}
-
-.rtl .g-text-right {
- text-align: left;
-}
-
-.rtl .g-error,
-.rtl .g-info,
-.rtl .g-success,
-.rtl .g-warning,
-.rtl #g-add-photos-status .g-success,
-.rtl #g-add-photos-status .g-error {
- background-position: center right;
- padding-right: 30px !important;
-}
-
-.rtl form li.g-error,
-.rtl form li.g-info,
-.rtl form li.g-success,
-.rtl form li.g-warning {
- padding-right: 0 !important;
-}
-
-.rtl .g-left,
-.rtl .g-inline li,
-.rtl #g-content #g-album-grid .g-item,
-.rtl .sf-menu li,
-.rtl .g-breadcrumbs li,
-.rtl .g-paginator li,
-.rtl .g-buttonset li,
-.rtl .ui-icon-left .ui-icon,
-.rtl .g-short-form li,
-.rtl form ul ul li,
-.rtl input[type="submit"],
-.rtl input[type="reset"],
-.rtl input.checkbox,
-.rtl input[type=checkbox],
-.rtl input.radio,
-.rtl input[type=radio] {
- float: right;
-}
-
-.rtl .g-right,
-.rtl .ui-icon-right .ui-icon {
- float: left;
-}
-
-.rtl .g-inline li {
- margin-right: 1em;
-}
-
-.rtl .g-inline li.g-first {
- margin-right: 0;
-}
-
-.rtl .g-breadcrumbs li {
- background: transparent url('../images/ico-separator-rtl.gif') no-repeat scroll right center;
- padding: 1em 18px 1em 8px;
-}
-
-.rtl .g-breadcrumbs .g-first {
- background: none;
- padding-right: 0;
-}
-
-.rtl input.checkbox {
- margin-left: .4em;
-}
-
-.rtl #g-add-comment {
- right: inherit;
- left: 0;
-}
-
-.rtl .ui-icon-left .ui-icon {
- margin-left: .2em;
-}
-
-.rtl .ui-icon-right .ui-icon {
- margin-right: .2em;
-}
-
-/* RTL Corner radius ~~~~~~~~~~~~~~~~~~~~~~ */
-.rtl .g-buttonset .ui-corner-tl {
- -moz-border-radius-topleft: 0;
- -webkit-border-top-left-radius: 0;
- border-top-left-radius: 0;
- -moz-border-radius-topright: 5px !important;
- -webkit-border-top-right-radius: 5px !important;
- border-top-right-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-tr {
- -moz-border-radius-topright: 0;
- -webkit-border-top-right-radius: 0;
- border-top-right-radius: 0;
- -moz-border-radius-topleft: 5px !important;
- -webkit-border-top-left-radius: 5px !important;
- border-top-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-bl {
- -moz-border-radius-bottomleft: 0;
- -webkit-border-bottom-left-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-bottomright: 5px !important;
- -webkit-border-bottom-right-radius: 5px !important;
- border-bottom-right-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-br {
- -moz-border-radius-bottomright: 0;
- -webkit-border-bottom-right-radius: 0;
- border-bottom-right-radius: 0;
- -moz-border-radius-bottomleft: 5px !important;
- -webkit-border-bottom-left-radius: 5px !important;
- border-bottom-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-right,
-.rtl .ui-progressbar .ui-corner-right {
- -moz-border-radius-topright: 0;
- -webkit-border-top-right-radius: 0;
- border-top-right-radius: 0;
- -moz-border-radius-topleft: 5px !important;
- -webkit-border-top-left-radius: 5px !important;
- border-top-left-radius: 5px !important;
- -moz-border-radius-bottomright: 0;
- -webkit-border-bottom-right-radius: 0;
- border-bottom-right-radius: 0;
- -moz-border-radius-bottomleft: 5px !important;
- -webkit-border-bottom-left-radius: 5px !important;
- border-bottom-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-left,
-.rtl .ui-progressbar .ui-corner-left {
- -moz-border-radius-topleft: 0;
- -webkit-border-top-left-radius: 0;
- border-top-left-radius: 0;
- -moz-border-radius-topright: 5px !important;
- -webkit-border-top-right-radius: 5px !important;
- border-top-right-radius: 5px !important;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-bottom-left-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-bottomright: 5px !important;
- -webkit-border-bottom-right-radius: 5px !important;
- border-bottom-right-radius: 5px !important;
-}
-
-/* RTL Superfish ~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.rtl .sf-menu a {
- border-left: none;
- border-right:1px solid #fff;
-}
-
-.rtl .sf-menu a.sf-with-ul {
- padding-left: 2.25em;
- padding-right: 1em;
-}
-
-.rtl .sf-sub-indicator {
- left: .75em !important;
- right: auto;
- background: url('../../../lib/superfish/images/arrows-ffffff-rtl.png') no-repeat -10px -100px; /* 8-bit indexed alpha png. IE6 gets solid image only */
-}
-.rtl a > .sf-sub-indicator { /* give all except IE6 the correct values */
- top: .8em;
- background-position: -10px -100px; /* use translucent arrow for modern browsers*/
-}
-/* apply hovers to modern browsers */
-.rtl a:focus > .sf-sub-indicator,
-.rtl a:hover > .sf-sub-indicator,
-.rtl a:active > .sf-sub-indicator,
-.rtl li:hover > a > .sf-sub-indicator,
-.rtl li.sfHover > a > .sf-sub-indicator {
- background-position: 0 -100px; /* arrow hovers for modern browsers*/
-}
-
-/* point right for anchors in subs */
-.rtl .sf-menu ul .sf-sub-indicator { background-position: 0 0; }
-.rtl .sf-menu ul a > .sf-sub-indicator { background-position: -10px 0; }
-/* apply hovers to modern browsers */
-.rtl .sf-menu ul a:focus > .sf-sub-indicator,
-.rtl .sf-menu ul a:hover > .sf-sub-indicator,
-.rtl .sf-menu ul a:active > .sf-sub-indicator,
-.rtl .sf-menu ul li:hover > a > .sf-sub-indicator,
-.rtl .sf-menu ul li.sfHover > a > .sf-sub-indicator {
- background-position: 0 0; /* arrow hovers for modern browsers*/
-}
-
-.rtl .sf-menu li:hover ul,
-.rtl .sf-menu li.sfHover ul {
- right: 0;
- left: auto;
-}
-
-.rtl ul.sf-menu li li:hover ul,
-.rtl ul.sf-menu li li.sfHover ul {
- right: 12em; /* match ul width */
- left: auto;
-}
-.rtl ul.sf-menu li li li:hover ul,
-.rtl ul.sf-menu li li li.sfHover ul {
- right: 12em; /* match ul width */
- left: auto;
-}
-
-/*** shadows for all but IE6 ***/
-.rtl .sf-shadow ul {
- background: url('../../../lib/superfish/images/shadow.png') no-repeat bottom left;
- padding: 0 0 9px 8px;
- border-top-right-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-topright: 0;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-top-right-radius: 0;
- -webkit-border-bottom-left-radius: 0;
- -moz-border-radius-topleft: 17px;
- -moz-border-radius-bottomright: 17px;
- -webkit-border-top-left-radius: 17px;
- -webkit-border-bottom-right-radius: 17px;
- border-top-left-radius: 17px;
- border-bottom-right-radius: 17px;
-}
-
-/* RTL ThemeRoller ~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.rtl .ui-dialog .ui-dialog-titlebar {
- padding: 0.5em 1em 0.3em 0.3em;
-}
-
-.rtl .ui-dialog .ui-dialog-title {
- float: right;
-}
-
-.rtl .ui-dialog .ui-dialog-titlebar-close {
- left: 0.3em;
- right: auto;
-}
-
-.rtl #g-content #g-album-grid .g-item,
-.rtl #g-site-theme,
-.rtl #g-admin-theme,
-.rtl .g-selected img,
-.rtl .g-available .g-block img,
-.rtl #g-content #g-photo-stream .g-item,
-.rtl li.g-group,
-.rtl #g-server-add-admin {
- float: right;
-}
-
-.rtl #g-admin-graphics .g-available .g-block {
- float: right;
- margin-left: 1em;
- margin-right: 0em;
-}
-
-.rtl #g-site-admin-menu {
- left: auto;
- right: 240px;
-}
-
-.rtl #g-header #g-login-menu {
- float: left;
-}
-
-.rtl #g-header #g-login-menu li {
- margin-left: 0;
- padding-left: 0;
- padding-right: 1.2em;
-}
-
-/* ~browny~ */
-.rtl .g-selected img,
-.rtl .g-available .g-block img {
- margin: 0 0 1em 1em;
-}
-
-/** *******************************************************************
- * 11) More Browny (Extra overrides for better Browny look)
+ * 9) More Browny (Extra overrides for better Browny look)
*********************************************************************/
/* /lib/gallery.common.css ~~~~~~~~~~~~ */
.g-success {
-background: #fcf9ce url('../images/ico-success.png') no-repeat .4em 50%
+ background: #fcf9ce url('../images/ico-success.png') no-repeat .4em 50%
}
.g-even {
- background: transparent;
+ background: transparent;
}
.g-odd {
diff --git a/3.0/themes/browny_admin_wind/images/ico-denied-inactive.png b/3.0/themes/browny_admin_wind/images/ico-denied-inactive.png
new file mode 100644
index 00000000..56db3ff5
Binary files /dev/null and b/3.0/themes/browny_admin_wind/images/ico-denied-inactive.png differ
diff --git a/3.0/themes/browny_admin_wind/images/ico-denied-passive.png b/3.0/themes/browny_admin_wind/images/ico-denied-passive.png
new file mode 100644
index 00000000..1e992230
Binary files /dev/null and b/3.0/themes/browny_admin_wind/images/ico-denied-passive.png differ
diff --git a/3.0/themes/browny_admin_wind/images/ico-denied.png b/3.0/themes/browny_admin_wind/images/ico-denied.png
new file mode 100644
index 00000000..08f24936
Binary files /dev/null and b/3.0/themes/browny_admin_wind/images/ico-denied.png differ
diff --git a/3.0/themes/browny_admin_wind/images/ico-lock.png b/3.0/themes/browny_admin_wind/images/ico-lock.png
new file mode 100644
index 00000000..2ebc4f6f
Binary files /dev/null and b/3.0/themes/browny_admin_wind/images/ico-lock.png differ
diff --git a/3.0/themes/browny_admin_wind/images/ico-success-passive.png b/3.0/themes/browny_admin_wind/images/ico-success-passive.png
new file mode 100644
index 00000000..7afba8cf
Binary files /dev/null and b/3.0/themes/browny_admin_wind/images/ico-success-passive.png differ
diff --git a/3.0/themes/browny_admin_wind/images/logo.png b/3.0/themes/browny_admin_wind/images/logo.png
index 6ffa889b..b430321b 100644
Binary files a/3.0/themes/browny_admin_wind/images/logo.png and b/3.0/themes/browny_admin_wind/images/logo.png differ
diff --git a/3.0/themes/browny_admin_wind/theme.info b/3.0/themes/browny_admin_wind/theme.info
index e3a020d0..51566b56 100644
--- a/3.0/themes/browny_admin_wind/theme.info
+++ b/3.0/themes/browny_admin_wind/theme.info
@@ -1,6 +1,10 @@
name = "Browny Wind"
description = "The default Wind Admin theme with a browny style."
version = 1
-author = "Ma'moun M. Diraneyya"
+author = "Mamouneyya"
admin = 1
site = 0
+author_name = "Ma'moun Diraneyya"
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Themes:browny_admin_wind"
+discuss_url = "http://gallery.menalto.com/node/95007"
diff --git a/3.0/themes/browny_admin_wind/views/admin.html.php b/3.0/themes/browny_admin_wind/views/admin.html.php
index c8041069..9a149149 100644
--- a/3.0/themes/browny_admin_wind/views/admin.html.php
+++ b/3.0/themes/browny_admin_wind/views/admin.html.php
@@ -1,9 +1,10 @@
-
+html_attributes() ?> xml:lang="en" lang="en">
+ $theme->start_combining("script,css") ?>
if ($page_title): ?>
= t("Gallery Admin: %page_title", array("page_title" => $page_title)) ?>
@@ -11,31 +12,46 @@
= t("Admin dashboard") ?>
endif ?>
-
" type="image/x-icon" />
+
"
+ type="image/x-icon" />
+
" />
+ = $theme->script("jquery.js") ?>
+ = $theme->script("jquery.form.js") ?>
+ = $theme->script("jquery-ui.js") ?>
+ = $theme->script("gallery.common.js") ?>
+ /* MSG_CANCEL is required by gallery.dialog.js */ ?>
+
+ = $theme->script("gallery.ajax.js") ?>
+ = $theme->script("gallery.dialog.js") ?>
+ = $theme->script("superfish/js/superfish.js") ?>
+ = $theme->script("jquery.scrollTo.js") ?>
+
+ = $theme->admin_head() ?>
+
+ /* Theme specific CSS/JS goes last so that it can override module CSS/JS */ ?>
+ = $theme->script("ui.init.js") ?>
= $theme->css("yui/reset-fonts-grids.css") ?>
= $theme->css("themeroller/ui.base.css") ?>
= $theme->css("superfish/css/superfish.css") ?>
= $theme->css("screen.css") ?>
+ if (locales::is_rtl()): ?>
+ = $theme->css("screen-rtl.css") ?>
+ endif; ?>
- = $theme->script("jquery.js") ?>
- = $theme->script("jquery.form.js") ?>
- = $theme->script("jquery-ui.js") ?>
- = $theme->script("gallery.common.js") ?>
- /* MSG_CANCEL is required by gallery.dialog.js */ ?>
-
- = $theme->script("gallery.ajax.js") ?>
- = $theme->script("gallery.dialog.js") ?>
- = $theme->script("superfish/js/superfish.js") ?>
- = $theme->script("ui.init.js") ?>
+
+ = $theme->get_combined("css") ?>
- = $theme->admin_head() ?>
+
+ = $theme->get_combined("script") ?>
body_attributes() ?>>
diff --git a/3.0/themes/browny_admin_wind/views/pager.html.php b/3.0/themes/browny_admin_wind/views/pager.html.php
deleted file mode 100644
index 5fff5845..00000000
--- a/3.0/themes/browny_admin_wind/views/pager.html.php
+++ /dev/null
@@ -1,44 +0,0 @@
-
- // See http://docs.kohanaphp.com/libraries/pagination ?>
-
diff --git a/3.0/themes/browny_admin_wind/views/paginator.html.php b/3.0/themes/browny_admin_wind/views/paginator.html.php
new file mode 100644
index 00000000..b46d9741
--- /dev/null
+++ b/3.0/themes/browny_admin_wind/views/paginator.html.php
@@ -0,0 +1,88 @@
+
+
+// This is a generic paginator for admin collections. Depending on the page type, there are
+// different sets of variables available. With this data, you can make a paginator that
+// lets you say "You're viewing photo 5 of 35", or "You're viewing photos 10 - 18 of 37"
+// for album views.
+
+//
+// Available variables for all page types:
+// $page_type - "collection", "item", or "other"
+// $page_subtype - "album", "movie", "photo", "tag", etc.
+// $previous_page_url - the url to the previous page, if there is one
+// $next_page_url - the url to the next page, if there is one
+// $total - the total number of photos in this album
+//
+// Available for the "collection" page types:
+// $page - what page number we're on
+// $max_pages - the maximum page number
+// $page_size - the page size
+// $first_page_url - the url to the first page, or null if we're on the first page
+// $last_page_url - the url to the last page, or null if we're on the last page
+// $first_visible_position - the position number of the first visible photo on this page
+// $last_visible_position - the position number of the last visible photo on this page
+//
+// Available for "item" page types:
+// $position - the position number of this photo
+//
+?>
+
+ if ($total): ?>
+
+
+ if ($page_type == "collection"): ?>
+ if (isset($first_page_url)): ?>
+
+ = t("First") ?>
+ else: ?>
+
+ = t("First") ?>
+ endif ?>
+ endif ?>
+
+ if (isset($previous_page_url)): ?>
+
+ = t("Previous") ?>
+ else: ?>
+
+ = t("Previous") ?>
+ endif ?>
+
+
+
+ if ($total): ?>
+ if ($page_type == "collection"): ?>
+ = /* @todo This message isn't easily localizable */
+ t2("Viewing %from_number of %count",
+ "Viewing %from_number - %to_number of %count",
+ $total,
+ array("from_number" => $first_visible_position,
+ "to_number" => $last_visible_position,
+ "count" => $total)) ?>
+ else: ?>
+ = t("%position of %total", array("position" => $position, "total" => $total)) ?>
+ endif ?>
+ endif ?>
+
+
+
+ if (isset($next_page_url)): ?>
+
+ = t("Next") ?>
+ else: ?>
+
+ = t("Next") ?>
+ endif ?>
+
+ if ($page_type == "collection"): ?>
+ if (isset($last_page_url)): ?>
+
+ = t("Last") ?>
+ else: ?>
+
+ = t("Last") ?>
+ endif ?>
+ endif ?>
+
+
+ endif ?>
\ No newline at end of file
diff --git a/3.0/themes/browny_wind/css/screen-rtl.css b/3.0/themes/browny_wind/css/screen-rtl.css
new file mode 100644
index 00000000..3a0ece7b
--- /dev/null
+++ b/3.0/themes/browny_wind/css/screen-rtl.css
@@ -0,0 +1,393 @@
+/**
+ * Gallery 3 Browny Wind Theme Right-to-Left Screen Styles
+ */
+
+.rtl {
+ direction: rtl;
+}
+
+#g-header,
+#g-content,
+#g-sidebar,
+#g-footer,
+caption,
+th,
+#g-dialog,
+.g-context-menu li a,
+.g-message-box li,
+#g-site-status li {
+ text-align: right;
+}
+
+.g-text-right {
+ text-align: left;
+}
+
+/* Lists ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-text li,
+.g-text li {
+ margin-left: 0;
+ margin-right: 1em;
+}
+
+/* Messages ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-error,
+.g-info,
+.g-success,
+.g-warning,
+#g-add-photos-status .g-success,
+#g-add-photos-status .g-error {
+ background-position: center right;
+ padding-right: 30px !important;
+}
+
+form li.g-error,
+form li.g-info,
+form li.g-success,
+form li.g-warning {
+ padding-right: 0 !important;
+}
+
+.g-left,
+.g-inline li,
+#g-content #g-album-grid .g-item,
+.sf-menu li,
+.g-breadcrumbs li,
+.g-paginator li,
+.g-buttonset li,
+.ui-icon-left .ui-icon,
+.g-short-form li,
+form ul ul li,
+input[type="submit"],
+input[type="reset"],
+input.checkbox,
+input[type=checkbox],
+input.radio,
+input[type=radio] {
+ float: right;
+}
+
+.g-right,
+.ui-icon-right .ui-icon {
+ float: left;
+}
+
+.g-inline li {
+ margin-right: 1em;
+}
+
+.g-inline li.g-first {
+ margin-right: 0;
+}
+
+/* ~browny~ */
+.g-breadcrumbs li {
+ background: transparent url('../images/ico-separator-rtl.gif') no-repeat scroll right center;
+ padding: .5em 18px .5em 8px;
+}
+
+.g-breadcrumbs .g-first {
+ background: none;
+ padding-right: 0;
+}
+
+input.checkbox {
+ margin-left: .4em;
+}
+
+#g-add-comment {
+ right: inherit;
+ left: 0;
+}
+
+.ui-icon-left .ui-icon {
+ margin-left: .2em;
+}
+
+.ui-icon-right .ui-icon {
+ margin-right: .2em;
+}
+
+/* RTL Corner radius ~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-buttonset .ui-corner-tl {
+ -moz-border-radius-topleft: 0;
+ -webkit-border-top-left-radius: 0;
+ border-top-left-radius: 0;
+ -moz-border-radius-topright: 5px !important;
+ -webkit-border-top-right-radius: 5px !important;
+ border-top-right-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-tr {
+ -moz-border-radius-topright: 0;
+ -webkit-border-top-right-radius: 0;
+ border-top-right-radius: 0;
+ -moz-border-radius-topleft: 5px !important;
+ -webkit-border-top-left-radius: 5px !important;
+ border-top-left-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-bl {
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-bottomright: 5px !important;
+ -webkit-border-bottom-right-radius: 5px !important;
+ border-bottom-right-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-br {
+ -moz-border-radius-bottomright: 0;
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomleft: 5px !important;
+ -webkit-border-bottom-left-radius: 5px !important;
+ border-bottom-left-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-right,
+.ui-progressbar .ui-corner-right {
+ -moz-border-radius-topright: 0;
+ -webkit-border-top-right-radius: 0;
+ border-top-right-radius: 0;
+ -moz-border-radius-topleft: 5px !important;
+ -webkit-border-top-left-radius: 5px !important;
+ border-top-left-radius: 5px !important;
+ -moz-border-radius-bottomright: 0;
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomleft: 5px !important;
+ -webkit-border-bottom-left-radius: 5px !important;
+ border-bottom-left-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-left,
+.ui-progressbar .ui-corner-left {
+ -moz-border-radius-topleft: 0;
+ -webkit-border-top-left-radius: 0;
+ border-top-left-radius: 0;
+ -moz-border-radius-topright: 5px !important;
+ -webkit-border-top-right-radius: 5px !important;
+ border-top-right-radius: 5px !important;
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-bottomright: 5px !important;
+ -webkit-border-bottom-right-radius: 5px !important;
+ border-bottom-right-radius: 5px !important;
+}
+
+/* RTL Superfish ~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.sf-menu a {
+ border-left: none;
+ border-right:1px solid #fff;
+}
+
+.sf-menu a.sf-with-ul {
+ padding-left: 2.25em;
+ padding-right: 1em;
+}
+
+.sf-sub-indicator {
+ left: .75em !important;
+ right: auto;
+ background: url('../../../lib/superfish/images/arrows-ffffff-rtl.png') no-repeat -10px -100px;
+}
+
+a > .sf-sub-indicator {
+ top: .8em;
+ background-position: -10px -100px;
+}
+
+a:focus > .sf-sub-indicator,
+a:hover > .sf-sub-indicator,
+a:active > .sf-sub-indicator,
+li:hover > a > .sf-sub-indicator,
+li.sfHover > a > .sf-sub-indicator {
+ background-position: 0 -100px;
+}
+
+.sf-menu ul .sf-sub-indicator {
+ background-position: 0 0;
+}
+
+.sf-menu ul a > .sf-sub-indicator {
+ background-position: -10px 0;
+}
+
+.sf-menu ul a:focus > .sf-sub-indicator,
+.sf-menu ul a:hover > .sf-sub-indicator,
+.sf-menu ul a:active > .sf-sub-indicator,
+.sf-menu ul li:hover > a > .sf-sub-indicator,
+.sf-menu ul li.sfHover > a > .sf-sub-indicator {
+ background-position: 0 0;
+}
+
+.sf-menu li:hover ul,
+.sf-menu li.sfHover ul {
+ right: 0;
+ left: auto;
+}
+
+ul.sf-menu li li:hover ul,
+ul.sf-menu li li.sfHover ul {
+ right: 12em;
+ left: auto;
+}
+ul.sf-menu li li li:hover ul,
+ul.sf-menu li li li.sfHover ul {
+ right: 12em;
+ left: auto;
+}
+
+.sf-shadow ul {
+ background: url('../../../lib/superfish/images/shadow.png') no-repeat bottom left;
+ padding: 0 0 9px 8px;
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-topright: 0;
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-top-right-radius: 0;
+ -webkit-border-bottom-left-radius: 0;
+ -moz-border-radius-topleft: 17px;
+ -moz-border-radius-bottomright: 17px;
+ -webkit-border-top-left-radius: 17px;
+ -webkit-border-bottom-right-radius: 17px;
+ border-top-left-radius: 17px;
+ border-bottom-right-radius: 17px;
+}
+
+/* RTL ThemeRoller ~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.ui-dialog .ui-dialog-titlebar {
+ padding: 0.5em 1em 0.3em 0.3em;
+}
+
+.ui-dialog .ui-dialog-title {
+ float: right;
+}
+
+.ui-dialog .ui-dialog-titlebar-close {
+ left: 0.3em;
+ right: auto;
+}
+
+.ui-tabs .ui-tabs-nav li {
+ float: right;
+}
+
+/* RTL paginator ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-paginator .g-info {
+ width: 35%;
+}
+
+.g-paginator .g-text-right {
+ margin-left: 0;
+}
+
+.g-paginator .ui-icon-seek-end {
+ background-position: -80px -160px;
+}
+
+.g-paginator .ui-icon-seek-next {
+ background-position: -48px -160px;
+}
+
+.g-paginator .ui-icon-seek-prev {
+ background-position: -32px -160px;
+}
+
+.g-paginator .ui-icon-seek-first {
+ background-position: -64px -160px;
+}
+
+#g-header #g-login-menu,
+#g-header #g-quick-search-form {
+ clear: left;
+ float: left;
+}
+
+#g-header #g-login-menu li {
+ margin-left: 0;
+ padding-left: 0;
+ padding-right: 1.2em;
+}
+
+#g-site-menu {
+ left: auto;
+ right: 240px;
+}
+
+#g-view-menu #g-slideshow-link {
+ background-image: url('../images/ico-view-slideshow-rtl.png');
+}
+
+#g-sidebar .g-block-content {
+ padding-right: 1em;
+ padding-left: 0;
+}
+
+#g-footer #g-credits li {
+ padding-left: 1.2em !important;
+ padding-right: 0;
+}
+
+/* Browny ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-even {
+ text-align: left;
+}
+
+.g-odd {
+ text-align: right;
+}
+
+.uploadifyQueueItem .cancel {
+ float: left;
+}
+
+#g-user-profile .g-block h2 {
+ padding-right: .8em;
+ padding-left: auto;
+}
+
+#g-user-profile .g-avatar {
+ float: right;
+ right: 0em;
+ left: auto;
+ margin: 0em .6em 0em 0em;
+}
+
+#g-user-profile #g-comment-detail .g-author a {
+ float: right;
+ right: 0em;
+ left: auto;
+ margin-left: .6em;
+ margin-right: 0em;
+}
+
+#g-user-profile #g-comment-detail div {
+ margin-right: 5em;
+ margin-left: 0em;
+}
+
+#g-user-profile h1 {
+ margin: 1.25em 4.4em 2em 0em;
+}
+
+#g-content #g-comments .g-avatar {
+ float: right;
+ margin-left: .4em;
+ margin-right: 0;
+}
+
+#g-calendar-grid {
+ padding-right: 8px;
+ padding-left: 0px;
+}
+
diff --git a/3.0/themes/browny_wind/css/screen.css b/3.0/themes/browny_wind/css/screen.css
index ddd593a6..1539dadb 100644
--- a/3.0/themes/browny_wind/css/screen.css
+++ b/3.0/themes/browny_wind/css/screen.css
@@ -4,21 +4,28 @@
* @requires YUI reset, font, grids CSS
*
* Sheet organization:
- * 1) Font sizes, base HTML elements
- * 2) Reusable content blocks
- * 3) Page layout containers
- * 4) Content blocks in specific layout containers
- * 5) States and interactions
- * 6) Positioning and order
- * 7) Navigation and menus
- * 8) ThemeRoller
- * 9) jQuery and jQuery UI
- * 10) Right-to-left language styles
- * 11) More Browny
+ * 0) Pre Overrides
+ * 1) Font sizes, base HTML elements
+ * 2) Reusable content blocks
+ * 3) Page layout containers
+ * 4) Content blocks in specific layout containers
+ * 5) States and interactions
+ * 6) Positioning and order
+ * 7) Navigation and menus
+ * 8) jQuery and jQuery UI
+ * 9) More Browny
*/
/** *******************************************************************
- * 1) Font sizes, base HTML elements
+ * 0) Pre Overrides
+ **********************************************************************/
+
+/* ThemeRoller overrides ~~~~~~~~~~~~~~ */
+
+@import "themeroller/ui.tabs.css";
+
+/** *******************************************************************
+ * 1) Font sizes, base HTML elements
**********************************************************************/
/* ~browny~ */
@@ -39,6 +46,13 @@ body, html {
font-family: Cursive, Serif;
}
+select,
+input,
+button,
+textarea {
+ font: 99% 'Century gothic', Verdana, Arial, Helvetica, Clean, sans-serif;
+}
+
p {
margin-bottom: 1em;
text-shadow: 0px 1px 1px #F7F5F0;
@@ -100,13 +114,6 @@ h3 {
font-size: .7em;
}
-select,
-input,
-button,
-textarea {
- font: 99% 'Century gothic', Verdana, Arial, Helvetica, Clean, sans-serif;
-}
-
#l10n-client h2 {
text-shadow: none;
}
@@ -144,7 +151,25 @@ a:hover,
padding-left: 32px;
}
+/* Lists ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+ul.g-text li,
+.g-text ul li {
+ list-style-type: disc;
+}
+
+ol.g-text li,
+.g-text ol li {
+ list-style-type: decimal;
+}
+
+.g-text li,
+.g-text li {
+ margin-left: 1em;
+}
+
/* Forms ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
form {
margin: 0;
}
@@ -335,6 +360,7 @@ td {
}
/* Text ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
.g-text-small {
font-size: .8em;
}
@@ -348,7 +374,7 @@ td {
}
/** *******************************************************************
- * 2) Reusable content blocks
+ * 2) Reusable content blocks
*********************************************************************/
/* ~browny~ */
@@ -362,10 +388,11 @@ td {
}
/*** ******************************************************************
- * 3) Page layout containers
+ * 3) Page layout containers
*********************************************************************/
/* Dimension and scale ~~~~~~~~~~~~~~~~~~~ */
+
.g-one-quarter {
width: 25%;
}
@@ -434,7 +461,7 @@ td {
}
/** *******************************************************************
- * 4) Content blocks in specific layout containers
+ * 4) Content blocks in specific layout containers
*********************************************************************/
/* Header ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
@@ -562,7 +589,8 @@ td {
background-color: #fff;
}
-/* Permissions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+/* Permissions ~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
#g-edit-permissions-form td {
background-image: none;
}
@@ -675,11 +703,11 @@ tr.g-error td.g-error,
}
tr.g-success {
- background-image: none;
+ background-image: none;
}
tr.g-success td.g-success {
- background-image: url('../images/ico-success.png');
+ background-image: url('../images/ico-success.png');
}
.g-warning,
@@ -767,7 +795,7 @@ form .g-error {
}
/** *******************************************************************
- * 7) Navigation and menus
+ * 7) Navigation and menus
*********************************************************************/
/* Login menu ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
@@ -869,16 +897,7 @@ form .g-error {
}
/** *******************************************************************
- * 8) ThemeRoller Theme
- **********************************************************************/
-/* ~browny~ */
-
-/* ThemeRoller overrides ~~~~~~~~~~~~~~~~~ */
-
-@import "themeroller/ui.tabs.css";
-
-/** *******************************************************************
- * 9) jQuery and jQuery UI
+ * 8) jQuery and jQuery UI
*********************************************************************/
/* Generic block container ~~~~~~~~~~~~~~~ */
@@ -893,18 +912,19 @@ form .g-error {
}
/* Superfish menu overrides ~~~~~~~~~~~~~~ */
+
.sf-menu ul {
- width: 12em;
+ width: 12em;
}
ul.sf-menu li li:hover ul,
ul.sf-menu li li.sfHover ul {
- left: 12em;
+ left: 12em;
}
ul.sf-menu li li li:hover ul,
ul.sf-menu li li li.sfHover ul {
- left: 12em;
+ left: 12em;
}
/* ~browny~ */
@@ -915,13 +935,13 @@ ul.sf-menu li li li.sfHover ul {
/* ~browny~ */
.sf-menu li {
- background: #d3b07e url('../images/ui-bg_highlight-soft_45_d3b07e_1x100.png') 50% 50% repeat-x;
- text-shadow: 0px 1px 1px #fff;
+ background: #d3b07e url('../images/ui-bg_highlight-soft_45_d3b07e_1x100.png') 50% 50% repeat-x;
+ text-shadow: 0px 1px 1px #fff;
}
/* ~browny~ */
.sf-menu a {
- border-top: 1px solid #e0cbae;
+ border-top: 1px solid #e0cbae;
}
/* ~browny~ */
@@ -932,7 +952,7 @@ ul.sf-menu li li li.sfHover ul {
/* ~browny~ */
.sf-menu li:hover, .sf-menu li.sfHover,
.sf-menu a:focus, .sf-menu a:hover, .sf-menu a:active {
- background: #e0cbae;
+ background: #e0cbae;
}
/* jQuery UI Dialog ~~~~~~~~~~~~~~~~~~~~~~ */
@@ -1005,11 +1025,11 @@ button {
.g-progress-bar {
height: 1em;
width: 100%;
- margin-top: .5em;
+ margin: .5em 0;
display: inline-block;
}
-/* Status and validation messages ~~~~ */
+/* Status and validation messages ~~~~~~~~ */
.g-message-block {
background-position: .4em .3em;
@@ -1089,7 +1109,7 @@ div#g-action-status {
width: 40%;
}
-/* Dialogs and panels ~~~~~~~~~~~~~~~~~~ */
+/* Dialogs and panels ~~~~~~~~~~~~~~~~~~~~ */
#g-dialog {
text-align: left;
@@ -1108,7 +1128,7 @@ div#g-action-status {
padding: 1em;
}
-/* Inline layout ~~~~~~~~~~ */
+/* Inline layout ~~~~~~~~~~~~~~~~~~~~~~~~ */
.g-inline li {
float: left;
@@ -1120,338 +1140,13 @@ div#g-action-status {
margin-left: 0;
}
-/** *******************************************************************
- * 10) Right to left language styles
- *********************************************************************/
-.rtl {
- direction: rtl;
-}
-
-.rtl #g-header,
-.rtl #g-content,
-.rtl #g-sidebar,
-.rtl #g-footer,
-.rtl caption,
-.rtl th,
-.rtl #g-dialog,
-.rtl .g-context-menu li a,
-.rtl .g-message-box li,
-.rtl #g-site-status li {
- text-align: right;
-}
-
-.rtl .g-text-right {
- text-align: left;
-}
-
-.rtl .g-error,
-.rtl .g-info,
-.rtl .g-success,
-.rtl .g-warning,
-.rtl #g-add-photos-status .g-success,
-.rtl #g-add-photos-status .g-error {
- background-position: center right;
- padding-right: 30px !important;
-}
-
-.rtl form li.g-error,
-.rtl form li.g-info,
-.rtl form li.g-success,
-.rtl form li.g-warning {
- padding-right: 0 !important;
-}
-
-.rtl .g-left,
-.rtl .g-inline li,
-.rtl #g-content #g-album-grid .g-item,
-.rtl .sf-menu li,
-.rtl .g-breadcrumbs li,
-.rtl .g-paginator li,
-.rtl .g-buttonset li,
-.rtl .ui-icon-left .ui-icon,
-.rtl .g-short-form li,
-.rtl form ul ul li,
-.rtl input[type="submit"],
-.rtl input[type="reset"],
-.rtl input.checkbox,
-.rtl input[type=checkbox],
-.rtl input.radio,
-.rtl input[type=radio] {
- float: right;
-}
-
-.rtl .g-right,
-.rtl .ui-icon-right .ui-icon {
- float: left;
-}
-
-.rtl .g-inline li {
- margin-right: 1em;
-}
-
-.rtl .g-inline li.g-first {
- margin-right: 0;
-}
-
-/* ~browny~ */
-.rtl .g-breadcrumbs li {
- background: transparent url('../images/ico-separator-rtl.gif') no-repeat scroll right center;
- padding: .5em 18px .5em 8px;
-}
-
-.rtl .g-breadcrumbs .g-first {
- background: none;
- padding-right: 0;
-}
-
-.rtl input.checkbox {
- margin-left: .4em;
-}
-
-.rtl #g-add-comment {
- right: inherit;
- left: 0;
-}
-
-.rtl .ui-icon-left .ui-icon {
- margin-left: .2em;
-}
-
-.rtl .ui-icon-right .ui-icon {
- margin-right: .2em;
-}
-
-/* RTL Corner radius ~~~~~~~~~~~~~~~~~~~~~~ */
-.rtl .g-buttonset .ui-corner-tl {
- -moz-border-radius-topleft: 0;
- -webkit-border-top-left-radius: 0;
- border-top-left-radius: 0;
- -moz-border-radius-topright: 5px !important;
- -webkit-border-top-right-radius: 5px !important;
- border-top-right-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-tr {
- -moz-border-radius-topright: 0;
- -webkit-border-top-right-radius: 0;
- border-top-right-radius: 0;
- -moz-border-radius-topleft: 5px !important;
- -webkit-border-top-left-radius: 5px !important;
- border-top-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-bl {
- -moz-border-radius-bottomleft: 0;
- -webkit-border-bottom-left-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-bottomright: 5px !important;
- -webkit-border-bottom-right-radius: 5px !important;
- border-bottom-right-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-br {
- -moz-border-radius-bottomright: 0;
- -webkit-border-bottom-right-radius: 0;
- border-bottom-right-radius: 0;
- -moz-border-radius-bottomleft: 5px !important;
- -webkit-border-bottom-left-radius: 5px !important;
- border-bottom-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-right,
-.rtl .ui-progressbar .ui-corner-right {
- -moz-border-radius-topright: 0;
- -webkit-border-top-right-radius: 0;
- border-top-right-radius: 0;
- -moz-border-radius-topleft: 5px !important;
- -webkit-border-top-left-radius: 5px !important;
- border-top-left-radius: 5px !important;
- -moz-border-radius-bottomright: 0;
- -webkit-border-bottom-right-radius: 0;
- border-bottom-right-radius: 0;
- -moz-border-radius-bottomleft: 5px !important;
- -webkit-border-bottom-left-radius: 5px !important;
- border-bottom-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-left,
-.rtl .ui-progressbar .ui-corner-left {
- -moz-border-radius-topleft: 0;
- -webkit-border-top-left-radius: 0;
- border-top-left-radius: 0;
- -moz-border-radius-topright: 5px !important;
- -webkit-border-top-right-radius: 5px !important;
- border-top-right-radius: 5px !important;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-bottom-left-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-bottomright: 5px !important;
- -webkit-border-bottom-right-radius: 5px !important;
- border-bottom-right-radius: 5px !important;
-}
-
-/* RTL Superfish ~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.rtl .sf-menu a {
- border-left: none;
- border-right:1px solid #fff;
-}
-
-.rtl .sf-menu a.sf-with-ul {
- padding-left: 2.25em;
- padding-right: 1em;
-}
-
-.rtl .sf-sub-indicator {
- left: .75em !important;
- right: auto;
- background: url('../../../lib/superfish/images/arrows-ffffff-rtl.png') no-repeat -10px -100px; /* 8-bit indexed alpha png. IE6 gets solid image only */
-}
-.rtl a > .sf-sub-indicator { /* give all except IE6 the correct values */
- top: .8em;
- background-position: -10px -100px; /* use translucent arrow for modern browsers*/
-}
-/* apply hovers to modern browsers */
-.rtl a:focus > .sf-sub-indicator,
-.rtl a:hover > .sf-sub-indicator,
-.rtl a:active > .sf-sub-indicator,
-.rtl li:hover > a > .sf-sub-indicator,
-.rtl li.sfHover > a > .sf-sub-indicator {
- background-position: 0 -100px; /* arrow hovers for modern browsers*/
-}
-
-/* point right for anchors in subs */
-.rtl .sf-menu ul .sf-sub-indicator { background-position: 0 0; }
-.rtl .sf-menu ul a > .sf-sub-indicator { background-position: -10px 0; }
-/* apply hovers to modern browsers */
-.rtl .sf-menu ul a:focus > .sf-sub-indicator,
-.rtl .sf-menu ul a:hover > .sf-sub-indicator,
-.rtl .sf-menu ul a:active > .sf-sub-indicator,
-.rtl .sf-menu ul li:hover > a > .sf-sub-indicator,
-.rtl .sf-menu ul li.sfHover > a > .sf-sub-indicator {
- background-position: 0 0; /* arrow hovers for modern browsers*/
-}
-
-.rtl .sf-menu li:hover ul,
-.rtl .sf-menu li.sfHover ul {
- right: 0;
- left: auto;
-}
-
-.rtl ul.sf-menu li li:hover ul,
-.rtl ul.sf-menu li li.sfHover ul {
- right: 12em; /* match ul width */
- left: auto;
-}
-.rtl ul.sf-menu li li li:hover ul,
-.rtl ul.sf-menu li li li.sfHover ul {
- right: 12em; /* match ul width */
- left: auto;
-}
-
-/*** shadows for all but IE6 ***/
-.rtl .sf-shadow ul {
- background: url('../../../lib/superfish/images/shadow.png') no-repeat bottom left;
- padding: 0 0 9px 8px;
- border-top-right-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-topright: 0;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-top-right-radius: 0;
- -webkit-border-bottom-left-radius: 0;
- -moz-border-radius-topleft: 17px;
- -moz-border-radius-bottomright: 17px;
- -webkit-border-top-left-radius: 17px;
- -webkit-border-bottom-right-radius: 17px;
- border-top-left-radius: 17px;
- border-bottom-right-radius: 17px;
-}
-
-/* RTL ThemeRoller ~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.rtl .ui-dialog .ui-dialog-titlebar {
- padding: 0.5em 1em 0.3em 0.3em;
-}
-
-.rtl .ui-dialog .ui-dialog-title {
- float: right;
-}
-
-.rtl .ui-dialog .ui-dialog-titlebar-close {
- left: 0.3em;
- right: auto;
-}
-
-
-/* RTL paginator ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.rtl .g-paginator .g-info {
- width: 35%;
-}
-
-.rtl .g-paginator .g-text-right {
- margin-left: 0;
-}
-
-.rtl .g-paginator .ui-icon-seek-end {
- background-position: -80px -160px;
-}
-
-.rtl .g-paginator .ui-icon-seek-next {
- background-position: -48px -160px;
-}
-
-.rtl .g-paginator .ui-icon-seek-prev {
- background-position: -32px -160px;
-}
-
-.rtl .g-paginator .ui-icon-seek-first {
- background-position: -64px -160px;
-}
-
-.rtl #g-header #g-login-menu,
-.rtl #g-header #g-quick-search-form {
- clear: left;
- float: left;
-}
-
-.rtl #g-header #g-login-menu li {
- margin-left: 0;
- padding-left: 0;
- padding-right: 1.2em;
-}
-
-.rtl #g-site-menu {
- left: auto;
- right: 240px;
-}
-
-.rtl #g-view-menu #g-slideshow-link {
- background-image: url('../images/ico-view-slideshow-rtl.png');
-}
-
-.rtl #g-sidebar .g-block-content {
- padding-right: 1em;
- padding-left: 0;
-}
-
-.rtl #g-footer #g-credits li {
- padding-left: 1.2em !important;
- padding-right: 0;
-}
-
-/* ~browny~ */
-.rtl .g-even {
- text-align: left;
-}
-
-/* ~browny~ */
-.rtl .g-odd {
- text-align: right;
+/* Autocomplete ~~~~~~~~~~~~~~~~~~~~~~~~~ */
+.ac_loading {
+ background: white url('../images/loading-small.gif') right center no-repeat !important;
}
/** *******************************************************************
- * 11) More Browny (Extra overrides for better Browny look)
+ * 9) More Browny (Extra overrides for better Browny look)
*********************************************************************/
/* ~browny~ */
@@ -1478,10 +1173,6 @@ div#g-action-status {
background-color: #FAFAEB !important;
}
-.rtl .uploadifyQueueItem .cancel {
- float: left;
-}
-
.uploadifyQueue {
margin-top: 1em;
}
@@ -1533,35 +1224,6 @@ div#g-action-status {
margin-bottom: .5em;
}
-.rtl #g-user-profile .g-block h2 {
- padding-right: .8em;
- padding-left: auto;
-}
-
-.rtl #g-user-profile .g-avatar {
- float: right;
- right: 0em;
- left: auto;
- margin: 0em .6em 0em 0em;
-}
-
-.rtl #g-user-profile #g-comment-detail .g-author a {
- float: right;
- right: 0em;
- left: auto;
- margin-left: .6em;
- margin-right: 0em;
-}
-
-.rtl #g-user-profile #g-comment-detail div {
- margin-right: 5em;
- margin-left: 0em;
-}
-
-.rtl #g-user-profile h1 {
- margin: 1.25em 4.4em 2em 0em;
-}
-
/* Comments ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
#g-content #g-comments .g-avatar {
@@ -1570,12 +1232,6 @@ div#g-action-status {
margin-left: 0;
}
-.rtl #g-content #g-comments .g-avatar {
- float: right;
- margin-left: .4em;
- margin-right: 0;
-}
-
/* Organize ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
#g-organize {
@@ -1609,11 +1265,6 @@ table.calendar td:hover {
background: #EDE4D5 !important;
}
-.rtl #g-calendar-grid {
- padding-right: 8px;
- padding-left: 0px;
-}
-
#g-view-menu #g-calendarview-link {
background-image: url('../images/ico-view-calendarview.png') !important;
}
diff --git a/3.0/themes/browny_wind/js/ui.init.js b/3.0/themes/browny_wind/js/ui.init.js
index 2c67bf3a..3ee3e32e 100644
--- a/3.0/themes/browny_wind/js/ui.init.js
+++ b/3.0/themes/browny_wind/js/ui.init.js
@@ -82,7 +82,7 @@ $(document).ready(function() {
} else {
var sib_height = $(this).prev().height();
}
- if ($.browser.msie && $.browser.version >= 8) {
+ if ($.browser.msie && $.browser.version <= 8) {
sib_height = sib_height + 1;
}
$(this).css("height", sib_height);
diff --git a/3.0/themes/browny_wind/theme.info b/3.0/themes/browny_wind/theme.info
index 3f6c4c19..8ec9f1a2 100644
--- a/3.0/themes/browny_wind/theme.info
+++ b/3.0/themes/browny_wind/theme.info
@@ -1,6 +1,10 @@
name = "Browny Wind"
description = "The default Wind theme with a browny style."
version = 1
-author = "Ma'moun M. Diraneyya"
+author = "Mamouneyya"
site = 1
admin = 0
+author_name = "Ma'moun Diraneyya"
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Themes:browny_wind"
+discuss_url = "http://gallery.menalto.com/node/95007"
diff --git a/3.0/themes/browny_wind/views/no_sidebar.html.php b/3.0/themes/browny_wind/views/no_sidebar.html.php
index a9eb0e3e..58c57256 100644
--- a/3.0/themes/browny_wind/views/no_sidebar.html.php
+++ b/3.0/themes/browny_wind/views/no_sidebar.html.php
@@ -1,6 +1,11 @@
- = t("No active sidebar blocks.") ?>
- ">= t("Add blocks") ?>
+
+ if (block_manager::get_active("site_sidebar")): ?>
+ = t("Active sidebar blocks have no content.") ?>
+ else: ?>
+ = t("No active sidebar blocks.") ?>
+ endif ?>
+ ">= t("configure blocks") ?>
diff --git a/3.0/themes/browny_wind/views/page.html.php b/3.0/themes/browny_wind/views/page.html.php
index 5e4040bd..f0ee5b5f 100644
--- a/3.0/themes/browny_wind/views/page.html.php
+++ b/3.0/themes/browny_wind/views/page.html.php
@@ -1,50 +1,43 @@
-
+html_attributes() ?> xml:lang="en" lang="en">
+ $theme->start_combining("script,css") ?>
if ($page_title): ?>
= $page_title ?>
else: ?>
if ($theme->item()): ?>
- if ($theme->item()->is_album()): ?>
- = t("Browse Album :: %album_title", array("album_title" => $theme->item()->title)) ?>
- elseif ($theme->item()->is_photo()): ?>
- = t("Photo :: %photo_title", array("photo_title" => $theme->item()->title)) ?>
- else: ?>
- = t("Movie :: %movie_title", array("movie_title" => $theme->item()->title)) ?>
- endif ?>
+ = $theme->item()->title ?>
elseif ($theme->tag()): ?>
- = t("Browse Tag :: %tag_title", array("tag_title" => $theme->tag()->name)) ?>
+ = t("Photos tagged with %tag_title", array("tag_title" => $theme->tag()->name)) ?>
else: /* Not an item, not a tag, no page_title specified. Help! */ ?>
- = t("Gallery") ?>
+ = item::root()->title ?>
endif ?>
endif ?>
-
" type="image/x-icon" />
- = $theme->css("yui/reset-fonts-grids.css") ?>
- = $theme->css("superfish/css/superfish.css") ?>
- = $theme->css("themeroller/ui.base.css") ?>
- = $theme->css("screen.css") ?>
-
+
"
+ type="image/x-icon" />
+
" />
if ($theme->page_type == "collection"): ?>
if ($thumb_proportion != 1): ?>
$new_width = round($thumb_proportion * 213) ?>
$new_height = round($thumb_proportion * 240) ?>
-
+
endif ?>
endif ?>
+
+ = $theme->script("json2-min.js") ?>
= $theme->script("jquery.js") ?>
= $theme->script("jquery.form.js") ?>
= $theme->script("jquery-ui.js") ?>
@@ -57,9 +50,8 @@
= $theme->script("gallery.dialog.js") ?>
= $theme->script("superfish/js/superfish.js") ?>
= $theme->script("jquery.localscroll.js") ?>
- = $theme->script("ui.init.js") ?>
- /* These are page specific, but if we put them before $theme->head() they get combined */ ?>
+ /* These are page specific but they get combined */ ?>
if ($theme->page_subtype == "photo"): ?>
= $theme->script("jquery.scrollTo.js") ?>
= $theme->script("gallery.show_full_size.js") ?>
@@ -68,6 +60,26 @@
endif ?>
= $theme->head() ?>
+
+ /* Theme specific CSS/JS goes last so that it can override module CSS/JS */ ?>
+ = $theme->script("ui.init.js") ?>
+ = $theme->css("yui/reset-fonts-grids.css") ?>
+ = $theme->css("superfish/css/superfish.css") ?>
+ = $theme->css("themeroller/ui.base.css") ?>
+ = $theme->css("screen.css") ?>
+ if (locales::is_rtl()): ?>
+ = $theme->css("screen-rtl.css") ?>
+ endif; ?>
+
+
+
+ = $theme->get_combined("css") ?>
+
+
+ = $theme->get_combined("script") ?>
body_attributes() ?>>
@@ -80,7 +92,7 @@
= $header_text ?>
else: ?>
for_html_attr() ?>">
- for_html_attr() ?>" src="= $theme->url("images/logo.png") ?>" />
+ for_html_attr() ?>" src="= url::file("lib/images/logo.png") ?>" />
endif ?>
= $theme->user_menu() ?>
diff --git a/3.0/themes/pear4gallery3/.gitignore b/3.0/themes/pear4gallery3/.gitignore
new file mode 100644
index 00000000..5b4346fd
--- /dev/null
+++ b/3.0/themes/pear4gallery3/.gitignore
@@ -0,0 +1,2 @@
+icons/depricated
+temp/
diff --git a/3.0/themes/pear4gallery3/admin/controllers/admin_theme_options.php b/3.0/themes/pear4gallery3/admin/controllers/admin_theme_options.php
new file mode 100644
index 00000000..cd784e24
--- /dev/null
+++ b/3.0/themes/pear4gallery3/admin/controllers/admin_theme_options.php
@@ -0,0 +1,327 @@
+
+
+class Admin_Theme_Options_Controller extends Admin_Controller {
+
+ protected $min_gallery_ver = 46;
+
+ private function load_theme_info() {
+ $theme_id = module::get_var("gallery", "active_site_theme");
+ $file = THEMEPATH . "$theme_id/theme.info";
+ $theme_info = new ArrayObject(parse_ini_file($file), ArrayObject::ARRAY_AS_PROPS);
+ return $theme_info;
+ }
+
+ private function get_theme_version() {
+ $theme_info = $this->load_theme_info();
+ return ($theme_info->version);
+ }
+
+ private function get_theme_name() {
+ $theme_info = $this->load_theme_info();
+ return ($theme_info->name);
+ }
+
+ private function prerequisite_check($group, $id, $is_ok, $caption, $caption_ok, $caption_failed, $iswarning, $msg_error) {
+ $confirmation_caption = ($is_ok)? $caption_ok : $caption_failed;
+ $checkbox = $group->checkbox($id)
+ ->label($caption . " " . $confirmation_caption)
+ ->checked($is_ok)
+ ->disabled(true);
+ if ($is_ok):
+ $checkbox->class("g-success");
+ elseif ($iswarning):
+ $checkbox->class("g-prerequisite g-warning")->error_messages("failed", $msg_error)->add_error("failed", 1);
+ else:
+ $checkbox->class("g-error")->error_messages("failed", $msg_error)->add_error("failed", 1);
+ endif;
+ }
+
+ /* Convert old values ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+ protected function upgrade_settings() {
+ if (module::get_var("th_pear4gallery3", "show_logo")):
+ module::clear_var("th_pear4gallery3", "show_logo");
+ module::set_var("th_pear4gallery3", "hide_logo", FALSE);
+ endif;
+ }
+
+ protected function get_edit_form_admin() {
+ $this->upgrade_settings();
+
+ $form = new Forge("admin/theme_options/save/", "", null, array("id" =>"g-theme-options-form"));
+
+// Just commenting out, we might want rssmodule in future versions.
+// $rssmodulecheck = (module::is_active("rss") && module::info("rss"));
+
+ /* Prerequisites ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+ $group = $form->group("requirements")->label(t("Prerequisites"));
+ $gallery_ver = module::get_version("gallery");
+ $this->prerequisite_check($group, "vercheck", $gallery_ver >= $this->min_gallery_ver,
+ t("Gallery 3 Core v.") . $this->min_gallery_ver . "+", t("Installed"), t("Required"), FALSE, sprintf(t("Check Failed. Minimum Required Version is %s. Found %s."), $this->min_gallery_ver, $gallery_ver));
+ $this->prerequisite_check($group, "square_thumbs", (module::is_active("square_thumbs") and module::info("square_thumbs")),
+ t("Square Thumbnails"), t("Found"), t("Required"), FALSE, t("Install
Square Thumbnails to display Thumbs correctly."));
+ if (!module::get_var("th_pear4gallery3", "hide_thumbmeta")):
+ $this->prerequisite_check($group, "info", (module::is_active("info") and module::info("info")),
+ t("Info Module"), t("Found"), t("Required"), FALSE, t("Check Failed. Module is required to display Thumb metadata."));
+ endif;
+
+ /* General Settings ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+ $group = $form->group("edit_theme")->label(t("General Settings"));
+ $group->input("favicon")
+ ->label(t("URL (or relative path) to your favicon.ico"))
+ ->value(module::get_var("gallery", "favicon_url"));
+ $group->input("appletouchicon")
+ ->label(t("URL (or relative path) to your apple-touch-icon.png"))
+ ->value(module::get_var("gallery", "appletouchicon_url"));
+
+ /* Advanced Options - General ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+ $group = $form->group("edit_theme_adv_main")->label(t("Advanced Options - General"));
+ $group->checkbox("hide_logo")
+ ->label(t("Hide Bottom Pear Logo"))
+ ->checked(module::get_var("th_pear4gallery3", "hide_logo"));
+ $group->dropdown("mainmenu_view")
+ ->label(t("Main page View"))
+ ->options(array("grid" => t("Grid (Default)"), "mosaic" => t("Mosaic"), "carousel" => t("Carousel")))
+ ->selected(module::get_var("th_pear4gallery3", "mainmenu_view"));
+ $group->checkbox("show_guest_menu")
+ ->label(t("Show Main Menu for Guest Users"))
+ ->checked(module::get_var("th_pear4gallery3", "show_guest_menu"));
+ $group->dropdown("background")
+ ->label(t("Background color"))
+ ->options(array("black" => t("Black (Default)"), "dkgrey" => t("Dark-Grey"), "ltgrey" => t("Light-Grey"), "white" => t("White")))
+ ->selected(module::get_var("th_pear4gallery3", "background"));
+ $group->input("ga_code")
+ ->label(t("
Google analytics code."))
+ ->value(module::get_var("th_pear4gallery3", "ga_code"));
+
+ /* Advanced Options - Photo page ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+/*
+ $group = $form->group("edit_theme_adv_photo")->label(t("Advanced Options - Photo Page"));
+ $group->dropdown("photo_popupbox")
+ ->label(t($sb_fb_caption) . " " . t("Mode"))
+ ->options(array("default" => t("Default (Slideshow/Preview)"), "preview" => t("Preview Only"), "none" => t("Disable")))
+ ->selected(module::get_var("th_pear4gallery3", "photo_popupbox"));
+ $group->dropdown("photo_descmode")
+ ->label(t("Description Display Mode"))
+ ->options(array("overlay_top" => t("Overlay Top"), "overlay_bottom" => t("Overlay Bottom"), "bottom" => t("Bottom"), "top" => t("Top"), "hide" => t("Hide")))
+ ->selected(module::get_var("th_pear4gallery3", "photo_descmode"));
+ $group->checkbox("thumb_inpage")
+ ->label(t("Keep Thumb Nav Block on the side"))
+ ->checked(module::get_var("th_pear4gallery3", "thumb_inpage"));
+ if (!$thumbnavcheck):
+ $group->thumb_inpage->disabled(true);
+ endif;
+ $group->checkbox("hide_photometa")
+ ->label(t("Hide Item Meta Data"))
+ ->checked(module::get_var("th_pear4gallery3", "hide_photometa", TRUE));
+ $group->checkbox("desc_allowbbcode")
+ ->label(t("Allow BBCode/HTML in Descriptions"))
+ ->checked(module::get_var("th_pear4gallery3", "desc_allowbbcode"));
+*/
+ /* Maintenance ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+ $group = $form->group("maintenance")->label(t("Maintenance"));
+ $group->checkbox("build_resize")->label(t("Mark all Image Resizes for Rebuild"))->checked(false);
+ $group->checkbox("build_thumbs")->label(t("Mark all Thumbnails for Rebuild"))->checked(false);
+ $group->checkbox("build_exif")->label(t("Mark Exif Info data for reload"))->checked(false);
+ if ($iptccheck):
+ $group->checkbox("build_iptc")->label(t("Mark IPTC Info data for reload"))->checked(false);
+ endif;
+ $group->checkbox("purge_cache")->label(t("Purge cache data"))->checked(false);
+ $group->checkbox("reset_theme")->label(t("Reset Theme to a Default State"))->checked(false);
+
+ module::event("theme_edit_form", $form);
+
+ $form->submit("g-theme-options-save")->value(t("Save Changes"));
+
+ return $form;
+ }
+
+ protected function get_edit_form_help() {
+ $help = '
';
+ $help .= 'Help ';
+ $help .= 'Prerequisites
+ Requirements need to be met for theme to function properly.
+
';
+
+ $help .= 'General Settings
+ ';
+
+ $help .= 'Advanced Options - General
+ ';
+ $help .= 'Advanced Options - Photo Page
+ ';
+ $help .= 'Maintenance
+ Without changing image size, you can Mark all Resizes for Rebuild .
+ Then you need to visit Admin\Maintenance to initiate the process.
+
Same can be done for image thumbs with Mark all Thumbnails for Rebuild .
+
Mark Exif/IPTC Info for reload would mark all Exif or IPTC records as "Dirty" allowing it to be repopulated.
+
And just in case you think that something is not right, you can always Reset Theme to a Default State .
+
';
+ $help .= ' ';
+ return t($help);
+ }
+
+ private function save_item_state($statename, $state, $value) {
+ if ($state):
+ module::set_var("th_pear4gallery3", $statename, $value);
+ else:
+ module::clear_var("th_pear4gallery3", $statename);
+ endif;
+ }
+
+ protected function legacy() {
+ module::clear_var("th_pear4gallery3", "hide_logo");
+ module::clear_var("th_pear4gallery3", "mainmenu_view");
+ module::clear_var("th_pear4gallery3", "show_guest_menu");
+ module::clear_var("th_pear4gallery3", "background");
+ module::clear_var("th_pear4gallery3", "ga_code");
+ }
+
+ protected function reset_theme() {
+ // Default core theme settings
+ module::set_var("gallery", "page_size", 9);
+ module::set_var("gallery", "resize_size", 640);
+ module::set_var("gallery", "thumb_size", 200);
+ module::set_var("gallery", "header_text", "");
+ module::set_var("gallery", "footer_text", "");
+ module::set_var("gallery", "show_credits", FALSE);
+ module::clear_all_vars("th_pear4gallery3");
+ module::clear_var("th_pear4gallery3", "hide_logo");
+ }
+
+ public function save() {
+ site_status::clear("gd_init_configuration");
+ access::verify_csrf();
+
+ $form = self::get_edit_form_admin();
+
+ if ($form->validate()):
+ $this->legacy();
+
+ if ($form->maintenance->reset_theme->value):
+ $this->reset_theme();
+ module::event("theme_edit_form_completed", $form);
+ message::success(t("Theme details are reset"));
+ else:
+ // * General Settings ****************************************************
+
+ $resize_size = 800;
+
+ $build_resize = $form->maintenance->build_resize->value;
+ $build_thumbs = $form->maintenance->build_thumbs->value;
+ $build_exif = $form->maintenance->build_exif->value;
+ if (module::is_active("iptc") and module::info("iptc")):
+ $build_iptc = $form->maintenance->build_iptc->value;
+ else:
+ $build_iptc = FALSE;
+ endif;
+ $purge_cache = $form->maintenance->purge_cache->value;
+
+ $thumb_descmode_a = $form->edit_theme_adv_thumb->thumb_descmode_a->value;
+ $thumb_descmode = $form->edit_theme_adv_thumb->thumb_descmode->value;
+ $thumb_metamode = $form->edit_theme_adv_thumb->thumb_metamode->value;
+ $photo_descmode = $form->edit_theme_adv_photo->photo_descmode->value;
+ $photo_popupbox = $form->edit_theme_adv_photo->photo_popupbox->value;
+
+ if ($build_resize):
+ graphics::remove_rule("gallery", "resize", "gallery_graphics::resize");
+ graphics::add_rule("gallery", "resize", "gallery_graphics::resize",
+ array("width" => $resize_size, "height" => $resize_size, "master" => Image::AUTO), 100);
+ endif;
+
+ if (module::get_var("gallery", "resize_size") != $resize_size):
+ module::set_var("gallery", "resize_size", $resize_size);
+ endif;
+
+ $thumb_size = 200;
+ $rule = Image::AUTO;
+
+ if ($build_thumbs):
+ graphics::remove_rule("gallery", "thumb", "gallery_graphics::resize");
+ graphics::add_rule("gallery", "thumb", "gallery_graphics::resize",
+ array("width" => $thumb_size, "height" => $thumb_size, "master" => $rule), 100);
+ endif;
+
+ if (module::get_var("gallery", "thumb_size") != $thumb_size):
+ module::set_var("gallery", "thumb_size", $thumb_size);
+ endif;
+
+ module::set_var("gallery", "page_size", 50);
+ module::set_var("gallery", "favicon_url", $form->edit_theme->favicon->value);
+ module::set_var("gallery", "appletouchicon_url", $form->edit_theme->appletouchicon->value);
+
+ $this->save_item_state("logo_path", $form->edit_theme->logo_path->value, $form->edit_theme->logo_path->value);
+
+ // * Advanced Options - General ******************************************
+
+ $this->save_item_state("hide_logo", $form->edit_theme_adv_main->hide_logo->value, TRUE);
+ $this->save_item_state("mainmenu_view", $form->edit_theme_adv_main->mainmenu_view->value != "grid", $form->edit_theme_adv_main->mainmenu_view->value);
+ $this->save_item_state("show_guest_menu",$form->edit_theme_adv_main->show_guest_menu->value, TRUE);
+ $this->save_item_state("background", $form->edit_theme_adv_main->background->value != "black", $form->edit_theme_adv_main->background->value);
+ $this->save_item_state("ga_code", $form->edit_theme_adv_main->ga_code->value, $form->edit_theme_adv_main->ga_code->value);
+
+ // * Advanced Options - Photo page ***************************************
+ /*
+ $this->save_item_state("photo_descmode", $photo_descmode != "overlay_top", $photo_descmode);
+ $this->save_item_state("photo_popupbox", $photo_popupbox != "default", $photo_popupbox);
+ $this->save_item_state("thumb_inpage", $form->edit_theme_adv_photo->thumb_inpage->value, TRUE);
+ $this->save_item_state("hide_photometa", !$form->edit_theme_adv_photo->hide_photometa->value, FALSE);
+ $this->save_item_state("desc_allowbbcode", $form->edit_theme_adv_photo->desc_allowbbcode->value, TRUE);
+*/
+
+ module::event("theme_edit_form_completed", $form);
+
+ if ($_priorratio != $thumb_ratio):
+ message::warning(t("Thumb aspect ratio has been changed. Consider rebuilding thumbs if needed."));
+ endif;
+
+ message::success(t("Updated theme details"));
+
+ if ($build_exif):
+ db::update('exif_records')
+ ->set(array('dirty'=>'1'))
+ ->execute();
+ endif;
+
+ if ($build_iptc):
+ db::update('iptc_records')
+ ->set(array('dirty'=>'1'))
+ ->execute();
+ endif;
+
+ if ($purge_cache):
+ db::build()
+ ->delete("caches")
+ ->execute();
+ endif;
+ endif;
+ url::redirect("admin/theme_options");
+ else:
+ print $this->get_admin_view();
+ endif;
+ }
+
+ protected function get_admin_view() {
+ $view = new Admin_View("admin.html");
+ $view->page_title = t(".Pear Theme");
+ $view->content = new View("admin_theme_options.html");
+ $view->content->name = self::get_theme_name();
+ $view->content->version = self::get_theme_version();
+ $view->content->form = self::get_edit_form_admin();
+ $view->content->help = self::get_edit_form_help();
+ return $view;
+ }
+
+ public function index() {
+ site_status::clear("gd_init_configuration");
+ print $this->get_admin_view();
+ }
+}
+?>
diff --git a/3.0/themes/pear4gallery3/admin/views/admin_include.html.php b/3.0/themes/pear4gallery3/admin/views/admin_include.html.php
new file mode 100644
index 00000000..8d818bb7
--- /dev/null
+++ b/3.0/themes/pear4gallery3/admin/views/admin_include.html.php
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+ if ($is_module):
+ $admin_info = new ArrayObject(parse_ini_file(MODPATH . $name . "/module.info"), ArrayObject::ARRAY_AS_PROPS);
+ $version = number_format($admin_info->version / 10, 1, '.', '');
+ else:
+ $admin_info = new ArrayObject(parse_ini_file(THEMEPATH . $name . "/theme.info"), ArrayObject::ARRAY_AS_PROPS);
+ $version = $admin_info->version;
+ endif;
+?>
+
+
+
+
= t($admin_info->name) ?> - = $version ?>
+
+
+
+ = $form ?>
+
+
+ = $help ?>
+
+
diff --git a/3.0/themes/pear4gallery3/admin/views/admin_theme_options.html.php b/3.0/themes/pear4gallery3/admin/views/admin_theme_options.html.php
new file mode 100644
index 00000000..a0894dc2
--- /dev/null
+++ b/3.0/themes/pear4gallery3/admin/views/admin_theme_options.html.php
@@ -0,0 +1,14 @@
+
+
+ $view = new View("admin_include.html");
+
+ $view->is_module = FALSE;
+ $view->name = module::get_var("gallery", "active_site_theme");
+ $view->form = $form;
+ $view->help = $help;
+ print $view;
+?>
+
diff --git a/3.0/themes/pear4gallery3/css/fix-ie.css b/3.0/themes/pear4gallery3/css/fix-ie.css
new file mode 100644
index 00000000..0633ff07
--- /dev/null
+++ b/3.0/themes/pear4gallery3/css/fix-ie.css
@@ -0,0 +1,59 @@
+/**
+ * Fix display in IE 6, 7, and 8
+ */
+
+#g-banner {
+ z-index: 2;
+ zoom: 1;
+}
+
+#g-sidebar {
+ overflow: hidden;
+}
+
+#g-photo,
+#g-movie {
+ zoom: 1;
+}
+
+#g-photo .g-context-menu,
+#g-movie .g-context-menu {
+ width: 240px;
+}
+
+input.submit {
+ clear: none !important;
+ display: inline !important;
+}
+
+.g-short-form input.text,
+.g-short-form input.submit {
+ font-size: 1em;
+ line-height: 1em;
+ padding: .38em .3em;
+}
+
+#g-search-form input#q {
+ width: 300px;
+}
+
+#g-add-tag-form input.textbox {
+ width: 110px !important;
+}
+
+#g-add-tag-form input[type='submit'] {
+ padding: .3em 0 !important;
+}
+
+#g-dialog .g-cancel {
+ display: inline-block !important;
+ float: none !important;
+}
+
+.g-paginator .g-text-right {
+ width: 29%;
+}
+
+.g-paginator .ui-icon-right {
+ width: 60px;
+}
diff --git a/3.0/themes/pear4gallery3/css/imageflow.packed.css b/3.0/themes/pear4gallery3/css/imageflow.packed.css
new file mode 100644
index 00000000..b0c52141
--- /dev/null
+++ b/3.0/themes/pear4gallery3/css/imageflow.packed.css
@@ -0,0 +1 @@
+@charset "utf-8"; @media screen, projection{.imageflow{overflow:hidden; position:relative; text-align:left; visibility:hidden; width:100%}.imageflow img{border:none; position:absolute; top:0px; visibility:hidden; -ms-interpolation-mode:bicubic}.imageflow p{margin:0 auto; text-align:center}.imageflow .loading{border:1px solid white; height:15px; left:50%; margin-left:-106px; padding:5px; position:relative; visibility:visible; width:200px}.imageflow .loading_bar{background:#fff; height:15px; visibility:visible; width:1%}.imageflow .navigation{z-index:10000}.imageflow .caption{font-weight:bold; position:relative; text-align:center; z-index:10001}.imageflow .scrollbar{border-bottom:1px solid #b3b3b3; position:relative; visibility:hidden; z-index:10002; height:1px}.imageflow .slider{background:url(../icons/slider.png) no-repeat; height:14px; margin:-6px 0 0 -7px; position:absolute; width:14px; z-index:10003}.imageflow .slideshow{cursor:pointer; height:14px; margin:20px 0 0 20px; position:absolute; width:14px; z-index:10003}.imageflow .slideshow.pause{background:url(../icons/button_pause.png) no-repeat}.imageflow .slideshow.play{background:url(../icons/button_play.png) no-repeat}.imageflow .images{overflow:hidden; white-space:nowrap}.imageflow .button{cursor:pointer; height:17px; position:relative; width:17px}.imageflow .previous{background:url(../icons/button_left.png) top left no-repeat; float:left; margin:-7px 0 0 -30px}.imageflow .next{background:url(../icons/button_right.png) top left no-repeat; float:right; margin:-7px -30px 0 30px}}
diff --git a/3.0/themes/pear4gallery3/css/pear.css b/3.0/themes/pear4gallery3/css/pear.css
new file mode 100644
index 00000000..2be381c2
--- /dev/null
+++ b/3.0/themes/pear4gallery3/css/pear.css
@@ -0,0 +1,145 @@
+.gallery-thumb {
+ float: left;
+ padding: 3px 5px 7px 5px;
+ position: relative;
+ text-align: center;
+ cursor: pointer;
+}
+
+.gallery-album {
+ display: block;
+ height: 400px;
+ overflow: auto;
+ padding-bottom: 10px;
+ padding-top: 10px;
+}
+
+th, td {
+ padding: 0;
+ border-width: 0;
+}
+
+.giInfo {
+ color: #888888;
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 9px;
+ height: 11px;
+ margin-bottom: 0px;
+ margin-left: 12px;
+ margin-right: 0px;
+ text-align: left;
+}
+.pear {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ color: #999 !important;
+ background-color: #000;
+}
+.giTitle {
+ font-size: 1.1em;
+ font-weight: bold;
+ margin: 0.3em 3px !important;
+ padding: 0 0;
+ text-align: left;
+ height: 1.2em;
+ overflow: hidden;
+}
+
+#gsNavBar div {
+font-weight: bold;
+}
+
+h2 {
+ font-size: 1.1em;
+ font-weight: bold;
+}
+
+.center {
+ text-align: center !important;
+}
+
+#g-header {
+ margin-top: -2px;
+ position: fixed;
+ top: 44px;
+ width: 100%;
+ z-index: 50;
+}
+/*Menu*/
+.sf-menu li:hover, .sf-menu li.sfHover, .sf-menu a:focus, .sf-menu a:hover, .sf-menu a:active {
+ background: none repeat scroll 0 0 #333333;
+ outline: 0 none;
+}
+.sf-menu li {
+ background: none repeat scroll 0 0 #000000;
+ float: left;
+ position: relative;
+}
+.sf-menu li li, .sf-menu li li ul li {
+ background-color: #000;
+}
+.sf-menu ul {
+ background: none repeat scroll 0 0 #000000;
+}
+.sf-menu, .sf-menu * {
+ list-style: none outside none;
+ margin: 0;
+ padding: 0;
+}
+a, .g-menu a, #g-dialog a, .g-button, .g-button:hover, .g-button:active, a.ui-state-hover, input.ui-state-hover, button.ui-state-hover {
+ color: #777777 !important;
+ cursor: pointer !important;
+ text-decoration: none;
+}
+.sf-menu a, .sf-menu a:visited {
+ color: #555555;
+}
+.sf-menu a {
+ border-left: 1px solid #333;
+ border-top: 1px solid #222;
+ padding: 0.75em 1em;
+ text-decoration: none;
+ display: block;
+ position: relative;
+}
+.ui-state-default, .ui-widget-content .ui-state-default {
+ background: #ccc;
+ border: 1px solid #C5DBEC;
+ color: #555
+ font-weight: bold;
+ outline: medium none;
+}
+#g-banner {
+ background-color: #555;
+ border-bottom: 1px solid #333333;
+ min-height: 5em;
+ padding: 1em 20px;
+ position: relative;
+}
+
+.g-paginator {
+ margin-bottom: 5px;
+ margin-left: 15px;
+ margin-right: 15px;
+ padding-top: 6px;
+}
+
+a.buttonFirst { background-position: 0px 0px !important; }
+a.buttonFirst:hover { background-position: -15px 0px !important; }
+a.buttonPrev { background-position: 0px -15px !important; }
+a.buttonPrev:hover { background-position: -15px -15px !important; }
+a.buttonNext { background-position: 0px -30px !important;}
+a.buttonNext:hover { background-position: -15px -30px !important;}
+a.buttonLast { background-position: 0px -45px !important; }
+a.buttonLast:hover { background-position: -15px -45px !important; }
+
+a.buttonNext, a.buttonLast { float: right; }
+a.buttonFirst, a.buttonPrev { float: left; }
+
+.g-paginator .buttonAction {
+ background: url("../icons/paginator.gif") no-repeat 0 0;
+ height: 15px;
+ width: 15px;
+ margin-left: 0;
+ display: block;
+}
diff --git a/3.0/themes/pear4gallery3/css/screen.css b/3.0/themes/pear4gallery3/css/screen.css
new file mode 100644
index 00000000..6bac8319
--- /dev/null
+++ b/3.0/themes/pear4gallery3/css/screen.css
@@ -0,0 +1,1358 @@
+/**
+ * Gallery 3 Wind Theme Screen Styles
+ *
+ * @requires YUI reset, font, grids CSS
+ *
+ * Sheet organization:
+ * 1) Font sizes, base HTML elements
+ * 2) Reusable content blocks
+ * 3) Page layout containers
+ * 4) Content blocks in specific layout containers
+ * 5) States and interactions
+ * 6) Positioning and order
+ * 7) Navigation and menus
+ * 8) jQuery and jQuery UI
+ * 9) Right-to-left language styles
+ */
+
+/** *******************************************************************
+ * 1) Font sizes, base HTML elements
+ **********************************************************************/
+
+body, html {
+ background-color: #ccc;
+ font-family: 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
+}
+
+p {
+ margin-bottom: 1em;
+}
+
+em {
+ font-style: oblique;
+}
+
+h1, h2, h3, h4, h5, strong, th {
+ font-weight: bold;
+}
+
+h1 {
+ font-size: 1.7em;
+}
+
+#g-dialog h1 {
+ font-size: 1.1em;
+}
+
+h2 {
+ font-size: 1.4em;
+}
+
+#g-sidebar .g-block h2 {
+ font-size: 1.2em;
+}
+
+#g-sidebar .g-block li {
+ margin-bottom: .6em;
+}
+
+#g-content,
+#g-site-menu,
+h3 {
+ font-size: 1.2em;
+}
+
+#g-sidebar,
+.g-breadcrumbs {
+ font-size: .9em;
+}
+
+#g-banner,
+#g-footer,
+.g-message {
+ font-size: .8em;
+}
+
+#g-album-grid .g-item,
+#g-item #g-photo,
+#g-item #g-movie {
+ font-size: .7em;
+}
+
+/* Links ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+a,
+.g-menu a,
+#g-dialog a,
+.g-button,
+.g-button:hover,
+.g-button:active,
+a.ui-state-hover,
+input.ui-state-hover,
+button.ui-state-hover {
+ color: #5382bf !important;
+ cursor: pointer !important;
+ text-decoration: none;
+ -moz-outline-style: none;
+}
+
+a:hover,
+#g-dialog a:hover {
+ text-decoration: underline;
+}
+
+.g-menu a:hover {
+ text-decoration: none;
+}
+
+#g-dialog #g-action-status li {
+ width: 400px;
+ white-space: normal;
+ padding-left: 32px;
+}
+
+/* Forms ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+form {
+ margin: 0;
+}
+
+fieldset {
+ border: 1px solid #ccc;
+ padding: 0 1em .8em 1em;
+}
+
+#g-banner fieldset,
+#g-sidebar fieldset {
+ border: none;
+ padding: 0;
+}
+
+legend {
+ font-weight: bold;
+ margin: 0;
+ padding: 0 .2em;
+}
+
+#g-banner legend,
+#g-sidebar legend,
+input[type="hidden"] {
+ display: none;
+}
+
+input.textbox,
+input[type="text"],
+input[type="password"],
+textarea {
+ border: 1px solid #e8e8e8;
+ border-top-color: #ccc;
+ border-left-color: #ccc;
+ clear: both;
+ color: #333;
+ width: 50%;
+}
+
+textarea {
+ height: 12em;
+ width: 97%;
+}
+
+input:focus,
+input.textbox:focus,
+input[type=text]:focus,
+textarea:focus,
+option:focus {
+ background-color: #ffc;
+ color: #000;
+}
+
+input.checkbox,
+input[type=checkbox],
+input.radio,
+input[type=radio] {
+ float: left;
+ margin-right: .4em;
+}
+
+/* Form layout ~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+form li {
+ margin: 0;
+ padding: 0 0 .2em 0;
+}
+
+form ul {
+ margin-top: 0;
+}
+
+form ul ul {
+ clear: both;
+}
+
+form ul ul li {
+ float: left;
+}
+
+input,
+select,
+textarea {
+ display: block;
+ clear: both;
+ padding: .2em;
+}
+
+input[type="submit"],
+input[type="reset"] {
+ display: inline;
+ clear: none;
+ float: left;
+}
+
+/* Forms in dialogs and panels ~~~~~~~~~ */
+
+#g-dialog ul li {
+ padding-bottom: .8em;
+}
+
+#g-dialog fieldset,
+#g-panel fieldset {
+ border: none;
+ padding: 0;
+}
+
+#g-panel legend {
+ display: none;
+}
+
+input[readonly] {
+ background-color: #F4F4FC;
+}
+
+#g-dialog input.textbox,
+#g-dialog input[type=text],
+#g-dialog input[type=password],
+#g-dialog textarea {
+ width: 97%;
+}
+
+/* Short forms ~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-short-form legend,
+.g-short-form label {
+ display: none;
+}
+
+.g-short-form fieldset {
+ border: none;
+ padding: 0;
+}
+
+.g-short-form li {
+ float: left;
+ margin: 0 !important;
+ padding: .4em 0;
+}
+
+.g-short-form .textbox,
+.g-short-form input[type=text] {
+ color: #666;
+ padding: .3em .6em;
+ width: 100%;
+}
+
+.g-short-form .textbox.g-error {
+ border: 1px solid #f00;
+ color: #f00;
+ padding-left: 24px;
+}
+
+.g-short-form .g-cancel {
+ display: block;
+ margin: .3em .8em;
+}
+
+#g-sidebar .g-short-form li {
+ padding-left: 0;
+ padding-right: 0;
+}
+
+/* Tables ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+table {
+ width: 100%;
+}
+
+#g-content table {
+ margin: 1em 0;
+}
+
+caption,
+th {
+ text-align: left;
+}
+
+th,
+td {
+ border: none;
+ border-bottom: 1px solid #ccc;
+ padding: .5em;
+}
+
+td {
+ vertical-align: top;
+}
+
+/* Text ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+.g-text-small {
+ font-size: .8em;
+}
+
+.g-text-big {
+ font-size: 1.2em;
+}
+
+.g-text-right {
+ text-align: right;
+}
+
+/** *******************************************************************
+ * 2) Reusable content blocks
+ *********************************************************************/
+
+.g-block h2 {
+ background-color: #e8e8e8;
+ padding: .3em .8em;
+}
+
+.g-block-content {
+ margin-top: 1em;
+}
+
+/** *******************************************************************
+ * 3) Page layout containers
+ *********************************************************************/
+
+/* Dimension and scale ~~~~~~~~~~~~~~~~~~~ */
+.g-one-quarter {
+ width: 25%;
+}
+
+.g-one-third {
+ width: 33%;
+}
+
+.g-one-half {
+ width: 50%;
+}
+
+.g-two-thirds {
+ width: 66%;
+}
+
+.g-three-quarters {
+ width: 75%;
+}
+
+.g-whole {
+ width: 100%;
+}
+
+/* View container ~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-view {
+ background-color: #fff;
+ border: 1px solid #ccc;
+ border-bottom: none;
+}
+
+/* Layout containers ~~~~~~~~~~~~~~~~~~~~~ */
+
+#g-header {
+ margin-bottom: 1em;
+}
+
+#g-banner {
+ background-color: #e8e8e8;
+ border-bottom: 1px solid #ccc;
+ min-height: 5em;
+ padding: 1em 20px;
+ position: relative;
+}
+
+#g-content {
+ padding-left: 20px;
+ position: relative;
+ width: 696px;
+}
+
+#g-sidebar {
+ padding: 0 20px;
+ width: 220px;
+}
+
+#g-footer {
+ background-color: #e8e8e8;
+ border-top: 1px solid #ccc;
+ margin-top: 20px;
+ padding: 10px 20px;
+}
+
+/** *******************************************************************
+ * 4) Content blocks in specific layout containers
+ *********************************************************************/
+
+/* Header ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+#g-banner #g-quick-search-form {
+ clear: right;
+ float: right;
+ margin-top: 1em;
+}
+
+#g-banner #g-quick-search-form input[type='text'] {
+ width: 17em;
+}
+
+#g-content .g-block h2 {
+ background-color: transparent;
+ padding-left: 0;
+}
+
+/* Sidebar ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+#g-sidebar .g-block-content {
+ padding-left: 1em;
+}
+
+#g-sidebar #g-image-block {
+ overflow: hidden;
+}
+
+/* Album content ~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+#g-content #g-album-grid {
+ margin: 1em 0;
+ position: relative;
+ z-index: 1;
+}
+
+#g-content #g-album-grid .g-item {
+ background-color: #fff;
+ border: 1px solid #fff;
+ float: left;
+ padding: .6em 8px;
+ position: relative;
+ text-align: center;
+ width: 213px;
+ z-index: 1;
+}
+
+#g-content #g-album-grid .g-item h2 {
+ margin: 5px 0;
+}
+
+#g-content .g-photo h2,
+#g-content .g-item .g-metadata {
+ display: none;
+ margin-bottom: .6em;
+}
+
+#g-content #g-album-grid .g-album {
+ background-color: #e8e8e8;
+}
+
+#g-content #g-album-grid .g-album h2 span.g-album {
+ background: transparent url('../images/ico-album.png') no-repeat top left;
+ display: inline-block;
+ height: 16px;
+ margin-right: 5px;
+ width: 16px;
+}
+
+#g-content #g-album-grid .g-hover-item {
+ border: 1px solid #000;
+ position: absolute !important;
+ z-index: 1000 !important;
+}
+
+#g-content .g-hover-item h2,
+#g-content .g-hover-item .g-metadata {
+ display: block;
+}
+
+#g-content #g-album-grid #g-place-holder {
+ position: relative;
+ visibility: hidden;
+ z-index: 1;
+}
+
+/* Search results ~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+#g-content #g-search-results {
+ margin-top: 1em;
+ padding-top: 1em;
+}
+
+/* Individual photo content ~~~~~~~~~~~~~~ */
+
+#g-item {
+ position: relative;
+ width: 100%;
+}
+
+#g-item #g-photo,
+#g-item #g-movie {
+ padding: 2.2em 0;
+ position: relative;
+}
+
+#g-item img.g-resize,
+#g-item a.g-movie {
+ display: block;
+ margin: 0 auto;
+}
+
+/* Footer content ~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+#g-footer #g-credits li {
+ padding-right: 1.2em;
+}
+
+/* In-line editing ~~~~~~~~~~~~~~~~~~~~~~ */
+
+#g-in-place-edit-message {
+ background-color: #fff;
+}
+
+/* Permissions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+#g-edit-permissions-form td {
+ background-image: none;
+}
+
+#g-edit-permissions-form fieldset {
+ border: 1px solid #ccc;
+}
+
+#g-permissions .g-denied {
+ background-color: #fcc;
+}
+
+#g-permissions .g-allowed {
+ background-color: #cfc;
+}
+
+#g-permissions .g-breadcrumbs a {
+ border: 1px solid #fff;
+}
+
+#g-permissions .g-active a {
+ border: 1px solid #ddd;
+ background: #eee;
+}
+
+/** *******************************************************************
+ * 5) States and interactions
+ **********************************************************************/
+
+.g-active,
+.g-enabled,
+.g-available,
+.g-selected,
+.g-highlight {
+ font-weight: bold;
+}
+
+.g-inactive,
+.g-disabled,
+.g-unavailable,
+.g-uneditable,
+.g-locked,
+.g-deselected,
+.g-understate {
+ color: #ccc;
+ font-weight: normal;
+}
+
+.g-editable {
+ padding: .2em .3em;
+}
+
+.g-editable:hover {
+ background-color: #ffc;
+ cursor: text;
+}
+
+.g-error,
+.g-info,
+.g-success,
+.g-warning {
+ padding-left: 30px;
+}
+
+form li.g-error,
+form li.g-info,
+form li.g-success,
+form li.g-warning {
+ background-image: none;
+ padding: .3em .8em .3em 0;
+}
+
+.g-short-form li.g-error {
+ padding: .3em 0;
+}
+
+form.g-error input[type="text"],
+li.g-error input[type="text"],
+form.g-error input[type="password"],
+li.g-error input[type="password"],
+form.g-error input[type="checkbox"],
+li.g-error input[type="checkbox"],
+form.g-error input[type="radio"],
+li.g-error input[type="radio"],
+form.g-error textarea,
+li.g-error textarea,
+form.g-error select,
+li.g-error select {
+ border: 2px solid #f00;
+ margin-bottom: .2em;
+}
+
+.g-error,
+.g-denied,
+tr.g-error td.g-error,
+#g-add-photos-status .g-error {
+ background: #f6cbca url('../images/ico-error.png') no-repeat .4em 50%;
+ color: #f00;
+}
+
+.g-info {
+ background: #e8e8e8 url('../images/ico-info.png') no-repeat .4em 50%;
+}
+
+.g-success,
+.g-allowed,
+#g-add-photos-status .g-success {
+ background: #d9efc2 url('../images/ico-success.png') no-repeat .4em 50%;
+}
+
+tr.g-success {
+ background-image: none;
+}
+
+tr.g-success td.g-success {
+ background-image: url('../images/ico-success.png');
+}
+
+.g-warning,
+tr.g-warning td.g-warning {
+ background: #fcf9ce url('../images/ico-warning.png') no-repeat .4em 50%;
+}
+
+form .g-error {
+ background-color: #fff;
+ padding-left: 20px;
+}
+
+.g-open {
+}
+
+.g-closed {
+}
+
+.g-installed {
+ background-color: #eeeeee;
+}
+
+.g-default {
+ background-color: #c5dbec;
+ font-weight: bold;
+}
+
+.g-draggable {
+ cursor: move;
+}
+
+.g-draggable:hover {
+ border: 1px dashed #000;
+}
+
+.ui-sortable .g-target,
+.ui-state-highlight {
+ background-color: #fcf9ce;
+ border: 2px dotted #999;
+ height: 2em;
+ margin: 1em 0;
+}
+
+/* Ajax loading indicator ~~~~~~~~~~~~~~~~ */
+
+.g-loading-large,
+.g-dialog-loading-large {
+ background: #e8e8e8 url('../images/loading-large.gif') no-repeat center center !important;
+}
+
+.g-loading-small {
+ background: #e8e8e8 url('../images/loading-small.gif') no-repeat center center !important;
+}
+
+/** *******************************************************************
+ * 6) Positioning and order
+ **********************************************************************/
+
+.g-left {
+ clear: none;
+ float: left;
+}
+
+.g-right {
+ clear: none;
+ float: right;
+}
+
+.g-first {
+}
+
+.g-last {
+}
+
+.g-even {
+ background-color: #fff;
+}
+
+.g-odd {
+ background-color: #eee;
+}
+
+/** *******************************************************************
+ * 7) Navigation and menus
+ *********************************************************************/
+
+/* Login menu ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+#g-banner #g-login-menu {
+ color: #999;
+ float: right;
+}
+
+#g-banner #g-login-menu li {
+ padding-left: 1.2em;
+}
+
+/* Site Menu ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+#g-site-menu {
+ bottom: 0;
+ left: 140px;
+ position: absolute;
+}
+
+#g-site-menu ul {
+ margin-bottom: 0 !important;
+}
+
+/* Context Menu ~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-context-menu {
+ background-color: #fff;
+ bottom: 0;
+ left: 0;
+ position: absolute;
+}
+
+.g-item .g-context-menu {
+ display: none;
+ margin-top: 2em;
+ width: 100%;
+}
+
+#g-item .g-context-menu ul {
+ display: none;
+}
+
+.g-context-menu li {
+ border-left: none;
+ border-right: none;
+ border-bottom: none;
+}
+
+.g-context-menu li a {
+ display: block;
+ line-height: 1.6em;
+}
+
+.g-hover-item .g-context-menu {
+ display: block;
+}
+
+.g-hover-item .g-context-menu li {
+ text-align: left;
+}
+
+.g-hover-item .g-context-menu a:hover {
+ text-decoration: none;
+}
+
+/* View Menu ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+#g-view-menu {
+ margin-bottom: 1em;
+}
+
+#g-view-menu a {
+ background-repeat: no-repeat;
+ background-position: 50% 50%;
+ height: 28px !important;
+ width: 43px !important;
+}
+
+#g-view-menu #g-slideshow-link {
+ background-image: url('../images/ico-view-slideshow.png');
+}
+
+#g-view-menu .g-fullsize-link {
+ background-image: url('../images/ico-view-fullsize.png');
+}
+
+#g-view-menu #g-comments-link {
+ background-image: url('../images/ico-view-comments.png');
+}
+
+#g-view-menu #g-print-digibug-link {
+ background-image: url('../images/ico-print.png');
+}
+
+/** *******************************************************************
+ * 8) jQuery and jQuery UI
+ *********************************************************************/
+/* Generic block container ~~~~~~~~~~~~~~~ */
+
+.g-block {
+ clear: both;
+ margin-bottom: 2.5em;
+}
+
+.g-block-content {
+}
+
+/* Superfish menu overrides ~~~~~~~~~~~~~~ */
+.sf-menu ul {
+ width: 12em;
+}
+
+ul.sf-menu li li:hover ul,
+ul.sf-menu li li.sfHover ul {
+ left: 12em;
+}
+
+ul.sf-menu li li li:hover ul,
+ul.sf-menu li li li.sfHover ul {
+ left: 12em;
+}
+
+.sf-menu li li,
+.sf-menu li li ul li {
+ background-color: #bdd2ff;
+}
+
+.sf-menu li:hover {
+ background-color: #dfe9ff;
+}
+
+/* jQuery UI Dialog ~~~~~~~~~~~~~~~~~~~~~~ */
+
+.ui-widget-overlay {
+ background: #000;
+ opacity: .7;
+}
+
+/* Buttons ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-button {
+ display: inline-block;
+ margin: 0 4px 0 0;
+ padding: .2em .4em;
+}
+
+.g-button,
+.g-button:hover,
+.g-button:active {
+ cursor: pointer !important;
+ outline: 0;
+ text-decoration: none;
+ -moz-outline-style: none;
+}
+
+button {
+ padding: 2px 4px 2px 4px;
+}
+
+/* jQuery UI ThemeRoller buttons ~~~~~~~~~ */
+
+.g-buttonset {
+ padding-left: 1px;
+}
+
+.g-buttonset li {
+ float: left;
+}
+
+.g-buttonset .g-button {
+ margin: 0;
+}
+
+.ui-icon-left .ui-icon {
+ float: left;
+ margin-right: .2em;
+}
+
+.ui-icon-right .ui-icon {
+ float: right;
+ margin-left: .2em;
+}
+
+/* Rotate icon, ThemeRoller only provides one of these */
+
+.ui-icon-rotate-ccw {
+ background-position: -192px -64px;
+}
+
+.ui-icon-rotate-cw {
+ background-position: -208px -64px;
+}
+
+.g-progress-bar {
+ height: 1em;
+ width: 100%;
+ margin-top: .5em;
+ display: inline-block;
+}
+
+/* Status and validation messages ~~~~ */
+
+.g-message-block {
+ background-position: .4em .3em;
+ border: 1px solid #ccc;
+ padding: 0;
+}
+
+#g-action-status {
+ margin-bottom: 1em;
+}
+
+#g-action-status li,
+p#g-action-status,
+div#g-action-status {
+ padding: .3em .3em .3em 30px;
+}
+
+#g-site-status li {
+ border-bottom: 1px solid #ccc;
+ padding: .3em .3em .3em 30px;
+}
+
+.g-module-status {
+ clear: both;
+ margin-bottom: 1em;
+}
+
+.g-message {
+ background-position: 0 50%;
+}
+
+/* Breadcrumbs ~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-breadcrumbs {
+ clear: both;
+ padding: 0 20px;
+}
+
+.g-breadcrumbs li {
+ background: transparent url('../images/ico-separator.gif') no-repeat scroll left center;
+ float: left;
+ padding: 1em 8px 1em 18px;
+}
+
+.g-breadcrumbs .g-first {
+ background: none;
+ padding-left: 0;
+}
+
+.g-breadcrumbs li a,
+.g-breadcrumbs li span {
+ display: block;
+}
+
+#g-dialog ul.g-breadcrumbs {
+ margin-left: 0;
+ padding-left: 0;
+}
+
+/* Pagination ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+
+.g-paginator li {
+ float: left;
+ width: 30%;
+}
+
+.g-paginator .g-info {
+ background: none;
+ padding: .2em 0;
+ text-align: center;
+ width: 40%;
+}
+
+/* Dialogs and panels ~~~~~~~~~~~~~~~~~~ */
+
+#g-dialog {
+ text-align: left;
+}
+
+#g-dialog legend {
+ display: none;
+}
+
+#g-dialog .g-cancel {
+ margin: .4em 1em;
+}
+
+#g-panel {
+ display: none;
+ padding: 1em;
+}
+
+/* Inline layout ~~~~~~~~~~ */
+
+.g-inline li {
+ float: left;
+ margin-left: 1.8em;
+ padding-left: 0 !important;
+}
+
+.g-inline li.g-first {
+ margin-left: 0;
+}
+
+/* Autocomplete ~~~~~~~~~~ */
+.ac_loading {
+ background: white url('../images/loading-small.gif') right center no-repeat !important;
+}
+
+/** *******************************************************************
+ * 9) Right to left language styles
+ *********************************************************************/
+
+.rtl {
+ direction: rtl;
+}
+
+.rtl #g-header,
+.rtl #g-content,
+.rtl #g-sidebar,
+.rtl #g-footer,
+.rtl caption,
+.rtl th,
+.rtl #g-dialog,
+.rtl .g-context-menu li a,
+.rtl .g-message-box li,
+.rtl #g-site-status li {
+ text-align: right;
+}
+
+.rtl .g-text-right {
+ text-align: left;
+}
+
+.rtl .g-error,
+.rtl .g-info,
+.rtl .g-success,
+.rtl .g-warning,
+.rtl #g-add-photos-status .g-success,
+.rtl #g-add-photos-status .g-error {
+ background-position: center right;
+ padding-right: 30px !important;
+}
+
+.rtl form li.g-error,
+.rtl form li.g-info,
+.rtl form li.g-success,
+.rtl form li.g-warning {
+ padding-right: 0 !important;
+}
+
+.rtl .g-left,
+.rtl .g-inline li,
+.rtl #g-content #g-album-grid .g-item,
+.rtl .sf-menu li,
+.rtl .g-breadcrumbs li,
+.rtl .g-paginator li,
+.rtl .g-buttonset li,
+.rtl .ui-icon-left .ui-icon,
+.rtl .g-short-form li,
+.rtl form ul ul li,
+.rtl input[type="submit"],
+.rtl input[type="reset"],
+.rtl input.checkbox,
+.rtl input[type=checkbox],
+.rtl input.radio,
+.rtl input[type=radio] {
+ float: right;
+}
+
+.rtl .g-right,
+.rtl .ui-icon-right .ui-icon {
+ float: left;
+}
+
+.rtl .g-inline li {
+ margin-right: 1em;
+}
+
+.rtl .g-inline li.g-first {
+ margin-right: 0;
+}
+
+.rtl .g-breadcrumbs li {
+ background: transparent url('../images/ico-separator-rtl.gif') no-repeat scroll right center;
+ padding: 1em 18px 1em 8px;
+}
+
+.rtl .g-breadcrumbs .g-first {
+ background: none;
+ padding-right: 0;
+}
+
+.rtl input.checkbox {
+ margin-left: .4em;
+}
+
+.rtl #g-add-comment {
+ right: inherit;
+ left: 0;
+}
+
+.rtl .ui-icon-left .ui-icon {
+ margin-left: .2em;
+}
+
+.rtl .ui-icon-right .ui-icon {
+ margin-right: .2em;
+}
+
+/* RTL Corner radius ~~~~~~~~~~~~~~~~~~~~~~ */
+.rtl .g-buttonset .ui-corner-tl {
+ -moz-border-radius-topleft: 0;
+ -webkit-border-top-left-radius: 0;
+ border-top-left-radius: 0;
+ -moz-border-radius-topright: 5px !important;
+ -webkit-border-top-right-radius: 5px !important;
+ border-top-right-radius: 5px !important;
+}
+
+.rtl .g-buttonset .ui-corner-tr {
+ -moz-border-radius-topright: 0;
+ -webkit-border-top-right-radius: 0;
+ border-top-right-radius: 0;
+ -moz-border-radius-topleft: 5px !important;
+ -webkit-border-top-left-radius: 5px !important;
+ border-top-left-radius: 5px !important;
+}
+
+.rtl .g-buttonset .ui-corner-bl {
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-bottomright: 5px !important;
+ -webkit-border-bottom-right-radius: 5px !important;
+ border-bottom-right-radius: 5px !important;
+}
+
+.rtl .g-buttonset .ui-corner-br {
+ -moz-border-radius-bottomright: 0;
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomleft: 5px !important;
+ -webkit-border-bottom-left-radius: 5px !important;
+ border-bottom-left-radius: 5px !important;
+}
+
+.rtl .g-buttonset .ui-corner-right,
+.rtl .ui-progressbar .ui-corner-right {
+ -moz-border-radius-topright: 0;
+ -webkit-border-top-right-radius: 0;
+ border-top-right-radius: 0;
+ -moz-border-radius-topleft: 5px !important;
+ -webkit-border-top-left-radius: 5px !important;
+ border-top-left-radius: 5px !important;
+ -moz-border-radius-bottomright: 0;
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomleft: 5px !important;
+ -webkit-border-bottom-left-radius: 5px !important;
+ border-bottom-left-radius: 5px !important;
+}
+
+.rtl .g-buttonset .ui-corner-left,
+.rtl .ui-progressbar .ui-corner-left {
+ -moz-border-radius-topleft: 0;
+ -webkit-border-top-left-radius: 0;
+ border-top-left-radius: 0;
+ -moz-border-radius-topright: 5px !important;
+ -webkit-border-top-right-radius: 5px !important;
+ border-top-right-radius: 5px !important;
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-bottomright: 5px !important;
+ -webkit-border-bottom-right-radius: 5px !important;
+ border-bottom-right-radius: 5px !important;
+}
+
+/* RTL Superfish ~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.rtl .sf-menu a {
+ border-left: none;
+ border-right:1px solid #fff;
+}
+
+.rtl .sf-menu a.sf-with-ul {
+ padding-left: 2.25em;
+ padding-right: 1em;
+}
+
+.rtl .sf-sub-indicator {
+ left: .75em !important;
+ right: auto;
+ background: url('../../../lib/superfish/images/arrows-ffffff-rtl.png') no-repeat -10px -100px; /* 8-bit indexed alpha png. IE6 gets solid image only */
+}
+.rtl a > .sf-sub-indicator { /* give all except IE6 the correct values */
+ top: .8em;
+ background-position: -10px -100px; /* use translucent arrow for modern browsers*/
+}
+/* apply hovers to modern browsers */
+.rtl a:focus > .sf-sub-indicator,
+.rtl a:hover > .sf-sub-indicator,
+.rtl a:active > .sf-sub-indicator,
+.rtl li:hover > a > .sf-sub-indicator,
+.rtl li.sfHover > a > .sf-sub-indicator {
+ background-position: 0 -100px; /* arrow hovers for modern browsers*/
+}
+
+/* point right for anchors in subs */
+.rtl .sf-menu ul .sf-sub-indicator { background-position: 0 0; }
+.rtl .sf-menu ul a > .sf-sub-indicator { background-position: -10px 0; }
+/* apply hovers to modern browsers */
+.rtl .sf-menu ul a:focus > .sf-sub-indicator,
+.rtl .sf-menu ul a:hover > .sf-sub-indicator,
+.rtl .sf-menu ul a:active > .sf-sub-indicator,
+.rtl .sf-menu ul li:hover > a > .sf-sub-indicator,
+.rtl .sf-menu ul li.sfHover > a > .sf-sub-indicator {
+ background-position: 0 0; /* arrow hovers for modern browsers*/
+}
+
+.rtl .sf-menu li:hover ul,
+.rtl .sf-menu li.sfHover ul {
+ right: 0;
+ left: auto;
+}
+
+.rtl ul.sf-menu li li:hover ul,
+.rtl ul.sf-menu li li.sfHover ul {
+ right: 12em; /* match ul width */
+ left: auto;
+}
+.rtl ul.sf-menu li li li:hover ul,
+.rtl ul.sf-menu li li li.sfHover ul {
+ right: 12em; /* match ul width */
+ left: auto;
+}
+
+/*** shadows for all but IE6 ***/
+.rtl .sf-shadow ul {
+ background: url('../../../lib/superfish/images/shadow.png') no-repeat bottom left;
+ padding: 0 0 9px 8px;
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-topright: 0;
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-top-right-radius: 0;
+ -webkit-border-bottom-left-radius: 0;
+ -moz-border-radius-topleft: 17px;
+ -moz-border-radius-bottomright: 17px;
+ -webkit-border-top-left-radius: 17px;
+ -webkit-border-bottom-right-radius: 17px;
+ border-top-left-radius: 17px;
+ border-bottom-right-radius: 17px;
+}
+
+/* RTL ThemeRoller ~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.rtl .ui-dialog .ui-dialog-titlebar {
+ padding: 0.5em 1em 0.3em 0.3em;
+}
+
+.rtl .ui-dialog .ui-dialog-title {
+ float: right;
+}
+
+.rtl .ui-dialog .ui-dialog-titlebar-close {
+ left: 0.3em;
+ right: auto;
+}
+
+
+/* RTL paginator ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.rtl .g-paginator .g-info {
+ width: 35%;
+}
+
+.rtl .g-paginator .g-text-right {
+ margin-left: 0;
+}
+
+.rtl .g-paginator .ui-icon-seek-end {
+ background-position: -80px -160px;
+}
+
+.rtl .g-paginator .ui-icon-seek-next {
+ background-position: -48px -160px;
+}
+
+.rtl .g-paginator .ui-icon-seek-prev {
+ background-position: -32px -160px;
+}
+
+.rtl .g-paginator .ui-icon-seek-first {
+ background-position: -64px -160px;
+}
+
+.rtl #g-header #g-login-menu,
+.rtl #g-header #g-quick-search-form {
+ clear: left;
+ float: left;
+}
+
+.rtl #g-header #g-login-menu li {
+ margin-left: 0;
+ padding-left: 0;
+ padding-right: 1.2em;
+}
+
+.rtl #g-site-menu {
+ left: auto;
+ right: 150px;
+}
+
+.rtl #g-view-menu #g-slideshow-link {
+ background-image: url('../images/ico-view-slideshow-rtl.png');
+}
+
+.rtl #g-sidebar .g-block-content {
+ padding-right: 1em;
+ padding-left: 0;
+}
+
+.rtl #g-footer #g-credits li {
+ padding-left: 1.2em !important;
+ padding-right: 0;
+}
diff --git a/3.0/themes/pear4gallery3/css/themeroller/images/ui-bg_flat_0_aaaaaa_40x100.png b/3.0/themes/pear4gallery3/css/themeroller/images/ui-bg_flat_0_aaaaaa_40x100.png
new file mode 100644
index 00000000..5b5dab2a
Binary files /dev/null and b/3.0/themes/pear4gallery3/css/themeroller/images/ui-bg_flat_0_aaaaaa_40x100.png differ
diff --git a/3.0/themes/pear4gallery3/css/themeroller/images/ui-bg_flat_55_fbec88_40x100.png b/3.0/themes/pear4gallery3/css/themeroller/images/ui-bg_flat_55_fbec88_40x100.png
new file mode 100644
index 00000000..47acaadd
Binary files /dev/null and b/3.0/themes/pear4gallery3/css/themeroller/images/ui-bg_flat_55_fbec88_40x100.png differ
diff --git a/3.0/themes/pear4gallery3/css/themeroller/images/ui-bg_glass_75_d0e5f5_1x400.png b/3.0/themes/pear4gallery3/css/themeroller/images/ui-bg_glass_75_d0e5f5_1x400.png
new file mode 100644
index 00000000..9fb564f8
Binary files /dev/null and b/3.0/themes/pear4gallery3/css/themeroller/images/ui-bg_glass_75_d0e5f5_1x400.png differ
diff --git a/3.0/themes/pear4gallery3/css/themeroller/images/ui-bg_glass_85_dfeffc_1x400.png b/3.0/themes/pear4gallery3/css/themeroller/images/ui-bg_glass_85_dfeffc_1x400.png
new file mode 100644
index 00000000..01495152
Binary files /dev/null and b/3.0/themes/pear4gallery3/css/themeroller/images/ui-bg_glass_85_dfeffc_1x400.png differ
diff --git a/3.0/themes/pear4gallery3/css/themeroller/images/ui-bg_glass_95_fef1ec_1x400.png b/3.0/themes/pear4gallery3/css/themeroller/images/ui-bg_glass_95_fef1ec_1x400.png
new file mode 100644
index 00000000..4443fdc1
Binary files /dev/null and b/3.0/themes/pear4gallery3/css/themeroller/images/ui-bg_glass_95_fef1ec_1x400.png differ
diff --git a/3.0/themes/pear4gallery3/css/themeroller/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png b/3.0/themes/pear4gallery3/css/themeroller/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png
new file mode 100644
index 00000000..0cdbda36
Binary files /dev/null and b/3.0/themes/pear4gallery3/css/themeroller/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png differ
diff --git a/3.0/themes/pear4gallery3/css/themeroller/images/ui-bg_inset-hard_100_f5f8f9_1x100.png b/3.0/themes/pear4gallery3/css/themeroller/images/ui-bg_inset-hard_100_f5f8f9_1x100.png
new file mode 100644
index 00000000..4f3faf8a
Binary files /dev/null and b/3.0/themes/pear4gallery3/css/themeroller/images/ui-bg_inset-hard_100_f5f8f9_1x100.png differ
diff --git a/3.0/themes/pear4gallery3/css/themeroller/images/ui-bg_inset-hard_100_fcfdfd_1x100.png b/3.0/themes/pear4gallery3/css/themeroller/images/ui-bg_inset-hard_100_fcfdfd_1x100.png
new file mode 100644
index 00000000..38c38335
Binary files /dev/null and b/3.0/themes/pear4gallery3/css/themeroller/images/ui-bg_inset-hard_100_fcfdfd_1x100.png differ
diff --git a/3.0/themes/pear4gallery3/css/themeroller/images/ui-icons_217bc0_256x240.png b/3.0/themes/pear4gallery3/css/themeroller/images/ui-icons_217bc0_256x240.png
new file mode 100644
index 00000000..7719d487
Binary files /dev/null and b/3.0/themes/pear4gallery3/css/themeroller/images/ui-icons_217bc0_256x240.png differ
diff --git a/3.0/themes/pear4gallery3/css/themeroller/images/ui-icons_2e83ff_256x240.png b/3.0/themes/pear4gallery3/css/themeroller/images/ui-icons_2e83ff_256x240.png
new file mode 100644
index 00000000..d9897d25
Binary files /dev/null and b/3.0/themes/pear4gallery3/css/themeroller/images/ui-icons_2e83ff_256x240.png differ
diff --git a/3.0/themes/pear4gallery3/css/themeroller/images/ui-icons_469bdd_256x240.png b/3.0/themes/pear4gallery3/css/themeroller/images/ui-icons_469bdd_256x240.png
new file mode 100644
index 00000000..d8161854
Binary files /dev/null and b/3.0/themes/pear4gallery3/css/themeroller/images/ui-icons_469bdd_256x240.png differ
diff --git a/3.0/themes/pear4gallery3/css/themeroller/images/ui-icons_6da8d5_256x240.png b/3.0/themes/pear4gallery3/css/themeroller/images/ui-icons_6da8d5_256x240.png
new file mode 100644
index 00000000..b3c7d662
Binary files /dev/null and b/3.0/themes/pear4gallery3/css/themeroller/images/ui-icons_6da8d5_256x240.png differ
diff --git a/3.0/themes/pear4gallery3/css/themeroller/images/ui-icons_cd0a0a_256x240.png b/3.0/themes/pear4gallery3/css/themeroller/images/ui-icons_cd0a0a_256x240.png
new file mode 100644
index 00000000..2db88b79
Binary files /dev/null and b/3.0/themes/pear4gallery3/css/themeroller/images/ui-icons_cd0a0a_256x240.png differ
diff --git a/3.0/themes/pear4gallery3/css/themeroller/images/ui-icons_d8e7f3_256x240.png b/3.0/themes/pear4gallery3/css/themeroller/images/ui-icons_d8e7f3_256x240.png
new file mode 100644
index 00000000..2c8aac46
Binary files /dev/null and b/3.0/themes/pear4gallery3/css/themeroller/images/ui-icons_d8e7f3_256x240.png differ
diff --git a/3.0/themes/pear4gallery3/css/themeroller/images/ui-icons_f9bd01_256x240.png b/3.0/themes/pear4gallery3/css/themeroller/images/ui-icons_f9bd01_256x240.png
new file mode 100644
index 00000000..e81603f5
Binary files /dev/null and b/3.0/themes/pear4gallery3/css/themeroller/images/ui-icons_f9bd01_256x240.png differ
diff --git a/3.0/themes/pear4gallery3/css/themeroller/ui.base.css b/3.0/themes/pear4gallery3/css/themeroller/ui.base.css
new file mode 100644
index 00000000..1a1810c8
--- /dev/null
+++ b/3.0/themes/pear4gallery3/css/themeroller/ui.base.css
@@ -0,0 +1,7 @@
+@import "ui.core.css";
+@import "ui.theme.css";
+@import "ui.datepicker.css";
+@import "ui.dialog.css";
+@import "ui.progressbar.css";
+@import "ui.resizable.css";
+@import "ui.tabs.css";
diff --git a/3.0/themes/pear4gallery3/css/themeroller/ui.core.css b/3.0/themes/pear4gallery3/css/themeroller/ui.core.css
new file mode 100644
index 00000000..d832ad7d
--- /dev/null
+++ b/3.0/themes/pear4gallery3/css/themeroller/ui.core.css
@@ -0,0 +1,37 @@
+/*
+* jQuery UI CSS Framework
+* Copyright (c) 2009 AUTHORS.txt (http://ui.jquery.com/about)
+* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
+*/
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+.ui-helper-clearfix { display: inline-block; }
+/* required comment for clearfix to work in Opera \*/
+* html .ui-helper-clearfix { height:1%; }
+.ui-helper-clearfix { display:block; }
+/* end clearfix */
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
\ No newline at end of file
diff --git a/3.0/themes/pear4gallery3/css/themeroller/ui.datepicker.css b/3.0/themes/pear4gallery3/css/themeroller/ui.datepicker.css
new file mode 100644
index 00000000..92986c9e
--- /dev/null
+++ b/3.0/themes/pear4gallery3/css/themeroller/ui.datepicker.css
@@ -0,0 +1,62 @@
+/* Datepicker
+----------------------------------*/
+.ui-datepicker { width: 17em; padding: .2em .2em 0; }
+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+.ui-datepicker .ui-datepicker-prev { left:2px; }
+.ui-datepicker .ui-datepicker-next { right:2px; }
+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; }
+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year { width: 49%;}
+.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }
+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
+.ui-datepicker td { border: 0; padding: 1px; }
+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi { width:auto; }
+.ui-datepicker-multi .ui-datepicker-group { float:left; }
+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+.ui-datepicker-row-break { clear:left; width:100%; }
+
+/* RTL support */
+.ui-datepicker-rtl { direction: rtl; }
+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+
+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+.ui-datepicker-cover {
+ display: none; /*sorry for IE5*/
+ display/**/: block; /*sorry for IE5*/
+ position: absolute; /*must have*/
+ z-index: -1; /*must have*/
+ filter: mask(); /*must have*/
+ top: -4px; /*must have*/
+ left: -4px; /*must have*/
+ width: 200px; /*must have*/
+ height: 200px; /*must have*/
+}
\ No newline at end of file
diff --git a/3.0/themes/pear4gallery3/css/themeroller/ui.dialog.css b/3.0/themes/pear4gallery3/css/themeroller/ui.dialog.css
new file mode 100644
index 00000000..f10f4090
--- /dev/null
+++ b/3.0/themes/pear4gallery3/css/themeroller/ui.dialog.css
@@ -0,0 +1,13 @@
+/* Dialog
+----------------------------------*/
+.ui-dialog { position: relative; padding: .2em; width: 300px; }
+.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative; }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; }
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
\ No newline at end of file
diff --git a/3.0/themes/pear4gallery3/css/themeroller/ui.progressbar.css b/3.0/themes/pear4gallery3/css/themeroller/ui.progressbar.css
new file mode 100644
index 00000000..bc0939ec
--- /dev/null
+++ b/3.0/themes/pear4gallery3/css/themeroller/ui.progressbar.css
@@ -0,0 +1,4 @@
+/* Progressbar
+----------------------------------*/
+.ui-progressbar { height:2em; text-align: left; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file
diff --git a/3.0/themes/pear4gallery3/css/themeroller/ui.resizable.css b/3.0/themes/pear4gallery3/css/themeroller/ui.resizable.css
new file mode 100644
index 00000000..44efeb2e
--- /dev/null
+++ b/3.0/themes/pear4gallery3/css/themeroller/ui.resizable.css
@@ -0,0 +1,13 @@
+/* Resizable
+----------------------------------*/
+.ui-resizable { position: relative;}
+.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; }
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; }
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; }
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; }
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}
\ No newline at end of file
diff --git a/3.0/themes/pear4gallery3/css/themeroller/ui.tabs.css b/3.0/themes/pear4gallery3/css/themeroller/ui.tabs.css
new file mode 100644
index 00000000..70ed3ef4
--- /dev/null
+++ b/3.0/themes/pear4gallery3/css/themeroller/ui.tabs.css
@@ -0,0 +1,9 @@
+/* Tabs
+----------------------------------*/
+.ui-tabs {padding: .2em;}
+.ui-tabs .ui-tabs-nav { padding: .2em .2em 0 .2em; position: relative; }
+.ui-tabs .ui-tabs-nav li { float: left; border-bottom: 0 !important; margin: 0 .2em -1px 0; padding: 0; list-style: none; }
+.ui-tabs .ui-tabs-nav li a { display:block; text-decoration: none; padding: .5em 1em; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: .1em; border-bottom: 0; }
+.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border: 0; background: none; }
+.ui-tabs .ui-tabs-hide { display: none !important; }
\ No newline at end of file
diff --git a/3.0/themes/pear4gallery3/css/themeroller/ui.theme.css b/3.0/themes/pear4gallery3/css/themeroller/ui.theme.css
new file mode 100644
index 00000000..477252e5
--- /dev/null
+++ b/3.0/themes/pear4gallery3/css/themeroller/ui.theme.css
@@ -0,0 +1,243 @@
+
+
+/*
+* jQuery UI CSS Framework
+* Copyright (c) 2009 AUTHORS.txt (http://ui.jquery.com/about)
+* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
+* To view and modify this theme, visit http://ui.jquery.com/themeroller/?tr=&ffDefault=Lucida%20Grande,%20Lucida%20Sans,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=5px&bgColorHeader=5c9ccc&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=55&borderColorHeader=4297d7&fcHeader=ffffff&iconColorHeader=d8e7f3&bgColorContent=fcfdfd&bgTextureContent=06_inset_hard.png&bgImgOpacityContent=100&borderColorContent=a6c9e2&fcContent=222222&iconColorContent=469bdd&bgColorDefault=dfeffc&bgTextureDefault=02_glass.png&bgImgOpacityDefault=85&borderColorDefault=c5dbec&fcDefault=2e6e9e&iconColorDefault=6da8d5&bgColorHover=d0e5f5&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=79b7e7&fcHover=1d5987&iconColorHover=217bc0&bgColorActive=f5f8f9&bgTextureActive=06_inset_hard.png&bgImgOpacityActive=100&borderColorActive=79b7e7&fcActive=e17009&iconColorActive=f9bd01&bgColorHighlight=fbec88&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=55&borderColorHighlight=fad42e&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
+*/
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1.1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1em; }
+.ui-widget-header { border: 1px solid #4297d7; background: #5c9ccc url(images/ui-bg_gloss-wave_55_5c9ccc_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
+.ui-widget-header a { color: #ffffff; }
+.ui-widget-content { border: 1px solid #a6c9e2; background: #fcfdfd url(images/ui-bg_inset-hard_100_fcfdfd_1x100.png) 50% bottom repeat-x; color: #222222; }
+.ui-widget-content a { color: #222222; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #c5dbec; background: #dfeffc url(images/ui-bg_glass_85_dfeffc_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #2e6e9e; outline: none; }
+.ui-state-default a { color: #2e6e9e; text-decoration: none; outline: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #79b7e7; background: #d0e5f5 url(images/ui-bg_glass_75_d0e5f5_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1d5987; outline: none; }
+.ui-state-hover a { color: #1d5987; text-decoration: none; outline: none; }
+.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #79b7e7; background: #f5f8f9 url(images/ui-bg_inset-hard_100_f5f8f9_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #e17009; outline: none; }
+.ui-state-active a { color: #e17009; outline: none; text-decoration: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fad42e; background: #fbec88 url(images/ui-bg_flat_55_fbec88_40x100.png) 50% 50% repeat-x; color: #363636; }
+.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #cd0a0a; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_469bdd_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_469bdd_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_d8e7f3_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_6da8d5_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_217bc0_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_f9bd01_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-tl { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; }
+.ui-corner-tr { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; }
+.ui-corner-bl { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; }
+.ui-corner-br { -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; }
+.ui-corner-top { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; }
+.ui-corner-bottom { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; }
+.ui-corner-right { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; }
+.ui-corner-left { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; }
+.ui-corner-all { -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
+.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; }
\ No newline at end of file
diff --git a/3.0/themes/pear4gallery3/helpers/pear4gallery3_installer.php b/3.0/themes/pear4gallery3/helpers/pear4gallery3_installer.php
new file mode 100644
index 00000000..58318e1b
--- /dev/null
+++ b/3.0/themes/pear4gallery3/helpers/pear4gallery3_installer.php
@@ -0,0 +1,27 @@
+
+
+class pear4gallery3_installer {
+ static function install() {
+ site_status::warning(t("Initial configuration for the theme may be required. Visit Admin\Appearance\Theme Options before continue."), "gd_init_configuration");
+ }
+
+ static function deactivate() {
+ site_status::warning(t("DeActivate."), "gd_init_configuration");
+ //site_status::clear("gd_init_configuration");
+ }
+
+ static function activate() {
+ site_status::warning(t("Activate."), "gd_init_configuration");
+ if (module::get_var("gallery", "resize_size") != 800):
+ module::set_var("gallery", "resize_size", 800);
+ endif;
+ if (module::get_var("gallery", "thumb_size") != 200):
+ module::set_var("gallery", "thumb_size", 200);
+ endif;
+ if (module::get_var("gallery", "page_size") != 50):
+ module::set_var("gallery", "page_size", 50);
+ endif;
+ }
+}
+
+?>
diff --git a/3.0/themes/pear4gallery3/icons/addcomment.gif b/3.0/themes/pear4gallery3/icons/addcomment.gif
new file mode 100644
index 00000000..35cd6f81
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/addcomment.gif differ
diff --git a/3.0/themes/pear4gallery3/icons/album.gif b/3.0/themes/pear4gallery3/icons/album.gif
new file mode 100644
index 00000000..9c59d447
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/album.gif differ
diff --git a/3.0/themes/pear4gallery3/icons/button_left.png b/3.0/themes/pear4gallery3/icons/button_left.png
new file mode 100644
index 00000000..1567289c
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/button_left.png differ
diff --git a/3.0/themes/pear4gallery3/icons/button_pause.png b/3.0/themes/pear4gallery3/icons/button_pause.png
new file mode 100644
index 00000000..aefcd29f
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/button_pause.png differ
diff --git a/3.0/themes/pear4gallery3/icons/button_play.png b/3.0/themes/pear4gallery3/icons/button_play.png
new file mode 100644
index 00000000..c9deeb07
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/button_play.png differ
diff --git a/3.0/themes/pear4gallery3/icons/button_right.png b/3.0/themes/pear4gallery3/icons/button_right.png
new file mode 100644
index 00000000..6a62078b
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/button_right.png differ
diff --git a/3.0/themes/pear4gallery3/icons/carousel.png b/3.0/themes/pear4gallery3/icons/carousel.png
new file mode 100644
index 00000000..17dab5b3
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/carousel.png differ
diff --git a/3.0/themes/pear4gallery3/icons/carousel_active.png b/3.0/themes/pear4gallery3/icons/carousel_active.png
new file mode 100644
index 00000000..52be650e
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/carousel_active.png differ
diff --git a/3.0/themes/pear4gallery3/icons/cart.gif b/3.0/themes/pear4gallery3/icons/cart.gif
new file mode 100644
index 00000000..27e7be94
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/cart.gif differ
diff --git a/3.0/themes/pear4gallery3/icons/close.gif b/3.0/themes/pear4gallery3/icons/close.gif
new file mode 100644
index 00000000..3019ba47
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/close.gif differ
diff --git a/3.0/themes/pear4gallery3/icons/color.css b/3.0/themes/pear4gallery3/icons/color.css
new file mode 100644
index 00000000..890e5112
--- /dev/null
+++ b/3.0/themes/pear4gallery3/icons/color.css
@@ -0,0 +1,278 @@
+/* i18n('Ice Carbon Icons'); ?>
+ * $Revision: 16034 $
+ */
+
+#gallery {
+ color: #999 !important;
+ background-color: #333 !important;
+}
+body.gallery { background-color: #333 !important; }
+
+.gbBlock {
+ border-color: #666 !important;
+}
+
+.gcBorder1 { border-color: #6f6f6f !important; }
+.gcBorder2 { border-color: #666 !important; }
+
+#gallery a { color: #999 !important; }
+#gallery a:hover { color: #ccc !important; }
+#gallery a:active { color: #ccc !important; }
+
+.giError { color: #f00 !important; }
+.giInfo { color: #888 !important; }
+.block-core-PeerList .current { color: #ccc !important; }
+
+table.gbDataTable th { background-color: #4f4f4f !important; }
+.gbEven { background-color: #3f3f3f !important; }
+.gbOdd { background-color: #393939 !important; }
+
+#gallery select {
+ background-color: #bbb !important;
+ -moz-border-top-colors: #AAA #EEE !important;
+ -moz-border-left-colors: #AAA #EEE !important;
+ -moz-border-bottom-colors: #AAA #EEE !important;
+ -moz-border-right-colors: #AAA #EEE !important;
+}
+
+#gallery input {
+ background-color: #bbb !important;
+ -moz-border-top-colors: #AAA #EEE !important;
+ -moz-border-left-colors: #AAA #EEE !important;
+ -moz-border-bottom-colors: #AAA #EEE !important;
+ -moz-border-right-colors: #AAA #EEE !important;
+}
+
+#gallery textarea {
+ background-color: #bbb !important;
+ -moz-border-top-colors: #AAA #EEE !important;
+ -moz-border-left-colors: #AAA #EEE !important;
+ -moz-border-bottom-colors: #AAA #EEE !important;
+ -moz-border-right-colors: #AAA #EEE !important;
+}
+
+#gallery input:focus, #gallery textarea:focus {
+ background-color: #ddd !important;
+ -moz-border-top-colors: #AAA #EEE !important;
+ -moz-border-left-colors: #AAA #EEE !important;
+ -moz-border-bottom-colors: #AAA #EEE !important;
+ -moz-border-right-colors: #AAA #EEE !important;
+}
+
+#gallery input.inputTypeSubmit, #gallery input.inputTypeButton { /* No input[type=submit] in IE */
+ color: #333 !important;
+ background-color: #eee !important;
+}
+#gallery input.inputTypeSubmit:hover, #gallery input.inputTypeButton:hover { /* No input[type=submit] in IE */
+ background-color: #ccc !important;
+}
+
+#gallery select:hover {
+ background-color: #ddd !important;
+ -moz-border-top-colors: #AAA #EEE !important;
+ -moz-border-left-colors: #AAA #EEE !important;
+ -moz-border-bottom-colors: #AAA #EEE !important;
+ -moz-border-right-colors: #AAA #EEE !important;
+}
+
+#gallery div.gbTabBar a {
+ color: #00a0ff !important;
+}
+
+#gsSidebarCol {
+ border: #666 1px solid !important;
+ background-color: #333 !important;
+}
+
+#gallery img.giThumbnail:hover {
+ border-color: #333 !important;
+ background-color: #555 !important;
+}
+
+#gallery img.giThumbnailIce {
+ background-color: #444 !important;
+ border: 1px solid #666 !important;
+}
+#gallery img.giThumbnailIce:hover {
+ background-color: #555 !important;
+}
+
+#microThumb img.giThumbnailIce {
+ border-color: #333 !important;
+}
+
+#microThumb img.giThumbnailIce:hover {
+ border-color: #666 !important;
+}
+
+#microThumbCurrent img.giThumbnailIce {
+ border-color: #333 !important;
+}
+
+#microThumbCurrent img.giThumbnailIce:hover {
+ border-color: #666 !important;
+}
+
+#gsNavBar div.gbBreadCrumb {
+ background-image: none !important;
+}
+
+#photoframe {
+ background-color: #333 !important;
+ border: 0px solid #ddd !important;
+ padding: 0px !important;
+ -moz-border-radius: 0px !important;
+}
+
+div.gbTabBar span.o {
+ padding: 6px 0 5px 16px !important;
+ background: url('table_left.gif') no-repeat left top !important;
+}
+
+#gallery div.gbTabBar span span {
+ padding: 6px 16px 5px 4px !important;
+ background: url('table_right.gif') no-repeat right top !important;
+}
+
+#gallery div.gbTabBar a {
+ color: #666 !important;
+ text-decoration: none !important;
+}
+
+#gallery div.gbTabBar a:hover { color: #333 !important; }
+
+#gallery div.gbTabBar span.giSelected {
+ background-image: url('table_left_on.gif') !important;
+}
+
+#gallery div.gbTabBar span.giSelected span {
+ color: #333;
+ background-image: url('table_right_on.gif') !important;
+}
+
+span.bsw_ButtonEnabled {
+ color: #ddd !important;
+}
+.autoCompleteContainer li {
+ background-color: #333 !important;
+}
+
+.buttonAction a {
+ display: block !important;
+ width: 20px !important;
+ height: 20px !important;
+ margin-left: 7px !important;
+}
+
+.buttonAction a {
+ opacity: 1.0 !important;
+ filter: alpha(opacity=100) !important; /* IE's opacity*/
+}
+
+.buttonAction a:hover {
+ opacity: 1.0 !important;
+ filter: alpha(opacity=100)!important; /* IE's opacity*/
+ }
+
+ .iconAlbum {
+ background: url('album.gif') no-repeat !important;
+ background-position: center center !important;
+}
+
+.buttonClose a {
+ padding: 0px !important;
+ width: 15px !important;
+ height: 15px !important;
+ background: url('close.gif') no-repeat !important;
+ margin: 1px !important;
+}
+.buttonClose a:hover { background-position: -15px 0 !important; }
+
+.buttonFirst a {
+ width: 15px !important;
+ height: 15px !important;
+ margin-left: 0px !important;
+ background: url('first.gif') no-repeat !important;
+}
+.buttonFirst a:hover { background-position: -15px 0 !important; }
+
+.buttonLast a {
+ width: 15px !important;
+ height: 15px !important;
+ margin-left: 0px !important;
+ background: url('last.gif') no-repeat !important;
+}
+.buttonLast a:hover { background-position: -15px 0 !important; }
+
+.buttonPrev a {
+ width: 15px !important;
+ height: 15px !important;
+ margin-left: 0px !important;
+ background: url('prev.gif') no-repeat !important;
+}
+.buttonPrev a:hover { background-position: -15px 0 !important; }
+
+.buttonNext a {
+ width: 15px !important;
+ height: 15px !important;
+ margin-left: 0px !important;
+ background: url('next.gif') no-repeat !important;
+}
+.buttonNext a:hover { background-position: -15px 0 !important; }
+
+.buttonExif a {
+ width: 18px !important;
+ height: 15px !important;
+ padding: 0px !important;
+ background: url('exif.gif') no-repeat !important;
+}
+.buttonExif a:hover { background-position: -18px 0 !important; }
+
+.buttonPopup a {
+ width: 17px !important;
+ height: 15px !important;
+ padding: 0px !important;
+ background: url('popup.gif') no-repeat !important;
+}
+.buttonPopup a:hover { background-position: -17px 0 !important; }
+
+.buttonAddComment a {
+ width: 15px !important;
+ height: 15px !important;
+ padding: 0px !important;
+ background: url('addcomment.gif') no-repeat !important;
+}
+.buttonAddComment a:hover { background-position: -15px 0 !important; }
+
+.buttonViewComments a {
+ width: 15px !important;
+ height: 15px !important;
+ padding: 0px !important;
+ background: url('viewcomments.gif') no-repeat !important;
+}
+.buttonViewComments a:hover { background-position: -15px 0 !important; }
+
+.buttonViewSlideshow a {
+ width: 15px !important;
+ height: 15px !important;
+ padding: 0px !important;
+ background: url('slideshow.gif') no-repeat !important;
+}
+.buttonViewSlideshow a:hover { background-position: -15px 0 !important; }
+
+.buttonCart a {
+ width: 16px !important;
+ height: 15px !important;
+ padding: 0px !important;
+ background: url('cart.gif') no-repeat !important;
+}
+.buttonCart a:hover { background-position: -16px 0 !important; }
+
+.buttonShowSidebar a {
+ width: 15px !important;
+ height: 15px !important;
+ padding: 0px !important;
+ background: url('showsidebar.gif') no-repeat !important;
+}
+.buttonShowSidebar a:hover { background-position: -15px 0 !important; }
+
diff --git a/3.0/themes/pear4gallery3/icons/color_picker.png b/3.0/themes/pear4gallery3/icons/color_picker.png
new file mode 100644
index 00000000..d2e89ab4
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/color_picker.png differ
diff --git a/3.0/themes/pear4gallery3/icons/color_picker_sprite.png b/3.0/themes/pear4gallery3/icons/color_picker_sprite.png
new file mode 100644
index 00000000..977797b0
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/color_picker_sprite.png differ
diff --git a/3.0/themes/pear4gallery3/icons/download.png b/3.0/themes/pear4gallery3/icons/download.png
new file mode 100644
index 00000000..998b3959
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/download.png differ
diff --git a/3.0/themes/pear4gallery3/icons/email.png b/3.0/themes/pear4gallery3/icons/email.png
new file mode 100644
index 00000000..0110d0d1
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/email.png differ
diff --git a/3.0/themes/pear4gallery3/icons/exif.gif b/3.0/themes/pear4gallery3/icons/exif.gif
new file mode 100644
index 00000000..281214be
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/exif.gif differ
diff --git a/3.0/themes/pear4gallery3/icons/footer_bg.png b/3.0/themes/pear4gallery3/icons/footer_bg.png
new file mode 100644
index 00000000..88b30955
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/footer_bg.png differ
diff --git a/3.0/themes/pear4gallery3/icons/grid.png b/3.0/themes/pear4gallery3/icons/grid.png
new file mode 100644
index 00000000..11238964
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/grid.png differ
diff --git a/3.0/themes/pear4gallery3/icons/grid_active.png b/3.0/themes/pear4gallery3/icons/grid_active.png
new file mode 100644
index 00000000..2602a795
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/grid_active.png differ
diff --git a/3.0/themes/pear4gallery3/icons/hud_control/close.png b/3.0/themes/pear4gallery3/icons/hud_control/close.png
new file mode 100644
index 00000000..30ceceae
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/hud_control/close.png differ
diff --git a/3.0/themes/pear4gallery3/icons/hud_control/close_over.png b/3.0/themes/pear4gallery3/icons/hud_control/close_over.png
new file mode 100644
index 00000000..df94e509
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/hud_control/close_over.png differ
diff --git a/3.0/themes/pear4gallery3/icons/hud_control/comment.png b/3.0/themes/pear4gallery3/icons/hud_control/comment.png
new file mode 100644
index 00000000..68d21088
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/hud_control/comment.png differ
diff --git a/3.0/themes/pear4gallery3/icons/hud_control/comment_over.png b/3.0/themes/pear4gallery3/icons/hud_control/comment_over.png
new file mode 100644
index 00000000..1d520d7f
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/hud_control/comment_over.png differ
diff --git a/3.0/themes/pear4gallery3/icons/hud_control/controlsbg.png b/3.0/themes/pear4gallery3/icons/hud_control/controlsbg.png
new file mode 100644
index 00000000..8df96ad8
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/hud_control/controlsbg.png differ
diff --git a/3.0/themes/pear4gallery3/icons/hud_control/download.png b/3.0/themes/pear4gallery3/icons/hud_control/download.png
new file mode 100644
index 00000000..dc66d16d
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/hud_control/download.png differ
diff --git a/3.0/themes/pear4gallery3/icons/hud_control/download_disabled.png b/3.0/themes/pear4gallery3/icons/hud_control/download_disabled.png
new file mode 100644
index 00000000..5f424c6d
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/hud_control/download_disabled.png differ
diff --git a/3.0/themes/pear4gallery3/icons/hud_control/download_over.png b/3.0/themes/pear4gallery3/icons/hud_control/download_over.png
new file mode 100644
index 00000000..a1723e7d
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/hud_control/download_over.png differ
diff --git a/3.0/themes/pear4gallery3/icons/hud_control/info.png b/3.0/themes/pear4gallery3/icons/hud_control/info.png
new file mode 100644
index 00000000..ffb7f7a4
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/hud_control/info.png differ
diff --git a/3.0/themes/pear4gallery3/icons/hud_control/info_over.png b/3.0/themes/pear4gallery3/icons/hud_control/info_over.png
new file mode 100644
index 00000000..42ec4475
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/hud_control/info_over.png differ
diff --git a/3.0/themes/pear4gallery3/icons/hud_control/next.png b/3.0/themes/pear4gallery3/icons/hud_control/next.png
new file mode 100644
index 00000000..59dc8a39
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/hud_control/next.png differ
diff --git a/3.0/themes/pear4gallery3/icons/hud_control/next_disabled.png b/3.0/themes/pear4gallery3/icons/hud_control/next_disabled.png
new file mode 100644
index 00000000..2d53548a
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/hud_control/next_disabled.png differ
diff --git a/3.0/themes/pear4gallery3/icons/hud_control/next_over.png b/3.0/themes/pear4gallery3/icons/hud_control/next_over.png
new file mode 100644
index 00000000..0a14880e
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/hud_control/next_over.png differ
diff --git a/3.0/themes/pear4gallery3/icons/hud_control/pause.png b/3.0/themes/pear4gallery3/icons/hud_control/pause.png
new file mode 100644
index 00000000..cb6ccc06
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/hud_control/pause.png differ
diff --git a/3.0/themes/pear4gallery3/icons/hud_control/pause_over.png b/3.0/themes/pear4gallery3/icons/hud_control/pause_over.png
new file mode 100644
index 00000000..104edf7d
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/hud_control/pause_over.png differ
diff --git a/3.0/themes/pear4gallery3/icons/hud_control/play.png b/3.0/themes/pear4gallery3/icons/hud_control/play.png
new file mode 100644
index 00000000..babcf734
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/hud_control/play.png differ
diff --git a/3.0/themes/pear4gallery3/icons/hud_control/play_over.png b/3.0/themes/pear4gallery3/icons/hud_control/play_over.png
new file mode 100644
index 00000000..873e9d0f
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/hud_control/play_over.png differ
diff --git a/3.0/themes/pear4gallery3/icons/hud_control/prev.png b/3.0/themes/pear4gallery3/icons/hud_control/prev.png
new file mode 100644
index 00000000..d141070a
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/hud_control/prev.png differ
diff --git a/3.0/themes/pear4gallery3/icons/hud_control/prev_disabled.png b/3.0/themes/pear4gallery3/icons/hud_control/prev_disabled.png
new file mode 100644
index 00000000..d66f83ff
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/hud_control/prev_disabled.png differ
diff --git a/3.0/themes/pear4gallery3/icons/hud_control/prev_over.png b/3.0/themes/pear4gallery3/icons/hud_control/prev_over.png
new file mode 100644
index 00000000..fd43d3f5
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/hud_control/prev_over.png differ
diff --git a/3.0/themes/pear4gallery3/icons/knob.png b/3.0/themes/pear4gallery3/icons/knob.png
new file mode 100644
index 00000000..66f7d562
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/knob.png differ
diff --git a/3.0/themes/pear4gallery3/icons/larger.png b/3.0/themes/pear4gallery3/icons/larger.png
new file mode 100644
index 00000000..c148bdf1
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/larger.png differ
diff --git a/3.0/themes/pear4gallery3/icons/mosaic.png b/3.0/themes/pear4gallery3/icons/mosaic.png
new file mode 100644
index 00000000..484fa7bd
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/mosaic.png differ
diff --git a/3.0/themes/pear4gallery3/icons/mosaic_active.png b/3.0/themes/pear4gallery3/icons/mosaic_active.png
new file mode 100644
index 00000000..aedf8d48
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/mosaic_active.png differ
diff --git a/3.0/themes/pear4gallery3/icons/movie.png b/3.0/themes/pear4gallery3/icons/movie.png
new file mode 100644
index 00000000..97793bb7
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/movie.png differ
diff --git a/3.0/themes/pear4gallery3/icons/options_bar_bg.png b/3.0/themes/pear4gallery3/icons/options_bar_bg.png
new file mode 100644
index 00000000..6184e30f
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/options_bar_bg.png differ
diff --git a/3.0/themes/pear4gallery3/icons/paginator.gif b/3.0/themes/pear4gallery3/icons/paginator.gif
new file mode 100644
index 00000000..fb884748
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/paginator.gif differ
diff --git a/3.0/themes/pear4gallery3/icons/pear.css b/3.0/themes/pear4gallery3/icons/pear.css
new file mode 100644
index 00000000..fe2bac04
--- /dev/null
+++ b/3.0/themes/pear4gallery3/icons/pear.css
@@ -0,0 +1,804 @@
+.gallery-thumb-round {
+ background: url('rounded.png') no-repeat scroll left top;
+ position: absolute;
+ height: 200px;
+ width: 200px;
+}
+
+.p-video{
+ background: url('movie.png') no-repeat center;
+ position: absolute;
+ width: 200px;
+ height: 200px;
+ left: 0px;
+ top: 0px;
+}
+
+.skimm_div {
+ position: absolute;
+}
+
+.skimm_small {
+ position: absolute;
+}
+
+.rNavBar{
+ position: relative;
+ float: right;
+ top: -22px;
+}
+
+.lNavBar{
+ position: relative;
+ float: left;
+}
+
+.pearTitle {
+color: #ddd;
+margin: auto;
+position: relative;
+text-align: center;
+width: 50%;
+font-variant: small-caps;
+font-size: 1.7em !important;
+}
+
+.count {
+color: #666;
+font-size: 0.7em !important;
+}
+
+#gsNavBar {
+background:transparent url('top_bar_bg.png') repeat-x 100% -12px;
+position: static;
+height: 37px;
+padding-top: 10px;
+overflow: hidden;
+text-shadow: 0 -1px 2px #111111;
+font-weight: bold;
+}
+
+#footerWrapper {
+ min-width: 800px;
+width: 100%;
+background:transparent url('footer_bg.png') top center;
+height:40px;
+ clear:both;
+}
+
+#logoButton {
+ display: block;
+ z-index: 100;
+background: transparent url('pear_logo_sml.png') no-repeat center left;
+width: 30px;
+height: 40px;
+border: 0px;
+padding: 0px;
+margin: auto;
+position: relative;
+cursor: pointer; /* hand-shaped cursor */
+cursor: hand; /* for IE 5.x */
+}
+
+#logoButton:hover, #logoButton.hover {
+border: 0px;
+background: transparent url('pear_logo_sml.png') no-repeat center left;
+}
+
+/************************ COLOR PICKER **************************/
+
+
+#colorPicker {
+ position: relative;
+ color: #FFFFFF;
+ height: 17px;
+ padding: 0px 0px;
+ width: auto;
+ float: right;
+ z-index: 100;
+ font-size: 12px;
+ top: 11px;
+}
+
+
+
+
+#colorPicker div.label {
+ margin-top: 2px;
+ margin-right: 6px;
+ float: left;
+ background-color: transparent ! important;
+ width: auto ! important;
+ height: 20px;
+ color: #666666;
+ display: block;
+ font-size: 12px;
+ text-shadow: #111111 0px -1px 1px;
+}
+
+#colorPicker.disabled div.label{
+ text-shadow: #242424 0px -1px 1px;
+ color: #3f3f3f;
+}
+
+#colorPicker .swatch {
+ float: left;
+ background-color: #ffffff;
+ height: 15px;
+ width: 14px;
+ display: block;
+ margin-right: 6px;
+ margin-top: 2px;
+ cursor: pointer;
+/* background-position: 0px -58px;
+*/ background-color: transparent;
+ background-repeat: no-repeat;
+}
+/*
+#colorPicker .hover-with-swatch, #colorPicker .swatch:hover {
+ background-position: -1px -37px !important;
+}
+*/
+
+
+#colorPicker .sel-with-swatch, #colorPicker .hover-with-sel-with-swatch {
+ cursor: default ! important;
+}
+
+#colorPicker .disabled-with-swatch, #colorPicker.disabled-with-sel-with-swatch, #colorPicker .disabled-with-hover-with-swatch
+{
+/* background-position: 0px 0px ! important; */
+ cursor: default ! important;
+}
+
+#colorPicker #black {
+ background-image: url('color_picker.png') ;
+ background-position: -1px 0px;
+}
+
+#colorPicker #black:hover {
+ background-position: -1px -40px;
+}
+
+.black-with-sel-with-swatch{
+ background-position: -1px -20px ! important;
+}
+
+#colorPicker #dkgrey {
+ background-image: url('color_picker.png') ;
+ background-position: -23px 0px;
+}
+
+#colorPicker #dkgrey:hover {
+ background-position: -23px -40px;
+}
+
+.dkgrey-with-sel-with-swatch{
+ background-position: -23px -20px ! important;
+}
+
+#colorPicker #ltgrey {
+ background-image: url('color_picker.png');
+ background-position: -43px 0px;
+}
+
+#colorPicker #ltgrey:hover {
+ background-position: -43px -40px;
+}
+
+.ltgrey-with-sel-with-swatch{
+ background-position: -43px -20px ! important;
+}
+
+#colorPicker #white {
+ background-image: url('color_picker.png');
+ background-position: -63px 0px;
+ margin-right: 16px;
+}
+
+#colorPicker #white:hover {
+ background-position: -63px -40px;
+}
+
+.white-with-sel-with-swatch{
+ background-position: -63px -20px ! important;
+}
+
+/************************ SLIDER VIEW **************************/
+
+.sliderView {
+padding: 7px 37px 7px 3%;
+position: relative;
+color: #FFFFFF;
+top: 10px;
+height: 3px;
+width: 154px;
+float: right;
+z-index: 100;
+}
+
+.sliderView .smaller {
+height: 14px;
+width: 14px;
+float: left;
+position: relative;
+left: -24px;
+top: -4px;
+cursor: pointer; /* hand-shaped cursor */
+cursor: hand; /* for IE 5.x */
+background: url(smaller.png) top center no-repeat;
+}
+
+.sliderView .larger {
+height: 16px;
+width: 16px;
+float: left;
+position: relative;
+top: -4px;
+left: 133px;
+cursor: pointer; /* hand-shaped cursor */
+cursor: hand; /* for IE 5.x */
+background: url(larger.png) top center no-repeat;
+}
+
+/*.sliderView .sliderLeftCap {
+height: 15px;
+width: 5px;
+float: left;
+position: relative;
+left: 0px;
+background: url(view_control/track_left.png) top center repeat-x;
+}*/
+
+.sliderView .sliderRightCap {
+height: 15px;
+width: 3px;
+float: left;
+position: relative;
+left: 137px;
+background: transparent url(track_fill_right.png) scroll top right no-repeat;
+}
+
+.sliderView .track {
+width: 137px;
+height: 15px;
+background: transparent url(track_fill_left.png) scroll top left no-repeat;
+position: relative;
+border: 0px;
+}
+
+.sliderView .ui-slider-handle {
+background: transparent url('knob.png') top left no-repeat;
+position: absolute;
+top: -5px;
+width: 16px;
+height: 16px;
+cursor: pointer; /* hand-shaped cursor */
+cursor: hand; /* for IE 5.x */
+margin-left: -7px;
+border: 0px;
+}
+
+.disabled-with-sliderView {
+
+}
+
+.disabled-with-sliderView .smaller, .disabled-with-sliderView .larger, .disabled-with-sliderView .handle{
+cursor: default;
+}
+
+.disabled-with-sliderView .smaller {
+ background-image: url('view_control/smaller_dim.png');
+}
+
+.disabled-with-sliderView .larger {
+ background-image: url('view_control/larger_dim.png');
+}
+
+.disabled-with-sliderView .handle {
+ background-image: url('view_control/knob_dim.png');
+}
+
+.disabled-with-sliderView .sliderRightCap {
+ background-image: url('view_control/track_right_dim.png')
+}
+
+.disabled-with-sliderView .track {
+ background-image: url('view_control/track_fill_left_dim.png')
+}
+
+
+/************************ VIEW CONTROLS **************************/
+#viewControls {
+position: relative;
+color: #616161;
+width: 334px;
+float: left;
+ margin-left: 30px;
+ margin-top: 13px;
+ z-index: 800;
+ font-size: 12px;
+ text-shadow: #111111 0px -1px 1px;
+}
+
+.japanese #viewControls {
+ font-size: 11px;
+}
+
+#viewControls .separator {
+width: 55px;
+height: 18px;
+ padding-left: 5px;
+}
+#viewControls .label {
+ margin-top:-1px;
+}
+
+#viewControls .viewSwitcher {
+height: 14px;
+
+ margin-right: 17px;
+float: left;
+cursor: pointer; /* hand-shaped cursor */
+cursor: hand; /* for IE 5.x */
+ font-weight: bold;
+}
+
+#viewControls .viewSwitcher:hover, #viewControls .sel-with-viewSwitcher, #viewControls .hover-with-viewSwitcher {
+color: #ffffff;
+}
+#viewControls .sel-with-viewSwitcher {
+ cursor: default;
+}
+#viewControls #grid {
+background: url('grid.png') center left no-repeat;
+ text-indent: 20px;
+
+}
+
+#viewControls #grid:hover,
+#viewControls #grid.sel {
+color: #ffffff;
+background: url('grid_active.png') center left no-repeat;
+
+}
+
+#viewControls #carousel {
+ text-indent: 22px;
+background: url('carousel.png') center left no-repeat;
+
+}
+
+#viewControls #carousel:hover,
+#viewControls #carousel.sel {
+background: url('carousel_active.png') center left no-repeat;
+
+}
+
+
+
+#viewControls #mosaic {
+
+background: url('mosaic.png') center left no-repeat;
+ text-indent: 20px;
+}
+
+#viewControls #mosaic:hover,
+#viewControls #mosaic.sel {
+background: url('mosaic_active.png') center left no-repeat;
+
+}
+
+#viewControls #slideshow {
+ text-indent: 16px;
+background: url('slideshow.png') center left no-repeat;
+float: left;
+ margin-right: 0px;
+}
+
+#viewControls #slideshow:hover,
+#viewControls #slideshow.sel {
+color: #ffffff;
+background: url('slideshow_active.png') center left no-repeat;
+
+}
+/************************ DETAIL VIEW **************************/
+
+#detailView {
+ margin: 0 auto;
+ position: fixed;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 999;
+ background-color: #000000;
+ display: none;
+}
+
+#detailView .iMovieVideo {
+ background-color: #000000 ! important;
+}
+
+.titleLabel {
+ color:#AAAAAA;
+ font-size:13px;
+ font-weight:bold;
+/* overflow:hidden;
+*/ position:relative;
+ margin:0px auto;
+ margin-top:16px;
+ text-align:center;
+ text-shadow:black 0px 0px 1px;
+ white-space:nowrap;
+ height:21px;
+ text-overflow: ellipsis;
+}
+
+.japanese .titleLabel {
+ font-size:12px;
+}
+
+.titleLabel:hover {
+/* color: #fff;*/
+}
+
+#detailView .overlay {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+;
+
+/* filter
+
+: alpha(opacity=95);
+ opacity: 0.95;
+ -moz-opacity:0.95; */
+}
+
+#detailView .content {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+}
+
+#detailView .iMovieVideo
+{
+ overflow-y: auto;
+ overflow-x: hidden;
+}
+
+.under-panel #detailView .content {
+ overflow: hidden;
+}
+
+#detailView .imageContainer {
+ text-align: center;
+/* margin: 69px 69px 0px 69px;*/
+ margin-top: 32px;
+ cursor: pointer;
+}
+
+
+#slideshowView .imageContainer {
+ margin: 0px 0px 0px 0px;
+ padding: 0px 0px;
+ overflow: hidden;
+}
+
+#slideshowView .reflectionContainer {
+ position: absolute;
+ max-height:50px;
+ overflow: hidden;
+}
+
+#slideshowView .reflection {
+ vertical-align: top;
+/* height: 20%;*/
+ width: 100%;
+ left:0px;
+ position: absolute;
+
+}
+
+#slideshowView .reflectionMask {
+ background: transparent url('reflection-black.png') repeat-x 0px bottom;
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ display: block;
+ z-index: 100;
+ position: absolute;
+ vertical-align: top;
+ left:0px;
+ padding-bottom: 2px ;
+}
+
+
+.bg_white #slideshowView .reflectionMask {
+ background-image: url('reflection-white.png');
+}
+
+.bg_ltgrey #slideshowView .reflectionMask {
+ background-image: url('reflection-lightgrey.png');
+}
+
+
+.bg_dkgrey #slideshowView .reflectionMask {
+ background-image: url('reflections-darkgrey.png');
+}
+
+
+#slideshowView #slideshowHoverView {
+ height:58px;
+}
+
+
+/************************ HOVER VIEW **************************/
+
+#hoverView {
+ height: 58px;
+ position: absolute;
+ bottom: 30px;
+ width: 99%;
+ text-align: center;
+ z-index: 999;
+}
+
+#hoverView #hoverViewMenu {
+ margin: 0 auto;
+ position: relative;
+ width: 262px;
+ height: 58px;
+ width: 300px;
+ height: 60px;
+ background: url('hud_control/controlsbg.png') top left no-repeat;
+}
+
+#hoverView .download_detail_disabled {
+ position: absolute;
+ top: 0px;
+ top: 10px;
+ left: 9px;
+ height: 58px;
+ width: 43px;
+ background: url('hud_control/download_disabled.png') top left no-repeat;
+}
+
+#hoverView .download_detail {
+ cursor: pointer; /* hand-shaped cursor */
+ cursor: hand; /* for IE 5.x */
+ position: absolute;
+ top: 0px;
+ top: 10px;
+ left: 9px;
+ height: 58px;
+ width: 43px;
+ background: url('hud_control/download.png') top left no-repeat;
+}
+
+#hoverView .download_detail:hover {
+ background: url('hud_control/download_over.png') top left no-repeat;
+}
+
+#hoverView .prev_detail_disabled {
+ position: absolute;
+ top: 0px;
+ top: 18px;
+ left: 82px;
+ height: 58px;
+ width: 43px;
+ background: url('hud_control/prev_disabled.png') top left no-repeat;
+}
+
+#hoverView .prev_detail {
+ cursor: pointer; /* hand-shaped cursor */
+ cursor: hand; /* for IE 5.x */
+ position: absolute;
+ top: 0px;
+ top: 18px;
+ left: 82px;
+ height: 58px;
+ width: 43px;
+ background: url('hud_control/prev.png') top left no-repeat;
+}
+
+#hoverView .prev_detail:hover {
+ background: url('hud_control/prev_over.png') top left no-repeat;
+}
+
+#hoverView .play_detail {
+ cursor: pointer; /* hand-shaped cursor */
+ cursor: hand; /* for IE 5.x */
+ position: absolute;
+ top: 0px;
+ top: 10px;
+ left: 134px;
+ height: 58px;
+ width: 43px;
+ background: url('hud_control/play.png') top left no-repeat;
+}
+
+#hoverView .play_detail:hover {
+ background: url('hud_control/play_over.png') top left no-repeat;
+}
+
+#hoverView .pause_detail {
+ cursor: pointer; /* hand-shaped cursor */
+ cursor: hand; /* for IE 5.x */
+ position: absolute;
+ top: 0px;
+ top: 10px;
+ left: 134px;
+ height: 58px;
+ width: 43px;
+ background: url('hud_control/pause.png') top left no-repeat;
+}
+
+#hoverView .pause_detail:hover {
+ background: url('hud_control/pause_over.png') top left no-repeat;
+}
+
+#hoverView .next_detail_disabled {
+ position: absolute;
+ top: 0px;
+ top: 18px;
+ left: 177px;
+ height: 58px;
+ width: 43px;
+ background: url('hud_control/next_disabled.png') top left no-repeat;
+}
+
+#hoverView .next_detail {
+ cursor: pointer; /* hand-shaped cursor */
+ cursor: hand; /* for IE 5.x */
+ position: absolute;
+ top: 0px;
+ top: 18px;
+ left: 177px;
+ height: 58px;
+ width: 43px;
+ background: url('hud_control/next.png') top left no-repeat;
+}
+
+#hoverView .next_detail:hover {
+ background: url('hud_control/next_over.png') top left no-repeat;
+}
+
+
+#hoverView #comment_detail {
+ cursor: pointer; /* hand-shaped cursor */
+ cursor: hand; /* for IE 5.x */
+ position: absolute;
+ top: 0px;
+ left: 209px;
+ height: 58px;
+ width: 43px;
+ background: url('hud_control/comment.png') top left no-repeat;
+ padding-top: 18px;
+ text-align: center;
+ font-size: 12px;
+ font-weight: bold;
+}
+
+.japanese #hoverView #comment_detail {
+ font-size: 11px;
+}
+
+#hoverView #comment_detail:hover {
+ background: url('hud_control/comment_over.png') top left no-repeat;
+}
+
+#hoverView .info_detail_selected {
+ cursor: pointer; /* hand-shaped cursor */
+ cursor: hand; /* for IE 5.x */
+ position: absolute;
+ top: 0px;
+ top: 10px;
+ left: 240px;
+ height: 58px;
+ width: 43px;
+ background: url('hud_control/info_over.png') top left no-repeat;
+}
+
+#hoverView .info_detail {
+ cursor: pointer; /* hand-shaped cursor */
+ cursor: hand; /* for IE 5.x */
+ position: absolute;
+ top: 0px;
+ top: 10px;
+ left: 240px;
+ height: 58px;
+ width: 43px;
+ background: url('hud_control/info.png') top left no-repeat;
+}
+
+#hoverView .info_detail:hover {
+ background: url('hud_control/info_over.png') top left no-repeat;
+}
+
+
+/* ******************** Button Alts *************** */
+#backToAlbumLink {
+ left: 24px;
+ float: left;
+ position: absolute;
+ top: 13px;
+ white-space: nowrap;
+}
+
+#backToAlbumButton .outer{
+ min-width: 108px !important;
+}
+
+button.push {
+ background: transparent none repeat scroll 0%;
+ margin: 0px;
+ padding-right: 0px;
+ border: medium none;
+ height: 34px;
+ min-width: 80px;
+ outline-color: invert;
+ outline-style: none;
+ outline-width: medium;
+ padding-left: 20px;
+ vertical-align: baseline;
+}
+
+button.push .outer {
+ display: block;
+ padding: 0px 4px 0px 2px;
+ position: relative:
+ width: 100%;
+}
+
+button.large-with-push {
+ cursor: pointer ;
+ position: relative ;
+}
+
+button.large-with-push .label {
+ font-weight: bold;
+ line-height: 13px ;
+ height: 18px;
+ padding: 7px 25px 10px 20px;
+ margin-left: 6px;
+ text-indent: -14px;
+ background: transparent url('button_right.png') no-repeat scroll right -71px;
+ right: -6px;
+ color: #E0E0E0;
+ text-shadow: #1E1E1E 0px 0px 2px;
+}
+
+button.large-with-push .outer {
+ height: 34px;
+ padding-left: 2px;
+ margin-left: -3px;
+ background: transparent url('button_left.png') no-repeat scroll 0px -71px;
+
+}
+
+button.large-with-push:active .label,
+button.active-with-large-with-push .label{
+
+ color: #939393;
+ text-shadow: black 0px 0px 0px;
+ background: transparent url('button_right.png') no-repeat scroll right -106px ;
+}
+
+button.large-with-push:active img,
+button.active-with-large-with-push img {
+ opacity: .5;
+ filter: alpha(opacity=50);
+}
+
+
+button.large-with-push:active .outer,
+button.active-with-large-with-push .outer {
+ background: transparent url('button_left.png') no-repeat scroll left -106px;
+}
diff --git a/3.0/themes/pear4gallery3/icons/pear_logo_lrg.png b/3.0/themes/pear4gallery3/icons/pear_logo_lrg.png
new file mode 100644
index 00000000..9041a714
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/pear_logo_lrg.png differ
diff --git a/3.0/themes/pear4gallery3/icons/pear_logo_sml.png b/3.0/themes/pear4gallery3/icons/pear_logo_sml.png
new file mode 100644
index 00000000..d69401f9
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/pear_logo_sml.png differ
diff --git a/3.0/themes/pear4gallery3/icons/popup.gif b/3.0/themes/pear4gallery3/icons/popup.gif
new file mode 100644
index 00000000..fbb09ea0
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/popup.gif differ
diff --git a/3.0/themes/pear4gallery3/icons/reflection-black.png b/3.0/themes/pear4gallery3/icons/reflection-black.png
new file mode 100644
index 00000000..5f9a7ccb
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/reflection-black.png differ
diff --git a/3.0/themes/pear4gallery3/icons/reflection-darkgrey.png b/3.0/themes/pear4gallery3/icons/reflection-darkgrey.png
new file mode 100644
index 00000000..662cb232
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/reflection-darkgrey.png differ
diff --git a/3.0/themes/pear4gallery3/icons/reflection-lightgrey.png b/3.0/themes/pear4gallery3/icons/reflection-lightgrey.png
new file mode 100644
index 00000000..89848422
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/reflection-lightgrey.png differ
diff --git a/3.0/themes/pear4gallery3/icons/reflection-white.png b/3.0/themes/pear4gallery3/icons/reflection-white.png
new file mode 100644
index 00000000..27e02aaf
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/reflection-white.png differ
diff --git a/3.0/themes/pear4gallery3/icons/rounded.png b/3.0/themes/pear4gallery3/icons/rounded.png
new file mode 100644
index 00000000..ce8e31d3
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/rounded.png differ
diff --git a/3.0/themes/pear4gallery3/icons/showsidebar.gif b/3.0/themes/pear4gallery3/icons/showsidebar.gif
new file mode 100644
index 00000000..b5fcd868
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/showsidebar.gif differ
diff --git a/3.0/themes/pear4gallery3/icons/slider.png b/3.0/themes/pear4gallery3/icons/slider.png
new file mode 100644
index 00000000..ddb4995c
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/slider.png differ
diff --git a/3.0/themes/pear4gallery3/icons/slideshow.gif b/3.0/themes/pear4gallery3/icons/slideshow.gif
new file mode 100644
index 00000000..2738b9c8
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/slideshow.gif differ
diff --git a/3.0/themes/pear4gallery3/icons/slideshow.png b/3.0/themes/pear4gallery3/icons/slideshow.png
new file mode 100644
index 00000000..54b04497
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/slideshow.png differ
diff --git a/3.0/themes/pear4gallery3/icons/slideshow_active.png b/3.0/themes/pear4gallery3/icons/slideshow_active.png
new file mode 100644
index 00000000..4aa7386c
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/slideshow_active.png differ
diff --git a/3.0/themes/pear4gallery3/icons/smaller.png b/3.0/themes/pear4gallery3/icons/smaller.png
new file mode 100644
index 00000000..c57cd27f
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/smaller.png differ
diff --git a/3.0/themes/pear4gallery3/icons/subscribe.png b/3.0/themes/pear4gallery3/icons/subscribe.png
new file mode 100644
index 00000000..470cca6e
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/subscribe.png differ
diff --git a/3.0/themes/pear4gallery3/icons/table_left.gif b/3.0/themes/pear4gallery3/icons/table_left.gif
new file mode 100644
index 00000000..fa3981cf
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/table_left.gif differ
diff --git a/3.0/themes/pear4gallery3/icons/table_left_on.gif b/3.0/themes/pear4gallery3/icons/table_left_on.gif
new file mode 100644
index 00000000..9cd7c879
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/table_left_on.gif differ
diff --git a/3.0/themes/pear4gallery3/icons/table_right.gif b/3.0/themes/pear4gallery3/icons/table_right.gif
new file mode 100644
index 00000000..cf4b804d
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/table_right.gif differ
diff --git a/3.0/themes/pear4gallery3/icons/table_right_on.gif b/3.0/themes/pear4gallery3/icons/table_right_on.gif
new file mode 100644
index 00000000..f508859e
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/table_right_on.gif differ
diff --git a/3.0/themes/pear4gallery3/icons/top_bar_bg.png b/3.0/themes/pear4gallery3/icons/top_bar_bg.png
new file mode 100644
index 00000000..a6bb0759
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/top_bar_bg.png differ
diff --git a/3.0/themes/pear4gallery3/icons/track_fill_left.png b/3.0/themes/pear4gallery3/icons/track_fill_left.png
new file mode 100644
index 00000000..2866db5c
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/track_fill_left.png differ
diff --git a/3.0/themes/pear4gallery3/icons/track_fill_right.png b/3.0/themes/pear4gallery3/icons/track_fill_right.png
new file mode 100644
index 00000000..c70af587
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/track_fill_right.png differ
diff --git a/3.0/themes/pear4gallery3/icons/upload.png b/3.0/themes/pear4gallery3/icons/upload.png
new file mode 100644
index 00000000..6331c692
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/upload.png differ
diff --git a/3.0/themes/pear4gallery3/icons/viewcomments.gif b/3.0/themes/pear4gallery3/icons/viewcomments.gif
new file mode 100644
index 00000000..fd3ca07d
Binary files /dev/null and b/3.0/themes/pear4gallery3/icons/viewcomments.gif differ
diff --git a/3.0/themes/pear4gallery3/images/avatar.jpg b/3.0/themes/pear4gallery3/images/avatar.jpg
new file mode 100644
index 00000000..acad9314
Binary files /dev/null and b/3.0/themes/pear4gallery3/images/avatar.jpg differ
diff --git a/3.0/themes/pear4gallery3/images/ico-album.png b/3.0/themes/pear4gallery3/images/ico-album.png
new file mode 100644
index 00000000..affa1b84
Binary files /dev/null and b/3.0/themes/pear4gallery3/images/ico-album.png differ
diff --git a/3.0/themes/pear4gallery3/images/ico-denied-inactive.png b/3.0/themes/pear4gallery3/images/ico-denied-inactive.png
new file mode 100644
index 00000000..56db3ff5
Binary files /dev/null and b/3.0/themes/pear4gallery3/images/ico-denied-inactive.png differ
diff --git a/3.0/themes/pear4gallery3/images/ico-denied-passive.png b/3.0/themes/pear4gallery3/images/ico-denied-passive.png
new file mode 100644
index 00000000..1e992230
Binary files /dev/null and b/3.0/themes/pear4gallery3/images/ico-denied-passive.png differ
diff --git a/3.0/themes/pear4gallery3/images/ico-denied.png b/3.0/themes/pear4gallery3/images/ico-denied.png
new file mode 100644
index 00000000..08f24936
Binary files /dev/null and b/3.0/themes/pear4gallery3/images/ico-denied.png differ
diff --git a/3.0/themes/pear4gallery3/images/ico-error.png b/3.0/themes/pear4gallery3/images/ico-error.png
new file mode 100644
index 00000000..c37bd062
Binary files /dev/null and b/3.0/themes/pear4gallery3/images/ico-error.png differ
diff --git a/3.0/themes/pear4gallery3/images/ico-help.png b/3.0/themes/pear4gallery3/images/ico-help.png
new file mode 100644
index 00000000..5c870176
Binary files /dev/null and b/3.0/themes/pear4gallery3/images/ico-help.png differ
diff --git a/3.0/themes/pear4gallery3/images/ico-info.png b/3.0/themes/pear4gallery3/images/ico-info.png
new file mode 100644
index 00000000..12cd1aef
Binary files /dev/null and b/3.0/themes/pear4gallery3/images/ico-info.png differ
diff --git a/3.0/themes/pear4gallery3/images/ico-lock.png b/3.0/themes/pear4gallery3/images/ico-lock.png
new file mode 100644
index 00000000..2ebc4f6f
Binary files /dev/null and b/3.0/themes/pear4gallery3/images/ico-lock.png differ
diff --git a/3.0/themes/pear4gallery3/images/ico-print.png b/3.0/themes/pear4gallery3/images/ico-print.png
new file mode 100644
index 00000000..b82a8e1e
Binary files /dev/null and b/3.0/themes/pear4gallery3/images/ico-print.png differ
diff --git a/3.0/themes/pear4gallery3/images/ico-separator-rtl.gif b/3.0/themes/pear4gallery3/images/ico-separator-rtl.gif
new file mode 100644
index 00000000..d9061a46
Binary files /dev/null and b/3.0/themes/pear4gallery3/images/ico-separator-rtl.gif differ
diff --git a/3.0/themes/pear4gallery3/images/ico-separator.gif b/3.0/themes/pear4gallery3/images/ico-separator.gif
new file mode 100644
index 00000000..3de2d0d3
Binary files /dev/null and b/3.0/themes/pear4gallery3/images/ico-separator.gif differ
diff --git a/3.0/themes/pear4gallery3/images/ico-success-inactive.png b/3.0/themes/pear4gallery3/images/ico-success-inactive.png
new file mode 100644
index 00000000..74b2032f
Binary files /dev/null and b/3.0/themes/pear4gallery3/images/ico-success-inactive.png differ
diff --git a/3.0/themes/pear4gallery3/images/ico-success-passive.png b/3.0/themes/pear4gallery3/images/ico-success-passive.png
new file mode 100644
index 00000000..dc8d1ded
Binary files /dev/null and b/3.0/themes/pear4gallery3/images/ico-success-passive.png differ
diff --git a/3.0/themes/pear4gallery3/images/ico-success.png b/3.0/themes/pear4gallery3/images/ico-success.png
new file mode 100644
index 00000000..a9925a06
Binary files /dev/null and b/3.0/themes/pear4gallery3/images/ico-success.png differ
diff --git a/3.0/themes/pear4gallery3/images/ico-view-comments.png b/3.0/themes/pear4gallery3/images/ico-view-comments.png
new file mode 100644
index 00000000..e5d3630f
Binary files /dev/null and b/3.0/themes/pear4gallery3/images/ico-view-comments.png differ
diff --git a/3.0/themes/pear4gallery3/images/ico-view-fullsize.png b/3.0/themes/pear4gallery3/images/ico-view-fullsize.png
new file mode 100644
index 00000000..0be23e9b
Binary files /dev/null and b/3.0/themes/pear4gallery3/images/ico-view-fullsize.png differ
diff --git a/3.0/themes/pear4gallery3/images/ico-view-slideshow-rtl.png b/3.0/themes/pear4gallery3/images/ico-view-slideshow-rtl.png
new file mode 100644
index 00000000..5788b3c3
Binary files /dev/null and b/3.0/themes/pear4gallery3/images/ico-view-slideshow-rtl.png differ
diff --git a/3.0/themes/pear4gallery3/images/ico-view-slideshow.png b/3.0/themes/pear4gallery3/images/ico-view-slideshow.png
new file mode 100644
index 00000000..82f61f63
Binary files /dev/null and b/3.0/themes/pear4gallery3/images/ico-view-slideshow.png differ
diff --git a/3.0/themes/pear4gallery3/images/ico-warning.png b/3.0/themes/pear4gallery3/images/ico-warning.png
new file mode 100644
index 00000000..628cf2da
Binary files /dev/null and b/3.0/themes/pear4gallery3/images/ico-warning.png differ
diff --git a/3.0/themes/pear4gallery3/images/loading-large.gif b/3.0/themes/pear4gallery3/images/loading-large.gif
new file mode 100644
index 00000000..cc70a7a8
Binary files /dev/null and b/3.0/themes/pear4gallery3/images/loading-large.gif differ
diff --git a/3.0/themes/pear4gallery3/images/loading-small.gif b/3.0/themes/pear4gallery3/images/loading-small.gif
new file mode 100644
index 00000000..d0bce154
Binary files /dev/null and b/3.0/themes/pear4gallery3/images/loading-small.gif differ
diff --git a/3.0/themes/pear4gallery3/images/select-photos-backg.png b/3.0/themes/pear4gallery3/images/select-photos-backg.png
new file mode 100644
index 00000000..81c2d616
Binary files /dev/null and b/3.0/themes/pear4gallery3/images/select-photos-backg.png differ
diff --git a/3.0/themes/pear4gallery3/js/imageflow.packed.js b/3.0/themes/pear4gallery3/js/imageflow.packed.js
new file mode 100644
index 00000000..dc3f1017
--- /dev/null
+++ b/3.0/themes/pear4gallery3/js/imageflow.packed.js
@@ -0,0 +1,38 @@
+/*
+Name: ImageFlow
+Version: 1.3.0 (March 9 2010)
+Author: Finn Rudolph
+Support: http://finnrudolph.de/ImageFlow
+
+License: ImageFlow is licensed under a Creative Commons
+ Attribution-Noncommercial 3.0 Unported License
+ (http://creativecommons.org/licenses/by-nc/3.0/).
+
+ You are free:
+ + to Share - to copy, distribute and transmit the work
+ + to Remix - to adapt the work
+
+ Under the following conditions:
+ + Attribution. You must attribute the work in the manner specified by the author or licensor
+ (but not in any way that suggests that they endorse you or your use of the work).
+ + Noncommercial. You may not use this work for commercial purposes.
+
+ + For any reuse or distribution, you must make clear to others the license terms of this work.
+ + Any of the above conditions can be waived if you get permission from the copyright holder.
+ + Nothing in this license impairs or restricts the author's moral rights.
+
+Credits: This script is based on Michael L. Perrys Cover flow in Javascript [1].
+ The reflections are generated server-sided by a slightly hacked version
+ of Richard Daveys easyreflections [2] written in PHP. The mouse wheel
+ support is an implementation of Adomas Paltanavicius JavaScript mouse
+ wheel code [3]. It also uses the domReadyEvent from Tanny O'Haley [4].
+
+ [1] http://www.adventuresinsoftware.com/blog/?p=104#comment-1981
+ [2] http://reflection.corephp.co.uk/v2.php
+ [3] http://adomas.org/javascript-mouse-wheel/
+ [4] http://tanny.ica.com/ICA/TKO/tkoblog.nsf/dx/domcontentloaded-for-browsers-part-v
+*/
+
+/* ImageFlow - compressed with http://dean.edwards.name/packer/ */
+eval(function(p,a,c,k,e,r){e=function(c){return(c
35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('v 4Z(){u.2v={3Q:50,2N:1.5a,2J:y,30:C,1a:y,3j:\'1E\',S:\'5u\',2h:1.0,J:4,33:\'\',2f:C,3a:0.49,36:1.0,2z:v(){B.3V=u.2i},1Y:y,1T:[10,8,6,4,2],2x:5t,2y:1d,3e:C,2M:C,3G:\'\',1N:0.5,31:y,3L:\'\',3u:0.6,2G:C,2X:\'e-5m\',1q:14,1y:y,34:5n,3k:y,3r:1,3D:C,3H:y,1g:4w};9 t=u;u.X=v(a){17(9 b 3T t.2v){u[b]=(a!==1t&&a[b]!==1t)?a[b]:t.2v[b]}9 c=B.R(t.S);7(c){c.A.1H=\'2g\';u.N=c;7(u.3N()){u.H=B.R(t.S+\'5j\');u.2j=B.R(t.S+\'4z\');u.1V=B.R(t.S+\'3X\');u.1B=B.R(t.S+\'4c\');u.1R=B.R(t.S+\'4f\');u.3x=B.R(t.S+\'4j\');u.3l=B.R(t.S+\'4s\');u.1L=B.R(t.S+\'5e\');u.1M=[];u.1w=0;u.E=0;u.1C=0;u.1D=0;u.2q=C;u.2s=C;u.T=y;9 d=u.N.3F;9 e=W.11(d/t.2N);B.R(t.S+\'2A\').A.3b=((e*0.5)-22)+\'M\';c.A.1c=e+\'M\';u.21()}}};u.3N=v(){9 a=t.D.U(\'12\',\'23\');9 b,2S,1l,15;9 c=t.N.F.1r;17(9 d=0;d1){9 i;17(i=0;i1){t.1e.X();t.I.X();t.K.X();t.2o.X();7(t.1y){t.P.X()}7(t.2G){t.1B.A.1H=\'2g\'}}}};u.2Y=v(){9 a=t.H.F.1r;9 i=0,20=0;9 b=Z;17(9 c=0;c(c.h/(t.1N+1))){c.1j=t.2x;c.26=t.2x}G{c.1j=t.2y;c.26=t.2y}7(t.2f===y){c.A.4O=\'4S\';c.A.1Z=\'4U\'}c.A.3s=t.3j;i++}}u.O=t.1M.1r;7(t.2f===y){c=t.H.F[t.1M[0]];u.3J=c.w*t.O;c.A.55=(t.Y/2)+(c.w/2)+\'M\';t.H.A.1c=c.h+\'M\';t.1V.A.1c=(t.1A-c.h)+\'M\'}7(t.2q){t.2q=y;t.E=t.3r-1;7(t.E<0){t.E=0}7(t.1a){t.E=t.E+t.J}2U=(t.1a)?(t.O-(t.J))-1:t.O-1;7(t.E>2U){t.E=2U}7(t.3D===y){t.1K(-t.E*t.1g)}7(t.3H){t.1K(5v)}}7(t.O>1){t.1J(t.E)}t.1K(t.1w)};u.1K=v(x){u.1w=x;u.1o=t.O;17(9 a=0;at.1D){b.A.1H=\'3S\';b.A.1Z=\'2H\'}G{9 z=(W.4I(4p+x*x)+1d)*t.36;9 d=x/z*t.1I+t.1I;b.A.1Z=\'4r\';9 e=(b.h/b.w*b.1j)/z*t.1I;9 f=0;1G(e>t.1A){1x y:f=b.1j/z*t.1I;13;1E:e=t.1A;f=b.w*e/b.h;13}9 g=(t.2u-e)+((e/(t.1N+1))*t.1N);b.A.2Z=d-(b.1j/2)/z*t.1I+\'M\';7(f&&e){b.A.1c=e+\'M\';b.A.1u=f+\'M\';b.A.5s=g+\'M\'}b.A.1H=\'2g\';1G(x<0){1x C:u.1o++;13;1E:u.1o=t.1o-1;13}1G(b.i==t.E){1x y:b.1k=v(){t.1J(u.i)};13;1E:u.1o=t.1o+1;7(b.2i!==\'\'){b.1k=t.2z}13}b.A.1o=t.1o}}G{7((c+t.1U)t.1D){b.A.1H=\'3S\'}G{b.A.1H=\'2g\';1G(b.i==t.E){1x y:b.1k=v(){t.1J(u.i)};13;1E:7(b.2i!==\'\'){b.1k=t.2z}13}}t.H.A.2R=(x-t.3J)+\'M\'}x+=t.1g}};u.1J=v(a){9 b,1v;7(t.1a){7(a+1===t.J){1v=t.O-t.J;b=-1v*t.1g;a=1v-1}7(a===(t.O-t.J)){1v=t.J-1;b=-1v*t.1g;a=1v+1}}9 x=-a*t.1g;u.1C=x;u.1D=x;u.E=a;9 c=t.H.F[a].1z(\'4v\');7(c===\'\'||t.30===y){c=\'&56;\'}t.2j.4e=c;7(t.I.T===y){7(t.1a){u.1b=((a-t.J)*t.1f)/(t.O-(t.J*2)-1)-t.I.2k}G{u.1b=(a*t.1f)/(t.O-1)-t.I.2k}t.1R.A.2R=(t.1b-t.1q)+\'M\'}7(t.1Y===C||t.2h!==t.2v.2h){t.D.27(t.H.F[a],t.1T[0]);t.H.F[a].1j=t.H.F[a].1j*t.2h;9 d=0;9 e=0;9 f=0;9 g=t.1T.1r;17(9 i=1;i<(t.J+1);i++){7((i+1)>g){d=t.1T[g-1]}G{d=t.1T[i]}e=a+i;f=a-i;7(e=0){t.D.27(t.H.F[f],d);t.H.F[f].1j=t.H.F[f].26}}}7(b){t.1K(b)}7(t.T===y){t.T=C;t.2E()}};u.2E=v(){1G(t.1Ct.1w+1){1x C:t.1K(t.1w+(t.1C-t.1w)/3);L.1n(t.2E,t.3Q);t.T=C;13;1E:t.T=y;13}};u.2l=v(a){7(t.1y){t.P.2c()}t.1J(a)};u.P={2n:1,X:v(){(t.3k)?t.P.1p():t.P.1h()},2c:v(){t.D.2L(t.N,\'3m\',t.P.2c);t.P.1h()},3o:v(){t.D.16(t.N,\'3m\',t.P.2c)},1p:v(){t.D.25(t.1L,\'1y 43\');t.1L.1k=v(){t.P.1h()};t.P.3t=L.47(t.P.2P,t.34);L.1n(t.P.3o,1d)},1h:v(){t.D.25(t.1L,\'1y 4b\');t.1L.1k=v(){t.P.1p()};L.4d(t.P.3t)},2P:v(){9 a=t.E+t.P.2n;9 b=y;7(a===t.O){t.P.2n=-1;b=C}7(a<0){t.P.2n=1;b=C}(b)?t.P.2P():t.1J(a)}};u.1e={X:v(){7(L.1m){t.N.1m(\'4h\',t.1e.1W,y)}t.D.16(t.N,\'4k\',t.1e.1W)},1W:v(a){9 b=0;7(!a){a=L.1F}7(a.3z){b=a.3z/4q}G 7(a.3B){b=-a.3B/3}7(b){t.1e.19(b)}t.D.2p(a)},19:v(a){9 b=y;9 c=0;7(a>0){7(t.E>=1){c=t.E-1;b=C}}G{7(t.E<(t.O-1)){c=t.E+1;b=C}}7(b){t.2l(c)}}};u.I={1P:Z,2T:0,2e:0,2k:0,T:y,X:v(){t.D.16(t.N,\'4B\',t.I.3K);t.D.16(t.N,\'3M\',t.I.1h);t.D.16(B,\'3M\',t.I.1h);t.N.4H=v(){9 a=C;7(t.I.T){a=y}V a}},1p:v(o){t.I.1P=o;t.I.2T=t.I.2e-o.3I+t.1b},1h:v(){t.I.1P=Z;t.I.T=y},3K:v(e){9 a=0;7(!e){e=L.1F}7(e.2D){a=e.2D}G 7(e.3P){a=e.3P+B.2K.3d+B.4Q.3d}t.I.2e=a;7(t.I.1P!==Z){9 b=(t.I.2e-t.I.2T)+t.1q;7(b<(-t.1b)){b=-t.1b}7(b>(t.1f-t.1b)){b=t.1f-t.1b}9 c,E;7(t.1a){c=(b+t.1b)/(t.1f/(t.O-(t.J*2)-1));E=W.11(c)+t.J}G{c=(b+t.1b)/(t.1f/(t.O-1));E=W.11(c)}t.I.2k=b;t.I.1P.A.2Z=b+\'M\';7(t.E!==E){t.2l(E)}t.I.T=C}}};u.K={x:0,2B:0,2r:0,T:y,2F:C,X:v(){t.D.16(t.1V,\'4Y\',t.K.1p);t.D.16(B,\'51\',t.K.19);t.D.16(B,\'53\',t.K.1h)},3f:v(e){9 a=y;7(e.28){9 b=e.28[0].1C;7(b===t.1V||b===t.1R||b===t.1B){a=C}}V a},2C:v(e){9 x=0;7(e.28){x=e.28[0].2D}V x},1p:v(e){t.K.2B=t.K.2C(e);t.K.T=C;t.D.2p(e)},3w:v(){9 a=y;7(t.K.T){a=C}V a},19:v(e){7(t.K.3w&&t.K.3f(e)){9 a=(t.1a)?(t.O-(t.J*2)-1):(t.O-1);7(t.K.2F){t.K.2r=(a-t.E)*(t.Y/a);t.K.2F=y}9 b=-(t.K.2C(e)-t.K.2B-t.K.2r);7(b<0){b=0}7(b>t.Y){b=t.Y}t.K.x=b;9 c=W.11(b/(t.Y/a));c=a-c;7(t.E!==c){7(t.1a){c=c+t.J}t.2l(c)}t.D.2p(e)}},1h:v(){t.K.2r=t.K.x;t.K.T=y}};u.2o={X:v(){B.5d=v(a){t.2o.19(a)}},19:v(a){9 b=t.2o.1W(a);1G(b){1x 39:t.1e.19(-1);13;1x 37:t.1e.19(1);13}},1W:v(a){a=a||L.1F;V a.5h}};u.D={16:v(a,b,c){7(a.1m){a.1m(b,c,y)}G 7(a.3g){a["e"+b+c]=c;a[b+c]=v(){a["e"+b+c](L.1F)};a.3g("3y"+b,a[b+c])}},2L:v(a,b,c){7(a.32){a.32(b,c,y)}G 7(a.3A){7(a[b+c]===1t){5r(\'D.2L » 4G 3i 3C 1F 48 1t - 4K 4l 4M 42 3i 3C 4N 4n 1F?\')}a.3A(\'3y\'+b,a[b+c]);a[b+c]=Z;a[\'e\'+b+c]=Z}},27:v(a,b){7(t.1Y===C){a.A.1Y=b/10;a.A.4P=\'4a(1Y=\'+b*10+\')\'}},U:v(a,b,c){9 d=B.4R(a);d.2d(\'38\',t.S+\'4T\'+b);7(c!==1t){b+=\' \'+c}t.D.25(d,b);V d},25:v(a,b){7(a){a.2d(\'3Z\',b);a.2d(\'4V\',b)}},2p:v(e){7(e.3E){e.3E()}G{e.4X=y}V y},3c:v(){9 a=L.2t;7(1X L.2t!=\'v\'){L.2t=v(){t.2m()}}G{L.2t=v(){7(a){a()}t.2m()}}}}}9 1i={2Q:"1i",1S:{},1s:1,1Q:y,2O:Z,3n:v(a){7(!a.$$1s){a.$$1s=u.1s++;7(u.1Q){a()}u.1S[a.$$1s]=a}},58:v(a){7(a.$$1s){4x u.1S[a.$$1s]}},18:v(){7(u.1Q){V}u.1Q=C;17(9 i 3T u.1S){u.1S[i]()}},2w:v(){7(u.1Q){V}7(/5c|4y/i.3O(4g.5f)){7(/4A|2I/.3O(B.3p)){u.18()}G{1n(u.2Q+".2w()",1d)}}G 7(B.R("2V")){V C}7(1X u.2O==="v"){7(1X B.2W!==\'1t\'&&(B.2W(\'2K\')[0]!==Z||B.2K!==Z)){7(u.2O()){u.18()}G{1n(u.2Q+".2w()",4C)}}}V C},X:v(){7(B.1m){B.1m("5k",v(){1i.18()},y)}1n("1i.2w()",1d);v 18(){1i.18()}7(1X 16!=="1t"){16(L,"3R",18)}G 7(B.1m){B.1m("3R",18,y)}G 7(1X L.2a==="v"){9 a=L.2a;L.2a=v(){1i.18();a()}}G{L.2a=18}/*@4E@7(@5o||@3Y)B.44("<3U 38=2V 54 1l=\\"//:\\"><\\/3U>");9 b=B.R("2V");b.59=v(){7(u.3p=="2I"){1i.18()}};@5b@*/}};9 5l=v(a){1i.3n(a)};1i.X();',62,342,'|||||||if||var|||||||||||||||||||||this|function|||false||style|document|true|Helper|imageID|childNodes|else|imagesDiv|MouseDrag|imageFocusMax|Touch|window|px|ImageFlowDiv|max|Slideshow|appendChild|getElementById|ImageFlowID|busy|createDocumentElement|return|Math|init|imagesDivWidth|null||round|div|break||imageNode|addEvent|for|run|handle|circular|newSliderX|height|100|MouseWheel|scrollbarWidth|xStep|stop|domReadyEvent|pc|onclick|src|addEventListener|setTimeout|zIndex|start|sliderWidth|length|domReadyID|undefined|width|clonedImageID|current|case|slideshow|getAttribute|maxHeight|scrollbarDiv|target|memTarget|default|event|switch|visibility|size|glideTo|moveTo|buttonSlideshow|indexArray|reflectionP|cloneNode|object|bDone|sliderDiv|events|opacityArray|maxFocus|navigationDiv|get|typeof|opacity|display|completed|loadingProgress||images|nodeType|setClassName|pcMem|setOpacity|touches|nodeName|onload|IMG|interrupt|setAttribute|mouseX|imageScaling|visible|imageFocusM|url|captionDiv|newX|glideOnEvent|refresh|direction|Key|suppressBrowserDefault|firstRefresh|stopX|firstCheck|onresize|imagesDivHeight|defaults|schedule|percentLandscape|percentOther|onClick|_loading_txt|startX|getX|pageX|animate|first|slider|none|complete|buttons|body|removeEvent|reflections|aspectRatio|DOMContentLoadedCustom|slide|name|marginLeft|version|objectX|maxId|__ie_onload|getElementsByTagName|sliderCursor|loadingStatus|left|captions|reflectionPNG|removeEventListener|imagePath|slideshowSpeed|button|imagesM||id||imagesHeight|paddingTop|addResizeEvent|scrollLeft|preloadImages|isOnNavigationDiv|attachEvent|createTextNode|to|imageCursor|slideshowAutoplay|buttonPreviousDiv|click|add|addInterruptEvent|readyState|02|startID|cursor|action|scrollbarP|loading|isBusy|buttonNextDiv|on|wheelDelta|detachEvent|detail|detach|glideToStartID|preventDefault|offsetWidth|reflectionGET|startAnimation|offsetLeft|totalImagesWidth|drag|reflectPath|mouseup|createStructure|test|clientX|animationSpeed|load|hidden|in|script|location|reflect|_navigation|_win64|class||next|trying|pause|write|php|navigation|setInterval|is|67|alpha|play|_scrollbar|clearInterval|innerHTML|_slider|navigator|DOMMouseScroll|firstChild|_next|mousewheel|you|marginTop|unattached|loading_bar|10000|120|block|_previous|previous|onmousedown|alt|150|delete|WebKit|_caption|loaded|mousemove|250|longdesc|cc_on|xPosition|Pointer|onselectstart|sqrt|caption|perhaps|_loading|are|an|position|filter|documentElement|createElement|relative|_|inline|className|1000|returnValue|touchstart|ImageFlow||touchmove|loading_txt|touchend|defer|paddingLeft|nbsp|scrollbar|remove|onreadystatechange|964|end|KHTML|onkeydown|_slideshow|userAgent|_loading_bar|keyCode|replaceChild|_images|DOMContentLoaded|domReady|resize|1500|_win32|img|removeChild|alert|top|118|imageflow|5000'.split('|'),0,{}));
+
diff --git a/3.0/themes/pear4gallery3/js/jquery-ui-1.7.3.custom.min.js b/3.0/themes/pear4gallery3/js/jquery-ui-1.7.3.custom.min.js
new file mode 100644
index 00000000..d33ad5be
--- /dev/null
+++ b/3.0/themes/pear4gallery3/js/jquery-ui-1.7.3.custom.min.js
@@ -0,0 +1,20 @@
+/*
+ * jQuery UI 1.7.3
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI
+ */
jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.3",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(j,k){return this.each(function(){if(!k){if(!j||c.filter(j,[this]).length){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")})}}return i.call(c(this),j,k)})},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/*
+ * jQuery UI Slider 1.7.3
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Slider
+ *
+ * Depends:
+ * ui.core.js
+ */
(function(a){a.widget("ui.slider",a.extend({},a.ui.mouse,{_init:function(){var b=this,c=this.options;this._keySliding=false;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget ui-widget-content ui-corner-all");this.range=a([]);if(c.range){if(c.range===true){this.range=a("
");if(!c.values){c.values=[this._valueMin(),this._valueMin()]}if(c.values.length&&c.values.length!=2){c.values=[c.values[0],c.values[0]]}}else{this.range=a("
")}this.range.appendTo(this.element).addClass("ui-slider-range");if(c.range=="min"||c.range=="max"){this.range.addClass("ui-slider-range-"+c.range)}this.range.addClass("ui-widget-header")}if(a(".ui-slider-handle",this.element).length==0){a(' ').appendTo(this.element).addClass("ui-slider-handle")}if(c.values&&c.values.length){while(a(".ui-slider-handle",this.element).length ').appendTo(this.element).addClass("ui-slider-handle")}}this.handles=a(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(d){d.preventDefault()}).hover(function(){if(!c.disabled){a(this).addClass("ui-state-hover")}},function(){a(this).removeClass("ui-state-hover")}).focus(function(){if(!c.disabled){a(".ui-slider .ui-state-focus").removeClass("ui-state-focus");a(this).addClass("ui-state-focus")}else{a(this).blur()}}).blur(function(){a(this).removeClass("ui-state-focus")});this.handles.each(function(d){a(this).data("index.ui-slider-handle",d)});this.handles.keydown(function(i){var f=true;var e=a(this).data("index.ui-slider-handle");if(b.options.disabled){return}switch(i.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:f=false;if(!b._keySliding){b._keySliding=true;a(this).addClass("ui-state-active");b._start(i,e)}break}var g,d,h=b._step();if(b.options.values&&b.options.values.length){g=d=b.values(e)}else{g=d=b.value()}switch(i.keyCode){case a.ui.keyCode.HOME:d=b._valueMin();break;case a.ui.keyCode.END:d=b._valueMax();break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(g==b._valueMax()){return}d=g+h;break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(g==b._valueMin()){return}d=g-h;break}b._slide(i,e,d);return f}).keyup(function(e){var d=a(this).data("index.ui-slider-handle");if(b._keySliding){b._stop(e,d);b._change(e,d);b._keySliding=false;a(this).removeClass("ui-state-active")}});this._refreshValue()},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy()},_mouseCapture:function(d){var e=this.options;if(e.disabled){return false}this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();var h={x:d.pageX,y:d.pageY};var j=this._normValueFromMouse(h);var c=this._valueMax()-this._valueMin()+1,f;var k=this,i;this.handles.each(function(l){var m=Math.abs(j-k.values(l));if(c>m){c=m;f=a(this);i=l}});if(e.range==true&&this.values(1)==e.min){f=a(this.handles[++i])}this._start(d,i);k._handleIndex=i;f.addClass("ui-state-active").focus();var g=f.offset();var b=!a(d.target).parents().andSelf().is(".ui-slider-handle");this._clickOffset=b?{left:0,top:0}:{left:d.pageX-g.left-(f.width()/2),top:d.pageY-g.top-(f.height()/2)-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)};j=this._normValueFromMouse(h);this._slide(d,i,j);return true},_mouseStart:function(b){return true},_mouseDrag:function(d){var b={x:d.pageX,y:d.pageY};var c=this._normValueFromMouse(b);this._slide(d,this._handleIndex,c);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._handleIndex=null;this._clickOffset=null;return false},_detectOrientation:function(){this.orientation=this.options.orientation=="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(d){var c,h;if("horizontal"==this.orientation){c=this.elementSize.width;h=d.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{c=this.elementSize.height;h=d.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}var f=(h/c);if(f>1){f=1}if(f<0){f=0}if("vertical"==this.orientation){f=1-f}var e=this._valueMax()-this._valueMin(),i=f*e,b=i%this.options.step,g=this._valueMin()+i-b;if(b>(this.options.step/2)){g+=this.options.step}return parseFloat(g.toFixed(5))},_start:function(d,c){var b={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){b.value=this.values(c);b.values=this.values()}this._trigger("start",d,b)},_slide:function(f,e,d){var g=this.handles[e];if(this.options.values&&this.options.values.length){var b=this.values(e?0:1);if((this.options.values.length==2&&this.options.range===true)&&((e==0&&d>b)||(e==1&&d1){this.options.values[b]=e;this._refreshValue(c);if(!d){this._change(null,b)}}if(arguments.length){if(this.options.values&&this.options.values.length){return this._values(b)}else{return this.value()}}else{return this._values()}},_setData:function(b,d,c){a.widget.prototype._setData.apply(this,arguments);switch(b){case"disabled":if(d){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled")}else{this.handles.removeAttr("disabled")}case"orientation":this._detectOrientation();this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue(c);break;case"value":this._refreshValue(c);break}},_step:function(){var b=this.options.step;return b},_value:function(){var b=this.options.value;if(bthis._valueMax()){b=this._valueMax()}return b},_values:function(b){if(arguments.length){var c=this.options.values[b];if(cthis._valueMax()){c=this._valueMax()}return c}else{return this.options.values}},_valueMin:function(){var b=this.options.min;return b},_valueMax:function(){var b=this.options.max;return b},_refreshValue:function(c){var f=this.options.range,d=this.options,l=this;if(this.options.values&&this.options.values.length){var i,h;this.handles.each(function(p,n){var o=(l.values(p)-l._valueMin())/(l._valueMax()-l._valueMin())*100;var m={};m[l.orientation=="horizontal"?"left":"bottom"]=o+"%";a(this).stop(1,1)[c?"animate":"css"](m,d.animate);if(l.options.range===true){if(l.orientation=="horizontal"){(p==0)&&l.range.stop(1,1)[c?"animate":"css"]({left:o+"%"},d.animate);(p==1)&&l.range[c?"animate":"css"]({width:(o-lastValPercent)+"%"},{queue:false,duration:d.animate})}else{(p==0)&&l.range.stop(1,1)[c?"animate":"css"]({bottom:(o)+"%"},d.animate);(p==1)&&l.range[c?"animate":"css"]({height:(o-lastValPercent)+"%"},{queue:false,duration:d.animate})}}lastValPercent=o})}else{var j=this.value(),g=this._valueMin(),k=this._valueMax(),e=k!=g?(j-g)/(k-g)*100:0;var b={};b[l.orientation=="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[c?"animate":"css"](b,d.animate);(f=="min")&&(this.orientation=="horizontal")&&this.range.stop(1,1)[c?"animate":"css"]({width:e+"%"},d.animate);(f=="max")&&(this.orientation=="horizontal")&&this.range[c?"animate":"css"]({width:(100-e)+"%"},{queue:false,duration:d.animate});(f=="min")&&(this.orientation=="vertical")&&this.range.stop(1,1)[c?"animate":"css"]({height:e+"%"},d.animate);(f=="max")&&(this.orientation=="vertical")&&this.range[c?"animate":"css"]({height:(100-e)+"%"},{queue:false,duration:d.animate})}}}));a.extend(a.ui.slider,{getter:"value values",version:"1.7.3",eventPrefix:"slide",defaults:{animate:false,delay:0,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null}})})(jQuery);;
\ No newline at end of file
diff --git a/3.0/themes/pear4gallery3/js/jquery.parsequery.js b/3.0/themes/pear4gallery3/js/jquery.parsequery.js
new file mode 100644
index 00000000..b54d8522
--- /dev/null
+++ b/3.0/themes/pear4gallery3/js/jquery.parsequery.js
@@ -0,0 +1,19 @@
+/**
+ * A simple querystring parser.
+ * Example usage: var q = $.parseQuery(); q.fooreturns "bar" if query contains "?foo=bar"; multiple values are added to an array.
+ * Values are unescaped by default and plus signs replaced with spaces, or an alternate processing function can be passed in the params object .
+ * http://actingthemaggot.com/jquery
+ *
+ * Copyright (c) 2008 Michael Manning (http://actingthemaggot.com)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ **/
+jQuery.parseQuery = function(qs,options) {
+ var q = (typeof qs === 'string'?qs:window.location.search), o = {'f':function(v){return unescape(v).replace(/\+/g,' ');}}, options = (typeof qs === 'object' && typeof options === 'undefined')?qs:options, o = jQuery.extend({}, o, options), params = {};
+ jQuery.each(q.match(/^\??(.*)$/)[1].split('&'),function(i,p){
+ p = p.split('=');
+ p[1] = o.f(p[1]);
+ params[p[0]] = params[p[0]]?((params[p[0]] instanceof Array)?(params[p[0]].push(p[1]),params[p[0]]):[params[p[0]],p[1]]):p[1];
+ });
+ return params;
+}
diff --git a/3.0/themes/pear4gallery3/js/pear.js b/3.0/themes/pear4gallery3/js/pear.js
new file mode 100644
index 00000000..d1c8d44a
--- /dev/null
+++ b/3.0/themes/pear4gallery3/js/pear.js
@@ -0,0 +1,490 @@
+var viewMode="";
+var skimimg = 0;
+var hash="";
+var bgcolor="black";
+var detailViewMode=false;
+var savedHeight = 0;
+var savedWidth = 0;
+
+$(window).resize(function () {
+ if (window.innerHeight == savedHeight && window.innerWidth == savedWidth) return;
+ savedHeight = window.innerHeight;
+ savedWidth = window.innerWidth;
+ mosaicResize();
+});
+
+function swatchSkin(intSkin){
+ setCookie('swatchSkin',intSkin,1);
+ $('#black').removeClass().addClass("swatch");
+ $('#dkgrey').removeClass().addClass("swatch");
+ $('#ltgrey').removeClass().addClass("swatch");
+ $('#white').removeClass().addClass("swatch");
+ switch(intSkin) {
+ // dkgrey
+ case 'dkgrey' :
+ case 1 :
+ $('div.gallery-thumb-round').css('backgroundPosition' , "-200px 0px");
+ $('#mosaicTable,.pear').css('backgroundColor' , "#262626");
+ $('p.giTitle').css("color", "#a9a9a9");
+ $("#dkgrey").addClass("dkgrey sel dkgrey-with-sel-with-swatch");
+ bgcolor="dkgrey";
+ break
+ // ltgrey
+ case 'ltgrey' :
+ case 2 :
+ $('div.gallery-thumb-round').css('backgroundPosition' , "-400px 0px");
+ $('#mosaicTable,.pear').css('backgroundColor' , "#d9d9d9");
+ $('p.giTitle').css("color", "#333333");
+ $("#ltgrey").addClass("ltgrey sel ltgrey-with-sel-with-swatch");
+ bgcolor="ltgrey";
+ break;
+ // white
+ case 'white' :
+ case 3 :
+ $('div.gallery-thumb-round').css('backgroundPosition' , "-600px 0px");
+ $('#mosaicTable,.pear').css('backgroundColor' , "#ffffff");
+ $('p.giTitle').css("color", "#444444");
+ $("#white").addClass("white sel white-with-sel-with-swatch");
+ bgcolor="white";
+ break;
+ // Black
+ case 'black' :
+ case 0 :
+ default:
+ $('div.gallery-thumb-round').css('backgroundPosition' , "0px 0px");
+ $('#mosaicTable,.pear').css('backgroundColor' , "#000");
+ $('p.giTitle').css("color", "#a3a3a3");
+ $("#black").addClass("black sel black-with-sel-with-swatch");
+ bgcolor="black";
+ break;
+ }
+ updateHash();
+}
+
+function scaleIt(v,sliding){
+ //if(maxSize<100)maxSize=150;
+
+ // Remap the 0-1 scale to fit the desired range
+ //v=.26+(v*(1.0-.26));
+ var size = (mosaicView) ? v/2 : v;
+
+ toggleReflex(true);
+ $(".p-photo").each(function (i) {
+ $(this).attr({height: size+'px',width: size + 'px'});
+ $(this).css({height: size+'px',width: size+'px'});});
+ $(".g-photo").css({width: size+'px'});
+ if(!mosaicView && !sliding)
+ toggleReflex(false);
+ thumbPadding();
+}
+function setCookie(c_name,value,expiredays)
+{
+ var exdate=new Date();
+ exdate.setDate(exdate.getDate()+expiredays);
+ document.cookie=c_name+ "=" +escape(value)+
+ ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
+}
+
+function getCookie(c_name)
+{
+ if (document.cookie.length>0)
+ {
+ c_start=document.cookie.indexOf(c_name + "=");
+ if (c_start!=-1)
+ {
+ c_start=c_start + c_name.length+1;
+ c_end=document.cookie.indexOf(";",c_start);
+ if (c_end==-1) c_end=document.cookie.length;
+ return unescape(document.cookie.substring(c_start,c_end));
+ }
+ }
+ return "";
+}
+
+function checkCookie()
+{
+ var co=getCookie('slider');
+ if (co!=null && co!="")
+ {
+ $('#imgSlider').slider("value", co);
+ }
+ co=getCookie('swatchSkin');
+ if (co!=null && co!="")
+ {
+ swatchSkin(co);
+ }
+ else
+ {swatchSkin('black');}
+}
+var iRatio = iWidth = iHeight=0;
+//Set a updating timer so users can't update before the image has appeard..
+function swatchImg(imageId)
+{
+ if( imageId < 0 || imageId >= slideshowImages.length) return;
+ currentImg=imageId;
+
+ iWidth=parseFloat(slideshowImages[imageId][2].replace(/,/gi, "."));
+ iHeight=parseFloat(slideshowImages[imageId][3].replace(/,/gi, "."));
+ iRatio=iWidth/iHeight;
+ if(isNaN(iRatio)) iRatio=1.3333;
+
+ if( mosaicView )
+ {
+ $('#mosaicDetail').hide();
+ $('#imageTitle').html(""+slideshowImages[imageId][4]+" ");
+
+ $('#mosaicImg').attr('src', slideshowImages[imageId][0]);
+ $('#mosaicImg').css('cursor', "pointer");
+ $('#mosaicDetail').show("slow");
+ }
+ mosaicResize();
+
+ /* Set controls for hover view. */
+ (currentImg==0) ? $('#prev_detail').addClass('prev_detail_disabled') : $('#prev_detail').removeClass('prev_detail_disabled');
+ (currentImg!=0) ? $('#prev_detail').addClass('prev_detail') : $('#prev_detail').removeClass('prev_detail');
+ (currentImg==slideshowImages.length-1) ? $('#next_detail').addClass('next_detail_disabled') : $('#next_detail').removeClass('next_detail_disabled');
+ (currentImg!=slideshowImages.length-1) ? $('#next_detail').addClass('next_detail') : $('#next_detail').removeClass('next_detail');
+ /* Update image and title in focus view */
+ $('#img_detail').attr('src', slideshowImages[currentImg][0]);
+ $('#imageTitleLabel').html(""+slideshowImages[imageId][4]+" ");
+ if( detailViewMode )
+ {
+ //Image count.
+ $.get(slideshowImages[currentImg][6]);
+ }
+ updateHash();
+ $('#info_detail').attr('href', slideshowImages[currentImg][1]);
+}
+function getViewMode()
+{
+ var vm = detailViewMode ? "detail" : viewMode;
+ if(vm !== '')
+ vm = "&viewMode=" + vm;
+ return vm;
+}
+function updateHash()
+{
+ var img="";
+ if(currentImg !== 0)
+ img = "img=" + currentImg;
+ hash = "#" + img + getViewMode() + "&bgcolor=" + bgcolor;
+ window.location.hash = hash;
+}
+function getAlbumHash(img)
+{
+ return "#img=" + img + getViewMode() + "&bgcolor=" + bgcolor;
+}
+
+var currentImg=0;
+var mosaicView=false;
+
+function mosaicResize()
+{
+ if($('#mosaicGridContainer').length == 0) return; //no element found
+ var myWidth = 0, myHeight = 0;
+ if( typeof( window.innerWidth ) == 'number' ) {
+ //Non-IE
+ myWidth = window.innerWidth;
+ myHeight = window.innerHeight;
+ } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
+ //IE 6+ in 'standards compliant mode'
+ myWidth = document.documentElement.clientWidth;
+ myHeight = document.documentElement.clientHeight;
+ } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
+ //IE 4 compatible
+ myWidth = document.body.clientWidth;
+ myHeight = document.body.clientHeight;
+ }
+ if($('#imageflow').length != 0)
+ $('#imageflow').css({'height': (myHeight-53)+'px', 'width': (((myWidth*0.5)<(myHeight-53)) ? myWidth : ((myHeight-65)*2)) +'px'});
+ $('#detailImageView').css({'height': myHeight-165+"px"});
+ (iRatio>(myWidth/(myHeight-165))) ? $('#img_detail').css({'height': myWidth/iRatio+"px",'width': myWidth+"px"}) : $('#img_detail').css({'height': myHeight-165+"px",'width': (myHeight-165)*iRatio+"px"});
+ if(iHeight<(myHeight-165)&&iWidth(myWidth/myHeight)) ? $('#mosaicImg').attr({height: myWidth/iRatio,width: myWidth}) : $('#mosaicImg').attr({height: myHeight,width: myHeight*iRatio});
+ if(iHeight slideshowImages.length)
+ {
+ id = 0;
+ }
+ swatchImg(id);
+ slideShow = setTimeout("slideShowUpdate("+ (id+1) +")", 1000);
+}
+function togglePlayPause()
+{
+ if(slideShow == null)//We are paused
+ {
+ $('#play_detail').hide();
+ $('#pause_detail').show();
+ slideShow = setTimeout("slideShowUpdate("+ (slideShowId+1) +")", 1000);
+ }
+ else //We are playing
+ {
+ $('#pause_detail').hide();
+ $('#play_detail').show();
+ clearTimeout(slideShow);
+ slideShow=null;
+ }
+}
+function focusImage(id, redirected)
+{
+ currentImg=id;
+ $('#imageTitleLabel').html(""+slideshowImages[id][4]+" ");
+ $('#play_detail').hide();
+ $('#pause_detail').hide();
+ swatchImg(id);
+ $('#detailView').fadeIn('slow');
+ hideHoverV = setTimeout("hideHoverView()",3000);
+ detailViewMode=true;
+ updateHash();
+ //Image count.
+ if(!redirected)
+ $.get(slideshowImages[currentImg][6]);
+ $('#info_detail').attr('href', slideshowImages[currentImg][1]);
+}
+var pearCarousel;
+function startImageFlow(userSet)
+{
+ if(userSet === true) {
+ viewMode = "carousel";
+ }
+ $('#mosaicTable').hide();
+
+ $('#pearImageFlow,#pearFlowPadd').show();
+
+ toggleReflex(true);
+
+ if(!pearCarousel){
+ for (var i = 0; i < slideshowImages.length; i++) {
+ var img = ''+$('#mosaicGridContainer img').eq(i).attr('alt')+'"
';
+ var img = ' ';
+ // console.log(img);
+ $('#pearImageFlow').append(img);
+ }
+ pearCarousel = new ImageFlow();
+ pearCarousel.init({ImageFlowID: 'pearImageFlow', aspectRatio: 2.4, imagesHeight: 0.6, opacity: true, reflections: false, startID: currentImg+1, onClick: function() {focusImage($(this).attr('longdesc'));}, startAnimation: true, xStep: 200, imageFocusM: 1.7, imageFocusMax: 4, opacityArray: [10, 9, 6, 2], percentOther: 130, captions: false, slider: false});
+ }
+ switchMode('carousel');
+ mosaicResize();
+}
+function setKeys()
+{
+ /* Fixes the back button issue */
+/* window.onunload = function()
+ {
+ document = null;
+ }
+*/ $(document).keydown(function(e)
+ {
+ var charCode = (e.keyCode ? e.keyCode: e.which);
+ switch (charCode)
+ {
+ case 32: /* Space */
+ if( slideShowMode) togglePlayPause();
+ case 39: /* Right arrow key */
+ case 78: /* N */
+ swatchImg(currentImg+1);
+ // if($('imageflow')) handle(-1);
+ break;
+ case 80: /* P */
+ case 37: /* Left arrow key */
+ swatchImg(currentImg-1);
+ // if($('imageflow')) handle(1);
+ break;
+ }
+ });
+}
+function showHoverView(){
+ if(hideHoverV != null) clearTimeout(hideHoverV);
+ $('#hoverView').show();
+ hideHoverV = setTimeout("hideHoverView()",3000);
+}
+function hideHoverView(){
+ if(!hovering) $('#hoverView').fadeOut();
+ hideHoverV = null;
+}
+var hideHoverV=null;
+var hovering=false;
+function switchMode(mode){
+ $('#mosaic,#grid,#carousel').removeClass("sel sel-with-viewSwitcher");
+ $('#'+mode).addClass("sel sel-with-viewSwitcher");
+ updateHash();
+}
+
+function preFetch()
+{
+/* for (var i = 0; i < slideshowImages.length; i++) {
+ var tempImage = new Element('img', {'src': slideshowImages[i][0]});
+ }*/
+}
+
+function toggleReflex(hide)
+{
+ if(hide) {
+ // $$('.Fer').each(function(s) { cvi_reflex.remove(s); });
+ $('mosaicGridContainer').select('img[class="Fer"]').each(function(s,index){ Event.observe(s, 'click', function(){ mosaicView ? swatchImg(index) : focusImage(index) ;}); });
+ }
+ else {
+ // $$('.Fer').each(function(s) { cvi_reflex.add(s, {height: 20, distance: 0 }); });
+ $('mosaicGridContainer').select('canvas[class="Fer"]').each(function(s,index){ Event.observe(s, 'click', function(){ mosaicView ? swatchImg(index) : focusImage(index) ;}); });
+ }
+}
+
+function hideDetailView()
+{
+ $('#detailView').hide();
+ slideShowMode=detailViewMode=false;
+ if(slideShow!=null)
+ clearTimeout(slideShow);
+ slideShow=null;
+ updateHash();
+}
diff --git a/3.0/themes/pear4gallery3/js/ui.init.js b/3.0/themes/pear4gallery3/js/ui.init.js
new file mode 100644
index 00000000..2c67bf3a
--- /dev/null
+++ b/3.0/themes/pear4gallery3/js/ui.init.js
@@ -0,0 +1,131 @@
+/**
+ * Initialize jQuery UI and Gallery Plugins
+ */
+
+$(document).ready(function() {
+
+ // Initialize Superfish menus (hidden, then shown to address IE issue)
+ $("#g-site-menu .g-menu").hide().addClass("sf-menu");
+ $("#g-site-menu .g-menu").superfish({
+ delay: 500,
+ animation: {
+ opacity:'show',
+ height:'show'
+ },
+ pathClass: "g-selected",
+ speed: 'fast'
+ }).show();
+
+ // Initialize status message effects
+ $("#g-action-status li").gallery_show_message();
+
+ // Initialize dialogs
+ $(".g-dialog-link").gallery_dialog();
+
+ // Initialize short forms
+ $(".g-short-form").gallery_short_form();
+
+ // Apply jQuery UI icon, hover, and rounded corner styles
+ $("input[type=submit]:not(.g-short-form input)").addClass("ui-state-default ui-corner-all");
+ if ($("#g-view-menu").length) {
+ $("#g-view-menu ul").removeClass("g-menu").removeClass("sf-menu");
+ $("#g-view-menu a").addClass("ui-icon");
+ }
+
+ // Apply jQuery UI icon and hover styles to context menus
+ if ($(".g-context-menu").length) {
+ $(".g-context-menu li").addClass("ui-state-default");
+ $(".g-context-menu a").addClass("g-button ui-icon-left");
+ $(".g-context-menu a").prepend(" ");
+ $(".g-context-menu a span").each(function() {
+ var iconClass = $(this).parent().attr("class").match(/ui-icon-.[^\s]+/).toString();
+ $(this).addClass(iconClass);
+ });
+ }
+
+ // Remove titles for menu options since we're displaying that text anyway
+ $(".sf-menu a, .sf-menu li").removeAttr("title");
+
+ // Album and search results views
+ if ($("#g-album-grid").length) {
+ // Set equal height for album items and vertically align thumbnails/metadata
+ $('.g-item').equal_heights().gallery_valign();
+
+ // Initialize thumbnail hover effect
+ $(".g-item").hover(
+ function() {
+ // Insert a placeholder to hold the item's position in the grid
+ var placeHolder = $(this).clone().attr("id", "g-place-holder");
+ $(this).after($(placeHolder));
+ // Style and position the hover item
+ var position = $(this).position();
+ $(this).css("top", position.top).css("left", position.left);
+ $(this).addClass("g-hover-item");
+ // Initialize the contextual menu
+ $(this).gallery_context_menu();
+ // Set the hover item's height
+ $(this).height("auto");
+ var context_menu = $(this).find(".g-context-menu");
+ var adj_height = $(this).height() + context_menu.height();
+ if ($(this).next().height() > $(this).height()) {
+ $(this).height($(this).next().height());
+ } else if ($(this).prev().height() > $(this).height()) {
+ $(this).height($(this).prev().height());
+ } else {
+ $(this).height(adj_height);
+ }
+ },
+ function() {
+ // Reset item height and position
+ if ($(this).next().height()) {
+ var sib_height = $(this).next().height();
+ } else {
+ var sib_height = $(this).prev().height();
+ }
+ if ($.browser.msie && $.browser.version >= 8) {
+ sib_height = sib_height + 1;
+ }
+ $(this).css("height", sib_height);
+ $(this).css("position", "relative");
+ $(this).css("top", 0).css("left", 0);
+ // Remove the placeholder and hover class from the item
+ $(this).removeClass("g-hover-item");
+ $(this).gallery_valign();
+ $("#g-place-holder").remove();
+ }
+ );
+
+ // Realign any thumbnails that change so that when we rotate a thumb it stays centered.
+ $(".g-item").bind("gallery.change", function() {
+ $(".g-item").each(function() {
+ $(this).height($(this).find("img").height() + 2);
+ });
+ $(".g-item").equal_heights().gallery_valign();
+ });
+ }
+
+ // Photo/Item item view
+ if ($("#g-photo,#g-movie").length) {
+ // Ensure the resized image fits within its container
+ $("#g-photo,#g-movie").gallery_fit_photo();
+
+ // Initialize context menus
+ $("#g-photo,#g-movie").hover(function(){
+ $(this).gallery_context_menu();
+ });
+
+ // Add scroll effect for links to named anchors
+ $.localScroll({
+ queue: true,
+ duration: 1000,
+ hash: true
+ });
+
+ $(this).find(".g-dialog-link").gallery_dialog();
+ $(this).find(".g-ajax-link").gallery_ajax();
+ }
+
+ // Initialize button hover effect
+ $.fn.gallery_hover_init();
+
+});
diff --git a/3.0/themes/pear4gallery3/theme.info b/3.0/themes/pear4gallery3/theme.info
new file mode 100644
index 00000000..c94543d2
--- /dev/null
+++ b/3.0/themes/pear4gallery3/theme.info
@@ -0,0 +1,10 @@
+name = ".Pear Theme"
+description = "A theme with the intention to mimic Apples mobile me gallery."
+version = 2.7
+author = "Fredrik Erlandsson "
+site = 1
+admin = 0
+author_name = "Fredrik Erlandsson"
+author_url = "mailto:fredrik.e@gmail.com"
+info_url = "http://codex.gallery2.org/Gallery3:Themes:pear4gallery3"
+discuss_url = "http://gallery.menalto.com/node/102280"
diff --git a/3.0/themes/pear4gallery3/thumbnail.png b/3.0/themes/pear4gallery3/thumbnail.png
new file mode 100644
index 00000000..061c65f3
Binary files /dev/null and b/3.0/themes/pear4gallery3/thumbnail.png differ
diff --git a/3.0/themes/pear4gallery3/views/album.html.php b/3.0/themes/pear4gallery3/views/album.html.php
new file mode 100644
index 00000000..455dba8f
--- /dev/null
+++ b/3.0/themes/pear4gallery3/views/album.html.php
@@ -0,0 +1,100 @@
+
+ /* Placeholder for infromation in mosaic view. */ ?>
+
+
+
+
+
+
+
+*/?>
+ endforeach ?>
+
+ else: ?>
+ if ($user->admin || access::can("add", $item)): ?>
+ $addurl = url::site("uploader/index/$item->id") ?>
+ = t("There aren't any photos here yet! Add some .",
+ array("attrs" => html::mark_clean("href=\"$addurl\" class=\"g-dialog-link\""))) ?>
+ else: ?>
+ = t("There aren't any photos here yet!") ?>
+ endif; ?>
+ endif; ?>
+
+
+= $theme->album_bottom() ?>
+
+= $theme->paginator() ?>
+
+
diff --git a/3.0/themes/pear4gallery3/views/block.html.php b/3.0/themes/pear4gallery3/views/block.html.php
new file mode 100644
index 00000000..699d7c22
--- /dev/null
+++ b/3.0/themes/pear4gallery3/views/block.html.php
@@ -0,0 +1,10 @@
+
+ if ($anchor): ?>
+
+ endif ?>
+
+
= $title ?>
+
+ = $content ?>
+
+
diff --git a/3.0/themes/pear4gallery3/views/dynamic.html.php b/3.0/themes/pear4gallery3/views/dynamic.html.php
new file mode 100644
index 00000000..a8a4d362
--- /dev/null
+++ b/3.0/themes/pear4gallery3/views/dynamic.html.php
@@ -0,0 +1,29 @@
+
+
+
+
+ foreach ($children as $i => $child): ?>
+ ">
+ = $theme->thumb_top($child) ?>
+
+
+
+ = html::purify($child->title) ?>
+ = $theme->thumb_bottom($child) ?>
+
+
+ endforeach ?>
+
+= $theme->dynamic_bottom() ?>
+
+= $theme->paginator() ?>
diff --git a/3.0/themes/pear4gallery3/views/hoverView.html.php b/3.0/themes/pear4gallery3/views/hoverView.html.php
new file mode 100644
index 00000000..b38ad8f7
--- /dev/null
+++ b/3.0/themes/pear4gallery3/views/hoverView.html.php
@@ -0,0 +1,23 @@
+
+
diff --git a/3.0/themes/pear4gallery3/views/movie.html.php b/3.0/themes/pear4gallery3/views/movie.html.php
new file mode 100644
index 00000000..adab9d1b
--- /dev/null
+++ b/3.0/themes/pear4gallery3/views/movie.html.php
@@ -0,0 +1,22 @@
+
+
+
+ = $theme->photo_top() ?>
+
+ = $theme->paginator() ?>
+
+
+ = $theme->resize_top($item) ?>
+ = $item->movie_img(array("class" => "g-movie", "id" => "g-item-id-{$item->id}")) ?>
+ = $theme->resize_bottom($item) ?>
+
+
+
+
= html::purify($item->title) ?>
+
= nl2br(html::purify($item->description)) ?>
+
+
+ = $theme->photo_bottom() ?>
+
diff --git a/3.0/themes/pear4gallery3/views/no_sidebar.html.php b/3.0/themes/pear4gallery3/views/no_sidebar.html.php
new file mode 100644
index 00000000..58c57256
--- /dev/null
+++ b/3.0/themes/pear4gallery3/views/no_sidebar.html.php
@@ -0,0 +1,11 @@
+
+
+
+ if (block_manager::get_active("site_sidebar")): ?>
+ = t("Active sidebar blocks have no content.") ?>
+ else: ?>
+ = t("No active sidebar blocks.") ?>
+ endif ?>
+ ">= t("configure blocks") ?>
+
+
diff --git a/3.0/themes/pear4gallery3/views/page.html.php b/3.0/themes/pear4gallery3/views/page.html.php
new file mode 100644
index 00000000..cc06af5d
--- /dev/null
+++ b/3.0/themes/pear4gallery3/views/page.html.php
@@ -0,0 +1,196 @@
+
+ if ($theme->page_subtype == "photo"):
+ foreach (end($parents)->viewable()->children() as $i => $child)
+ if(!($child->is_album() || $child->is_movie()))
+ if($child->url() == $_SERVER['REQUEST_URI']):?>
+
+
+
+ die(0) ?>
+ endif ?>
+ endif ?>
+
+html_attributes() ?> xml:lang="en" lang="en">
+
+
+ $theme->start_combining("script,css") ?>
+
+ if ($page_title): ?>
+ = $page_title ?>
+ else: ?>
+ if ($theme->item()): ?>
+ = $theme->item()->title ?>
+ elseif ($theme->tag()): ?>
+ = t("Photos tagged with %tag_title", array("tag_title" => $theme->tag()->name)) ?>
+ else: /* Not an item, not a tag, no page_title specified. Help! */ ?>
+ = item::root()->title ?>
+ endif ?>
+ endif ?>
+
+ "
+ type="image/x-icon" />
+
+ if ($theme->page_type == "collection"): ?>
+ if ($thumb_proportion != 1): ?>
+ $new_width = round($thumb_proportion * 213) ?>
+ $new_height = round($thumb_proportion * 240) ?>
+
+ endif ?>
+ endif ?>
+
+ = $theme->script("json2-min.js") ?>
+ = $theme->script("jquery.js") ?>
+ = $theme->script("jquery.form.js") ?>
+ = $theme->script("jquery-ui.js") ?>
+ = $theme->script("jquery-ui-1.7.3.custom.min.js") ?>
+ = $theme->script("gallery.common.js") ?>
+ /* MSG_CANCEL is required by gallery.dialog.js */ ?>
+
+ = $theme->script("gallery.ajax.js") ?>
+ = $theme->script("gallery.dialog.js") ?>
+ = $theme->script("superfish/js/superfish.js") ?>
+ = $theme->script("jquery.localscroll.js") ?>
+
+ /* These are page specific but they get combined */ ?>
+ if ($theme->page_subtype == "photo"): ?>
+ = $theme->script("jquery.scrollTo.js") ?>
+ = $theme->script("gallery.show_full_size.js") ?>
+ elseif ($theme->page_subtype == "movie"): ?>
+ = $theme->script("flowplayer.js") ?>
+ endif ?>
+
+ = $theme->head() ?>
+
+ /* Theme specific CSS/JS goes last so that it can override module CSS/JS */ ?>
+ = $theme->script("ui.init.js") ?>
+ = $theme->script("jquery.parsequery.js") ?>
+ = $theme->script("imageflow.packed.js") ?>
+ = $theme->css("yui/reset-fonts-grids.css") ?>
+ = $theme->css("superfish/css/superfish.css") ?>
+ = $theme->css("themeroller/ui.base.css") ?>
+ = $theme->css("screen.css") ?>
+ = $theme->css("imageflow.packed.css") ?>
+
+
+
+ = $theme->get_combined("script") ?>
+
+
+ = $theme->get_combined("css") ?>
+ " media="screen,print,projection" />
+ " media="screen,print,projection" />
+
+
+
+
+
+ body_attributes() ?>>
+ = new View("hoverView.html") ?>
+ = $theme->page_top() ?>
+ = $theme->site_status() ?>
+ if (($theme->page_subtype == "login") or ($theme->page_subtype == "reauthenticate")): ?>
+ = $content ?>
+ else: /*not login | reauthenticate */ ?>
+
+
+
+
+ if ($theme->item()): ?>
+ if(!empty($parents)): ?>
+ $parent = end($parents) ?>
+
item()->id}" : null) ?>' + '#viewMode=' + viewMode;"> = html::purify(text::limit_chars($parent->title, module::get_var("gallery", "visible_title_length"))) ?>
+ endif ?>
+
+
= html::purify(text::limit_chars($theme->item()->title, 40)) ?>
+ (= count($theme->item()->children()) ?>)
+
+ endif ?>
+
+
+
+
+
+= $content ?>
+
+
+
/*class="pear"*/ ?>
+ endif ?>
+
+
diff --git a/3.0/themes/pear4gallery3/views/paginator.html.php b/3.0/themes/pear4gallery3/views/paginator.html.php
new file mode 100644
index 00000000..a0595f4f
--- /dev/null
+++ b/3.0/themes/pear4gallery3/views/paginator.html.php
@@ -0,0 +1,74 @@
+
+
+// This is a generic paginator for album, photo and movie pages. Depending on the page type,
+// there are different sets of variables available. With this data, you can make a paginator
+// that lets you say "You're viewing photo 5 of 35", or "You're viewing photos 10 - 18 of 37"
+// for album views.
+//
+// Available variables for all page types:
+// $page_type - "collection", "item", or "other"
+// $page_subtype - "album", "movie", "photo", "tag", etc.
+// $previous_page_url - the url to the previous page, if there is one
+// $next_page_url - the url to the next page, if there is one
+// $total - the total number of photos in this album
+//
+// Available for the "collection" page types:
+// $page - what page number we're on
+// $max_pages - the maximum page number
+// $page_size - the page size
+// $first_page_url - the url to the first page, or null if we're on the first page
+// $last_page_url - the url to the last page, or null if we're on the last page
+// $first_visible_position - the position number of the first visible photo on this page
+// $last_visible_position - the position number of the last visible photo on this page
+//
+// Available for "item" page types:
+// $position - the position number of this photo
+//
+?>
+ if(isset($first_page_url) || isset($last_page_url)): ?>
+
+
+ if ($page_type == "collection"): ?>
+ if (isset($first_page_url)): ?>
+ ">
+ endif ?>
+ endif ?>
+
+ if (isset($previous_page_url)): ?>
+ ">
+ endif ?>
+
+
+
+
+ if ($total): ?>
+ if ($page_type == "collection"): ?>
+ = /* @todo This message isn't easily localizable */
+ t2("Photo %from_number of %count",
+ "Photos %from_number - %to_number of %count",
+ $total,
+ array("from_number" => $first_visible_position,
+ "to_number" => $last_visible_position,
+ "count" => $total)) ?>
+ else: ?>
+ = t("%position of %total", array("position" => $position, "total" => $total)) ?>
+ endif ?>
+ else: ?>
+ = t("No photos") ?>
+ endif ?>
+
+
+
+ if ($page_type == "collection"): ?>
+ if (isset($last_page_url)): ?>
+ ">
+ endif ?>
+ endif ?>
+ if (isset($next_page_url)): ?>
+ ">
+ endif ?>
+
+
+
+
+ endif ?>
diff --git a/3.0/themes/pear4gallery3/views/photo.html.php b/3.0/themes/pear4gallery3/views/photo.html.php
new file mode 100644
index 00000000..b42ab987
--- /dev/null
+++ b/3.0/themes/pear4gallery3/views/photo.html.php
@@ -0,0 +1,51 @@
+
+
+ if (access::can("view_full", $theme->item())): ?>
+
+
+ endif ?>
+
+
+ = $theme->photo_top() ?>
+
+ = $theme->paginator() ?>
+
+
+
+
+
= html::purify($item->title) ?>
+
= nl2br(html::purify($item->description)) ?>
+
+
+ = $theme->photo_bottom() ?>
+
diff --git a/3.0/themes/pear4gallery3/views/sidebar.html.php b/3.0/themes/pear4gallery3/views/sidebar.html.php
new file mode 100644
index 00000000..086d1359
--- /dev/null
+++ b/3.0/themes/pear4gallery3/views/sidebar.html.php
@@ -0,0 +1,16 @@
+
+= $theme->sidebar_top() ?>
+
+
+= $theme->sidebar_blocks() ?>
+= $theme->sidebar_bottom() ?>
diff --git a/3.0/themes/sobriety/theme.info b/3.0/themes/sobriety/theme.info
index bcb836a6..faf05de1 100644
--- a/3.0/themes/sobriety/theme.info
+++ b/3.0/themes/sobriety/theme.info
@@ -6,3 +6,7 @@ site = 1
admin = 0
;wind commit = 3a9bdebafda1807bb2294c041e655f6464841bf0
;wind date = Tue Sep 21 21:38:32 2010 -0700
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Themes:sobriety"
+discuss_url = "http://gallery.menalto.com/forum_theme_sobriety"
diff --git a/3.0/themes/three_nids/theme.info b/3.0/themes/three_nids/theme.info
index eb62dd07..4fb28616 100644
--- a/3.0/themes/three_nids/theme.info
+++ b/3.0/themes/three_nids/theme.info
@@ -4,3 +4,7 @@ version = 2
author = "3nids"
site = 1
admin = 0
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Themes:three_nids"
+discuss_url = "http://gallery.menalto.com/forum_theme_three_nids"
diff --git a/3.1/modules/about_this_album/module.info b/3.1/modules/about_this_album/module.info
index 8080a24d..19a0e6f1 100644
--- a/3.1/modules/about_this_album/module.info
+++ b/3.1/modules/about_this_album/module.info
@@ -1,3 +1,7 @@
name = "About this Album"
description = "Show some simple, specific and useful info about a given album"
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:about_this_album"
+discuss_url = "http://gallery.menalto.com/forum_module_about_this_album"
diff --git a/3.1/modules/about_this_photo/module.info b/3.1/modules/about_this_photo/module.info
index e324ae3b..876b111b 100644
--- a/3.1/modules/about_this_photo/module.info
+++ b/3.1/modules/about_this_photo/module.info
@@ -1,3 +1,7 @@
name = "About this Photo"
description = "Show some simple, specific and useful info about a given photo"
version = 3
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:about_this_photo"
+discuss_url = "http://gallery.menalto.com/forum_module_about_this_photo"
diff --git a/3.1/modules/adsense/module.info b/3.1/modules/adsense/module.info
index 41cc63b2..066e0ade 100644
--- a/3.1/modules/adsense/module.info
+++ b/3.1/modules/adsense/module.info
@@ -1,3 +1,7 @@
name = "Adsense"
description = "Display Google Adsense ads"
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:adsense"
+discuss_url = "http://gallery.menalto.com/forum_module_adsense"
diff --git a/3.1/modules/albumpassword/controllers/albumpassword.php b/3.1/modules/albumpassword/controllers/albumpassword.php
index 83ff4f0e..bf79698d 100644
--- a/3.1/modules/albumpassword/controllers/albumpassword.php
+++ b/3.1/modules/albumpassword/controllers/albumpassword.php
@@ -71,7 +71,7 @@ class albumpassword_Controller extends Controller {
// Convert submitted data to local variables.
$album_id = Input::instance()->post("item_id");
- $album_password = Input::instance()->post("assignpassword_password");
+ $album_password = strtolower(Input::instance()->post("assignpassword_password"));
// Check for, and remove, any existing passwords and cached ids.
$existing_password = ORM::factory("items_albumpassword")->where("album_id", "=", $album_id)->find_all();
@@ -109,7 +109,7 @@ class albumpassword_Controller extends Controller {
// Display a success message and close the dialog.
message::success(t("Password saved."));
- print "\n\n\n\n\n";
+ json::reply(array("result" => "success"));
}
public function logout() {
@@ -126,7 +126,7 @@ class albumpassword_Controller extends Controller {
access::verify_csrf();
// Convert submitted data to local variables.
- $album_password = Input::instance()->post("albumpassword_password");
+ $album_password = strtolower(Input::instance()->post("albumpassword_password"));
// See if the submitted password matches any in the database.
$existing_password = ORM::factory("items_albumpassword")
@@ -139,10 +139,10 @@ class albumpassword_Controller extends Controller {
cookie::delete("g3_albumpassword_id");
cookie::set("g3_albumpassword", $album_password);
message::success(t("Password Accepted."));
- print "\n\n\n\n\n";
+ json::reply(array("result" => "success"));
} else {
message::error(t("Password Rejected."));
- print "\n\n\n\n\n";
+ json::reply(array("result" => "success"));
}
}
diff --git a/3.1/modules/albumpassword/helpers/albumpassword_event.php b/3.1/modules/albumpassword/helpers/albumpassword_event.php
index 1201400d..b6b93e81 100644
--- a/3.1/modules/albumpassword/helpers/albumpassword_event.php
+++ b/3.1/modules/albumpassword/helpers/albumpassword_event.php
@@ -34,7 +34,7 @@ class albumpassword_event_Core {
->id("albumpassword_login")
->css_id("g-album-password-login")
->url(url::site("albumpassword/login"))
- ->label(t("Enter password")));
+ ->label(t("Unlock albums")));
} else {
// If a password has been entered already
// display the log out link, and links to the protected albums
diff --git a/3.1/modules/albumpassword/helpers/albumpassword_task.php b/3.1/modules/albumpassword/helpers/albumpassword_task.php
index b6ea007a..07f620e1 100644
--- a/3.1/modules/albumpassword/helpers/albumpassword_task.php
+++ b/3.1/modules/albumpassword/helpers/albumpassword_task.php
@@ -26,11 +26,70 @@ class albumpassword_task_Core {
->join("albumpassword_idcaches", "items_albumpasswords.id", "albumpassword_idcaches.password_id", "LEFT OUTER")
->and_where("albumpassword_idcaches.password_id", "IS", NULL)->count_all();
- return array(Task_Definition::factory()
- ->callback("albumpassword_task::update_idcaches")
- ->name(t("Rebuild Album Password ID Caches DB"))
- ->description(t("Logs the contents of all protected albums into the db."))
- ->severity($bad_albums ? log::WARNING : log::SUCCESS));
+ $tasks = array();
+
+ $tasks[] = Task_Definition::factory()
+ ->callback("albumpassword_task::update_idcaches")
+ ->name(t("Rebuild Album Password ID Caches DB"))
+ ->description(t("Logs the contents of all protected albums into the db."))
+ ->severity($bad_albums ? log::WARNING : log::SUCCESS);
+
+ $tasks[] = Task_Definition::factory()
+ ->callback("albumpassword_task::lowercase_passwords")
+ ->name(t("Fix Password DB Casing"))
+ ->description(t("Fixes case sensitivity issues."))
+ ->severity(log::SUCCESS);
+
+ return $tasks;
+ }
+
+ static function lowercase_passwords($task) {
+ // Converts all passwords to lower case.
+
+ $start = microtime(true);
+ $total = $task->get("total");
+ $existing_passwords = ORM::factory("items_albumpassword")->find_all();
+
+ if (empty($total)) {
+ // Set the initial values for all variables.
+ $task->set("total", count($existing_passwords));
+ $total = $task->get("total");
+ $task->set("last_password_id", 0);
+ $task->set("completed_passwords", 0);
+ }
+
+ // Retrieve the values for variables from the last time this
+ // function was run.
+ $last_password_id = $task->get("last_password_id");
+ $completed_passwords = $task->get("completed_passwords");
+
+ foreach (ORM::factory("items_albumpassword")
+ ->where("id", ">", $last_password_id)
+ ->order_by("id")
+ ->find_all(100) as $one_password) {
+ $one_password->password = strtolower($one_password->password);
+ $one_password->save();
+
+ $last_password_id = $one_password->id;
+ $completed_passwords++;
+
+ if ($completed_passwords == count($existing_passwords) || microtime(true) - $start > 1.5) {
+ break;
+ }
+ }
+
+ $task->set("last_password_id", $last_password_id);
+ $task->set("completed_passwords", $completed_passwords);
+
+ if ($completed_passwords == count($existing_passwords)) {
+ $task->done = true;
+ $task->state = "success";
+ $task->percent_complete = 100;
+ } else {
+ $task->percent_complete = round(100 * $completed_passwords / count($existing_passwords));
+ }
+ $task->status = t2("One password fixed", "%count / %total passwords fixed", $completed_passwords,
+ array("total" => count($existing_passwords)));
}
static function update_idcaches($task) {
diff --git a/3.1/modules/albumpassword/module.info b/3.1/modules/albumpassword/module.info
index 6469b332..313bddf5 100644
--- a/3.1/modules/albumpassword/module.info
+++ b/3.1/modules/albumpassword/module.info
@@ -1,3 +1,7 @@
name = "Album Password"
description = "Restrict access to individual albums."
version = 3
+author_name = "rWatcher"
+author_url = "http://codex.gallery2.org/User:RWatcher"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:albumpassword"
+discuss_url = "http://gallery.menalto.com/node/98856"
diff --git a/3.1/modules/albumtree/helpers/albumtree_installer.php b/3.1/modules/albumtree/helpers/albumtree_installer.php
index 592a9b71..77c7066f 100644
--- a/3.1/modules/albumtree/helpers/albumtree_installer.php
+++ b/3.1/modules/albumtree/helpers/albumtree_installer.php
@@ -20,7 +20,7 @@
class albumtree_installer {
static function install() {
module::set_var("albumtree", "style", "select");
- module::set_version("albumtree", 2);
+ module::set_version("albumtree", 3);
}
static function upgrade($version) {
diff --git a/3.1/modules/albumtree/images/base.gif b/3.1/modules/albumtree/images/base.gif
new file mode 100755
index 00000000..9ac0b117
Binary files /dev/null and b/3.1/modules/albumtree/images/base.gif differ
diff --git a/3.1/modules/albumtree/images/empty.gif b/3.1/modules/albumtree/images/empty.gif
new file mode 100755
index 00000000..b5cf5237
Binary files /dev/null and b/3.1/modules/albumtree/images/empty.gif differ
diff --git a/3.1/modules/albumtree/images/folder.gif b/3.1/modules/albumtree/images/folder.gif
new file mode 100755
index 00000000..eb129763
Binary files /dev/null and b/3.1/modules/albumtree/images/folder.gif differ
diff --git a/3.1/modules/albumtree/images/folderopen.gif b/3.1/modules/albumtree/images/folderopen.gif
new file mode 100755
index 00000000..c5c31102
Binary files /dev/null and b/3.1/modules/albumtree/images/folderopen.gif differ
diff --git a/3.1/modules/albumtree/images/imgfolder.gif b/3.1/modules/albumtree/images/imgfolder.gif
new file mode 100755
index 00000000..e6d88034
Binary files /dev/null and b/3.1/modules/albumtree/images/imgfolder.gif differ
diff --git a/3.1/modules/albumtree/images/join.gif b/3.1/modules/albumtree/images/join.gif
new file mode 100755
index 00000000..34dd4761
Binary files /dev/null and b/3.1/modules/albumtree/images/join.gif differ
diff --git a/3.1/modules/albumtree/images/join_rtl.gif b/3.1/modules/albumtree/images/join_rtl.gif
new file mode 100755
index 00000000..04bc3a7b
Binary files /dev/null and b/3.1/modules/albumtree/images/join_rtl.gif differ
diff --git a/3.1/modules/albumtree/images/joinbottom.gif b/3.1/modules/albumtree/images/joinbottom.gif
new file mode 100755
index 00000000..48b81c80
Binary files /dev/null and b/3.1/modules/albumtree/images/joinbottom.gif differ
diff --git a/3.1/modules/albumtree/images/joinbottom_rtl.gif b/3.1/modules/albumtree/images/joinbottom_rtl.gif
new file mode 100755
index 00000000..24fdbce8
Binary files /dev/null and b/3.1/modules/albumtree/images/joinbottom_rtl.gif differ
diff --git a/3.1/modules/albumtree/images/line.gif b/3.1/modules/albumtree/images/line.gif
new file mode 100755
index 00000000..1a259eea
Binary files /dev/null and b/3.1/modules/albumtree/images/line.gif differ
diff --git a/3.1/modules/albumtree/images/line_rtl.gif b/3.1/modules/albumtree/images/line_rtl.gif
new file mode 100755
index 00000000..704b07de
Binary files /dev/null and b/3.1/modules/albumtree/images/line_rtl.gif differ
diff --git a/3.1/modules/albumtree/images/minus.gif b/3.1/modules/albumtree/images/minus.gif
new file mode 100755
index 00000000..3d212a97
Binary files /dev/null and b/3.1/modules/albumtree/images/minus.gif differ
diff --git a/3.1/modules/albumtree/images/minus_rtl.gif b/3.1/modules/albumtree/images/minus_rtl.gif
new file mode 100755
index 00000000..f0db8fa8
Binary files /dev/null and b/3.1/modules/albumtree/images/minus_rtl.gif differ
diff --git a/3.1/modules/albumtree/images/minusbottom.gif b/3.1/modules/albumtree/images/minusbottom.gif
new file mode 100755
index 00000000..dc3198be
Binary files /dev/null and b/3.1/modules/albumtree/images/minusbottom.gif differ
diff --git a/3.1/modules/albumtree/images/minusbottom_rtl.gif b/3.1/modules/albumtree/images/minusbottom_rtl.gif
new file mode 100755
index 00000000..69ecf510
Binary files /dev/null and b/3.1/modules/albumtree/images/minusbottom_rtl.gif differ
diff --git a/3.1/modules/albumtree/images/nolines_minus.gif b/3.1/modules/albumtree/images/nolines_minus.gif
new file mode 100755
index 00000000..2592ac20
Binary files /dev/null and b/3.1/modules/albumtree/images/nolines_minus.gif differ
diff --git a/3.1/modules/albumtree/images/nolines_plus.gif b/3.1/modules/albumtree/images/nolines_plus.gif
new file mode 100755
index 00000000..f258ce21
Binary files /dev/null and b/3.1/modules/albumtree/images/nolines_plus.gif differ
diff --git a/3.1/modules/albumtree/images/plus.gif b/3.1/modules/albumtree/images/plus.gif
new file mode 100755
index 00000000..b2c99723
Binary files /dev/null and b/3.1/modules/albumtree/images/plus.gif differ
diff --git a/3.1/modules/albumtree/images/plus_rtl.gif b/3.1/modules/albumtree/images/plus_rtl.gif
new file mode 100755
index 00000000..c527f9fe
Binary files /dev/null and b/3.1/modules/albumtree/images/plus_rtl.gif differ
diff --git a/3.1/modules/albumtree/images/plusbottom.gif b/3.1/modules/albumtree/images/plusbottom.gif
new file mode 100755
index 00000000..b5671d89
Binary files /dev/null and b/3.1/modules/albumtree/images/plusbottom.gif differ
diff --git a/3.1/modules/albumtree/images/plusbottom_rtl.gif b/3.1/modules/albumtree/images/plusbottom_rtl.gif
new file mode 100755
index 00000000..b7105c56
Binary files /dev/null and b/3.1/modules/albumtree/images/plusbottom_rtl.gif differ
diff --git a/3.1/modules/albumtree/module.info b/3.1/modules/albumtree/module.info
index b7fb9f50..b14d4487 100644
--- a/3.1/modules/albumtree/module.info
+++ b/3.1/modules/albumtree/module.info
@@ -1,3 +1,7 @@
name = "Album Tree"
description = "Provides a block in the sidebar with quick links to all other albums."
-version = 2
+version = 3
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:albumtree"
+discuss_url = "http://gallery.menalto.com/forum_module_albumtree"
diff --git a/3.1/modules/albumtree/views/albumtree_block_dtree.html.php b/3.1/modules/albumtree/views/albumtree_block_dtree.html.php
new file mode 100644
index 00000000..257181f1
--- /dev/null
+++ b/3.1/modules/albumtree/views/albumtree_block_dtree.html.php
@@ -0,0 +1,414 @@
+
+
+
+
+
diff --git a/3.1/modules/albumtree/views/albumtree_block_list.html.php b/3.1/modules/albumtree/views/albumtree_block_list.html.php
index 0e2cdb6d..62d8c0ad 100644
--- a/3.1/modules/albumtree/views/albumtree_block_list.html.php
+++ b/3.1/modules/albumtree/views/albumtree_block_list.html.php
@@ -10,29 +10,21 @@
- // We'll keep track of the list of items that we want to display in a stack ?>
- $stack = array(array(0, $root)) ?>
-
- // While there are still items to show, pick the next one and show it ?>
- while ($stack): ?>
- list($level, $album) = array_pop($stack) ?>
+
+function makelist($album,$level){
+//print out the list item
+?>
- = str_repeat(" ", $level) ?>= $album->title ?>
+ = str_repeat(" ", $level) ?>= $album->title ?>
-
- // Then take all of that album's children and put them next on the stack. ?>
- $tmp = array(); ?>
- foreach ($album->viewable()->children(null, null, array(array("type", "=", "album"))) as $child): ?>
- $tmp[] = array($level + 1, $child) ?>
- endforeach ?>
-
- // Since we'll pull them off the stack in the opposite order that we put them on, ?>
- // and the order that we put them on is the order in which we want to display them, ?>
- // We need to reverse the order of the children on the stack ?>
- if ($tmp): ?>
- $stack = array_merge($stack, array_reverse($tmp)) ?>
- endif ?>
- endwhile ?>
+
+ //recurse over the children, and print their list items as well
+ foreach ($album->viewable()->children(null, null, array(array("type", "=", "album"))) as $child){
+ makelist($child,$level+1);
+ }
+}
+makelist($root,0);
+?>
diff --git a/3.1/modules/albumtree/views/albumtree_block_select.html.php b/3.1/modules/albumtree/views/albumtree_block_select.html.php
index 4a73c333..c4633d27 100644
--- a/3.1/modules/albumtree/views/albumtree_block_select.html.php
+++ b/3.1/modules/albumtree/views/albumtree_block_select.html.php
@@ -1,24 +1,16 @@
-'.replace('__ID__', this.value)">
- // We'll keep track of the list of items that we want to display in a stack ?>
- $stack = array(array(0, $root)) ?>
-
- // While there are still items to show, pick the next one and show it ?>
- while ($stack): ?>
- list($level, $album) = array_pop($stack) ?>
-= str_repeat(" ", $level) ?>= $album->title ?>
-
- // Then take all of that album's children and put them next on the stack. ?>
- $tmp = array(); ?>
- foreach ($album->viewable()->children(null, null, array(array("type", "=", "album"))) as $child): ?>
- $tmp[] = array($level + 1, $child) ?>
- endforeach ?>
-
- // Since we'll pull them off the stack in the opposite order that we put them on, ?>
- // and the order that we put them on is the order in which we want to display them, ?>
- // We need to reverse the order of the children on the stack ?>
- if ($tmp): ?>
- $stack = array_merge($stack, array_reverse($tmp)) ?>
- endif ?>
- endwhile ?>
+
+
+function makeselect($album, $level){
+//print out the list item as a select option
+?>
+= str_repeat(" ", $level) ?>= $album->title ?>
+
+ //recurse over the children, and print their list items as well
+ foreach ($album->viewable()->children(null, null, array(array("type", "=", "album"))) as $child){
+ makeselect($child,$level+1);
+ }
+}
+makeselect($root,0);
+?>
diff --git a/3.1/modules/atom/module.info b/3.1/modules/atom/module.info
index e9d35a69..77f5c0b8 100644
--- a/3.1/modules/atom/module.info
+++ b/3.1/modules/atom/module.info
@@ -1,3 +1,7 @@
name = "Atom"
description = "Enable Atom feeds in your Gallery"
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:atom"
+discuss_url = "http://gallery.menalto.com/forum_module_atom"
diff --git a/3.1/modules/autorotate/module.info b/3.1/modules/autorotate/module.info
index 42a108fb..c4087382 100644
--- a/3.1/modules/autorotate/module.info
+++ b/3.1/modules/autorotate/module.info
@@ -1,3 +1,7 @@
name = "Autorotate"
description = "Rotate an image automatically on upload based on EXIF data"
-version = 2
\ No newline at end of file
+version = 2
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:autorotate"
+discuss_url = "http://gallery.menalto.com/forum_module_autorotate"
diff --git a/3.1/modules/basket/module.info b/3.1/modules/basket/module.info
index 559c59aa..965a7df3 100644
--- a/3.1/modules/basket/module.info
+++ b/3.1/modules/basket/module.info
@@ -1,3 +1,7 @@
name = "Shopping Basket"
description = "Provides a simple shopping basket and checkout with paypal integration"
version = 5
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:basket"
+discuss_url = "http://gallery.menalto.com/forum_module_basket"
diff --git a/3.1/modules/batchtag/module.info b/3.1/modules/batchtag/module.info
index eb00345a..c1380ad4 100644
--- a/3.1/modules/batchtag/module.info
+++ b/3.1/modules/batchtag/module.info
@@ -1,3 +1,7 @@
name = "BatchTag"
description = "Automatically apply a tag to the entire contents of an album."
version = 1
+author_name = "rWatcher"
+author_url = "http://codex.gallery2.org/User:RWatcher"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:batchtag"
+discuss_url = "http://gallery.menalto.com/node/101076"
diff --git a/3.1/modules/bitly/module.info b/3.1/modules/bitly/module.info
index 1c192173..31ac2592 100644
--- a/3.1/modules/bitly/module.info
+++ b/3.1/modules/bitly/module.info
@@ -1,3 +1,7 @@
name = "bit.ly"
description = "Shorten and track Gallery URLs with bit.ly (http://bit.ly). You'll need a bit.ly API key."
version = 1
+author_name = "Chad Kieffer"
+author_url = "http://2tbsp.com/content/bitly-module-gallery-3"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:bitly"
+discuss_url = "http://gallery.menalto.com/forum_module_bitly"
diff --git a/3.1/modules/calendarview/module.info b/3.1/modules/calendarview/module.info
index e70ff69f..f51f1625 100644
--- a/3.1/modules/calendarview/module.info
+++ b/3.1/modules/calendarview/module.info
@@ -1,3 +1,7 @@
name = "CalendarView"
description = "View your photos by the date they were taken."
-version = 1
\ No newline at end of file
+version = 1
+author_name = "rWatcher"
+author_url = "http://codex.gallery2.org/User:RWatcher"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:calendarview"
+discuss_url = "http://gallery.menalto.com/node/92405"
diff --git a/3.1/modules/calendarview/views/calendarview_year.html.php b/3.1/modules/calendarview/views/calendarview_year.html.php
index 880e0267..b40d7d58 100644
--- a/3.1/modules/calendarview/views/calendarview_year.html.php
+++ b/3.1/modules/calendarview/views/calendarview_year.html.php
@@ -38,7 +38,7 @@
// Check and see if any photos were taken in January,
// If so, make the month title into a clickable link.
print "";
- if (date("n", $items_for_year[$counter]->captured) == 1) {
+ if ((count($items_for_year) > 0) && (date("n", $items_for_year[$counter]->captured) == 1)) {
$month_url = url::site("calendarview/month/" . $calendar_year . "/" . $calendar_user . "/" . $counter_months . "/");
} else {
$month_url = "";
diff --git a/3.1/modules/captionator/module.info b/3.1/modules/captionator/module.info
index d9087368..5edf301c 100644
--- a/3.1/modules/captionator/module.info
+++ b/3.1/modules/captionator/module.info
@@ -1,3 +1,7 @@
name = "Captionator"
description = "Caption all photos, movies and albums in an album at once."
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:captionator"
+discuss_url = "http://gallery.menalto.com/forum_module_captionator"
diff --git a/3.1/modules/contactowner/module.info b/3.1/modules/contactowner/module.info
index e6995d27..70e9ef09 100644
--- a/3.1/modules/contactowner/module.info
+++ b/3.1/modules/contactowner/module.info
@@ -1,3 +1,7 @@
name = "ContactOwner"
description = "Allows visitors to send the website owner an email."
version = 2
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:contactowner"
+discuss_url = "http://gallery.menalto.com/forum_module_contactowner"
diff --git a/3.1/modules/custom_menus/controllers/admin_custom_menus.php b/3.1/modules/custom_menus/controllers/admin_custom_menus.php
new file mode 100644
index 00000000..68b43f71
--- /dev/null
+++ b/3.1/modules/custom_menus/controllers/admin_custom_menus.php
@@ -0,0 +1,254 @@
+page_title = t("Manage menus");
+ $view->content = new View("admin_custom_menus.html");
+ $view->content->menu_list = $this->get_html_list(0);
+ print $view;
+ }
+
+ public function form_create($id) {
+ // Display the create new menu form.
+ print $this->get_new_menu_form($id);
+ }
+
+ public function form_edit($id) {
+ // Display the edit menu form.
+ print $this->get_edit_menu_form($id);
+ }
+
+ static function get_new_menu_form($id) {
+ // Generate the create new menu form.
+ $form = new Forge("admin/custom_menus/create/$id", "", "post", array("id" => "g-create-menu-form"));
+ $group = $form->group("create_menu")
+ ->label(t("Add new menu"));
+ $group->input("menu_title")
+ ->label(t("Title"));
+ $group->input("menu_url")
+ ->label(t("URL (Leave blank if this menu will have sub-menus)"));
+ $group->submit("")->value(t("Create menu"));
+ return $form;
+ }
+
+ static function get_edit_menu_form($id) {
+ // Generate the edit menu form.
+ $existing_menu = ORM::factory("custom_menu", $id);
+ $form = new Forge("admin/custom_menus/edit/$id", "", "post", array("id" => "g-edit-menu-form"));
+ $group = $form->group("edit_menu")
+ ->label(t("Edit menu"));
+ $group->input("menu_title")
+ ->label(t("Title"))
+ ->value($existing_menu->title);
+ $group->input("menu_url")
+ ->label(t("URL (Leave blank if this menu will have sub-menus)"))
+ ->value($existing_menu->url);
+ $group->submit("")->value(t("Save changes"));
+ return $form;
+ }
+
+ public function create($id) {
+ // Save a new menu to the database.
+
+ access::verify_csrf();
+
+ // Save form variables to the database.
+ $new_menu = ORM::factory("custom_menu");
+ $new_menu->title = Input::instance()->post("menu_title");
+ $new_menu->url = Input::instance()->post("menu_url");
+ $new_menu->parent_id = $id;
+
+ // Set menu's location to the last position.
+ $existing_menu = ORM::factory("custom_menu")
+ ->where("parent_id", "=", $id)
+ ->order_by("order_by", "DESC")
+ ->find_all(1);
+ if (count($existing_menu) > 0) {
+ $int_position = $existing_menu[0]->order_by;
+ $int_position++;
+ $new_menu->order_by = $int_position;
+ } else {
+ $new_menu->order_by = 0;
+ }
+
+ // Save new menu to the database.
+ $new_menu->save();
+ message::success(t("Menu %menu_name created", array("menu_name" => $new_menu->title)));
+ log::success("custom_menus", t("Menu %menu_name created", array("menu_name" => $new_menu->title)));
+ json::reply(array("result" => "success"));
+ }
+
+ public function edit($id) {
+ // Save a new menu to the database.
+
+ access::verify_csrf();
+
+ // Load the existing menu and save changes.
+ $existing_menu = ORM::factory("custom_menu", $id);
+ if ($existing_menu->loaded()) {
+ $existing_menu->title = Input::instance()->post("menu_title");
+ $existing_menu->url = Input::instance()->post("menu_url");
+ $existing_menu->save();
+ message::success(t("Menu %menu_name saved", array("menu_name" => $existing_menu->title)));
+ log::success("custom_menus", t("Menu %menu_name saved", array("menu_name" => $existing_menu->title)));
+ json::reply(array("result" => "success"));
+ } else {
+ message::error(t("Unable to load menu %menu_id", array("menu_id" => $id)));
+ log::success("custom_menus", t("Unable to load menu %menu_id", array("menu_id" => $id)));
+ json::reply(array("result" => "success"));
+ }
+ }
+
+ function get_html_list($parent_id) {
+ // Generate an HTML list of existing menu items.
+ $existing_menu = ORM::factory("custom_menu")
+ ->where("parent_id", "=", $parent_id)
+ ->order_by("order_by", "ASC")
+ ->find_all();
+ $str_html = "";
+ if (count($existing_menu) > 0) {
+ $str_html = "
\n";
+ }
+ return $str_html;
+ }
+
+ public function form_delete($id) {
+ // Display a form asking the user if they want to delete a menu.
+ $one_menu = ORM::factory("custom_menu", $id);
+ if ($one_menu->loaded()) {
+ print $this->get_delete_form($one_menu);
+ }
+ }
+
+ public function delete($id) {
+ // Delete the specified menu.
+
+ access::verify_csrf();
+
+ // Make sure $id belongs to an actual menu.
+ $one_menu = ORM::factory("custom_menu", $id);
+ if (!$one_menu->loaded()) {
+ throw new Kohana_404_Exception();
+ }
+
+ // If the form validates, delete the specified menu.
+ $form = $this->get_delete_form($one_menu);
+ if ($form->validate()) {
+ $name = $one_menu->title;
+ $this->delete_sub_menus($one_menu->id);
+ $one_menu->delete();
+ message::success(t("Deleted menu %menu_name", array("menu_name" => $name)));
+ log::success("custom_menus", t("Deleted menu %menu_name", array("menu_name" => $name)));
+ json::reply(array("result" => "success", "location" => url::site("admin/custom_menus")));
+ } else {
+ print $form;
+ }
+ }
+
+ function delete_sub_menus($parent_id) {
+ // Delete all sub menus associated with $parent_id.
+ $existing_menu = ORM::factory("custom_menu")
+ ->where("parent_id", "=", $parent_id)
+ ->order_by("title", "ASC")
+ ->find_all();
+ foreach ($existing_menu as $one_menu) {
+ $this->delete_sub_menus($one_menu->id);
+ $one_menu->delete();
+ }
+ }
+
+ static function get_delete_form($one_menu) {
+ // Generate a new form asking the user if they want to delete a menu.
+ $form = new Forge("admin/custom_menus/delete/$one_menu->id", "", "post", array("id" => "g-delete-menu-form"));
+ $group = $form->group("delete_menu")
+ ->label(t("Really delete menu %menu_name & sub-menus?", array("menu_name" => $one_menu->title)));
+ $group->submit("")->value(t("Delete Menu"));
+ return $form;
+ }
+
+ public function move_menu_up($id) {
+ // Move the specified menu item up one position.
+ $one_menu = ORM::factory("custom_menu", $id);
+ if ($one_menu->loaded()) {
+ $existing_menu = ORM::factory("custom_menu")
+ ->where("parent_id", "=", $one_menu->parent_id)
+ ->where("order_by", "<", $one_menu->order_by)
+ ->order_by("order_by", "DESC")
+ ->find_all(1);
+ if (count($existing_menu) > 0) {
+ $second_menu = ORM::factory("custom_menu", $existing_menu[0]->id);
+ $temp_position = $one_menu->order_by;
+ $one_menu->order_by = $second_menu->order_by;
+ $second_menu->order_by = $temp_position;
+ $one_menu->save();
+ $second_menu->save();
+ message::success(t("Menu %menu_title moved up", array("menu_title" => $one_menu->title)));
+ log::success("custom_menus", t("Menu %menu_title moved up", array("menu_title" => $one_menu->title)));
+ }
+ }
+ url::redirect("admin/custom_menus");
+ }
+
+ public function move_menu_down($id) {
+ // Move the specified menu item down one position.
+ $one_menu = ORM::factory("custom_menu", $id);
+ if ($one_menu->loaded()) {
+ $existing_menu = ORM::factory("custom_menu")
+ ->where("parent_id", "=", $one_menu->parent_id)
+ ->where("order_by", ">", $one_menu->order_by)
+ ->order_by("order_by", "ASC")
+ ->find_all(1);
+ if (count($existing_menu) > 0) {
+ $second_menu = ORM::factory("custom_menu", $existing_menu[0]->id);
+ $temp_position = $one_menu->order_by;
+ $one_menu->order_by = $second_menu->order_by;
+ $second_menu->order_by = $temp_position;
+ $one_menu->save();
+ $second_menu->save();
+ message::success(t("Menu %menu_title moved down", array("menu_title" => $one_menu->title)));
+ log::success("custom_menus", t("Menu %menu_title moved down", array("menu_title" => $one_menu->title)));
+ }
+ }
+ url::redirect("admin/custom_menus");
+ }
+}
diff --git a/3.1/modules/custom_menus/helpers/custom_menus_event.php b/3.1/modules/custom_menus/helpers/custom_menus_event.php
new file mode 100644
index 00000000..28d8632b
--- /dev/null
+++ b/3.1/modules/custom_menus/helpers/custom_menus_event.php
@@ -0,0 +1,75 @@
+get("content_menu")
+ ->append(Menu::factory("link")
+ ->id("custom_menus")
+ ->label(t("Custom Menus Manager"))
+ ->url(url::site("admin/custom_menus")));
+ }
+
+ static function site_menu($menu, $theme) {
+ // Add user definied menu and sub-menu items to the site menu.
+ $existing_menu = ORM::factory("custom_menu")
+ ->where("parent_id", "=", "0")
+ ->order_by("order_by", "DESC")
+ ->find_all();
+ if (count($existing_menu) > 0) {
+ foreach ($existing_menu as $one_menu) {
+ if ($one_menu->url == "") {
+ $menu->add_after("home", $new_menu = Menu::factory("submenu")
+ ->id("custom_menus-" . $one_menu->id)
+ ->label(t($one_menu->title)));
+ custom_menus_event::add_sub_menus($one_menu->id, $new_menu);
+ } else {
+ $menu->add_after("home", Menu::factory("link")
+ ->id("custom_menus-" . $one_menu->id)
+ ->label(t($one_menu->title))
+ ->url($one_menu->url));
+ }
+ }
+ }
+ }
+
+ function add_sub_menus($parent_id, $parent_menu) {
+ // Populate the menu bar with any sub-menu items on the current menu ($parent_menu).
+ $existing_menu = ORM::factory("custom_menu")
+ ->where("parent_id", "=", $parent_id)
+ ->order_by("order_by", "ASC")
+ ->find_all();
+ if (count($existing_menu) > 0) {
+ foreach ($existing_menu as $one_menu) {
+ if ($one_menu->url == "") {
+ $parent_menu->append($new_menu = Menu::factory("submenu")
+ ->id("custom_menus-" . $one_menu->id)
+ ->label(t($one_menu->title)));
+ custom_menus_event::add_sub_menus($one_menu->id, $new_menu);
+ } else {
+ $parent_menu->append(Menu::factory("link")
+ ->id("custom_menus-" . $one_menu->id)
+ ->label(t($one_menu->title))
+ ->url($one_menu->url));
+ }
+ }
+ }
+ }
+}
diff --git a/3.1/modules/custom_menus/helpers/custom_menus_installer.php b/3.1/modules/custom_menus/helpers/custom_menus_installer.php
new file mode 100644
index 00000000..39021efb
--- /dev/null
+++ b/3.1/modules/custom_menus/helpers/custom_menus_installer.php
@@ -0,0 +1,37 @@
+query("CREATE TABLE IF NOT EXISTS {custom_menus} (
+ `id` int(9) NOT NULL auto_increment,
+ `title` varchar(255) default NULL,
+ `url` text default NULL,
+ `parent_id` int(9) NOT NULL default 0,
+ `order_by` int(9) NOT NULL default 0,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY(`id`))
+ DEFAULT CHARSET=utf8;");
+
+ // Set the module version number.
+ module::set_version("custom_menus", 1);
+ }
+}
diff --git a/3.1/modules/custom_menus/models/custom_menu.php b/3.1/modules/custom_menus/models/custom_menu.php
new file mode 100644
index 00000000..475ad99b
--- /dev/null
+++ b/3.1/modules/custom_menus/models/custom_menu.php
@@ -0,0 +1,21 @@
+
+
+
= t("Manage menus") ?>
+
+
diff --git a/3.1/modules/database_info/module.info b/3.1/modules/database_info/module.info
index cdf8479a..8cc35d27 100644
--- a/3.1/modules/database_info/module.info
+++ b/3.1/modules/database_info/module.info
@@ -1,3 +1,7 @@
name = "Database Info"
description = "View information about your Gallery 3 database on the admin dashboard."
version = 1
+author_name = "rWatcher"
+author_url = "http://codex.gallery2.org/User:RWatcher"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:database_info"
+discuss_url = "http://gallery.menalto.com/node/95320"
diff --git a/3.1/modules/developer/module.info b/3.1/modules/developer/module.info
index b293ef0b..b62a6b60 100644
--- a/3.1/modules/developer/module.info
+++ b/3.1/modules/developer/module.info
@@ -1,3 +1,7 @@
name = Developer
description = "Tools to assist module and theme developers"
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:developer"
+discuss_url = "http://gallery.menalto.com/forum_module_developer"
diff --git a/3.1/modules/displaytags/module.info b/3.1/modules/displaytags/module.info
index d8458f10..20fba34b 100644
--- a/3.1/modules/displaytags/module.info
+++ b/3.1/modules/displaytags/module.info
@@ -1,3 +1,7 @@
name = "DisplayTags"
description = "Display all tags for the current photo/album."
version = 1
+author_name = "rWatcher"
+author_url = "http://codex.gallery2.org/User:RWatcher"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:displaytags"
+discuss_url = "http://gallery.menalto.com/node/89093"
diff --git a/3.1/modules/downloadalbum/module.info b/3.1/modules/downloadalbum/module.info
index 11c52ba2..f547fd4a 100644
--- a/3.1/modules/downloadalbum/module.info
+++ b/3.1/modules/downloadalbum/module.info
@@ -1,3 +1,7 @@
name = "DownloadAlbum"
description = "Displays a link to download a ZIP archive of the current album."
version = 2
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:downloadalbum"
+discuss_url = "http://gallery.menalto.com/forum_module_downloadalbum"
diff --git a/3.1/modules/downloadfullsize/module.info b/3.1/modules/downloadfullsize/module.info
index 6c732c9d..b2cc3915 100644
--- a/3.1/modules/downloadfullsize/module.info
+++ b/3.1/modules/downloadfullsize/module.info
@@ -1,3 +1,7 @@
name = "DownloadFullsize"
description = "Displays a link to download the fullsize version of the current photo."
version = 1
+author_name = "rWatcher"
+author_url = "http://codex.gallery2.org/User:RWatcher"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:downloadfullsize"
+discuss_url = "http://gallery.menalto.com/node/103278"
diff --git a/3.1/modules/dynamic/controllers/dynamic.php b/3.1/modules/dynamic/controllers/dynamic.php
index 6d7e3062..10a7a6f5 100644
--- a/3.1/modules/dynamic/controllers/dynamic.php
+++ b/3.1/modules/dynamic/controllers/dynamic.php
@@ -30,17 +30,17 @@ class Dynamic_Controller extends Controller {
$page = Input::instance()->get("page", "1");
$album_defn = unserialize(module::get_var("dynamic", $album));
- $children_count = $album_defn->limit;
- if (empty($children_count)) {
- $children_count = ORM::factory("item")
- ->viewable()
- ->where("type", "!=", "album")
- ->count_all();
+ $display_limit = $album_defn->limit;
+ $children_count = ORM::factory("item")
+ ->viewable()
+ ->where("type", "!=", "album")
+ ->count_all();
+ if (!empty($display_limit)) {
+ $children_count = min($children_count, $display_limit);
}
- $offset = ($page-1) * $page_size;
-
- $max_pages = ceil($children_count / $page_size);
+ $offset = ($page - 1) * $page_size;
+ $max_pages = max(ceil($children_count / $page_size), 1);
// Make sure that the page references a valid offset
if ($page < 1 || ($children_count && $page > ceil($children_count / $page_size))) {
diff --git a/3.1/modules/dynamic/module.info b/3.1/modules/dynamic/module.info
index 89778d48..3e2bae30 100644
--- a/3.1/modules/dynamic/module.info
+++ b/3.1/modules/dynamic/module.info
@@ -1,3 +1,7 @@
name = "Dynamic"
description = "Adds the Recent Changes and Most Viewed dynamic albums"
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:dynamic"
+discuss_url = "http://gallery.menalto.com/forum_module_dynamic"
diff --git a/3.1/modules/ecard/controllers/ecard.php b/3.1/modules/ecard/controllers/ecard.php
index 21a87080..8e1a389b 100644
--- a/3.1/modules/ecard/controllers/ecard.php
+++ b/3.1/modules/ecard/controllers/ecard.php
@@ -17,106 +17,108 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
-
+
class Ecard_Controller extends Controller {
- /**
- * Send the ecard.
- */
- public function send($id) {
- $item = ORM::factory("item", $id);
- access::required("view", $item);
- if (!ecard::can_send_ecard()) {
- access::forbidden();
- }
- $form = ecard::get_send_form($item);
- try {
- $valid = $form->validate();
- } catch (ORM_Validation_Exception $e) {
- // Translate ORM validation errors into form error messages
- foreach ($e->validation->errors() as $key => $error) {
- $form->edit_item->inputs[$key]->add_error($error, 1);
- }
- $valid = false;
- }
-
- if ($valid) {
- $to_array = explode(",",$form->send_ecard->inputs["to_email"]->value);
- foreach($to_array as $to) {
- $v = new View("ecard_email.html");
- $v->item = $item;
- $v->subject = module::get_var("ecard", "subject");
- $from_name = $form->send_ecard->from_name->value;
- $bcc = module::get_var("ecard", "bcc");
- if($form->send_ecard->send_to_self->checked == true) {
- $cc = $form->send_ecard->inputs["from_email"]->value;
- }
- $v->message = t(module::get_var("ecard", "message"), array("fromname" => $from_name));
- $v->custom_message = $form->send_ecard->text->value;
- $v->image = $item->name;
- $from = $form->send_ecard->inputs["from_email"]->value;
- $headers = array("from" => $from_name."<".$from.">", "to" => $to, "subject" => module::get_var("ecard", "subject"));
- require_once(MODPATH. "ecard/lib/mime.php");
- $mime = new Mail_mime("\n");
- $mime->setHTMLBody($v->render());
- if($form->send_ecard->send_fresh->checked == true) {
- $tmpfile = tempnam(TMPPATH, "clean");
- if($form->send_ecard->send_thumbnail->checked == true) {
- $options = array("width" => module::get_var("gallery", "thumb_size"), "height" => module::get_var("gallery", "thumb_size"), "master" => Image::AUTO);
- gallery_graphics::resize($item->file_path(), $tmpfile, $options, $item);
- $mime->addHTMLImage($tmpfile,$item->mime_type,$item->name);
- } else {
- $options = array("width" => module::get_var("gallery", "resize_size"), "height" => module::get_var("gallery", "resize_size"), "master" => Image::AUTO);
- gallery_graphics::resize($item->file_path(), $tmpfile, $options, $item);
- $mime->addHTMLImage($tmpfile,$item->mime_type,$item->name);
- }
- } else {
- if($form->send_ecard->send_thumbnail->checked == true) {
- $mime->addHTMLImage($item->thumb_path(),$item->mime_type,$item->name);
- } else {
- $mime->addHTMLImage($item->resize_path(),$item->mime_type,$item->name);
- }
- }
- $body = $mime->get(array('html_charset' => 'UTF-8', 'text_charset' => 'UTF-8','text_encoding' => '8bit','head_charset' => 'UTF-8'));
- self::_notify($headers['to'], $headers['from'], $headers['subject'], $item, $body, $mime->headers(), $bcc, $cc);
+ /**
+ * Send the ecard.
+ */
+ public function send($id) {
+ $item = ORM::factory("item", $id);
+ access::required("view", $item);
+ if (!ecard::can_send_ecard()) {
+ access::forbidden();
+ }
+ $form = ecard::get_send_form($item);
+ try {
+ $valid = $form->validate();
+ } catch (ORM_Validation_Exception $e) {
+ // Translate ORM validation errors into form error messages
+ foreach ($e->validation->errors() as $key => $error) {
+ $form->edit_item->inputs[$key]->add_error($error, 1);
+ }
+ $valid = false;
+ }
+
+ if ($valid) {
+ $v = new View("ecard_email.html");
+ $v->item = $item;
+ $v->subject = module::get_var("ecard", "subject");
+ $from_name = $form->send_ecard->from_name->value;
+ $bcc = module::get_var("ecard", "bcc");
+ if($form->send_ecard->send_to_self->checked == true) {
+ $cc = $form->send_ecard->inputs["from_email"]->value;
+ }
+ $v->message = t(module::get_var("ecard", "message"), array("fromname" => $from_name));
+ $v->custom_message = $form->send_ecard->text->value;
+ $v->image = $item->name;
+ $from = $form->send_ecard->inputs["from_email"]->value;
+
+ require_once(MODPATH. "ecard/lib/mime.php");
+ $mime = new Mail_mime("\n");
+ $mime->setHTMLBody($v->render());
+ if($form->send_ecard->send_fresh->checked == true) {
+ $tmpfile = tempnam(TMPPATH, "clean");
+ if($form->send_ecard->send_thumbnail->checked == true) {
+ $options = array("width" => module::get_var("gallery", "thumb_size"), "height" => module::get_var("gallery", "thumb_size"), "master" => Image::AUTO);
+ gallery_graphics::resize($item->file_path(), $tmpfile, $options, $item);
+ $mime->addHTMLImage($tmpfile,$item->mime_type,$item->name);
+ } else {
+ $options = array("width" => module::get_var("gallery", "resize_size"), "height" => module::get_var("gallery", "resize_size"), "master" => Image::AUTO);
+ gallery_graphics::resize($item->file_path(), $tmpfile, $options, $item);
+ $mime->addHTMLImage($tmpfile,$item->mime_type,$item->name);
+ }
+ } else {
+ if($form->send_ecard->send_thumbnail->checked == true) {
+ $mime->addHTMLImage($item->thumb_path(),$item->mime_type,$item->name);
+ } else {
+ $mime->addHTMLImage($item->resize_path(),$item->mime_type,$item->name);
+ }
+ }
+ $body = $mime->get(array('html_charset' => 'UTF-8', 'text_charset' => 'UTF-8','text_encoding' => '8bit','head_charset' => 'UTF-8'));
+
+ $to_array = explode(",",$form->send_ecard->inputs["to_email"]->value);
+ foreach($to_array as $to) {
+ $headers = array("from" => $from_name."<".$from.">", "to" => trim($to), "subject" => module::get_var("ecard", "subject"));
+ self::_notify($headers['to'], $headers['from'], $headers['subject'], $item, $body, $mime->headers(), $bcc, $cc);
+ }
+ unlink($tmpfile);
+ message::success("eCard successfully sent to ".$form->send_ecard->inputs["to_email"]->value);
+ json::reply(array("result" => "success"));
+ } else {
+ json::reply(array("result" => "error", "html" => (string) $form));
}
- unlink($tmpfile);
- message::success("eCard successfully sent");
- json::reply(array("result" => "success"));
- } else {
- json::reply(array("result" => "error", "html" => (string) $form));
}
- }
- /**
- * Present a form for sending a new ecard.
- */
- public function form_send($item_id) {
- $item = ORM::factory("item", $item_id);
- access::required("view", $item);
- if (!ecard::can_send_ecard()) {
- access::forbidden();
- }
- $v_form = new View("ecard_form.html");
- $v_form->item_id = $item_id;
- print $v_form->render();
- }
- private static function _notify($to, $from, $subject, $item, $text, $headers, $bcc, $cc) {
- $sendmail = Sendmail::factory();
- $sendmail
- ->to($to)
+ /**
+ * Present a form for sending a new ecard.
+ */
+ public function form_send($item_id) {
+ $item = ORM::factory("item", $item_id);
+ access::required("view", $item);
+ if (!ecard::can_send_ecard()) {
+ access::forbidden();
+ }
+ $v_form = new View("ecard_form.html");
+ $v_form->item_id = $item_id;
+ print $v_form->render();
+ }
+ private static function _notify($to, $from, $subject, $item, $text, $headers, $bcc, $cc) {
+ $sendmail = Sendmail::factory();
+ $sendmail
+ ->to($to)
->from($from)
- ->subject($subject);
- if(isset($bcc)) {
- $sendmail->header("bcc",$bcc);
- }
- if(isset($cc)) {
- $sendmail->header("cc",$cc);
- }
- foreach($headers as $key => $value) {
- $sendmail->header($key,$value);
- }
- $sendmail
+ ->subject($subject);
+ if(isset($bcc)) {
+ $sendmail->header("bcc",$bcc);
+ }
+ if(isset($cc)) {
+ $sendmail->header("cc",$cc);
+ }
+ foreach($headers as $key => $value) {
+ $sendmail->header($key,$value);
+ }
+ $sendmail
->message($text)
- ->send();
- return;
- }
+ ->send();
+ return;
+ }
}
diff --git a/3.1/modules/ecard/module.info b/3.1/modules/ecard/module.info
index d5b27c70..2300f1ad 100644
--- a/3.1/modules/ecard/module.info
+++ b/3.1/modules/ecard/module.info
@@ -1,3 +1,7 @@
name = "E-Card"
description = "Send a photo as a postcard"
version = 11
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:ecard"
+discuss_url = "http://gallery.menalto.com/forum_module_ecard"
diff --git a/3.1/modules/editcreation/module.info b/3.1/modules/editcreation/module.info
index 3b98c089..926f9485 100755
--- a/3.1/modules/editcreation/module.info
+++ b/3.1/modules/editcreation/module.info
@@ -1,3 +1,7 @@
name = "Edit Creation"
description = "Manually edit the creation date of an item in Gallery."
version = 2
+author_name = "rWatcher"
+author_url = "http://codex.gallery2.org/User:RWatcher"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:editcreation"
+discuss_url = "http://gallery.menalto.com/node/90667"
diff --git a/3.1/modules/embed_videos/module.info b/3.1/modules/embed_videos/module.info
index 28c98439..35220302 100644
--- a/3.1/modules/embed_videos/module.info
+++ b/3.1/modules/embed_videos/module.info
@@ -1,3 +1,7 @@
name = "Embed Videos"
description = "Allows users to embed videos"
version = 2
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:embed_videos"
+discuss_url = "http://gallery.menalto.com/forum_module_embed_videos"
diff --git a/3.1/modules/embedlinks/controllers/admin_embedlinks.php b/3.1/modules/embedlinks/controllers/admin_embedlinks.php
index f25f97e8..89d98dcd 100644
--- a/3.1/modules/embedlinks/controllers/admin_embedlinks.php
+++ b/3.1/modules/embedlinks/controllers/admin_embedlinks.php
@@ -39,7 +39,8 @@ class Admin_EmbedLinks_Controller extends Admin_Controller {
$BBCodeButton = false;
$FullURLButton = false;
$InPageLinks = false;
-
+ $ToolbarLinks = false;
+
for ($i = 0; $i < count($linkOpts_array); $i++) {
if ($linkOpts_array[$i] == "HTMLCode") {
$HTMLButton = true;
@@ -55,15 +56,19 @@ class Admin_EmbedLinks_Controller extends Admin_Controller {
if ($displayType_array[$i] == "InPageLinks") {
$InPageLinks = true;
}
+ if ($displayType_array[$i] == "ToolbarLinks") {
+ $ToolbarLinks = true;
+ }
}
-
+
// Save Settings.
module::set_var("embedlinks", "HTMLCode", $HTMLButton);
module::set_var("embedlinks", "BBCode", $BBCodeButton);
module::set_var("embedlinks", "FullURL", $FullURLButton);
module::set_var("embedlinks", "InPageLinks", $InPageLinks);
+ module::set_var("embedlinks", "ToolbarLinks", $ToolbarLinks);
message::success(t("Your Selection Has Been Saved."));
-
+
// Load Admin page.
$view = new Admin_View("admin.html");
$view->content = new View("admin_embedlinks.html");
@@ -83,7 +88,11 @@ class Admin_EmbedLinks_Controller extends Admin_Controller {
// Make an array for the different methods of displaying the links.
$linkDisplays["InPageLinks"] = array(t("Show Links In The Actual Page"), module::get_var("embedlinks", "InPageLinks"));
-
+
+ // Make an array for the different methods of displaying the links.
+ $linkDisplays["InPageLinks"] = array(t("Show Links In The Actual Page"), module::get_var("embedlinks", "InPageLinks"));
+ $linkDisplays["ToolbarLinks"] = array(t("Display toolbar image for HTML/BBCode/URLs links"), module::get_var("embedlinks", "ToolbarLinks"));
+
// Setup a few checkboxes on the form.
$add_links = $form->group("EmbedLinks");
$add_links->checklist("LinkCodeTypeOptions")
@@ -97,4 +106,4 @@ class Admin_EmbedLinks_Controller extends Admin_Controller {
// Return the newly generated form.
return $form;
}
-}
\ No newline at end of file
+}
diff --git a/3.1/modules/embedlinks/controllers/embedlinks.php b/3.1/modules/embedlinks/controllers/embedlinks.php
index 53db22a1..5a7b70cb 100644
--- a/3.1/modules/embedlinks/controllers/embedlinks.php
+++ b/3.1/modules/embedlinks/controllers/embedlinks.php
@@ -18,9 +18,15 @@
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
class EmbedLinks_Controller extends Controller {
- /**
- * Display the EXIF data for an item.
- */
+ public function showlinks($item_id) {
+ // Generate the Dialog Box for all HTML/BBCode/URLs available for $item.
+ $item = ORM::factory("item", $item_id);
+ access::required("view", $item);
+ $view = new View("embedlinks_alllinksdialog.html");
+ $view->item_id = $item_id;
+ print $view;
+ }
+
public function showhtml($item_id) {
// Generate the Dialog Box for HTML links.
$item = ORM::factory("item", $item_id);
@@ -31,21 +37,46 @@ class EmbedLinks_Controller extends Controller {
$linkArray[0] = array("Text:", "
type}s/{$item->id}") . "">Click Here ");
$linkArray[1] = array("Thumbnail:", "
type}s/{$item->id}") . ""> thumb_url(true) . ""> ");
$linkTitles[0] = array("Link To This Album:", 2);
-
+
// If the item is a movie, don't display resize links, do display an embed link.
} elseif ($item->is_movie()) {
// Link to the current page.
$linkArray[0] = array("Text:", "
type}s/{$item->id}") . "">Click Here ");
$linkArray[1] = array("Thumbnail:", "
type}s/{$item->id}") . ""> thumb_url(true) . ""> ");
$linkTitles[0] = array("Link To This Page:", 2);
-
+
// If the visitor has suficient privlidges to see the fullsized
// version of the current image, then display links to it.
if (access::can("view_full", $item)) {
$linkArray[2] = array("Text:", "
file_url(true) . "">Click Here ");
$linkArray[3] = array("Thumbnail:", "
file_url(true) . ""> thumb_url(true) . ""> ");
- $linkArray[4] = array("Embed:", "
width . "" height="" . $item->height . "" data="" . url::abs_file("lib/flowplayer.swf") . "" type="application/x-shockwave-flash"> ");
- $linkTitles[1] = array("Link To The Video File:", 3);
+
+ // Figure out what the path of the .flv file is.
+ $str_movie_path = $item->file_url(true);
+ if (module::is_active("videos")) {
+ $items_video = ORM::factory("items_video")
+ ->where("item_id", "=", $item->id)
+ ->find();
+ if ($items_video->loaded()) {
+ if (file_exists($item->resize_path() . ".flv")) {
+ $str_movie_path = str_replace("?m=", ".flv?m=", $item->resize_url(true));
+ } else {
+ $str_movie_path = "";
+ }
+ }
+ }
+
+ if ($str_movie_path != "") {
+ $linkArray[4] = array("Embed:", "
width . "" height="" . $item->height . "">width .
+ "" height="" . $item->height . "" src="" . url::abs_file("lib/flowplayer.swf") . "" flashvars=" .
+ "'config={"clip":"" . $str_movie_path . ""}'/> ");
+ $linkTitles[1] = array("Link To The Video File:", 3);
+ } else {
+ $linkTitles[1] = array("Link To The Video File:", 2);
+ }
}
// Or else assume the item is a photo.
@@ -61,7 +92,7 @@ class EmbedLinks_Controller extends Controller {
$linkArray[4] = array("Thumbnail:", "
resize_url(true) . ""> thumb_url(true) . ""> ");
$linkArray[5] = array("Image:", "
resize_url(true) . "">");
$linkTitles[1] = array("Link To The Resized Image:", 3);
-
+
// If the visitor has suficient privlidges to see the fullsized
// version of the current image, then display links to it.
if (access::can("view_full", $item)) {
@@ -71,7 +102,7 @@ class EmbedLinks_Controller extends Controller {
$linkTitles[2] = array("Link To The Full Size Image:", 3);
}
}
-
+
$view = new View("embedlinks_htmldialog.html");
$view->titles = $linkTitles;
$view->details = $linkArray;
@@ -80,22 +111,22 @@ class EmbedLinks_Controller extends Controller {
public function showbbcode($item_id) {
// Generate the Dialog Box for BBCode links.
- $item = ORM::factory("item", $item_id);
+ $item = ORM::factory("item", $item_id);
access::required("view", $item);
-
+
// If the current page is an album, only display two links.
if ($item->is_album()) {
$linkArray[0] = array("Text:", "[url=" . url::abs_site("{$item->type}s/{$item->id}") . "]Click Here[/url]");
$linkArray[1] = array("Thumbnail:", "[url=" . url::abs_site("{$item->type}s/{$item->id}") . "][img]" . $item->thumb_url(true) . "[/img][/url]");
$linkTitles[0] = array("Link To This Album:", 2);
-
+
// If the item is a movie, don't display resize links.
} elseif ($item->is_movie()) {
// Link to the current page.
$linkArray[0] = array("Text:", "[url=" . url::abs_site("{$item->type}s/{$item->id}") . "]Click Here[/url]");
$linkArray[1] = array("Thumbnail:", "[url=" . url::abs_site("{$item->type}s/{$item->id}") . "][img]" . $item->thumb_url(true) . "[/img][/url]");
$linkTitles[0] = array("Link To This Page:", 2);
-
+
// If the visitor has suficient privlidges to see the fullsized
// version of the current image, then display links to it.
if (access::can("view_full", $item)) {
@@ -103,7 +134,7 @@ class EmbedLinks_Controller extends Controller {
$linkArray[3] = array("Thumbnail:", "[url=" . $item->file_url(true) . "][img]" . $item->thumb_url(true) . "[/img][/url]");
$linkTitles[1] = array("Link To The Video File:", 2);
}
-
+
// Or else assume the item is a photo.
} else {
// Link to the current page.
@@ -117,7 +148,7 @@ class EmbedLinks_Controller extends Controller {
$linkArray[4] = array("Thumbnail:", "[url=" . $item->resize_url(true) . "][img]" . $item->thumb_url(true) . "[/img][/url]");
$linkArray[5] = array("Image:", "[img]" . $item->resize_url(true) . "[/img]");
$linkTitles[1] = array("Link To The Resized Image:", 3);
-
+
// If the visitor has suficient privlidges to see the fullsized
// version of the current image, then display links to it.
if (access::can("view_full", $item)) {
@@ -127,7 +158,7 @@ class EmbedLinks_Controller extends Controller {
$linkTitles[2] = array("Link To The Full Size Image:", 3);
}
}
-
+
$view = new View("embedlinks_bbcodedialog.html");
$view->titles = $linkTitles;
$view->details = $linkArray;
@@ -136,9 +167,9 @@ class EmbedLinks_Controller extends Controller {
public function showfullurl($item_id) {
// Generate the Dialog Box for the URLs to the items thumb, resize and fullsize image.
- $item = ORM::factory("item", $item_id);
+ $item = ORM::factory("item", $item_id);
access::required("view", $item);
-
+
// If the current page is an album, only display a URL and thumnail fields.
if ($item->is_album()) {
$linkArray[0] = array("Album URL:", url::abs_site("{$item->type}s/{$item->id}"));
@@ -150,7 +181,7 @@ class EmbedLinks_Controller extends Controller {
// Link to the current page.
$linkArray[0] = array("This Page:", url::abs_site("{$item->type}s/{$item->id}"));
$linkArray[1] = array("Thumbnail:", $item->thumb_url(true));
-
+
// If the visitor has suficient privlidges to see the fullsized
// version of the current image, then display its URL.
if (access::can("view_full", $item)) {
@@ -159,14 +190,14 @@ class EmbedLinks_Controller extends Controller {
} else {
$linkTitles[0] = array("URLs:", 2);
}
-
+
// Or else assume the item is a photo.
} else {
// Link to the current page.
$linkArray[0] = array("This Page:", url::abs_site("{$item->type}s/{$item->id}"));
$linkArray[1] = array("Thumbnail:", $item->thumb_url(true));
$linkArray[2] = array("Resized:", $item->resize_url(true));
-
+
// If the visitor has suficient privlidges to see the fullsized
// version of the current image, then display its URL.
if (access::can("view_full", $item)) {
@@ -176,11 +207,10 @@ class EmbedLinks_Controller extends Controller {
$linkTitles[0] = array("URLs:", 3);
}
}
-
+
$view = new View("embedlinks_fullurldialog.html");
$view->titles = $linkTitles;
$view->details = $linkArray;
print $view;
}
-
}
diff --git a/3.1/modules/embedlinks/css/embedlinks_menu.css b/3.1/modules/embedlinks/css/embedlinks_menu.css
new file mode 100644
index 00000000..6a4af408
--- /dev/null
+++ b/3.1/modules/embedlinks/css/embedlinks_menu.css
@@ -0,0 +1,3 @@
+#g-view-menu #g-embedlinks-link {
+ background-image: url('../images/ico-view-embedlinks.png');
+}
diff --git a/3.1/modules/embedlinks/helpers/embedlinks_block.php b/3.1/modules/embedlinks/helpers/embedlinks_block.php
index 0985007e..4f35280d 100644
--- a/3.1/modules/embedlinks/helpers/embedlinks_block.php
+++ b/3.1/modules/embedlinks/helpers/embedlinks_block.php
@@ -47,7 +47,7 @@ class embedlinks_block_Core {
$block->title = t("Links");
$block->content = new View("embedlinks_album_block.html");
}
- break;
+ break;
}
return $block;
diff --git a/3.1/modules/embedlinks/helpers/embedlinks_event.php b/3.1/modules/embedlinks/helpers/embedlinks_event.php
index 69699a09..bafe383d 100644
--- a/3.1/modules/embedlinks/helpers/embedlinks_event.php
+++ b/3.1/modules/embedlinks/helpers/embedlinks_event.php
@@ -25,4 +25,43 @@ class embedlinks_event_Core {
->label(t("EmbedLinks"))
->url(url::site("admin/embedlinks")));
}
+
+ static function album_menu($menu, $theme) {
+ // Display embedlinks toolbar icon, if the corresponding setting is enabled.
+ if (module::get_var("embedlinks", "ToolbarLinks") == true) {
+ $menu
+ ->append(Menu::factory("link")
+ ->id("embedlinks")
+ ->label(t("Link to this page"))
+ ->url(url::site("embedlinks/showlinks/" . $theme->item()->id))
+ ->css_class("g-dialog-link")
+ ->css_id("g-embedlinks-link"));
+ }
+ }
+
+ static function photo_menu($menu, $theme) {
+ // Display embedlinks toolbar icon, if the corresponding setting is enabled.
+ if (module::get_var("embedlinks", "ToolbarLinks") == true) {
+ $menu
+ ->append(Menu::factory("link")
+ ->id("embedlinks")
+ ->label(t("Link to this page"))
+ ->url(url::site("embedlinks/showlinks/" . $theme->item()->id))
+ ->css_class("g-dialog-link")
+ ->css_id("g-embedlinks-link"));
+ }
+ }
+
+ static function movie_menu($menu, $theme) {
+ // Display embedlinks toolbar icon, if the corresponding setting is enabled.
+ if (module::get_var("embedlinks", "ToolbarLinks") == true) {
+ $menu
+ ->append(Menu::factory("link")
+ ->id("embedlinks")
+ ->label(t("Link to this page"))
+ ->url(url::site("embedlinks/showlinks/" . $theme->item()->id))
+ ->css_class("g-dialog-link")
+ ->css_id("g-embedlinks-link"));
+ }
+ }
}
diff --git a/3.1/modules/embedlinks/helpers/embedlinks_installer.php b/3.1/modules/embedlinks/helpers/embedlinks_installer.php
new file mode 100644
index 00000000..3e98d59a
--- /dev/null
+++ b/3.1/modules/embedlinks/helpers/embedlinks_installer.php
@@ -0,0 +1,42 @@
+css("embedlinks_menu.css");
+ }
+
static function photo_bottom($theme) {
// If the current item is a photo and displaying "In Page" links
// is enabled, then insert HTML/BBCode links into the bottom
diff --git a/3.1/modules/embedlinks/images/ico-view-embedlinks.png b/3.1/modules/embedlinks/images/ico-view-embedlinks.png
new file mode 100644
index 00000000..c5a66dd8
Binary files /dev/null and b/3.1/modules/embedlinks/images/ico-view-embedlinks.png differ
diff --git a/3.1/modules/embedlinks/module.info b/3.1/modules/embedlinks/module.info
index a2917bcd..e6b7f8bf 100644
--- a/3.1/modules/embedlinks/module.info
+++ b/3.1/modules/embedlinks/module.info
@@ -1,3 +1,7 @@
name = "EmbedLinks"
description = "Display BBCode and HTML code to embed links to albums/images into other web pages."
-version = 1
+version = 2
+author_name = "rWatcher"
+author_url = "http://codex.gallery2.org/User:RWatcher"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:embedlinks"
+discuss_url = "http://gallery.menalto.com/node/88322"
diff --git a/3.1/modules/embedlinks/views/embedlinks_alllinksdialog.html.php b/3.1/modules/embedlinks/views/embedlinks_alllinksdialog.html.php
new file mode 100644
index 00000000..a1cd4035
--- /dev/null
+++ b/3.1/modules/embedlinks/views/embedlinks_alllinksdialog.html.php
@@ -0,0 +1,14 @@
+
+
+
= t("Link to this page") ?>
+
diff --git a/3.1/modules/embedlinks/views/embedlinks_photo_block.html.php b/3.1/modules/embedlinks/views/embedlinks_photo_block.html.php
index 97bb51c0..19d67596 100644
--- a/3.1/modules/embedlinks/views/embedlinks_photo_block.html.php
+++ b/3.1/modules/embedlinks/views/embedlinks_photo_block.html.php
@@ -57,10 +57,27 @@ input[type="text"] {
} ?>
if ($item->is_movie()) { ?>
-
- = t("Embed:") ?>
- " type="application/x-shockwave-flash"> " /> " onclick="this.focus(); this.select();" readonly>
-
+
+ $str_movie_path = $item->file_url(true);
+ if (module::is_active("videos")) {
+ $items_video = ORM::factory("items_video")
+ ->where("item_id", "=", $item->id)
+ ->find();
+ if ($items_video->loaded()) {
+ if (file_exists($item->resize_path() . ".flv")) {
+ $str_movie_path = str_replace("?m=", ".flv?m=", $item->resize_url(true));
+ } else {
+ $str_movie_path = "";
+ }
+ }
+ }
+ ?>
+ if ($str_movie_path != "") { ?>
+
+ = t("Embed:") ?>
+ " />width ?>" height="= $item->height ?>" src="= url::abs_file("lib/flowplayer.swf") ?>" flashvars='config={"clip":"= $str_movie_path ?>"}'/>" onclick="this.focus(); this.select();" readonly>
+
+ } ?>
} ?>
} ?>
@@ -198,4 +215,4 @@ input[type="text"] {
- } ?>
\ No newline at end of file
+ } ?>
diff --git a/3.1/modules/embedlinks/views/embedlinks_sidebar.html.php b/3.1/modules/embedlinks/views/embedlinks_sidebar.html.php
index 21d8b7f3..0991382a 100644
--- a/3.1/modules/embedlinks/views/embedlinks_sidebar.html.php
+++ b/3.1/modules/embedlinks/views/embedlinks_sidebar.html.php
@@ -21,4 +21,4 @@
= t("Show URLs") ?>
- } ?>
\ No newline at end of file
+ } ?>
diff --git a/3.1/modules/exif_gps/helpers/exif_gps_installer.php b/3.1/modules/exif_gps/helpers/exif_gps_installer.php
index ef5c5645..9dc77968 100644
--- a/3.1/modules/exif_gps/helpers/exif_gps_installer.php
+++ b/3.1/modules/exif_gps/helpers/exif_gps_installer.php
@@ -65,6 +65,14 @@ class exif_gps_installer {
site_status::clear("exif_gps_needs_exif");
}
+ static function can_activate() {
+ $messages = array();
+ if (!module::is_active("exif")) {
+ $messages["warn"][] = t("The EXIF_GPS module requires the EXIF module.");
+ }
+ return $messages;
+ }
+
static function uninstall() {
// Delete the GPS table before uninstalling.
$db = Database::instance();
diff --git a/3.1/modules/exif_gps/module.info b/3.1/modules/exif_gps/module.info
index 05a3aae3..ebde931e 100644
--- a/3.1/modules/exif_gps/module.info
+++ b/3.1/modules/exif_gps/module.info
@@ -1,3 +1,7 @@
name = "Exif GPS Data"
description = "Extract Exif GPS data from photos."
version = 2
+author_name = "rWatcher"
+author_url = "http://codex.gallery2.org/User:RWatcher"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:exif_gps"
+discuss_url = "http://gallery.menalto.com/node/94762"
diff --git a/3.1/modules/exif_gps/views/exif_gps_dynamic2_sidebar.html.php b/3.1/modules/exif_gps/views/exif_gps_dynamic2_sidebar.html.php
index 24b69acb..f4f95799 100644
--- a/3.1/modules/exif_gps/views/exif_gps_dynamic2_sidebar.html.php
+++ b/3.1/modules/exif_gps/views/exif_gps_dynamic2_sidebar.html.php
@@ -1,4 +1,8 @@
+
+ $latitude = 0;
+ $longitude = 0;
+?>
-
+
diff --git a/3.1/modules/exif_gps/views/exif_gps_dynamic_sidebar.html.php b/3.1/modules/exif_gps/views/exif_gps_dynamic_sidebar.html.php
index d5b497dc..ff28e101 100644
--- a/3.1/modules/exif_gps/views/exif_gps_dynamic_sidebar.html.php
+++ b/3.1/modules/exif_gps/views/exif_gps_dynamic_sidebar.html.php
@@ -19,4 +19,4 @@
google.setOnLoadCallback(initialize);
-
+
diff --git a/3.1/modules/exif_gps/views/exif_gps_map.html.php b/3.1/modules/exif_gps/views/exif_gps_map.html.php
index 6c8a59ee..95f6221c 100644
--- a/3.1/modules/exif_gps/views/exif_gps_map.html.php
+++ b/3.1/modules/exif_gps/views/exif_gps_map.html.php
@@ -62,14 +62,14 @@
infowindow=$counter; ?>.open(map,marker=$counter; ?>);
});
- if (module::get_var("exif_gps", "googlemap_max_autozoom") != "") : ?>
+ if (($max_autozoom = module::get_var("exif_gps", "googlemap_max_autozoom")) != "") : ?>
// If there is a maximum auto-zoom value, then set up an event to check the zoom
// level the first time it is changed, and adjust it if necessary.
// (if we call map.getZoom right after .fitBounds, getZoom will return the initial
// zoom level, not the auto zoom level, this way we get the auto zoomed value).
google.maps.event.addListener(map, 'zoom_changed', function() {
if (google_zoom_hack) {
- if (map.getZoom() > 18) map.setZoom(18);
+ if (map.getZoom() > = $max_autozoom ?>) map.setZoom(= $max_autozoom ?>);
google_zoom_hack = false;
}
});
diff --git a/3.1/modules/export_facebook/module.info b/3.1/modules/export_facebook/module.info
index 1f65154a..f7388b95 100644
--- a/3.1/modules/export_facebook/module.info
+++ b/3.1/modules/export_facebook/module.info
@@ -1,3 +1,7 @@
name = "export_facebook"
description = "Export Photos from Gallery 3 to Facebook."
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:export_facebook"
+discuss_url = "http://gallery.menalto.com/forum_module_export_facebook"
diff --git a/3.1/modules/favourites/module.info b/3.1/modules/favourites/module.info
index aa2df84a..a3d6b898 100644
--- a/3.1/modules/favourites/module.info
+++ b/3.1/modules/favourites/module.info
@@ -1,3 +1,7 @@
name = "Favourites"
description = "Allows users and guests to create favourite lists and then e-mail them to people."
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:favourites"
+discuss_url = "http://gallery.menalto.com/forum_module_favourites"
diff --git a/3.1/modules/gmaps/module.info b/3.1/modules/gmaps/module.info
index 12dd61d4..e524eb69 100644
--- a/3.1/modules/gmaps/module.info
+++ b/3.1/modules/gmaps/module.info
@@ -1,3 +1,7 @@
name = "Google Maps"
description = "Integrate with the Google Maps service"
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:gmaps"
+discuss_url = "http://gallery.menalto.com/forum_module_gmaps"
diff --git a/3.1/modules/google_analytics/module.info b/3.1/modules/google_analytics/module.info
index 6d42bf4b..ca5a51e3 100644
--- a/3.1/modules/google_analytics/module.info
+++ b/3.1/modules/google_analytics/module.info
@@ -1,3 +1,7 @@
name = "Google Analytics"
description = "Renders the Google Analytics Code at the end of the page. Written by 'mcp'."
version = 2
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:google_analytics"
+discuss_url = "http://gallery.menalto.com/forum_module_google_analytics"
diff --git a/3.1/modules/gwtorganize/module.info b/3.1/modules/gwtorganize/module.info
index 33a4f797..c56c0976 100644
--- a/3.1/modules/gwtorganize/module.info
+++ b/3.1/modules/gwtorganize/module.info
@@ -1,3 +1,7 @@
name = "GWT Organise"
description = "An alternative to organise and simple uploader making use of funky google technology."
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:gwtorganize"
+discuss_url = "http://gallery.menalto.com/forum_module_gwtorganize"
diff --git a/3.1/modules/highroller/module.info b/3.1/modules/highroller/module.info
index 9b573a98..7b89e9cb 100644
--- a/3.1/modules/highroller/module.info
+++ b/3.1/modules/highroller/module.info
@@ -1,3 +1,7 @@
name = "High Roller"
description = "Let users choose from a selection of ThemeRoller themes"
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:highroller"
+discuss_url = "http://gallery.menalto.com/forum_module_highroller"
diff --git a/3.1/modules/html_uploader/module.info b/3.1/modules/html_uploader/module.info
index f3dc5dc8..de2becbb 100644
--- a/3.1/modules/html_uploader/module.info
+++ b/3.1/modules/html_uploader/module.info
@@ -1,3 +1,7 @@
name = "HTML Uploader"
description = "Simple HTML uploader that replaces the Flash based uploader"
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:html_uploader"
+discuss_url = "http://gallery.menalto.com/forum_module_html_uploader"
diff --git a/3.1/modules/iptc/module.info b/3.1/modules/iptc/module.info
index 4cf38649..65060f87 100644
--- a/3.1/modules/iptc/module.info
+++ b/3.1/modules/iptc/module.info
@@ -1,3 +1,7 @@
name = "Iptc Data"
description = "Extract Iptc data and display it on photo pages."
version = 2
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:iptc"
+discuss_url = "http://gallery.menalto.com/forum_module_iptc"
diff --git a/3.1/modules/item_links/helpers/item_links_event.php b/3.1/modules/item_links/helpers/item_links_event.php
new file mode 100644
index 00000000..12cc94a1
--- /dev/null
+++ b/3.1/modules/item_links/helpers/item_links_event.php
@@ -0,0 +1,58 @@
+where("item_id", "=", $item->id)
+ ->find_all();
+
+ $existing_url = "";
+ if (count($item_url) > 0) {
+ $existing_url = $item_url[0]->url;
+ }
+ $form->edit_item
+ ->input("item_links_url")
+ ->label(t("Redirect to URL:"))
+ ->value($existing_url);
+ }
+
+ static function item_deleted($item) {
+ // Whenever an item is deleted, delete any corresponding data.
+ db::build()->delete("item_links")->where("item_id", "=", $item->id)->execute();
+ }
+
+ static function item_edit_form_completed($item, $form) {
+ // Update the database with any changes to the item_links field.
+ $record = ORM::factory("item_link")->where("item_id", "=", $item->id)->find();
+
+ if ($form->edit_item->item_links_url->value != "") {
+ if (!$record->loaded()) {
+ $record->item_id = $item->id;
+ }
+ $record->url = $form->edit_item->item_links_url->value;
+ $record->save();
+ } else {
+ db::build()->delete("item_links")->where("item_id", "=", $item->id)->execute();
+ }
+ }
+}
diff --git a/3.1/modules/item_links/helpers/item_links_installer.php b/3.1/modules/item_links/helpers/item_links_installer.php
new file mode 100644
index 00000000..f9d34d98
--- /dev/null
+++ b/3.1/modules/item_links/helpers/item_links_installer.php
@@ -0,0 +1,34 @@
+query("CREATE TABLE IF NOT EXISTS {item_links} (
+ `id` int(9) NOT NULL auto_increment,
+ `item_id` int(9) NOT NULL,
+ `url` text default NULL,
+ PRIMARY KEY (`id`),
+ KEY(`item_id`, `id`))
+ DEFAULT CHARSET=utf8;");
+
+ // Set the module's version number.
+ module::set_version("item_links", 1);
+ }
+}
diff --git a/3.1/modules/item_links/helpers/item_links_theme.php b/3.1/modules/item_links/helpers/item_links_theme.php
new file mode 100644
index 00000000..fbfcbb45
--- /dev/null
+++ b/3.1/modules/item_links/helpers/item_links_theme.php
@@ -0,0 +1,34 @@
+item()) {
+ $item_url = ORM::factory("item_link")
+ ->where("item_id", "=", $theme->item->id)
+ ->find_all();
+ if (count($item_url) > 0) {
+ url::redirect($item_url[0]->url);
+ }
+ }
+ return;
+ }
+}
diff --git a/3.1/modules/item_links/models/item_link.php b/3.1/modules/item_links/models/item_link.php
new file mode 100644
index 00000000..65335e27
--- /dev/null
+++ b/3.1/modules/item_links/models/item_link.php
@@ -0,0 +1,21 @@
+module == "tag") {
+ $data->messages["warn"][] = t("The MetaDescription module requires the Tags module.");
+ }
+ }
}
diff --git a/3.1/modules/metadescription/helpers/metadescription_installer.php b/3.1/modules/metadescription/helpers/metadescription_installer.php
index 6d7d540c..6609ecd9 100644
--- a/3.1/modules/metadescription/helpers/metadescription_installer.php
+++ b/3.1/modules/metadescription/helpers/metadescription_installer.php
@@ -28,6 +28,14 @@ class metadescription_installer {
site_status::clear("metadescription_needs_tag");
}
+ static function can_activate() {
+ $messages = array();
+ if (!module::is_active("tag")) {
+ $messages["warn"][] = t("The MetaDescription module requires the Tags module.");
+ }
+ return $messages;
+ }
+
static function uninstall() {
module::delete("metadescription");
}
diff --git a/3.1/modules/metadescription/helpers/metadescription_theme.php b/3.1/modules/metadescription/helpers/metadescription_theme.php
index 72ef29d0..2952e10a 100644
--- a/3.1/modules/metadescription/helpers/metadescription_theme.php
+++ b/3.1/modules/metadescription/helpers/metadescription_theme.php
@@ -42,7 +42,7 @@ class metadescription_theme_Core {
// Load the meta tags into the top of the page.
// @todo: metadescription_block.html requires an item so for now, don't render it unless we
// have one.
- if ($theme->item()) {
+ if ($theme->item() || $theme->tag()) {
$metaView = new View("metadescription_block.html");
$metaView->tags = $tagsItem;
return $metaView;
diff --git a/3.1/modules/metadescription/module.info b/3.1/modules/metadescription/module.info
index 19c2cd48..7010a0d1 100644
--- a/3.1/modules/metadescription/module.info
+++ b/3.1/modules/metadescription/module.info
@@ -1,3 +1,7 @@
name = "MetaDescription"
description = "Automatically generates and inserts KEYWORD and DESCRIPTION meta tags into any theme."
version = 1
+author_name = "rWatcher"
+author_url = "http://codex.gallery2.org/User:RWatcher"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:metadescription"
+discuss_url = "http://gallery.menalto.com/node/102477"
diff --git a/3.1/modules/minislideshow/controllers/admin_minislideshow.php b/3.1/modules/minislideshow/controllers/admin_minislideshow.php
index dfd008fe..f66a495a 100644
--- a/3.1/modules/minislideshow/controllers/admin_minislideshow.php
+++ b/3.1/modules/minislideshow/controllers/admin_minislideshow.php
@@ -76,7 +76,6 @@ class Admin_Minislideshow_Controller extends Admin_Controller {
$form = new Forge("admin/minislideshow/saveprefs", "", "post",
array("id" => "g-mini-slideshow-admin-form"));
-
// Get location of slideshow files.
$group_slideshow_files = $form->group("Minislideshow");
$group_slideshow_files->input("slideshow_url")
@@ -124,4 +123,4 @@ class Admin_Minislideshow_Controller extends Admin_Controller {
// Return the newly generated form.
return $form;
}
-}
\ No newline at end of file
+}
diff --git a/3.1/modules/minislideshow/css/minislideshow_menu.css b/3.1/modules/minislideshow/css/minislideshow_menu.css
index 19d5e414..d1f5271f 100644
--- a/3.1/modules/minislideshow/css/minislideshow_menu.css
+++ b/3.1/modules/minislideshow/css/minislideshow_menu.css
@@ -1,4 +1,3 @@
#g-view-menu #g-mini-slideshow-link {
background-image: url('../images/ico-view-minislideshow.png');
}
-
diff --git a/3.1/modules/minislideshow/helpers/minislideshow_event.php b/3.1/modules/minislideshow/helpers/minislideshow_event.php
index 6d88569a..a4f76361 100644
--- a/3.1/modules/minislideshow/helpers/minislideshow_event.php
+++ b/3.1/modules/minislideshow/helpers/minislideshow_event.php
@@ -41,6 +41,12 @@ class minislideshow_event_Core {
}
}
+ static function pre_deactivate($data) {
+ if ($data->module == "rss") {
+ $data->messages["warn"][] = t("The MiniSlide Show module requires the RSS module.");
+ }
+ }
+
static function album_menu($menu, $theme) {
// Add an option to access the slideshow from the album view.
$menu
diff --git a/3.1/modules/minislideshow/helpers/minislideshow_installer.php b/3.1/modules/minislideshow/helpers/minislideshow_installer.php
index da071844..3edcf98a 100644
--- a/3.1/modules/minislideshow/helpers/minislideshow_installer.php
+++ b/3.1/modules/minislideshow/helpers/minislideshow_installer.php
@@ -22,4 +22,12 @@ class minislideshow_installer {
static function deactivate() {
site_status::clear("minislideshow_needs_rss");
}
+
+ static function can_activate() {
+ $messages = array();
+ if (!module::is_active("rss")) {
+ $messages["warn"][] = t("The MiniSlide Show module requires the RSS module.");
+ }
+ return $messages;
+ }
}
diff --git a/3.1/modules/minislideshow/helpers/minislideshow_theme.php b/3.1/modules/minislideshow/helpers/minislideshow_theme.php
index 266452e0..ee724bcc 100644
--- a/3.1/modules/minislideshow/helpers/minislideshow_theme.php
+++ b/3.1/modules/minislideshow/helpers/minislideshow_theme.php
@@ -20,10 +20,6 @@
class minislideshow_theme_Core {
static function head($theme) {
- if (!$theme->item()) {
- return;
- }
-
- return new View("minislideshow_header_block.html");
+ return $theme->css("minislideshow_menu.css");
}
}
diff --git a/3.1/modules/minislideshow/module.info b/3.1/modules/minislideshow/module.info
index a64a54e2..923b02d5 100644
--- a/3.1/modules/minislideshow/module.info
+++ b/3.1/modules/minislideshow/module.info
@@ -1,3 +1,7 @@
name = "MiniSlide Show"
description = "Display MiniSlide Show on your Gallery."
version = 1
+author_name = "rWatcher"
+author_url = "http://codex.gallery2.org/User:RWatcher"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:minislideshow"
+discuss_url = "http://gallery.menalto.com/node/90362"
diff --git a/3.1/modules/minislideshow/views/minislideshow_dialog.html.php b/3.1/modules/minislideshow/views/minislideshow_dialog.html.php
index c9507594..9ae60c0b 100644
--- a/3.1/modules/minislideshow/views/minislideshow_dialog.html.php
+++ b/3.1/modules/minislideshow/views/minislideshow_dialog.html.php
@@ -15,4 +15,4 @@ flashvars="xmlUrl== url::site("rss/feed/gallery/album/" . $item_id, "http") ?>
Embed:
" width="485" height="300" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" name="minislide" wmode="transparent" allowFullscreen="true" allowScriptAccess="always" quality="high" flashvars="xmlUrl== url::site("rss/feed/gallery/album/" . $item_id, "http") ?>=$slideshow_params ?>">" readonly>
-
\ No newline at end of file
+
diff --git a/3.1/modules/minislideshow/views/minislideshow_header_block.html.php b/3.1/modules/minislideshow/views/minislideshow_header_block.html.php
deleted file mode 100644
index c52d0117..00000000
--- a/3.1/modules/minislideshow/views/minislideshow_header_block.html.php
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- " />
-
-
diff --git a/3.1/modules/moduleorder/module.info b/3.1/modules/moduleorder/module.info
index 108e813d..c6379871 100644
--- a/3.1/modules/moduleorder/module.info
+++ b/3.1/modules/moduleorder/module.info
@@ -1,3 +1,7 @@
name = "Module Order"
description = "Allows you to change the order in which modules are executed"
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:moduleorder"
+discuss_url = "http://gallery.menalto.com/forum_module_moduleorder"
diff --git a/3.1/modules/moduleupdates/controllers/admin_moduleupdates.php b/3.1/modules/moduleupdates/controllers/admin_moduleupdates.php
index a469fe67..72ec5112 100755
--- a/3.1/modules/moduleupdates/controllers/admin_moduleupdates.php
+++ b/3.1/modules/moduleupdates/controllers/admin_moduleupdates.php
@@ -39,6 +39,9 @@ class Admin_Moduleupdates_Controller extends Admin_Controller {
*/
public function index() {
+ //Start execution timer
+ $bgtime=time();
+
$view = new Admin_View("admin.html");
$view->page_title = t("Gallery 3 :: Manage Module Updates");
$view->content = new View("admin_moduleupdates.html");
@@ -111,10 +114,12 @@ class Admin_Moduleupdates_Controller extends Admin_Controller {
$font_color_local = $this->get_local_module_version_color ($module_info->version, $module_info->code_version);
list ($core_version, $core_server) = $this->get_remote_module_version($this_module_name, "CORE");
$font_color_core = $this->get_module_version_color ($module_info->version, $module_info->code_version, $core_version);
- list ($contrib_version, $contrib_server) = $this->get_remote_module_version($this_module_name, "CONTRIB");
- $font_color_contrib = $this->get_module_version_color ($module_info->version, $module_info->code_version, $contrib_version);
- list ($gh_version, $gh_server) = $this->get_remote_module_version($this_module_name, "GH");
- $font_color_gh = $this->get_module_version_color ($module_info->version, $module_info->code_version, $gh_version);
+ if(!is_numeric($core_version)) {
+ list ($contrib_version, $contrib_server) = $this->get_remote_module_version($this_module_name, "CONTRIB");
+ $font_color_contrib = $this->get_module_version_color ($module_info->version, $module_info->code_version, $contrib_version);
+ list ($gh_version, $gh_server) = $this->get_remote_module_version($this_module_name, "GH");
+ $font_color_gh = $this->get_module_version_color ($module_info->version, $module_info->code_version, $gh_version);
+ }
if($font_color_core == "red" or $font_color_contrib == "red" or $font_color_gh == "red"){
$update_count++;
@@ -174,6 +179,20 @@ class Admin_Moduleupdates_Controller extends Admin_Controller {
$view->content->GitHub = $GitHub;
$view->content->Gallery_Version = substr_replace(gallery::VERSION,"",strpos(gallery::VERSION," "));
+ //End execution timer
+ $ExecutionTime = (time()-$bgtime);
+ if ($ExecutionTime < 1) {
+ $ExecutionTime = '1 ';
+ }else if ($ExecutionTime <= 30){
+ $ExecutionTime = '' . $ExecutionTime . ' ';
+ }else if ($ExecutionTime <= 60){
+ $ExecutionTime = '' . $ExecutionTime . ' ';
+ }else{
+ $ExecutionTime = '' . $ExecutionTime . ' ';
+ }
+
+
+ $view->content->ExecutionTime = $ExecutionTime;
print $view;
}
@@ -252,13 +271,24 @@ class Admin_Moduleupdates_Controller extends Admin_Controller {
//Check the Gallery3 Community Contributions GitHub
if ($file == null) {
try {
+ $thisInstalledVersion = gallery::VERSION;
+ //Gallery versions prior to 3.0.2 contained the codename in the version string
+ if (substr_count($thisInstalledVersion, ' ') > 0 ){
+ $thisInstalledVersion = substr_replace($thisInstalledVersion,"",strpos($thisInstalledVersion," "));
+ }
+ //Truncate the minor version number
+ if (substr_count($thisInstalledVersion, '.') > 1 ){
+ $thisInstalledVersion = substr_replace($thisInstalledVersion,"",strripos($thisInstalledVersion,"."));
+ }
$file = fopen ("http://github.com/gallery/gallery3-contrib/raw/master/".
- substr_replace(gallery::VERSION,"",strpos(gallery::VERSION," "))."/modules/".$module_name."/module.info", "r");
+ $thisInstalledVersion ."/modules/".$module_name."/module.info", "r");
+
if ($file != null) {
$server = '(GCC)';
}
}
catch (Exception $e) {
+ //echo 'Message: ' .$e->getMessage() . ' ';
}
}
break;
@@ -303,6 +333,9 @@ class Admin_Moduleupdates_Controller extends Admin_Controller {
if($line == "Not entered" or $line == "See git") {
$line = "";
}
+ if (substr_count($line, '.') > 0) {
+ $line = str_replace('.','',$line);
+ }
$version = $line;
break;
} else {
diff --git a/3.1/modules/moduleupdates/helpers/moduleupdates_installer.php b/3.1/modules/moduleupdates/helpers/moduleupdates_installer.php
index 1e60a2cb..85f90489 100644
--- a/3.1/modules/moduleupdates/helpers/moduleupdates_installer.php
+++ b/3.1/modules/moduleupdates/helpers/moduleupdates_installer.php
@@ -24,7 +24,7 @@ class moduleupdates_installer {
$version = module::get_version("moduleupdates");
if ($version < 1) {
- module::set_version("moduleupdates", 7);
+ module::set_version("moduleupdates", 8);
//Remove the ModuleUpdates cache entry 'JIC'
Cache::instance()->delete("ModuleUpdates");
//create the blank ModuleUpdates cache entry with an expiration of 0 days
@@ -34,7 +34,7 @@ class moduleupdates_installer {
}
static function upgrade($version) {
- module::set_version("moduleupdates", 7);
+ module::set_version("moduleupdates", 8);
//Remove the ModuleUpdates cache entry 'JIC'
Cache::instance()->delete("ModuleUpdates");
//Empty the ModuleUpdates cache entry so our new version starts from scratch
diff --git a/3.1/modules/moduleupdates/module.info b/3.1/modules/moduleupdates/module.info
index bbf3516a..7c73c340 100755
--- a/3.1/modules/moduleupdates/module.info
+++ b/3.1/modules/moduleupdates/module.info
@@ -1,3 +1,7 @@
-name = "Module Updates"
+name = "ModuleUpdates"
description = "Compares your installed module version against the ones stored in the GitHub."
-version = 7
\ No newline at end of file
+version = 8
+author_name = "brentil"
+author_url = "http://gallery.menalto.com/user/153736"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:moduleupdates"
+discuss_url = "http://gallery.menalto.com/node/96574"
diff --git a/3.1/modules/moduleupdates/views/admin_moduleupdates.html.php b/3.1/modules/moduleupdates/views/admin_moduleupdates.html.php
index e55ed7af..18ff31ed 100644
--- a/3.1/modules/moduleupdates/views/admin_moduleupdates.html.php
+++ b/3.1/modules/moduleupdates/views/admin_moduleupdates.html.php
@@ -2,7 +2,7 @@
-
= t("Module Updates v".$mu_version.".0") ?>
+
= t("ModuleUpdates v".$mu_version) ?>
= t("Compares your installed module version against the ones stored in the GitHub and GalleryModules.") ?>
@@ -16,7 +16,7 @@
= t("Green = Your version is newer than the GitHub ") ?>
= t("Orange = Your file version is newer than the installed version ") ?>
= t("Pink = Your installed version is newer than file version ") ?>
-
= t("Outbound Status: " . $Google . " - GitHub Status: " . $GitHub . " ") ?>
+
= t("Outbound Status: " . $Google . " - GitHub Status: " . $GitHub . " - Execution Time: " . $ExecutionTime . " s ") ?>
" class="submit" /> if($update_time == ""){ echo " - Last Scan: Unknown";}else{ echo " - Last Scan: ".$update_time;} ?>
diff --git a/3.1/modules/navcarousel/module.info b/3.1/modules/navcarousel/module.info
index 0dd8e5ff..f4c7bf3d 100644
--- a/3.1/modules/navcarousel/module.info
+++ b/3.1/modules/navcarousel/module.info
@@ -1,3 +1,7 @@
name = "Navigation Carousel"
description = "Adds a navigation carousel under the photo."
version = 4
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:navcarousel"
+discuss_url = "http://gallery.menalto.com/forum_module_navcarousel"
diff --git a/3.1/modules/no_home_link/module.info b/3.1/modules/no_home_link/module.info
index 32b0d337..fc3aa1db 100644
--- a/3.1/modules/no_home_link/module.info
+++ b/3.1/modules/no_home_link/module.info
@@ -1,3 +1,7 @@
name = "No Home Link"
description = "Gets rid of the 'Home' link in the menu."
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:no_home_link"
+discuss_url = "http://gallery.menalto.com/forum_module_no_home_link"
diff --git a/3.1/modules/nobots/module.info b/3.1/modules/nobots/module.info
index 0f706f43..74f9bb3c 100644
--- a/3.1/modules/nobots/module.info
+++ b/3.1/modules/nobots/module.info
@@ -1,3 +1,7 @@
name = "NoBots"
description = "Block web crawlers from indexing your Gallery."
version = 1
+author_name = "rWatcher"
+author_url = "http://codex.gallery2.org/User:RWatcher"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:nobots"
+discuss_url = "http://gallery.menalto.com/node/88451"
diff --git a/3.1/modules/noffmpeg/helpers/movie.php b/3.1/modules/noffmpeg/helpers/movie.php
index a42804d2..99308994 100644
--- a/3.1/modules/noffmpeg/helpers/movie.php
+++ b/3.1/modules/noffmpeg/helpers/movie.php
@@ -24,6 +24,7 @@
* Note: by design, this class does not do any permission checking.
*/
+// rWatcher edit: include MP4Info.php library.
include MODPATH . "noffmpeg/libraries/MP4Info.php";
class movie_Core {
@@ -61,7 +62,7 @@ class movie_Core {
}
static function extract_frame($input_file, $output_file) {
- $ffmpeg = self::find_ffmpeg();
+ $ffmpeg = movie::find_ffmpeg();
if (empty($ffmpeg)) {
// BEGIN rWatcher Edit.
copy(MODPATH . "noffmpeg/images/missing_movie.png", $output_file);
@@ -89,27 +90,23 @@ class movie_Core {
}
}
+ /**
+ * Return the path to the ffmpeg binary if one exists and is executable, or null.
+ */
static function find_ffmpeg() {
if (!($ffmpeg_path = module::get_var("gallery", "ffmpeg_path")) || !file_exists($ffmpeg_path)) {
- $graphics_path = module::get_var("gallery", "graphics_toolkit_path", null);
-
- putenv("PATH=" . getenv("PATH") . (empty($graphics_path) ? "" : ":$graphics_path") .
- ":/usr/local/bin:/opt/local/bin:/opt/bin");
- if (function_exists("exec")) {
- $ffmpeg_path = exec("which ffmpeg");
- }
-
+ $ffmpeg_path = system::find_binary(
+ "ffmpeg", module::get_var("gallery", "graphics_toolkit_path"));
module::set_var("gallery", "ffmpeg_path", $ffmpeg_path);
}
return $ffmpeg_path;
}
-
/**
* Return the width, height, mime_type and extension of the given movie file.
*/
static function get_file_metadata($file_path) {
- $ffmpeg = self::find_ffmpeg();
+ $ffmpeg = movie::find_ffmpeg();
if (empty($ffmpeg)) {
// BEGIN rWatcher Edit.
$pi = pathinfo($file_path);
@@ -147,4 +144,4 @@ class movie_Core {
return array($width, $height, $mime_type, $extension);
}
-}
+}
\ No newline at end of file
diff --git a/3.1/modules/noffmpeg/module.info b/3.1/modules/noffmpeg/module.info
index c11f0853..fe6b0ec3 100644
--- a/3.1/modules/noffmpeg/module.info
+++ b/3.1/modules/noffmpeg/module.info
@@ -1,3 +1,7 @@
name = "NoFFMPEG"
description = "Allow video uploads on systems without FFMPEG."
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:noffmpeg"
+discuss_url = "http://gallery.menalto.com/forum_module_noffmpeg"
diff --git a/3.1/modules/noffmpeg/views/form_uploadify.html.php b/3.1/modules/noffmpeg/views/form_uploadify.html.php
new file mode 100644
index 00000000..911e02d5
--- /dev/null
+++ b/3.1/modules/noffmpeg/views/form_uploadify.html.php
@@ -0,0 +1,164 @@
+
+
+
+
+
+
+ if ($suhosin_session_encrypt || (identity::active_user()->admin && !$movies_allowed)): ?>
+
+ if ($suhosin_session_encrypt): ?>
+
+ = t("Error: your server is configured to use the suhosin.session.encrypt
setting from Suhosin . You must disable this setting to upload photos.",
+ array("encrypt_url" => "http://www.hardened-php.net/suhosin/configuration.html#suhosin.session.encrypt",
+ "suhosin_url" => "http://www.hardened-php.net/suhosin/")) ?>
+
+ endif ?>
+
+ if (identity::active_user()->admin && !$movies_allowed): ?>
+
+ = t("Can't find ffmpeg on your system. Movie uploading disabled. Help! ", array("help_url" => "http://codex.gallery2.org/Gallery3:FAQ#Why_does_it_say_I.27m_missing_ffmpeg.3F")) ?>
+
+ endif ?>
+
+ endif ?>
+
+
+
+ = t("Photos will be uploaded to album: ") ?>
+
+
+ foreach ($album->parents() as $i => $parent): ?>
+ > = html::clean($parent->title) ?>
+ endforeach ?>
+ = html::purify($album->title) ?>
+
+
+
+
+ = t("Select photos...") ?>
+
+
+
+
+
+
+
+ = t("Your browser must have Adobe Flash Player version %flash_minimum_version or greater installed to use this feature.", array("flash_minimum_version" => $flash_minimum_version)) ?>
+
+
+ for_js() ?> />
+
+
\ No newline at end of file
diff --git a/3.1/modules/pages/controllers/admin_pages.php b/3.1/modules/pages/controllers/admin_pages.php
new file mode 100644
index 00000000..cbf8ce6e
--- /dev/null
+++ b/3.1/modules/pages/controllers/admin_pages.php
@@ -0,0 +1,271 @@
+page_title = t("Manage pages");
+ $view->content = new View("admin_pages.html");
+ $query = ORM::factory("static_page");
+ $view->content->pages = $query->order_by("name", "ASC")->find_all();
+ $view->content->form = $this->get_prefs_form();
+ print $view;
+ }
+
+ public function createpage() {
+ // Display a form for creating a new page.
+ $view = new Admin_View("admin.html");
+ $view->page_title = t("Create page");
+ $view->content = new View("admin_pages_new.html");
+ $view->content->form = $this->get_new_page_form();
+ print $view;
+ }
+
+ public function editpage($id) {
+ // Display a form for editing an existing page.
+ $existing_page = ORM::factory("static_page", $id);
+ $view = new Admin_View("admin.html");
+ $view->page_title = t("Edit page");
+ $view->content = new View("admin_pages_new.html");
+ $view->content->form = $this->get_edit_page_form($existing_page);
+ print $view;
+ }
+
+ public function savepage() {
+ // Save a page to the database.
+
+ access::verify_csrf();
+
+ // Store form values into variables.
+ $page_id = Input::instance()->post("page_id");
+ $page_name = urlencode(trim(Input::instance()->post("page_name")));
+ $page_title = Input::instance()->post("page_title");
+ $page_code = Input::instance()->post("page_code");
+ $display_menu = Input::instance()->post("display_menu");
+
+ // If $page_id is set, update an existing page.
+ if (isset($page_id)) {
+ $update_page = ORM::factory("static_page", $page_id);
+ $update_page->title = $page_title;
+ $update_page->html_code = $page_code;
+ $update_page->display_menu = $display_menu;
+ $update_page->save();
+ message::success(t("Page %page_name updated", array("page_name" => $update_page->name)));
+ log::success("pages", t("Page %page_name updated", array("page_name" => $update_page->name)));
+ url::redirect("admin/pages");
+ } else {
+
+ // If $page_id is not set, we are dealing with a new page.
+ // Check and make sure a page with the same names doesn't already exist.
+ $existing_page = ORM::factory("static_page")
+ ->where("name", "=", $page_name)
+ ->find_all();
+
+ // If the page doesn't exist, save it to the database.
+ if (count($existing_page) == 0) {
+ $new_page = ORM::factory("static_page");
+ $new_page->name = $page_name;
+ $new_page->title = $page_title;
+ $new_page->html_code = $page_code;
+ $new_page->display_menu = $display_menu;
+ $new_page->save();
+ message::success(t("Page %page_name created", array("page_name" => $page_name)));
+ log::success("pages", t("Page %page_name created", array("page_name" => $page_name)));
+ url::redirect("admin/pages");
+ } else {
+
+ // If the page does exist, ask the user if they want to overwrite the old page with the new one.
+ message::error(t("Page %page_name already exists, press Save again to overwrite.", array("page_name" => $page_name)));
+ $view = new Admin_View("admin.html");
+ $view->page_title = t("Edit page");
+ $view->content = new View("admin_pages_new.html");
+ $view->content->form = $this->get_overwrite_page_form($existing_page[0]->id, $page_name, $page_title, $page_code, $display_menu);
+ print $view;
+ }
+ }
+ }
+
+ public function form_delete($id) {
+ // Display a form asking the user if they want to delete a page.
+ $one_page = ORM::factory("static_page", $id);
+ if ($one_page->loaded()) {
+ print $this->get_delete_form($one_page);
+ }
+ }
+
+ public function delete($id) {
+ // Delete the specified page.
+
+ access::verify_csrf();
+
+ // Make sure $id belongs to an actual page.
+ $one_page = ORM::factory("static_page", $id);
+ if (!$one_page->loaded()) {
+ throw new Kohana_404_Exception();
+ }
+
+ // If the form validates, delete the specified page.
+ $form = $this->get_delete_form($one_page);
+ if ($form->validate()) {
+ $name = $one_page->name;
+ $one_page->delete();
+ message::success(t("Deleted page %page_name", array("page_name" => $name)));
+ log::success("pages", t("Deleted page %page_name", array("page_name" => $name)));
+ json::reply(array("result" => "success", "location" => url::site("admin/pages")));
+ } else {
+ print $form;
+ }
+ }
+
+ public function form_rename($id) {
+ // Display a form to allow the user to rename a page.
+ $one_page = ORM::factory("static_page", $id);
+ if ($one_page->loaded()) {
+ print InPlaceEdit::factory(urldecode($one_page->name))
+ ->action("admin/pages/rename/$id")
+ ->render();
+ }
+ }
+
+ public function rename($id) {
+ // Rename an existing page.
+ access::verify_csrf();
+
+ // Make sure the page specified by $id exists.
+ $one_page = ORM::factory("static_page", $id);
+ if (!$one_page->loaded()) {
+ throw new Kohana_404_Exception();
+ }
+
+ $in_place_edit = InPlaceEdit::factory($one_page->name)
+ ->action("admin/pages/rename/$one_page->id")
+ ->rules(array("required", "length[1,64]"));
+
+ // If the form validates, and if the new name doesn't already exist, rename the page.
+ if ($in_place_edit->validate()) {
+ $old_name = $one_page->name;
+ $new_name = urlencode(trim($in_place_edit->value()));
+ $new_name_exists = ORM::factory("static_page")->where("name", "=", $new_name)->find_all();
+ if (count($new_name_exists) == 0) {
+ $one_page->name = $new_name;
+ $one_page->save();
+ $message = t("Renamed page
%old_name to
%new_name ",
+ array("old_name" => $old_name, "new_name" => $new_name));
+ message::success($message);
+ log::success("pages", $message);
+ json::reply(array("result" => "success", "location" => url::site("admin/pages")));
+ } else {
+ json::reply(array("result" => "error", "form" => (string)$in_place_edit->render()));
+ }
+ } else {
+ json::reply(array("result" => "error", "form" => (string)$in_place_edit->render()));
+ }
+ }
+
+ static function get_delete_form($one_page) {
+ // Generate a new form asking the user if they want to delete a page.
+ $form = new Forge("admin/pages/delete/$one_page->id", "", "post", array("id" => "g-delete-pages-form"));
+ $group = $form->group("delete_page")
+ ->label(t("Really delete page %page_name?", array("page_name" => $one_page->name)));
+ $group->submit("")->value(t("Delete Page"));
+ return $form;
+ }
+
+ private function get_new_page_form() {
+ // Generate a form for creating a new page.
+ $form = new Forge("admin/pages/savepage", "", "post",
+ array("id" => "g-pages-admin-form"));
+
+ $pages_group = $form->group("new_page");
+ $pages_group->input("page_name")
+ ->label(t("Name"));
+ $pages_group->input("page_title")
+ ->label(t("Title"));
+ $pages_group->textarea("page_code")
+ ->label(t("HTML Code"));
+ $pages_group->checkbox("display_menu")
+ ->label(t("Display in menu?"))
+ ->checked(false);
+ $pages_group->submit("save_page")
+ ->value(t("Save"));
+
+ return $form;
+ }
+
+ private function get_overwrite_page_form($id, $name, $title, $html_code, $display_menu) {
+ // Generate a form for overwriting an existing page.
+ $form = new Forge("admin/pages/savepage", "", "post",
+ array("id" => "g-pages-admin-form"));
+
+ $pages_group = $form->group("new_page");
+ $pages_group->hidden("page_id")
+ ->value($id);
+ $pages_group->input("page_name")
+ ->label(t("Name"))
+ ->readonly()
+ ->value($name);
+ $pages_group->input("page_title")
+ ->label(t("Title"))
+ ->value($title);
+ $pages_group->textarea("page_code")
+ ->label(t("HTML Code"))
+ ->value($html_code);
+ $pages_group->checkbox("display_menu")
+ ->label(t("Display in menu?"))
+ ->checked($display_menu);
+ $pages_group->submit("save_page")
+ ->value(t("Save"));
+
+ return $form;
+ }
+
+ private function get_edit_page_form($existing_page) {
+ // Generate a form for editing an existing page. Reuse the overwrite form for as it's basically the same thing.
+ return ($this->get_overwrite_page_form($existing_page->id, $existing_page->name, $existing_page->title, $existing_page->html_code, $existing_page->display_menu));
+ }
+
+ private function get_prefs_form() {
+ // Generate a form for global preferences.
+ $form = new Forge("admin/pages/saveprefs", "", "post",
+ array("id" => "g-pages-admin-form"));
+
+ $pages_group = $form->group("preferences")->label(t("Settings"));
+ $pages_group->checkbox("display_sidebar")
+ ->label(t("Hide sidebar on Pages?"))
+ ->checked(module::get_var("pages", "show_sidebar"));
+ $pages_group->submit("save_prefs")
+ ->value(t("Save"));
+
+ return $form;
+ }
+
+ public function saveprefs() {
+ // Save a preferences to the database.
+
+ access::verify_csrf();
+
+ // Save form variables.
+ module::set_var("pages", "show_sidebar", Input::instance()->post("display_sidebar"));
+
+ // Display message and load main pages admin screen.
+ message::success(t("Your settings have been saved."));
+ url::redirect("admin/pages");
+ }
+}
diff --git a/3.1/modules/pages/controllers/pages.php b/3.1/modules/pages/controllers/pages.php
new file mode 100644
index 00000000..d567af47
--- /dev/null
+++ b/3.1/modules/pages/controllers/pages.php
@@ -0,0 +1,42 @@
+where("name", "=", $page_name)
+ ->find_all();
+
+ // If it doesn't exist, display a 404 error.
+ if (count($existing_page) == 0) {
+ throw new Kohana_404_Exception();
+ }
+
+ // Display the page.
+ $template = new Theme_View("page.html", "other", "Pages");
+ $template->page_title = t("Gallery :: ") . t($existing_page[0]->title);
+ $template->content = new View("pages_display.html");
+ $template->content->title = $existing_page[0]->title;
+ $template->content->body = $existing_page[0]->html_code;
+ print $template;
+ }
+}
diff --git a/3.1/modules/pages/css/jHtmlArea.css b/3.1/modules/pages/css/jHtmlArea.css
new file mode 100644
index 00000000..641ea291
--- /dev/null
+++ b/3.1/modules/pages/css/jHtmlArea.css
@@ -0,0 +1,48 @@
+div.jHtmlArea { display: inline block; border: solid 1px #ccc; }
+div.jHtmlArea div { padding: 0px; margin: 0px; }
+div.jHtmlArea .ToolBar { }
+div.jHtmlArea .ToolBar ul { border: solid 0px #ccc; margin: 1px; padding: 1px; position:relative; display: inline; background: #fff url(../images/jHtmlArea_Toolbar_Group_BG.png) repeat-x;}
+div.jHtmlArea .ToolBar ul li { list-style-type: none; float: left; border: none; padding: 1px; margin: 1px; }
+div.jHtmlArea .ToolBar ul li:hover { border: solid 1px #ccc; background: #ddd url(../images/jHtmlArea_Toolbar_Group__Btn_Select_BG.png); padding: 0; }
+div.jHtmlArea .ToolBar ul li a { display: block; width: 16px; height: 16px; background: url(../images/jHtmlArea.png) no-repeat -16px -500px; border: none; cursor: pointer; padding: 0px; }
+div.jHtmlArea .ToolBar ul li a.highlighted { border: solid 1px #aaa; background-color: #bbb; padding: 0; }
+div.jHtmlArea .ToolBar ul li.separator {height: 16px; margin: 0 2px 0 3px; border-left: 1px solid #ccc;}
+div.jHtmlArea .ToolBar ul li.separator:hover { padding: 1px; background-color: #fff; border-top:none; border-bottom:none; border-right:none;}
+
+div.jHtmlArea .ToolBar ul li a:hover { }
+div.jHtmlArea .ToolBar ul li a.bold { background-position: 0 0; }
+div.jHtmlArea .ToolBar ul li a.italic { background-position: -16px 0; }
+div.jHtmlArea .ToolBar ul li a.underline { background-position: -32px 0; }
+div.jHtmlArea .ToolBar ul li a.strikethrough { background-position: -48px 0; }
+div.jHtmlArea .ToolBar ul li a.link { background-position: -64px 0; }
+div.jHtmlArea .ToolBar ul li a.unlink { background-position: -80px 0; }
+div.jHtmlArea .ToolBar ul li a.orderedlist { background-position: -96px 0; }
+div.jHtmlArea .ToolBar ul li a.unorderedlist { background-position: -112px 0; }
+div.jHtmlArea .ToolBar ul li a.image { background-position: -128px 0; }
+div.jHtmlArea .ToolBar ul li a.cut { background-position: -144px 0; }
+div.jHtmlArea .ToolBar ul li a.copy { background-position: -160px 0; }
+div.jHtmlArea .ToolBar ul li a.paste { background-position: -176px 0; }
+
+div.jHtmlArea .ToolBar ul li a.html { background-position: -192px 0; opacity:0.6; filter:alpha(opacity=60);}
+div.jHtmlArea .ToolBar ul li a.html.highlighted { opacity:1.0; filter:alpha(opacity=100);}
+
+div.jHtmlArea .ToolBar ul li a.h1 { background-position: 0 -16px;}
+div.jHtmlArea .ToolBar ul li a.h2 { background-position: -16px -16px;}
+div.jHtmlArea .ToolBar ul li a.h3 { background-position: -32px -16px;}
+div.jHtmlArea .ToolBar ul li a.h4 { background-position: -48px -16px;}
+div.jHtmlArea .ToolBar ul li a.h5 { background-position: -64px -16px;}
+div.jHtmlArea .ToolBar ul li a.h6 { background-position: -80px -16px;}
+div.jHtmlArea .ToolBar ul li a.subscript { background-position: -96px -16px;}
+div.jHtmlArea .ToolBar ul li a.superscript { background-position: -112px -16px;}
+div.jHtmlArea .ToolBar ul li a.indent { background-position: -128px -16px;}
+div.jHtmlArea .ToolBar ul li a.outdent { background-position: -144px -16px;}
+div.jHtmlArea .ToolBar ul li a.horizontalrule { background-position: -160px -16px;}
+div.jHtmlArea .ToolBar ul li a.p { background-position: -176px -16px;}
+
+
+div.jHtmlArea .ToolBar ul li a.justifyleft { background-position: 0 -32px;}
+div.jHtmlArea .ToolBar ul li a.justifycenter { background-position: -16px -32px;}
+div.jHtmlArea .ToolBar ul li a.justifyright { background-position: -32px -32px;}
+div.jHtmlArea .ToolBar ul li a.increasefontsize { background-position: -48px -32px;}
+div.jHtmlArea .ToolBar ul li a.decreasefontsize { background-position: -64px -32px;}
+div.jHtmlArea .ToolBar ul li a.forecolor { background-position: -80px -32px;}
\ No newline at end of file
diff --git a/3.1/modules/pages/helpers/pages_block.php b/3.1/modules/pages/helpers/pages_block.php
new file mode 100644
index 00000000..2eae8861
--- /dev/null
+++ b/3.1/modules/pages/helpers/pages_block.php
@@ -0,0 +1,57 @@
+ t("Pages Links"));
+ }
+
+ static function get($block_id, $theme) {
+ $block = "";
+
+ switch ($block_id) {
+ case "pages_block":
+
+ // Create a new block with a list of all Pages and their links.
+
+ // Query the database for all existing pages.
+ // If at least one page exists, display the sidebar block.
+ $query = ORM::factory("static_page");
+ $pages = $query->order_by("title", "ASC")->find_all();
+ if (count($pages) > 0) {
+
+ // Loop through each page and generate an HTML list of their links and titles.
+ $content = "
";
+ foreach ($pages as $one_page) {
+ $content .= "name) . "\">" . t($one_page->title) . " ";
+ }
+ $content .= " ";
+
+ // Make a new sidebar block.
+ $block = new Block();
+ $block->css_id = "g-pages";
+ $block->title = t("Pages");
+ $block->content = new View("pages_sidebar.html");
+ $block->content->links = $content;
+ }
+ break;
+ }
+ return $block;
+ }
+}
diff --git a/3.1/modules/pages/helpers/pages_event.php b/3.1/modules/pages/helpers/pages_event.php
new file mode 100644
index 00000000..3cb37d0b
--- /dev/null
+++ b/3.1/modules/pages/helpers/pages_event.php
@@ -0,0 +1,44 @@
+get("content_menu")
+ ->append(Menu::factory("link")
+ ->id("pages")
+ ->label(t("Pages Settings"))
+ ->url(url::site("admin/pages")));
+ }
+
+ static function site_menu($menu, $theme) {
+ $menu_pages = ORM::factory("static_page")
+ ->where("display_menu", "=", true)
+ ->order_by("title", "DESC")
+ ->find_all();
+ if (count($menu_pages) > 0) {
+ foreach ($menu_pages as $one_page) {
+ $menu->add_after("home", Menu::factory("link")
+ ->id("pages-" . $one_page->id)
+ ->label(t($one_page->title))
+ ->url(url::site("pages/show/" . $one_page->name)));
+ }
+ }
+ }
+}
diff --git a/3.1/modules/pages/helpers/pages_installer.php b/3.1/modules/pages/helpers/pages_installer.php
new file mode 100644
index 00000000..cd1f1546
--- /dev/null
+++ b/3.1/modules/pages/helpers/pages_installer.php
@@ -0,0 +1,44 @@
+query("CREATE TABLE IF NOT EXISTS {static_pages} (
+ `id` int(9) NOT NULL auto_increment,
+ `name` varchar(255) default NULL,
+ `title` varchar(255) default NULL,
+ `html_code` text default NULL,
+ `display_menu` boolean default 0,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY(`name`))
+ DEFAULT CHARSET=utf8;");
+
+ // Set the module version number.
+ module::set_version("pages", 2);
+ }
+ static function upgrade($version) {
+ $db = Database::instance();
+ if ($version == 1) {
+ $db->query("ALTER TABLE {static_pages} ADD COLUMN `display_menu` boolean default 0");
+ module::set_version("pages", $version = 2);
+ }
+ }
+}
diff --git a/3.1/modules/pages/helpers/pages_theme.php b/3.1/modules/pages/helpers/pages_theme.php
new file mode 100644
index 00000000..ec57a2ce
--- /dev/null
+++ b/3.1/modules/pages/helpers/pages_theme.php
@@ -0,0 +1,27 @@
+script("jHtmlArea-0.7.0.js") .
+ $theme->css("jHtmlArea.css");
+ }
+}
+
\ No newline at end of file
diff --git a/3.1/modules/pages/images/jHtmlArea.png b/3.1/modules/pages/images/jHtmlArea.png
new file mode 100644
index 00000000..54c66a10
Binary files /dev/null and b/3.1/modules/pages/images/jHtmlArea.png differ
diff --git a/3.1/modules/pages/images/jHtmlArea_Toolbar_Group_BG.png b/3.1/modules/pages/images/jHtmlArea_Toolbar_Group_BG.png
new file mode 100644
index 00000000..bcfb0545
Binary files /dev/null and b/3.1/modules/pages/images/jHtmlArea_Toolbar_Group_BG.png differ
diff --git a/3.1/modules/pages/images/jHtmlArea_Toolbar_Group__Btn_Select_BG.png b/3.1/modules/pages/images/jHtmlArea_Toolbar_Group__Btn_Select_BG.png
new file mode 100644
index 00000000..4287b5b8
Binary files /dev/null and b/3.1/modules/pages/images/jHtmlArea_Toolbar_Group__Btn_Select_BG.png differ
diff --git a/3.1/modules/pages/js/jHtmlArea-0.7.0.js b/3.1/modules/pages/js/jHtmlArea-0.7.0.js
new file mode 100644
index 00000000..d1e360c4
--- /dev/null
+++ b/3.1/modules/pages/js/jHtmlArea-0.7.0.js
@@ -0,0 +1,403 @@
+/*
+* jHtmlArea 0.7.0 - WYSIWYG Html Editor jQuery Plugin
+* Copyright (c) 2009 Chris Pietschmann
+* http://jhtmlarea.codeplex.com
+* Licensed under the Microsoft Reciprocal License (Ms-RL)
+* http://jhtmlarea.codeplex.com/license
+*/
+(function($) {
+ $.fn.htmlarea = function(opts) {
+ if (opts && typeof (opts) === "string") {
+ var args = [];
+ for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); }
+ var htmlarea = jHtmlArea(this[0]);
+ var f = htmlarea[opts];
+ if (f) { return f.apply(htmlarea, args); }
+ }
+ return this.each(function() { jHtmlArea(this, opts); });
+ };
+ var jHtmlArea = window.jHtmlArea = function(elem, options) {
+ if (elem.jquery) {
+ return jHtmlArea(elem[0]);
+ }
+ if (elem.jhtmlareaObject) {
+ return elem.jhtmlareaObject;
+ } else {
+ return new jHtmlArea.fn.init(elem, options);
+ }
+ };
+ jHtmlArea.fn = jHtmlArea.prototype = {
+
+ // The current version of jHtmlArea being used
+ jhtmlarea: "0.7.0",
+
+ init: function(elem, options) {
+ if (elem.nodeName.toLowerCase() === "textarea") {
+ var opts = $.extend({}, jHtmlArea.defaultOptions, options);
+ elem.jhtmlareaObject = this;
+
+ var textarea = this.textarea = $(elem);
+ var container = this.container = $("
").addClass("jHtmlArea").width(textarea.width()).insertAfter(textarea);
+
+ var toolbar = this.toolbar = $("
").addClass("ToolBar").appendTo(container);
+ priv.initToolBar.call(this, opts);
+
+ var iframe = this.iframe = $("
").height(textarea.height());
+ iframe.width(textarea.width() - ($.browser.msie ? 0 : 4));
+ var htmlarea = this.htmlarea = $("
").append(iframe);
+
+ container.append(htmlarea).append(textarea.hide());
+
+ priv.initEditor.call(this, opts);
+ priv.attachEditorEvents.call(this);
+
+ // Fix total height to match TextArea
+ iframe.height(iframe.height() - toolbar.height());
+ toolbar.width(textarea.width() - 2);
+
+ if (opts.loaded) { opts.loaded.call(this); }
+ }
+ },
+ dispose: function() {
+ this.textarea.show().insertAfter(this.container);
+ this.container.remove();
+ this.textarea[0].jhtmlareaObject = null;
+ },
+ execCommand: function(a, b, c) {
+ this.iframe[0].contentWindow.focus();
+ this.editor.execCommand(a, b || false, c || null);
+ this.updateTextArea();
+ },
+ ec: function(a, b, c) {
+ this.execCommand(a, b, c);
+ },
+ queryCommandValue: function(a) {
+ this.iframe[0].contentWindow.focus();
+ return this.editor.queryCommandValue(a);
+ },
+ qc: function(a) {
+ return this.queryCommandValue(a);
+ },
+ getSelectedHTML: function() {
+ if ($.browser.msie) {
+ return this.getRange().htmlText;
+ } else {
+ var elem = this.getRange().cloneContents();
+ return $("
").append($(elem)).html();
+ }
+ },
+ getSelection: function() {
+ if ($.browser.msie) {
+ //return (this.editor.parentWindow.getSelection) ? this.editor.parentWindow.getSelection() : this.editor.selection;
+ return this.editor.selection;
+ } else {
+ return this.iframe[0].contentDocument.defaultView.getSelection();
+ }
+ },
+ getRange: function() {
+ var s = this.getSelection();
+ if (!s) { return null; }
+ //return (s.rangeCount > 0) ? s.getRangeAt(0) : s.createRange();
+ return (s.getRangeAt) ? s.getRangeAt(0) : s.createRange();
+ },
+ html: function(v) {
+ if (v) {
+ this.pastHTML(v);
+ } else {
+ return toHtmlString();
+ }
+ },
+ pasteHTML: function(html) {
+ this.iframe[0].contentWindow.focus();
+ var r = this.getRange();
+ if ($.browser.msie) {
+ r.pasteHTML(html);
+ } else if ($.browser.mozilla) {
+ r.deleteContents();
+ r.insertNode($((html.indexOf("<") != 0) ? $("
").append(html) : html)[0]);
+ } else { // Safari
+ r.deleteContents();
+ r.insertNode($(this.iframe[0].contentWindow.document.createElement("span")).append($((html.indexOf("<") != 0) ? "
" + html + " " : html))[0]);
+ }
+ r.collapse(false);
+ r.select();
+ },
+ cut: function() {
+ this.ec("cut");
+ },
+ copy: function() {
+ this.ec("copy");
+ },
+ paste: function() {
+ this.ec("paste");
+ },
+ bold: function() { this.ec("bold"); },
+ italic: function() { this.ec("italic"); },
+ underline: function() { this.ec("underline"); },
+ strikeThrough: function() { this.ec("strikethrough"); },
+ image: function(url) {
+ if ($.browser.msie && !url) {
+ this.ec("insertImage", true);
+ } else {
+ this.ec("insertImage", false, (url || prompt("Image URL:", "http://")));
+ }
+ },
+ removeFormat: function() {
+ this.ec("removeFormat", false, []);
+ this.unlink();
+ },
+ link: function() {
+ if ($.browser.msie) {
+ this.ec("createLink", true);
+ } else {
+ this.ec("createLink", false, prompt("Link URL:", "http://"));
+ }
+ },
+ unlink: function() { this.ec("unlink", false, []); },
+ orderedList: function() { this.ec("insertorderedlist"); },
+ unorderedList: function() { this.ec("insertunorderedlist"); },
+ superscript: function() { this.ec("superscript"); },
+ subscript: function() { this.ec("subscript"); },
+
+ p: function() {
+ this.formatBlock("
");
+ },
+ h1: function() {
+ this.heading(1);
+ },
+ h2: function() {
+ this.heading(2);
+ },
+ h3: function() {
+ this.heading(3);
+ },
+ h4: function() {
+ this.heading(4);
+ },
+ h5: function() {
+ this.heading(5);
+ },
+ h6: function() {
+ this.heading(6);
+ },
+ heading: function(h) {
+ this.formatBlock($.browser.msie ? "Heading " + h : "h" + h);
+ },
+
+ indent: function() {
+ this.ec("indent");
+ },
+ outdent: function() {
+ this.ec("outdent");
+ },
+
+ insertHorizontalRule: function() {
+ this.ec("insertHorizontalRule", false, "ht");
+ },
+
+ justifyLeft: function() {
+ this.ec("justifyLeft");
+ },
+ justifyCenter: function() {
+ this.ec("justifyCenter");
+ },
+ justifyRight: function() {
+ this.ec("justifyRight");
+ },
+
+ increaseFontSize: function() {
+ if ($.browser.msie) {
+ this.ec("fontSize", false, this.qc("fontSize") + 1);
+ } else if ($.browser.safari) {
+ this.getRange().surroundContents($(this.iframe[0].contentWindow.document.createElement("span")).css("font-size", "larger")[0]);
+ } else {
+ this.ec("increaseFontSize", false, "big");
+ }
+ },
+ decreaseFontSize: function() {
+ if ($.browser.msie) {
+ this.ec("fontSize", false, this.qc("fontSize") - 1);
+ } else if ($.browser.safari) {
+ this.getRange().surroundContents($(this.iframe[0].contentWindow.document.createElement("span")).css("font-size", "smaller")[0]);
+ } else {
+ this.ec("decreaseFontSize", false, "small");
+ }
+ },
+
+ forecolor: function(c) {
+ this.ec("foreColor", false, c || prompt("Enter HTML Color:", "#"));
+ },
+
+ formatBlock: function(v) {
+ this.ec("formatblock", false, v || null);
+ },
+
+ showHTMLView: function() {
+ this.updateTextArea();
+ this.textarea.show();
+ this.htmlarea.hide();
+ $("ul li:not(li:has(a.html))", this.toolbar).hide();
+ $("ul:not(:has(:visible))", this.toolbar).hide();
+ $("ul li a.html", this.toolbar).addClass("highlighted");
+ },
+ hideHTMLView: function() {
+ this.updateHtmlArea();
+ this.textarea.hide();
+ this.htmlarea.show();
+ $("ul", this.toolbar).show();
+ $("ul li", this.toolbar).show().find("a.html").removeClass("highlighted");
+ },
+ toggleHTMLView: function() {
+ (this.textarea.is(":hidden")) ? this.showHTMLView() : this.hideHTMLView();
+ },
+
+ toHtmlString: function() {
+ return this.editor.body.innerHTML;
+ },
+ toString: function() {
+ return this.editor.body.innerText;
+ },
+
+ updateTextArea: function() {
+ this.textarea.val(this.toHtmlString());
+ },
+ updateHtmlArea: function() {
+ this.editor.body.innerHTML = this.textarea.val();
+ }
+ };
+ jHtmlArea.fn.init.prototype = jHtmlArea.fn;
+
+ jHtmlArea.defaultOptions = {
+ toolbar: [
+ ["html"], ["bold", "italic", "underline", "strikethrough", "|", "subscript", "superscript"],
+ ["increasefontsize", "decreasefontsize"],
+ ["orderedlist", "unorderedlist"],
+ ["indent", "outdent"],
+ ["justifyleft", "justifycenter", "justifyright"],
+ ["link", "unlink", "image", "horizontalrule"],
+ ["p", "h1", "h2", "h3", "h4", "h5", "h6"],
+ ["cut", "copy", "paste"]
+ ],
+ css: null,
+ toolbarText: {
+ bold: "Bold", italic: "Italic", underline: "Underline", strikethrough: "Strike-Through",
+ cut: "Cut", copy: "Copy", paste: "Paste",
+ h1: "Heading 1", h2: "Heading 2", h3: "Heading 3", h4: "Heading 4", h5: "Heading 5", h6: "Heading 6", p: "Paragraph",
+ indent: "Indent", outdent: "Outdent", horizontalrule: "Insert Horizontal Rule",
+ justifyleft: "Left Justify", justifycenter: "Center Justify", justifyright: "Right Justify",
+ increasefontsize: "Increase Font Size", decreasefontsize: "Decrease Font Size", forecolor: "Text Color",
+ link: "Insert Link", unlink: "Remove Link", image: "Insert Image",
+ orderedlist: "Insert Ordered List", unorderedlist: "Insert Unordered List",
+ subscript: "Subscript", superscript: "Superscript",
+ html: "Show/Hide HTML Source View"
+ }
+ };
+ var priv = {
+ toolbarButtons: {
+ strikethrough: "strikeThrough", orderedlist: "orderedList", unorderedlist: "unorderedList",
+ horizontalrule: "insertHorizontalRule",
+ justifyleft: "justifyLeft", justifycenter: "justifyCenter", justifyright: "justifyRight",
+ increasefontsize: "increaseFontSize", decreasefontsize: "decreaseFontSize",
+ html: function(btn) {
+ this.toggleHTMLView();
+ }
+ },
+ initEditor: function(options) {
+ var edit = this.editor = this.iframe[0].contentWindow.document;
+ edit.designMode = 'on';
+ edit.open();
+ edit.write(this.textarea.val());
+ edit.close();
+ if (options.css) {
+ var e = edit.createElement('link'); e.rel = 'stylesheet'; e.type = 'text/css'; e.href = options.css; edit.getElementsByTagName('head')[0].appendChild(e);
+ }
+ },
+ initToolBar: function(options) {
+ var that = this;
+
+ var menuItem = function(className, altText, action) {
+ return $("
").append($("
").addClass(className).attr("title", altText).click(function() { action.call(that, $(this)); }));
+ };
+
+ function addButtons(arr) {
+ var ul = $("
").appendTo(that.toolbar);
+ for (var i = 0; i < arr.length; i++) {
+ var e = arr[i];
+ if ((typeof (e)).toLowerCase() === "string") {
+ if (e === "|") {
+ ul.append($('
'));
+ } else {
+ var f = (function(e) {
+ // If button name exists in priv.toolbarButtons then call the "method" defined there, otherwise call the method with the same name
+ var m = priv.toolbarButtons[e] || e;
+ if ((typeof (m)).toLowerCase() === "function") {
+ return function(btn) { m.call(this, btn); };
+ } else {
+ return function() { this[m](); this.editor.body.focus(); };
+ }
+ })(e.toLowerCase());
+ var t = options.toolbarText[e.toLowerCase()];
+ ul.append(menuItem(e.toLowerCase(), t || e, f));
+ }
+ } else {
+ ul.append(menuItem(e.css, e.text, e.action));
+ }
+ }
+ };
+ if (options.toolbar.length !== 0 && priv.isArray(options.toolbar[0])) {
+ for (var i = 0; i < options.toolbar.length; i++) {
+ addButtons(options.toolbar[i]);
+ }
+ } else {
+ addButtons(options.toolbar);
+ }
+ },
+ attachEditorEvents: function() {
+ var t = this;
+
+ var fnHA = function() {
+ t.updateHtmlArea();
+ };
+
+ this.textarea.click(fnHA).
+ keyup(fnHA).
+ keydown(fnHA).
+ mousedown(fnHA).
+ blur(fnHA);
+
+
+
+ var fnTA = function() {
+ t.updateTextArea();
+ };
+
+ $(this.editor.body).click(fnTA).
+ keyup(fnTA).
+ keydown(fnTA).
+ mousedown(fnTA).
+ blur(fnTA);
+
+ $('form').submit(function() { t.toggleHTMLView(); t.toggleHTMLView(); });
+ //$(this.textarea[0].form).submit(function() { //this.textarea.closest("form").submit(function() {
+
+
+ // Fix for ASP.NET Postback Model
+ if (window.__doPostBack) {
+ var old__doPostBack = __doPostBack;
+ window.__doPostBack = function() {
+ if (t) {
+ if (t.toggleHTMLView) {
+ t.toggleHTMLView();
+ t.toggleHTMLView();
+ }
+ }
+ return old__doPostBack.apply(window, arguments);
+ };
+ }
+
+ },
+ isArray: function(v) {
+ return v && typeof v === 'object' && typeof v.length === 'number' && typeof v.splice === 'function' && !(v.propertyIsEnumerable('length'));
+ }
+ };
+})(jQuery);
\ No newline at end of file
diff --git a/3.1/modules/pages/models/static_page.php b/3.1/modules/pages/models/static_page.php
new file mode 100644
index 00000000..b5519123
--- /dev/null
+++ b/3.1/modules/pages/models/static_page.php
@@ -0,0 +1,21 @@
+
+
+
+ $pages_per_column = $pages->count()/5 ?>
+ $column_page_count = 0 ?>
+
+
+
= t("Manage pages") ?>
+ = $form; ?>
+
+
+
+ = t2("There is one page", "There are %count pages", $pages->count()) ?>
+ ">=t("Add new page") ?>
+
+
+
+ foreach ($pages as $i => $one_page): ?>
+ $current_letter = strtoupper(mb_substr($one_page->name, 0, 1)) ?>
+
+ if ($i == 0): /* first letter */ ?>
+ = html::clean($current_letter) ?>
+
+ elseif ($last_letter != $current_letter): /* new letter */ ?>
+
+ if ($column_page_count > $pages_per_column): /* new column */ ?>
+ $column_page_count = 0 ?>
+
+
+ endif ?>
+ = html::clean($current_letter) ?>
+
+
+
+
+
+
diff --git a/3.1/modules/pages/views/admin_pages_new.html.php b/3.1/modules/pages/views/admin_pages_new.html.php
new file mode 100644
index 00000000..b7b59532
--- /dev/null
+++ b/3.1/modules/pages/views/admin_pages_new.html.php
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
= $theme->page_title ?>
+
+ =$form ?>
+
+
diff --git a/3.1/modules/pages/views/pages_display.html.php b/3.1/modules/pages/views/pages_display.html.php
new file mode 100644
index 00000000..723f057a
--- /dev/null
+++ b/3.1/modules/pages/views/pages_display.html.php
@@ -0,0 +1,26 @@
+
+ if (module::get_var("pages", "show_sidebar")) : ?>
+
+ endif ?>
+
+
= t($title) ?>
+
+ =t($body) ?>
+
+
diff --git a/3.1/modules/pages/views/pages_sidebar.html.php b/3.1/modules/pages/views/pages_sidebar.html.php
new file mode 100644
index 00000000..af959fa7
--- /dev/null
+++ b/3.1/modules/pages/views/pages_sidebar.html.php
@@ -0,0 +1,2 @@
+
+= $links ?>
diff --git a/3.1/modules/pam/module.info b/3.1/modules/pam/module.info
index 337421a6..8913996a 100644
--- a/3.1/modules/pam/module.info
+++ b/3.1/modules/pam/module.info
@@ -1,3 +1,7 @@
name = "PAM"
description = "Pluggable authentication module allows users to login by using external authentication methods."
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:pam"
+discuss_url = "http://gallery.menalto.com/forum_module_pam"
diff --git a/3.1/modules/photoannotation/module.info b/3.1/modules/photoannotation/module.info
index 133c2456..cdee8427 100644
--- a/3.1/modules/photoannotation/module.info
+++ b/3.1/modules/photoannotation/module.info
@@ -1,3 +1,7 @@
name = "Photo Annotation"
description = "Allows you to assign tags and notes to areas on your photos. This module is partially compatible with the TagFaces module by rWatcher. This means that notes and faces that you create in either one will be shown and are editable by the other module as well. If you added users to an annotation area though they will only be displayed with the Photo Annotation module. You cannot run both modules at the same time."
version = 4
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:photoannotation"
+discuss_url = "http://gallery.menalto.com/forum_module_photoannotation"
diff --git a/3.1/modules/phpmailer/controllers/admin_phpmailer.php b/3.1/modules/phpmailer/controllers/admin_phpmailer.php
index d7b6941d..b64248aa 100644
--- a/3.1/modules/phpmailer/controllers/admin_phpmailer.php
+++ b/3.1/modules/phpmailer/controllers/admin_phpmailer.php
@@ -36,18 +36,28 @@ class Admin_PHPMailer_Controller extends Admin_Controller {
$str_phpmailer_from_addr = Input::instance()->post("phpmailer_from_address");
$str_phpmailer_from_name = Input::instance()->post("phpmailer_from_name");
$str_smtp_server = Input::instance()->post("phpmailer_smtp_server");
+ $str_use_ssl = Input::instance()->post("phpmailer_use_ssl");
$str_smtp_login = Input::instance()->post("phpmailer_smtp_login");
$str_smtp_pass = Input::instance()->post("phpmailer_smtp_password");
-
+ $str_smtp_port = Input::instance()->post("phpmailer_smtp_port");
+
+ if (count($str_use_ssl) > 0) {
+ $str_use_ssl = true;
+ } else {
+ $str_use_ssl = false;
+ }
+
// Save Settings.
module::set_var("phpmailer", "phpmailer_path", $str_phpmailer_path);
module::set_var("phpmailer", "phpmailer_from_address", $str_phpmailer_from_addr);
module::set_var("phpmailer", "phpmailer_from_name", $str_phpmailer_from_name);
module::set_var("phpmailer", "smtp_server", $str_smtp_server);
+ module::set_var("phpmailer", "use_ssl", $str_use_ssl);
module::set_var("phpmailer", "smtp_login", $str_smtp_login);
module::set_var("phpmailer", "smtp_password", $str_smtp_pass);
+ module::set_var("phpmailer", "smtp_port", $str_smtp_port);
message::success(t("Your Settings Have Been Saved."));
-
+
// Load Admin page.
$view = new Admin_View("admin.html");
$view->content = new View("admin_phpmailer.html");
@@ -80,9 +90,15 @@ class Admin_PHPMailer_Controller extends Admin_Controller {
$phpmailerSMTP->input("phpmailer_smtp_login")
->label(t("SMTP Login Name"))
->value(module::get_var("phpmailer", "smtp_login"));
- $phpmailerSMTP->input("phpmailer_smtp_password")
+ $phpmailerSMTP->password("phpmailer_smtp_password")
->label(t("SMTP Password"))
->value(module::get_var("phpmailer", "smtp_password"));
+ $phpmailerSMTP->input("phpmailer_smtp_port")
+ ->label(t("SMTP Port"))
+ ->value(module::get_var("phpmailer", "smtp_port"));
+ $phpmailer_checklist["use_ssl_checkbox"] = array(t("Use SSL?"), module::get_var("phpmailer", "use_ssl"));
+ $phpmailerSMTP->checklist("phpmailer_use_ssl")
+ ->options($phpmailer_checklist);
// Add a save button to the form.
$form->submit("SaveSettings")->value(t("Save"));
@@ -90,4 +106,4 @@ class Admin_PHPMailer_Controller extends Admin_Controller {
// Return the newly generated form.
return $form;
}
-}
\ No newline at end of file
+}
diff --git a/3.1/modules/phpmailer/helpers/phpmailer_installer.php b/3.1/modules/phpmailer/helpers/phpmailer_installer.php
new file mode 100644
index 00000000..8fb8b0cd
--- /dev/null
+++ b/3.1/modules/phpmailer/helpers/phpmailer_installer.php
@@ -0,0 +1,41 @@
+IsSMTP();
$mail->Host = module::get_var("phpmailer", "smtp_server");
+ $mail->Port = module::get_var("phpmailer", "smtp_port");
+ $mail->SMTPDebug = 1;
if (module::get_var("phpmailer", "smtp_login") != "") {
$mail->SMTPAuth = true;
+ if (module::get_var("phpmailer", "use_ssl") == true) {
+ $mail->SMTPSecure = "ssl";
+ }
$mail->Username = module::get_var("phpmailer", "smtp_login");
$mail->Password = module::get_var("phpmailer", "smtp_password");
} else {
@@ -115,9 +126,26 @@ class Sendmail_Core {
$mail->FromName = module::get_var("phpmailer", "phpmailer_from_name");
$mail->AddAddress($to);
$mail->IsHTML(true);
+
+ // demdel's fix for the ecard module.
+ $boundaryLine = explode("\n", $message, -1);
+ $newboundary = substr($boundaryLine[0],2);
+ if (preg_match("/--/", $boundaryLine[0])) {
+ if (preg_match("/--".$newboundary."--/", end($boundaryLine))) {
+ $mail->CharSet = "UTF-8";
+ $mail->ContentType = "multipart/related; boundary=\"".$newboundary."\"";
+ }
+ }
+
$mail->Subject = $subject;
$mail->Body = $message;
- return $mail->Send();
+ // Log any errors.
+ if (!$mail->Send()) {
+ Kohana_Log::add("error", wordwrap($mail->ErrorInfo));
+ return false;
+ } else {
+ return true;
+ }
}
-}
\ No newline at end of file
+}
diff --git a/3.1/modules/phpmailer/module.info b/3.1/modules/phpmailer/module.info
index 419d85d5..c8659374 100644
--- a/3.1/modules/phpmailer/module.info
+++ b/3.1/modules/phpmailer/module.info
@@ -1,3 +1,7 @@
name = "PHPMailer"
description = "Use PHPMailer when sending email messages."
-version = 1
+version = 2
+author_name = "rWatcher"
+author_url = "http://codex.gallery2.org/User:RWatcher"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:phpmailer"
+discuss_url = "http://gallery.menalto.com/node/89279"
diff --git a/3.1/modules/polar_rose/module.info b/3.1/modules/polar_rose/module.info
index d74bbf6c..af083e09 100644
--- a/3.1/modules/polar_rose/module.info
+++ b/3.1/modules/polar_rose/module.info
@@ -1,3 +1,7 @@
name = "Polar Rose"
description = "Integrate Gallery with the Polar Rose facial recognition service."
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:polar_rose"
+discuss_url = "http://gallery.menalto.com/forum_module_polar_rose"
diff --git a/3.1/modules/purifier/module.info b/3.1/modules/purifier/module.info
index 4819b4e5..b29a0f0a 100644
--- a/3.1/modules/purifier/module.info
+++ b/3.1/modules/purifier/module.info
@@ -1,3 +1,7 @@
name = "HTML Purifier"
description = "Enable XSS protection using HTMLPurifier"
version = 2
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:purifier"
+discuss_url = "http://gallery.menalto.com/forum_module_purifier"
diff --git a/3.1/modules/quotas/controllers/admin_quotas.php b/3.1/modules/quotas/controllers/admin_quotas.php
new file mode 100644
index 00000000..ac5bf8b5
--- /dev/null
+++ b/3.1/modules/quotas/controllers/admin_quotas.php
@@ -0,0 +1,152 @@
+page_title = t("Users and groups");
+ $view->page_type = "collection";
+ $view->page_subtype = "admin_users_quotas";
+ $view->content = new View("admin_quotas.html");
+
+ $page_size = module::get_var("user", "page_size", 10);
+ $page = Input::instance()->get("page", "1");
+ $builder = db::build();
+ $user_count = $builder->from("users")->count_records();
+
+ $view->page = $page;
+ $view->page_size = $page_size;
+ $view->children_count = $user_count;
+ $view->max_pages = ceil($view->children_count / $view->page_size);
+
+ $view->content->pager = new Pagination();
+ $view->content->pager->initialize(
+ array("query_string" => "page",
+ "total_items" => $user_count,
+ "items_per_page" => $page_size,
+ "style" => "classic"));
+
+ if ($page < 1) {
+ url::redirect(url::merge(array("page" => 1)));
+ } else if ($page > $view->content->pager->total_pages) {
+ url::redirect(url::merge(array("page" => $view->content->pager->total_pages)));
+ }
+
+ $view->content->users = ORM::factory("user")
+ ->order_by("users.name", "ASC")
+ ->find_all($page_size, $view->content->pager->sql_offset);
+ $view->content->groups = ORM::factory("group")->order_by("name", "ASC")->find_all();
+ $view->content->quota_options = $this->_get_quota_settings_form();
+ print $view;
+ }
+
+ public function form_group_quota($id) {
+ // Display the form for setting a quota for the specified group ($id).
+ $group = ORM::factory("group", $id);
+ if (empty($group)) {
+ throw new Kohana_404_Exception();
+ }
+ print $this->_get_edit_group_quota($group);
+ }
+
+ static function _get_edit_group_quota($group) {
+ // Generate a form for setting a quota for the specified group ($group).
+ $record = ORM::factory("groups_quota")->where("group_id", "=", $group->id)->find();
+ $form = new Forge(
+ "admin/quotas/edit_quota/$group->id", "", "post", array("id" => "g-edit-quota-form"));
+ $group = $form->group("edit_quota")->label(t("Edit group quota"));
+ $group->input("group_quota")->label(t("Limit (MB)"))->id("g-group_quota")->value($record->storage_limit / 1024 / 1024)
+ ->error_messages("required", t("A value is required"));
+
+ $group->submit("")->value(t("Save"));
+ return $form;
+ }
+
+ public function edit_quota($id) {
+ // Save the specified quota to the database.
+ access::verify_csrf();
+
+ $group = ORM::factory("group", $id);
+ if (empty($group)) {
+ throw new Kohana_404_Exception();
+ }
+
+ $record = ORM::factory("groups_quota")->where("group_id", "=", $group->id)->find();
+ $form = $this->_get_edit_group_quota($group);
+ try {
+ $valid = $form->validate();
+ $record->group_id = $id;
+ $record->storage_limit = $form->edit_quota->inputs["group_quota"]->value * 1024 * 1024;
+ } catch (ORM_Validation_Exception $e) {
+ // Translate ORM validation errors into form error messages
+ foreach ($e->validation->errors() as $key => $error) {
+ $form->edit_quota->inputs[$key]->add_error($error, 1);
+ }
+ $valid = false;
+ }
+
+ if ($valid) {
+ $record->save();
+ message::success(t("Limit for group %group_name set", array("group_name" => $group->name)));
+ json::reply(array("result" => "success"));
+ } else {
+ json::reply(array("result" => "error", "html" => (string) $form));
+ }
+ }
+
+ private function _get_quota_settings_form() {
+ // Make a new form to allow the admin to specify how the system should calculate a user's quota.
+ $form = new Forge("admin/quotas/saveprefs", "", "post",
+ array("id" => "g-quotas-admin-form"));
+
+ // Setup a checkbox for the form.
+ $quota_options["use_all_sizes"] = array(t("Count resizes and thumbnails towards a users limit?"), module::get_var("quotas", "use_all_sizes"));
+ $add_links = $form->group("quota_preferences");
+ $add_links->checklist("quota_preferences_list")
+ ->options($quota_options);
+
+ // Add a save button to the form.
+ $form->submit("save_preferences")->value(t("Save"));
+
+ // Return the newly generated form.
+ return $form;
+ }
+
+ public function saveprefs() {
+ // Prevent Cross Site Request Forgery
+ access::verify_csrf();
+
+ // Figure out which boxes where checked
+ $checkboxes_array = Input::instance()->post("quota_preferences_list");
+ $use_all_sizes = false;
+ for ($i = 0; $i < count($checkboxes_array); $i++) {
+ if ($checkboxes_array[$i] == "use_all_sizes") {
+ $use_all_sizes = true;
+ }
+ }
+
+ // Save Settings.
+ module::set_var("quotas", "use_all_sizes", $use_all_sizes);
+ message::success(t("Your Selection Has Been Saved."));
+
+ // Load Admin page.
+ url::redirect("admin/quotas");
+ }
+}
diff --git a/3.1/modules/quotas/helpers/quotas_event.php b/3.1/modules/quotas/helpers/quotas_event.php
new file mode 100644
index 00000000..aa832fd1
--- /dev/null
+++ b/3.1/modules/quotas/helpers/quotas_event.php
@@ -0,0 +1,110 @@
+get("content_menu")
+ ->append(Menu::factory("link")
+ ->id("quotas")
+ ->label(t("User quotas"))
+ ->url(url::site("admin/quotas")));
+ }
+
+ static function user_created($user) {
+ // Set up some default values whenever a new user is created.
+ $record = ORM::factory("users_space_usage")->where("owner_id", "=", $user->id)->find();
+ if (!$record->loaded()) {
+ $record->owner_id = $user->id;
+ $record->fullsize = 0;
+ $record->resize = 0;
+ $record->thumb = 0;
+ $record->save();
+ }
+ }
+
+ static function user_before_delete($user) {
+ // When deleting a user, all of that user's items get re-assigned to the admin account,
+ // so the file sizes need to be reassigned to the admin user as well.
+ $admin = identity::admin_user();
+ $admin_record = ORM::factory("users_space_usage")->where("owner_id", "=", $admin->id)->find();
+ $deleted_user_record = ORM::factory("users_space_usage")->where("owner_id", "=", $user->id)->find();
+ if ($deleted_user_record->loaded()) {
+ $admin_record->fullsize = $admin_record->fullsize + $deleted_user_record->fullsize;
+ $admin_record->resize = $admin_record->resize + $deleted_user_record->resize;
+ $admin_record->thumb = $admin_record->thumb + $deleted_user_record->thumb;
+ $admin_record->save();
+ $deleted_user_record->delete();
+ }
+ }
+
+ static function item_before_create($item) {
+ // When creating a new item, make sure it's file size won't put the user over their limit.
+ // If it does, throw an error, which will prevent gallery from accepting the file.
+ $record = ORM::factory("users_space_usage")->where("owner_id", "=", $item->owner_id)->find();
+ if (!$record->loaded()) {
+ $record->owner_id = $item->owner_id;
+ }
+ if ($record->get_usage_limit() == 0) {
+ return;
+ }
+ if ((filesize($item->data_file) + $record->current_usage()) > $record->get_usage_limit()) {
+ throw new Exception($item->name . " rejected, user #" . $item->owner_id . " over limit.");
+ }
+ }
+
+ static function item_created($item) {
+ // When a new item is created, add it's file size to the users_space_usage table.
+ $record = ORM::factory("users_space_usage")->where("owner_id", "=", $item->owner_id)->find();
+ if (!$record->loaded()) {
+ $record->owner_id = $item->owner_id;
+ $record->fullsize = 0;
+ $record->resize = 0;
+ $record->thumb = 0;
+ $record->save();
+ }
+ $record->add_item($item);
+ }
+
+ static function item_before_delete($item) {
+ // When an item is deleted, remove it's file size from the users_space_usage table.
+ $record = ORM::factory("users_space_usage")->where("owner_id", "=", $item->owner_id)->find();
+ $record->remove_item($item);
+ }
+
+ // I can't monitor the item_before_update / item_updated events to adjust for rotated photos,
+ // because they fire when a new photo is uploaded (before it's created) and cause all kinds of weirdness.
+ // So instead, I'm using graphics_rotate to detect a rotate and remove the existing file sizes, and
+ // item_updated_data_file to add in the new data file sizes.
+ // Does item_updated_data_file fire for any other reason? (watermarking? renaming/moving/deleting/keeporiginal do not cause updated_data_file.)
+ static function graphics_rotate($input_file, $output_file, $options) {
+ // Remove the current item's file size from the quotas table.
+ $item = item::find_by_path(substr(str_replace(VARPATH, "", $input_file), strpos(str_replace(VARPATH, "", $input_file), "/")+1));
+ if ($item->loaded()) {
+ $record = ORM::factory("users_space_usage")->where("owner_id", "=", $item->owner_id)->find();
+ $record->remove_item($item);
+ }
+ }
+
+ static function item_updated_data_file($item) {
+ // Add the current item's file size into the quotas table.
+ $record = ORM::factory("users_space_usage")->where("owner_id", "=", $item->owner_id)->find();
+ $record->add_item($item);
+ }
+}
diff --git a/3.1/modules/quotas/helpers/quotas_installer.php b/3.1/modules/quotas/helpers/quotas_installer.php
new file mode 100644
index 00000000..6eb46f4a
--- /dev/null
+++ b/3.1/modules/quotas/helpers/quotas_installer.php
@@ -0,0 +1,47 @@
+query("CREATE TABLE IF NOT EXISTS {users_space_usages} (
+ `id` int(9) NOT NULL auto_increment,
+ `owner_id` int(9) NOT NULL,
+ `fullsize` BIGINT UNSIGNED NOT NULL,
+ `resize` BIGINT UNSIGNED NOT NULL,
+ `thumb` BIGINT UNSIGNED NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY(`owner_id`, `id`))
+ DEFAULT CHARSET=utf8;");
+
+ $db->query("CREATE TABLE IF NOT EXISTS {groups_quotas} (
+ `id` int(9) NOT NULL auto_increment,
+ `group_id` int(9) NOT NULL,
+ `storage_limit` BIGINT UNSIGNED NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY(`group_id`, `id`))
+ DEFAULT CHARSET=utf8;");
+
+ module::set_var("quotas", "use_all_sizes", true);
+
+ // Set the module version number.
+ module::set_version("quotas", 1);
+ }
+}
diff --git a/3.1/modules/quotas/helpers/quotas_task.php b/3.1/modules/quotas/helpers/quotas_task.php
new file mode 100644
index 00000000..4413520b
--- /dev/null
+++ b/3.1/modules/quotas/helpers/quotas_task.php
@@ -0,0 +1,126 @@
+where("users.guest", "=", "0")
+ ->join("users_space_usages", "users.id", "users_space_usages.owner_id", "LEFT OUTER")
+ ->and_where("users_space_usages.owner_id", "IS", NULL)->count_all();
+
+ $tasks = array();
+ $tasks[] = Task_Definition::factory()
+ ->callback("quotas_task::update_quotasdb")
+ ->name(t("Rebuild user quotas table"))
+ ->description(t("Recalculates each users space usage."))
+ ->severity($missing_users ? log::WARNING : log::SUCCESS);
+
+ return $tasks;
+ }
+
+ static function update_quotasdb($task) {
+ // Re-create the users_space_usages table and recalculate all values.
+
+ // Retrieve the total variable. If this is the first time this function has been run,
+ // total will be empty.
+ $total = $task->get("total");
+ $existing_items = ORM::factory("item")->where("type", "!=", "album")->find_all();
+
+ if (empty($total)) {
+ // If this is the first time this function has been run,
+ // delete and re-create the users_space_usages table, and set up
+ // some initial variables.
+ $db = Database::instance();
+ $db->query("DROP TABLE IF EXISTS {users_space_usages};");
+ $db->query("CREATE TABLE IF NOT EXISTS {users_space_usages} (
+ `id` int(9) NOT NULL auto_increment,
+ `owner_id` int(9) NOT NULL,
+ `fullsize` BIGINT UNSIGNED NOT NULL,
+ `resize` BIGINT UNSIGNED NOT NULL,
+ `thumb` BIGINT UNSIGNED NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY(`owner_id`, `id`))
+ DEFAULT CHARSET=utf8;");
+
+ // Set the initial values for all variables.
+ $task->set("total", count($existing_items));
+ $total = $task->get("total");
+ $task->set("last_id", 0);
+ $task->set("completed_items", 0);
+ $task->set("total_users", ORM::factory("user")->where("guest", "=", "0")->count_all());
+ $task->set("completed_users", 0);
+ $task->set("last_user_id", 0);
+ }
+
+ // Retrieve the values for variables from the last time this
+ // function was run.
+ $last_id = $task->get("last_id");
+ $completed_items = $task->get("completed_items");
+ $total_users = $task->get("total_users");
+ $completed_users = $task->get("completed_users");
+ $last_user_id = $task->get("last_user_id");
+
+ // First set up default values for all non-guest users.
+ if ($total_users > $completed_users) {
+ $one_user = ORM::factory("user")
+ ->where("guest", "=", "0")
+ ->where("id", ">", $last_user_id)
+ ->order_by("id")
+ ->find_all(1);
+ $record = ORM::factory("users_space_usage")->where("owner_id", "=", $one_user[0]->id)->find();
+ if (!$record->loaded()) {
+ $record->owner_id = $one_user[0]->id;
+ $record->fullsize = 0;
+ $record->resize = 0;
+ $record->thumb = 0;
+ $record->save();
+ }
+ $task->set("last_user_id", $one_user[0]->id);
+ $task->set("completed_users", ++$completed_users);
+ $task->status = t("Populating quotas table...");
+
+ } else {
+ // Loop through each non-album item in Gallery and log its file size to its owner.
+ $item = ORM::factory("item")
+ ->where("type", "!=", "album")
+ ->where("id", ">", $last_id)
+ ->order_by("id")
+ ->find_all(1);
+ $record = ORM::factory("users_space_usage")->where("owner_id", "=", $item[0]->owner_id)->find();
+ $record->add_item($item[0]);
+
+ // Store the current position and update the status message.
+ $task->set("last_id", $item[0]->id);
+ $task->set("completed_items", ++$completed_items);
+ if ($total == $completed_items) {
+ $task->done = true;
+ $task->state = "success";
+ $task->percent_complete = 100;
+ $task->status = t("Complete");
+ } else {
+ $task->percent_complete = round(100 * $completed_items / $total);
+ $task->status = t("Scanning $completed_items of $total files");
+ }
+ }
+ }
+}
diff --git a/3.1/modules/quotas/helpers/quotas_theme.php b/3.1/modules/quotas/helpers/quotas_theme.php
new file mode 100644
index 00000000..7a4e0916
--- /dev/null
+++ b/3.1/modules/quotas/helpers/quotas_theme.php
@@ -0,0 +1,35 @@
+guest) {
+ $record = ORM::factory("users_space_usage")->where("owner_id", "=", identity::active_user()->id)->find();
+ if ($record->get_usage_limit() == 0) {
+ print t("You are using %usage MB", array("usage" => number_format($record->total_usage_mb(), 2)));
+ } else {
+ print t("You are using %usage of your %limit MB limit (%percentage%)",
+ array("usage" => number_format($record->current_usage_mb(), 2),
+ "limit" => number_format($record->get_usage_limit_mb(), 2),
+ "percentage" => number_format((($record->current_usage() / $record->get_usage_limit()) * 100), 2)));
+ }
+ }
+ }
+}
diff --git a/3.1/modules/quotas/models/groups_quota.php b/3.1/modules/quotas/models/groups_quota.php
new file mode 100644
index 00000000..25af34e1
--- /dev/null
+++ b/3.1/modules/quotas/models/groups_quota.php
@@ -0,0 +1,21 @@
+$file_type / 1024 / 1024);
+ }
+
+ public function total_usage() {
+ // Return the user's total usage in bytes.
+ return ($this->fullsize + $this->resize + $this->thumb);
+ }
+
+ public function total_usage_mb() {
+ // Return the user's total usage in megabytes.
+ return (($this->total_usage()) / 1024 / 1024);
+ }
+
+ public function current_usage() {
+ // Return the users relevant usage in bytes based on the use_all_sizes setting.
+ if (module::get_var("quotas", "use_all_sizes") == true) {
+ return $this->total_usage();
+ } else {
+ return $this->fullsize;
+ }
+ }
+
+ public function current_usage_mb() {
+ // Return the users relevant usage in megabytes based on the use_all_sizes setting.
+ return ($this->current_usage() / 1024 / 1024);
+ }
+
+ public function get_usage_limit() {
+ // Returns a user's maximum limit in bytes.
+ $user_groups = ORM::factory("group")
+ ->join("groups_users", "groups_users.group_id", "groups.id")
+ ->join("groups_quotas", "groups_quotas.group_id", "groups.id")
+ ->select("groups.id")
+ ->select("groups_quotas.storage_limit")
+ ->where("groups_users.user_id", "=", $this->owner_id)
+ ->order_by("groups_quotas.storage_limit", "DESC")
+ ->find_all(1);
+ if (!empty($user_groups)) {
+ if ($user_groups[0]->storage_limit <= "0") {
+ return 0;
+ } else {
+ return $user_groups[0]->storage_limit;
+ }
+ }
+ return 0;
+ }
+
+ public function get_usage_limit_mb() {
+ // Returns a user's maximum limit in megabytes.
+ return ($this->get_usage_limit() / 1024 / 1024);
+ }
+
+ public function add_item($item) {
+ // Adds an item's file size to the table.
+ if ($item->is_album()) {
+ return ;
+ }
+
+ $item_fullsize = 0;
+ $item_resize = 0;
+ $item_thumb = 0;
+
+ if (file_exists($item->file_path())) {
+ $item_fullsize = filesize($item->file_path());
+ }
+ if (file_exists($item->thumb_path())) {
+ $item_thumb = filesize($item->thumb_path());
+ }
+ if (file_exists($item->resize_path())) {
+ $item_resize = filesize($item->resize_path());
+ }
+
+ $this->fullsize = $this->fullsize + $item_fullsize;
+ $this->resize = $this->resize + $item_resize;
+ $this->thumb = $this->thumb + $item_thumb;
+ $this->save();
+
+ return ;
+ }
+
+ public function remove_item($item) {
+ // Removes an item's file size from the table.
+ if ($item->is_album()) {
+ return ;
+ }
+
+ $item_fullsize = 0;
+ $item_resize = 0;
+ $item_thumb = 0;
+
+ if (file_exists($item->file_path())) {
+ $item_fullsize = filesize($item->file_path());
+ }
+ if (file_exists($item->thumb_path())) {
+ $item_thumb = filesize($item->thumb_path());
+ }
+ if (file_exists($item->resize_path())) {
+ $item_resize = filesize($item->resize_path());
+ }
+
+ $this->fullsize = $this->fullsize - $item_fullsize;
+ $this->resize = $this->resize - $item_resize;
+ $this->thumb = $this->thumb - $item_thumb;
+ $this->save();
+
+ return ;
+ }
+}
diff --git a/3.1/modules/quotas/module.info b/3.1/modules/quotas/module.info
new file mode 100644
index 00000000..11f9f668
--- /dev/null
+++ b/3.1/modules/quotas/module.info
@@ -0,0 +1,7 @@
+name = "Quotas"
+description = "Assign quotas to user groups and track each users space usage."
+version = 1
+author_name = "rWatcher"
+author_url = "http://codex.gallery2.org/User:RWatcher"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:quotas"
+discuss_url = "http://gallery.menalto.com/node/103606"
diff --git a/3.1/modules/quotas/views/admin_quotas.html.php b/3.1/modules/quotas/views/admin_quotas.html.php
new file mode 100644
index 00000000..e1f63763
--- /dev/null
+++ b/3.1/modules/quotas/views/admin_quotas.html.php
@@ -0,0 +1,98 @@
+
+
+
= t("User quotas") ?>
+
+
+
+
+
+
= t("Users") ?>
+
+
+
+
+ = t("Username") ?>
+ = t("Full name") ?>
+ = t("Fullsize") ?>
+ = t("Resize") ?>
+ = t("Thumbs") ?>
+ = t("Total") ?>
+ = t("Limit") ?>
+
+
+ foreach ($users as $i => $user): ?>
+ $record = ORM::factory("users_space_usage")->where("owner_id", "=", $user->id)->find(); ?>
+ g-user = $user->admin ? "g-admin" : "" ?>">
+
+ "
+ alt="= html::clean_attribute($user->name) ?>"
+ width="20"
+ height="20" />
+ = html::clean($user->name) ?>
+
+
+ = html::clean($user->full_name) ?>
+
+
+ = number_format($record->partial_usage_mb("fullsize"), 2); ?> MB
+
+
+ = number_format($record->partial_usage_mb("resize"), 2); ?> MB
+
+
+ = number_format($record->partial_usage_mb("thumb"), 2); ?> MB
+
+
+ = number_format($record->total_usage_mb(), 2) ?> MB
+
+
+ = number_format($record->get_usage_limit_mb(), 2) ?> MB
+
+
+ endforeach ?>
+
+
+
+ = $theme->paginator() ?>
+
+
+
+
+
+
+
+
+
+
+
+
= t("Settings") ?>
+ = $quota_options ?>
+
+
+
diff --git a/3.1/modules/rectangle_thumbs/module.info b/3.1/modules/rectangle_thumbs/module.info
index dd132506..342e3795 100644
--- a/3.1/modules/rectangle_thumbs/module.info
+++ b/3.1/modules/rectangle_thumbs/module.info
@@ -1,3 +1,7 @@
name = "Rectangle Thumbnails"
description = "Force all thumbnails to be a specific rectangular aspect ratio"
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:rectangle_thumbs"
+discuss_url = "http://gallery.menalto.com/forum_module_rectangle_thumbs"
diff --git a/3.1/modules/register/module.info b/3.1/modules/register/module.info
index 7d83a7e4..36133cab 100755
--- a/3.1/modules/register/module.info
+++ b/3.1/modules/register/module.info
@@ -1,3 +1,7 @@
name = "User Registration"
description = "Allow guests to register as users."
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:register"
+discuss_url = "http://gallery.menalto.com/forum_module_register"
diff --git a/3.1/modules/remote/module.info b/3.1/modules/remote/module.info
index c526165b..89b1d177 100644
--- a/3.1/modules/remote/module.info
+++ b/3.1/modules/remote/module.info
@@ -1,3 +1,7 @@
name = "Gallery Remote"
description = "Use Gallery Remote and other similar applications to control your Gallery"
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:remote"
+discuss_url = "http://gallery.menalto.com/forum_module_remote"
diff --git a/3.1/modules/rwinfo/module.info b/3.1/modules/rwinfo/module.info
index 684a31a0..c0f2250b 100644
--- a/3.1/modules/rwinfo/module.info
+++ b/3.1/modules/rwinfo/module.info
@@ -1,3 +1,7 @@
name = "rWInfo"
description = "Display extra information about photos and albums"
version = 2
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:rwinfo"
+discuss_url = "http://gallery.menalto.com/forum_module_rwinfo"
diff --git a/3.1/modules/scheduler/module.info b/3.1/modules/scheduler/module.info
index 15355dfb..8d5c9f5e 100644
--- a/3.1/modules/scheduler/module.info
+++ b/3.1/modules/scheduler/module.info
@@ -1,3 +1,7 @@
name = "Scheduler"
description = "Schedule tasks to run at specific times and intervals"
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:scheduler"
+discuss_url = "http://gallery.menalto.com/forum_module_scheduler"
diff --git a/3.1/modules/sharephoto/module.info b/3.1/modules/sharephoto/module.info
index 91c43483..03095bc4 100644
--- a/3.1/modules/sharephoto/module.info
+++ b/3.1/modules/sharephoto/module.info
@@ -1,3 +1,7 @@
name = "SharePhoto"
description = "Display a social bookmarking service from AddThis and HTML Links on each photo page. By Valon Ruka"
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:sharephoto"
+discuss_url = "http://gallery.menalto.com/forum_module_sharephoto"
diff --git a/3.1/modules/square_thumbs/module.info b/3.1/modules/square_thumbs/module.info
index 5bf3410d..2a976f88 100644
--- a/3.1/modules/square_thumbs/module.info
+++ b/3.1/modules/square_thumbs/module.info
@@ -1,3 +1,7 @@
name = "Square Thumbnails"
description = "Force all thumbnails to be square for a uniform appearance."
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:square_thumbs"
+discuss_url = "http://gallery.menalto.com/forum_module_square_thumbs"
diff --git a/3.1/modules/sso/module.info b/3.1/modules/sso/module.info
index 53e235a8..70399944 100644
--- a/3.1/modules/sso/module.info
+++ b/3.1/modules/sso/module.info
@@ -1,3 +1,7 @@
name = "SSO"
description = "Support single-signon authentication"
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:sso"
+discuss_url = "http://gallery.menalto.com/forum_module_sso"
diff --git a/3.1/modules/tag_albums/-- Theme Files/GreyDragon 3.1.0/views/calpage.html.php b/3.1/modules/tag_albums/-- Theme Files/GreyDragon 3.1.0/views/calpage.html.php
new file mode 100644
index 00000000..d385a514
--- /dev/null
+++ b/3.1/modules/tag_albums/-- Theme Files/GreyDragon 3.1.0/views/calpage.html.php
@@ -0,0 +1,298 @@
+
+
+ $theme->load_sessioninfo(); ?>
+
+html_attributes() ?> xml:lang="en" lang="en" = ($theme->is_rtl)? "dir=rtl" : null; ?> >
+
+ $item = $theme->item();
+ if (($theme->enable_pagecache) and (isset($item))):
+ // Page will expire in 60 seconds
+ header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 60).'GMT');
+ header("Cache-Control: public");
+ header("Cache-Control: post-check=3600, pre-check=43200", false);
+ header("Content-Type: text/html; charset=UTF-8");
+ header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
+ endif;
+?>
+
+
+
+ $theme->start_combining("script,css") ?>
+ if ($page_title): ?>
+ $_title = $page_title ?>
+ else: ?>
+ if ($theme->item()): ?>
+ $_title = $theme->bb2html($theme->item()->title, 2); ?>
+ elseif ($theme->tag()): ?>
+ $_title = t("Photos tagged with %tag_title", array("tag_title" => $theme->bb2html($theme->tag()->name, 2))) ?>
+ else: /* Not an item, not a tag, no page_title specified. Help! */ ?>
+ $_title = $theme->bb2html(item::root()->title, 2); ?>
+ endif ?>
+ endif ?>
+
= $_title ?>
+ if ($theme->disable_seosupport): ?>
+
+
+
+
+
+ endif; ?>
+
+
+
= $_title; ?>" />
+
+ if ($theme->allow_root_page): ?>
+
: = t("Root Page") ?>; action-uri== item::root()->url(); ?>?root=yes; icon-uri=favicon.ico" />
+
: = t("Root Album") ?>; action-uri== item::root()->url(); ?>?root=no; icon-uri=favicon.ico" />
+ else: ?>
+
: = t("Root Album") ?>; action-uri== item::root()->url(); ?>; icon-uri=favicon.ico" />
+ endif; ?>
+ if (identity::active_user()->admin): ?>
+
+
: = t("Dashboard") ?>; action-uri== url::site("admin"); ?>; icon-uri=favicon.ico" />
+ endif; ?>
+
+
+ if ($theme->appletouchicon): ?>
+
+ endif; ?>
+= $theme->script("json2-min.js") ?>
+= $theme->script("jquery.js") ?>
+= $theme->script("jquery.form.js") ?>
+= $theme->script("jquery-ui.js") ?>
+= $theme->script("gallery.common.js") ?>
+ /* MSG_CANCEL is required by gallery.dialog.js */ ?>
+
+= $theme->script("gallery.ajax.js"); ?>
+= $theme->script("gallery.dialog.js"); ?>
+
+ /* These are page specific but they get combined */ ?>
+ if ($theme->page_subtype == "photo"): ?>
+= $theme->script("jquery.scrollTo.js"); ?>
+ elseif ($theme->page_subtype == "movie"): ?>
+= $theme->script("flowplayer.js") ?>
+ endif ?>
+
+= $theme->head() ?>
+
+ // Theme specific CSS/JS goes last so that it can override module CSS/JS ?>
+= $theme->theme_js_inject(); ?>
+= $theme->theme_css_inject(); ?>
+= $theme->get_combined("css"); // LOOKING FOR YOUR CSS? It's all been combined into the link ?>
+= $theme->custom_css_inject(TRUE); ?>
+= $theme->get_combined("script") // LOOKING FOR YOUR JAVASCRIPT? It's all been combined into the link ?>
+
+
+ if ($theme->thumb_inpage): ?>
+
+ endif; ?>
+
+ if ($theme->item()):
+ $item = $theme->item();
+ else:
+ $item = item::root();
+ endif; ?>
+body_attributes() ?>= ($theme->show_root_page)? ' id="g-rootpage"' : null; ?> = $theme->get_bodyclass(); ?>>
+
+
+= $theme->page_top() ?>
+= $theme->site_status() ?>
+ if (((!$user->guest) or ($theme->show_guest_menu)) and ($theme->mainmenu_position == "bar")): ?>
+
+
+ = $theme->site_menu($theme->item() ? "#g-item-id-{$theme->item()->id}" : "") ?>
+
+ endif; ?>
+
+ if (($theme->page_subtype != "login") and ($theme->page_subtype != "reauthenticate") and ($theme->sidebarvisible == "top")): ?>
+
+ = new View("sidebar.html") ?>
+
+ endif; ?>
+
+
+ if (!$theme->show_root_page): ?>
+ = $theme->sidebar_menu($item->url()) ?>
+
+ endif; ?>
+ switch ($theme->sidebarvisible):
+ case "left":
+ echo '
';
+ $closediv = TRUE;
+ break;
+ case "none":
+ case "top":
+ case "bottom":
+ if (($theme->thumb_inpage) and ($page_subtype == "photo")):
+ echo '
';
+ $closediv = TRUE;
+ else:
+ $closediv = FALSE;
+ endif;
+ break;
+ default:
+ echo '
';
+ $closediv = TRUE;
+ break;
+ endswitch; ?>
+ if (($theme->page_subtype != "login") and ($theme->page_subtype != "reauthenticate")): ?>
+ if (($theme->sidebarvisible == "none") or ($theme->sidebarvisible == "bottom") or ($theme->sidebarvisible == "top")): ?>
+ if (($theme->thumb_inpage) and ($page_subtype == "photo")): ?>
+= '
'; ?>
+= $theme->get_block_html("thumbnav"); ?>
+ endif; ?>
+ else: ?>
+= new View("sidebar.html") ?>
+ endif; ?>
+ endif ?>
+= ($closediv)? "
" : null; ?>
+
+ switch ($theme->sidebarvisible):
+ case "left":
+ echo '
';
+ break;
+ case "none":
+ case "top":
+ case "bottom":
+ if (($theme->thumb_inpage) and ($page_subtype == "photo")):
+ echo '
';
+ else:
+ echo '
';
+ endif;
+ break;
+ default:
+ echo '
';
+ break;
+ endswitch;
+
+ if ($theme->show_root_page):
+ echo new View("rootpage.html");
+ else:
+ echo $content;
+ endif; ?>
+
+
+
+ if (($theme->page_subtype != "login") and ($theme->page_subtype != "reauthenticate") and ($theme->sidebarvisible == "bottom")): ?>
+
+ = new View("sidebar.html") ?>
+
+ endif; ?>
+
+= $theme->page_bottom() ?>
+
+
diff --git a/3.1/modules/tag_albums/-- Theme Files/GreyDragon 3.1.0/views/paginator.html.php b/3.1/modules/tag_albums/-- Theme Files/GreyDragon 3.1.0/views/paginator.html.php
new file mode 100644
index 00000000..0a85b414
--- /dev/null
+++ b/3.1/modules/tag_albums/-- Theme Files/GreyDragon 3.1.0/views/paginator.html.php
@@ -0,0 +1,210 @@
+
+
+// This is a generic paginator for album, photo and movie pages. Depending on the page type,
+// there are different sets of variables available. With this data, you can make a paginator
+// that lets you say "You're viewing photo 5 of 35", or "You're viewing photos 10 - 18 of 37"
+// for album views.
+//
+// Available variables for all page types:
+// $page_type - "collection", "item", or "other"
+// $page_subtype - "album", "movie", "photo", "tag", etc.
+// $previous_page_url - the url to the previous page, if there is one
+// $next_page_url - the url to the next page, if there is one
+// $total - the total number of photos in this album
+//
+// Available for the "collection" page types:
+// $page - what page number we're on
+// $max_pages - the maximum page number
+// $page_size - the page size
+// $first_page_url - the url to the first page, or null if we're on the first page
+// $last_page_url - the url to the last page, or null if we're on the last page
+// $first_visible_position - the position number of the first visible photo on this page
+// $last_visible_position - the position number of the last visible photo on this page
+//
+// Available for "item" page types:
+// $position - the position number of this photo
+//
+?>
+
+
+ $_pagelist = array();
+
+ // rWatcher Mod
+ if (isset($dynamic_siblings)):
+ $current_page = $position;
+ $total_pages = count($dynamic_siblings);
+ $siblings = $dynamic_siblings;
+ for ($i = 1; $i <= $total_pages; $i++):
+ if ($page_type == "item") {
+ $_pagelist[$i] = url::site("tag_albums/show/" . $siblings[$i-1]->id . "/" . $tag_id . "/" . $album_id . "/" . urlencode($siblings[$i-1]->name));
+ } elseif ($page_type == "") {
+ }
+ endfor;
+ else:
+ // End rWatcher Mod.
+
+ switch ($page_type) {
+ case "collection":
+ if (isset($item)):
+ $parent = $item->parent();
+ endif;
+ $current_page = $page;
+ $total_pages = $max_pages;
+ // Prepare page url list
+ for ($i = 1; $i <= $total_pages; $i++):
+ $_pagelist[$i] = url::site(url::merge(array("page" => $i)));
+ endfor;
+ break;
+ case "item":
+ if (isset($item)):
+ $parent = $item->parent();
+ endif;
+ $current_page = $position;
+ $total_pages = $total;
+ if (isset($parent)):
+ $siblings = $parent->children();
+ for ($i = 1; $i <= $total; $i++):
+ $_pagelist[$i] = $siblings[$i-1]->url();
+ endfor;
+ endif;
+ break;
+ default:
+ $current_page = 1;
+ $total_pages = 1;
+ $_pagelist[1] = url::site();
+ break;
+ }
+
+// rWatcher Mod
+ endif;
+// End rWatcher Mod.
+
+ if ($total_pages <= 1):
+ $pagination_msg = " ";
+ else:
+ $pagination_msg = t("Page:") . ' ';
+ if ($total_pages < 13):
+ for ($i = 1; $i <= $total_pages; $i++):
+ if ($i == $current_page):
+ $pagination_msg .= '
' . t($i) . ' ';
+ else:
+ $pagination_msg .= '
' . t($i) . ' ';
+ endif;
+ if ($i < $total_pages):
+ $pagination_msg .= '·';
+ endif;
+ endfor;
+ elseif ($current_page < 9):
+ for ($i = 1; $i <= 10; $i++):
+ if ($i == $current_page):
+ $pagination_msg .= '
' . t($i) . ' ';
+ else:
+ $pagination_msg .= '
' . t($i) . ' ';
+ endif;
+ if ($i < 10):
+ $pagination_msg .= '·';
+ endif;
+ endfor;
+
+ $pagination_msg .= '…';
+ $pagination_msg .= '
' . t($total_pages - 1) . ' ';
+ $pagination_msg .= '·';
+ $pagination_msg .= '
' . t($total_pages) . ' ';
+
+ elseif ($current_page > $total_pages - 8):
+ $pagination_msg .= '
' . t(1) . ' ';
+ $pagination_msg .= '·';
+ $pagination_msg .= '
' . t(2) . ' ';
+ $pagination_msg .= '…';
+
+ for ($i = $total_pages - 9; $i <= $total_pages; $i++):
+ if ($i == $current_page):
+ $pagination_msg .= '
' . t($i) . ' ';
+ else:
+ $pagination_msg .= '
' . t($i) . ' ';
+ endif;
+ if ($i < $total_pages):
+ $pagination_msg .= '·';
+ endif;
+ endfor;
+
+ else:
+ $pagination_msg .= '
' . t(1) . ' ';
+ $pagination_msg .= '·';
+ $pagination_msg .= '
' . t(2) . ' ';
+ $pagination_msg .= '…';
+
+ for ($i = $current_page - 5; $i <= $current_page + 5; $i++):
+ if ($i == $current_page):
+ $pagination_msg .= '
' . t($i) . ' ';
+ else:
+ $pagination_msg .= '
' . t($i) . ' ';
+ endif;
+ if ($i < $current_page + 5):
+ $pagination_msg .= '·';
+ endif;
+ endfor;
+
+ $pagination_msg .= '…';
+ $pagination_msg .= '
' . t($total_pages - 1) . ' ';
+ $pagination_msg .= '·';
+ $pagination_msg .= '
' . t($total_pages) . ' ';
+ endif;
+ endif;
+?>
+
+
\ No newline at end of file
diff --git a/3.1/modules/tag_albums/-- Theme Files/GreyDragon 3.1.0/views/photo.html.php b/3.1/modules/tag_albums/-- Theme Files/GreyDragon 3.1.0/views/photo.html.php
new file mode 100644
index 00000000..bfe20999
--- /dev/null
+++ b/3.1/modules/tag_albums/-- Theme Files/GreyDragon 3.1.0/views/photo.html.php
@@ -0,0 +1,122 @@
+
+
+ if ($theme->desc_allowbbcode):
+ $_description = $theme->bb2html($item->description, 1);
+ else:
+ $_description = nl2br(html::purify($item->description));
+ endif;
+
+ if ($theme->is_photometa_visible):
+ $_description .= '
';
+ endif;
+
+ switch ($theme->photo_popupbox):
+ case "preview":
+ $include_list = FALSE;
+ $include_single = TRUE;
+ break;
+ case "none":
+ $include_list = FALSE;
+ $include_single = FALSE;
+ break;
+ default:
+ $include_list = TRUE;
+ $include_single = TRUE;
+ break;
+ endswitch;
+?>
+
+
+ $_title = $theme->bb2html(html::purify($item->title), 1); ?>
+
+
= $_title ?>
+
+ = $theme->add_paginator("top", FALSE); ?>
+ = $theme->photo_top() ?>
+ if (($theme->photo_descmode == "top") and ($_description)): ?>
+
+ endif; ?>
+
+ = $theme->resize_top($item) ?>
+ $_resizewidth = $item->resize_width;
+// rWatcher Modification.
+ //ORIGINAL LINE $siblings = $item->parent()->children();
+ $siblings = "";
+ if (isset($dynamic_siblings)) {
+ $siblings = $dynamic_siblings;
+ } else {
+ $siblings = $item->parent()->children();
+ }
+// End rWatcher Modification
+ ?>
+
+
+ $script = "\n"; ?>
+ $_align = "";
+ if ($_description):
+ switch ($theme->photo_descmode):
+ case "overlay_top":
+ $_align = "g-align-top";
+ break;
+ case "overlay_bottom":
+ $_align = "g-align-bottom";
+ break;
+ default:
+ break;
+ endswitch;
+ endif; ?>
+ if ($_align): ?>
+
= t("More") ?>
+
+ = $_title ?>
+ = $_description ?>
+
+ endif ?>
+
+ = $theme->resize_bottom($item) ?>
+
+ if (($theme->photo_descmode == "bottom") and ($_description)): ?>
+
+ endif; ?>
+ = $theme->add_paginator("bottom", FALSE); ?>
+ = $theme->photo_bottom() ?>
+
+= $script ?>
\ No newline at end of file
diff --git a/3.1/modules/tag_albums/-- Theme Files/GreyDragon 3.1.0/views/tag_albums_album.html.php b/3.1/modules/tag_albums/-- Theme Files/GreyDragon 3.1.0/views/tag_albums_album.html.php
new file mode 100644
index 00000000..ac750319
--- /dev/null
+++ b/3.1/modules/tag_albums/-- Theme Files/GreyDragon 3.1.0/views/tag_albums_album.html.php
@@ -0,0 +1,239 @@
+
+
+ // Used album.html.php as starting point.
+ // The g-info block was taken from album.html.php and $theme->album_top() was changed to $theme->dynamic_top().
+ // $item->title and $item->description have been changed to $title and $description.
+ //
+ // The g-album-grid block was also taken from album.html.php. The section for uploading new photos to an empty album
+ // has been removed. Also, $theme->context_menu has been removed as well (it was crashing the page).
+?>
+
+
+
+= $theme->add_paginator("top"); ?>
+
+ if (($theme->album_descmode == "top") and ($description)): ?>
+
= $theme->bb2html(html::purify($description), 1) ?>
+ endif; ?>
+
+ if (isset($filter_text) && (module::get_var("tag_albums", "tag_index_filter"))): ?>
+
+
+
= $filter_text; ?>
+
+ endif ?>
+
+
+
+
+ if (count($children)):
+ $siblings = $all_siblings;
+ if (($theme->disablephotopage) && (count($siblings) > count($children))):
+ $j = 0;
+ foreach ($siblings as $i => $sibling):
+ //if ($sibling->rand_key == $children[$j]->rand_key):
+ if ($sibling->id == $children[$j]->item_id):
+ //echo $theme->get_thumb_element($sibling, !$theme->hidecontextmenu);
+ echo rw_get_thumb_element($children[$j], $theme);
+ if ($j + 1 < count($children)):
+ $j++;
+ endif;
+ else:
+ echo $theme->get_thumb_link($sibling);
+ //echo rw_get_thumb_link($sibling, $theme);
+ endif;
+ endforeach;
+ else:
+ foreach ($children as $i => $child):
+ //echo $theme->get_thumb_element($child, !$theme->hidecontextmenu);
+ echo rw_get_thumb_element($child, $theme);
+ endforeach;
+ endif;
+ else: ?>
+ = t("There aren't any photos here yet!") ?>
+ endif; ?>
+
+
+
+= $theme->dynamic_bottom() ?>
+
+ if (($theme->album_descmode == "bottom") and ($description)): ?>
+
= $theme->bb2html(html::purify($description), 1) ?>
+ endif; ?>
+
+= $theme->add_paginator("bottom"); ?>
+
+
+ function rw_get_thumb_link($item, $theme) {
+ // This code is based on grey dragon's get_thumb_link function.
+ // Change all $this to $theme
+ if ($item->is_album()):
+ return "";
+ endif;
+
+ /*
+ if (access::can("view_full", $item)):
+ $direct_link = $item->file_url();
+ else:
+ $direct_link = $item->resize_url();
+ endif;*/
+ $direct_link = $child->full_or_resize_url();
+
+ return '
';
+ }
+
+ function rw_get_thumb_element($child, $theme) {
+ // This code is based on grey dragon's get_thumb_element function.
+ // Change all $item to $child
+ // Change all $this to $theme
+ $thumb_item = $child;
+ if ($theme->thumb_random):
+ if ($child->is_album() && ($rnd = item::random_query()->where("parent_id", "=", $child->id)->find()) && $rnd->loaded()):
+ $thumb_item = $rnd;
+ endif;
+ endif;
+
+ $item_class = $child->is_album() ? "g-album" : "g-photo";
+ $content = '
has_thumb()):
+ $is_portrait = ($thumb_item->thumb_height > $thumb_item->thumb_width);
+ $_shift = "";
+ switch ($theme->thumb_imgalign):
+ case "center":
+ if (($theme->crop_factor == 1) and (!$is_portrait)):
+ $_shift = 'style="margin-top: ' . intval(($theme->_thumb_size_y - $thumb_item->thumb_height) / 2) . 'px;"';
+ elseif ($theme->crop_factor > 0):
+ $_shift = 'style="margin-top: -' . intval(($thumb_item->thumb_height - $theme->_thumb_size_y) / 2) . 'px;"';
+ endif;
+ break;
+ case "bottom":
+ if (($theme->crop_factor == 1) and (!$is_portrait)):
+ $_shift = 'style="margin-top: ' . intval($theme->_thumb_size_y - $thumb_item->thumb_height) . 'px;"';
+ elseif ($theme->crop_factor > 0):
+ $_shift = 'style="margin-top: -' . intval($thumb_item->thumb_height - $theme->_thumb_size_y) . 'px;"';
+ endif;
+ break;
+ case "fit":
+ break;
+ case "top":
+ default:
+ break;
+ endswitch;
+ else:
+ $is_portrait = FALSE;
+ $_shift = 'style="margin-top: 0px;"';
+ endif;
+
+ $content .= ($is_portrait)? " g-portrait" : " g-landscape";
+ $content .= '">' . $theme->thumb_top($child);
+
+ $content .= '';
+ $content .= $theme->thumb_bottom($child);
+ $content .= ' ';
+
+ return $content;
+ //print $content;
+ // End of modified function code.
+ }
+?>
\ No newline at end of file
diff --git a/3.1/modules/tag_albums/-- Theme Files/clean_canvas 1.0.7/views/calpage.html.php b/3.1/modules/tag_albums/-- Theme Files/clean_canvas 1.0.7/views/calpage.html.php
new file mode 100644
index 00000000..9b4635ef
--- /dev/null
+++ b/3.1/modules/tag_albums/-- Theme Files/clean_canvas 1.0.7/views/calpage.html.php
@@ -0,0 +1,204 @@
+
+
+html_attributes() ?> xml:lang="en" lang="en">
+
+
+ $theme->start_combining("script,css") ?>
+
+ if ($page_title): ?>
+ = $page_title ?>
+ else: ?>
+ if ($theme->item()): ?>
+ = $theme->item()->title ?>
+ elseif ($theme->tag()): ?>
+ = t("Photos tagged with %tag_title", array("tag_title" => $theme->tag()->name)) ?>
+ else: /* Not an item, not a tag, no page_title specified. Help! */ ?>
+ = item::root()->title ?>
+ endif ?>
+ endif ?>
+
+
"
+ type="image/x-icon" />
+
+ if ($theme->page_type == "collection"): ?>
+ if ($thumb_proportion != 1): ?>
+ $new_width = round($thumb_proportion * 213) ?>
+ $new_height = round($thumb_proportion * 240) ?>
+
+ endif ?>
+ endif ?>
+
+ = $theme->script("json2-min.js") ?>
+ = $theme->script("jquery.js") ?>
+ = $theme->script("jquery.form.js") ?>
+ = $theme->script("jquery-ui.js") ?>
+ = $theme->script("gallery.common.js") ?>
+ /* MSG_CANCEL is required by gallery.dialog.js */ ?>
+
+ = $theme->script("gallery.ajax.js") ?>
+ = $theme->script("gallery.dialog.js") ?>
+ = $theme->script("superfish/js/superfish.js") ?>
+ = $theme->script("jquery.localscroll.js") ?>
+
+ /* These are page specific but they get combined */ ?>
+ if ($theme->page_subtype == "photo"): ?>
+ = $theme->script("jquery.scrollTo.js") ?>
+ = $theme->script("gallery.show_full_size.js") ?>
+ elseif ($theme->page_subtype == "movie"): ?>
+ = $theme->script("flowplayer.js") ?>
+ endif ?>
+
+ = $theme->head() ?>
+
+ /* Theme specific CSS/JS goes last so that it can override module CSS/JS */ ?>
+ = $theme->script("ui.init.js") ?>
+ = $theme->css("yui/reset-fonts-grids.css") ?>
+ = $theme->css("superfish/css/superfish.css") ?>
+ if (module::get_var("theme_clean_canvas", "color_variant") == "dark" ): ?>
+ = $theme->css("dark/themeroller/ui.base.css") ?>
+ = $theme->css("dark/screen_colors.css") ?>
+ = $theme->css("dark/screen_candy.css") ?>
+ else: ?>
+ = $theme->css("clean/themeroller/ui.base.css") ?>
+ = $theme->css("clean/screen_colors.css") ?>
+ = $theme->css("clean/screen_candy.css") ?>
+ endif ?>
+ = $theme->css("screen_layout_base.css") ?>
+ = $theme->css("screen_fonts.css") ?>
+ if (module::get_var("theme_clean_canvas", "wide")): ?>
+ = $theme->css("screen_layout_wide.css") ?>
+ else: ?>
+ = $theme->css("screen_layout_fixed.css") ?>
+ endif ?>
+
+
+
+ = $theme->get_combined("script") ?>
+
+
+ = $theme->get_combined("css") ?>
+
+
+ body_attributes() ?>>
+ = $theme->page_top() ?>
+ if (module::get_var("theme_clean_canvas", "wide")): ?>
+
+ else: ?>
+
+ endif ?>
+ = $theme->site_status() ?>
+
+
+
+
+
+ = $theme->messages() ?>
+ = $content ?>
+
+
+
+ if (!($theme->item() && !empty($parents))): ?>
+
+ endif ?>
+
+
+
+
+ = $theme->page_bottom() ?>
+
+
diff --git a/3.1/modules/tag_albums/controllers/admin_tag_albums.php b/3.1/modules/tag_albums/controllers/admin_tag_albums.php
new file mode 100644
index 00000000..6267e33c
--- /dev/null
+++ b/3.1/modules/tag_albums/controllers/admin_tag_albums.php
@@ -0,0 +1,123 @@
+content = new View("admin_tag_albums.html");
+
+ // Generate a form for the admin Settings.
+ $view->content->tag_albums_form = $this->_get_admin_form();
+
+ // Display the page.
+ print $view;
+ }
+
+ private function _get_admin_form() {
+ $form = new Forge("admin/tag_albums/saveprefs", "", "post",
+ array("id" => "g-tag-albums-admin-form"));
+
+ $tag_albums_tagsort_group = $form->group("Tag_Albums_Tag_Sort")->label(t("\"All Tags\" Album Preferences"));
+ $tag_albums_tagsort_group->input("tag_page_title")
+ ->label(t("Page Title"))
+ ->value(module::get_var("tag_albums", "tag_page_title"));
+ $tag_albums_tagsort_group->dropdown("tag_index")
+ ->label(t("Tag album's index should display:"))
+ ->options(
+ array("default" => "(default) Individual Tag Albums",
+ "tagcloudpage" => "Tag Cloud Page Module",
+ "alltags" => "All Tags Module"))
+ ->selected(module::get_var("tag_albums", "tag_index"));
+
+ $tag_albums_tagsort_group->dropdown("tag_sort_by")
+ ->label(t("Sort \"All Tags\" Albums By:"))
+ ->options(
+ array("name" => "Name",
+ "count" => "Count",
+ "id" => "ID Number"))
+ ->selected(module::get_var("tag_albums", "tag_sort_by"));
+ $tag_albums_tagsort_group->dropdown("tag_sort_direction")
+ ->label(t("Display Albums In:"))
+ ->options(
+ array("ASC" => "Ascending Order",
+ "DESC" => "Descending"))
+ ->selected(module::get_var("tag_albums", "tag_sort_direction"));
+
+ $tag_index_scope_options["tag_index_scope"] = Array(t("Use tag album index setting for \"*\" albums as well?"), module::get_var("tag_albums", "tag_index_scope"));
+ $tag_albums_tagsort_group->checklist("tag_index_scope")
+ ->options($tag_index_scope_options);
+
+ $tag_index_filter_options["tag_index_filter"] = Array(t("Display filter links on \"All Tags\" album pages?"), module::get_var("tag_albums", "tag_index_filter"));
+ $tag_albums_tagsort_group->checklist("tag_index_filter")
+ ->options($tag_index_filter_options);
+
+ $tag_albums_tagitemsort_group = $form->group("Tag_Albums_Tag_Item_Sort")->label(t("\"All Tags\" Sub-Album Preferences"));
+ $tag_albums_tagitemsort_group->dropdown("subalbum_sort_by")
+ ->label(t("Sort Contents of Sub-Albums By:"))
+ ->options(
+ array("title" => "Title",
+ "name" => "File name",
+ "captured" => "Date captured",
+ "created" => "Date uploaded",
+ "updated" => "Date modified",
+ "view_count" => "Number of views"))
+ ->selected(module::get_var("tag_albums", "subalbum_sort_by"));
+ $tag_albums_tagitemsort_group->dropdown("subalbum_sort_direction")
+ ->label(t("Display Contents of Sub-Albums In:"))
+ ->options(
+ array("ASC" => "Ascending Order",
+ "DESC" => "Descending"))
+ ->selected(module::get_var("tag_albums", "subalbum_sort_direction"));
+
+ // Add a save button to the form.
+ $form->submit("SaveSettings")->value(t("Save"));
+
+ // Return the newly generated form.
+ return $form;
+ }
+
+ public function saveprefs() {
+ // Prevent Cross Site Request Forgery
+ access::verify_csrf();
+
+ $form = $this->_get_admin_form();
+ if ($form->validate()) {
+ Kohana_Log::add("error",print_r($form,1));
+ module::set_var("tag_albums", "tag_page_title", $form->Tag_Albums_Tag_Sort->tag_page_title->value);
+ module::set_var("tag_albums", "tag_index", $form->Tag_Albums_Tag_Sort->tag_index->value);
+ module::set_var("tag_albums", "tag_index_scope", count($form->Tag_Albums_Tag_Sort->tag_index_scope->value));
+ module::set_var("tag_albums", "tag_index_filter", count($form->Tag_Albums_Tag_Sort->tag_index_filter->value));
+ module::set_var("tag_albums", "tag_sort_by", $form->Tag_Albums_Tag_Sort->tag_sort_by->value);
+ module::set_var("tag_albums", "tag_sort_direction", $form->Tag_Albums_Tag_Sort->tag_sort_direction->value);
+ module::set_var("tag_albums", "subalbum_sort_by", $form->Tag_Albums_Tag_Item_Sort->subalbum_sort_by->value);
+ module::set_var("tag_albums", "subalbum_sort_direction", $form->Tag_Albums_Tag_Item_Sort->subalbum_sort_direction->value);
+ message::success(t("Your settings have been saved."));
+
+ url::redirect("admin/tag_albums");
+ }
+
+ // Else show the page with errors
+ $view = new Admin_View("admin.html");
+ $view->content = new View("admin_tag_albums.html");
+ $view->content->tag_albums_form = $form;
+ print $view;
+ }
+}
diff --git a/3.1/modules/tag_albums/controllers/tag_albums.php b/3.1/modules/tag_albums/controllers/tag_albums.php
new file mode 100644
index 00000000..c234a1c5
--- /dev/null
+++ b/3.1/modules/tag_albums/controllers/tag_albums.php
@@ -0,0 +1,879 @@
+where("id", "=", $id)
+ ->find_all();
+
+ // If it doesn't exist, redirect to the modules root page.
+ if (count($album_tags) == 0) {
+ url::redirect("tag_albums/");
+ }
+
+ // If it does exist, and is set to *, load a list of all tags.
+ if ($album_tags[0]->tags == "*") {
+ $this->index($id, "");
+ } else {
+ // Otherwise, populate this page with the specified items.
+
+ // Inherit permissions, title and description from the album that linked to this page.
+ $album = ORM::factory("item", $album_tags[0]->album_id);
+ access::required("view", $album);
+ $page_title = $album->title;
+ $page_description = $album->description;
+
+ // URL to this page
+ $str_page_url = "tag_albums/album/" . $id . "/" . urlencode($album->name);
+
+ // Determine page sort order.
+ $sort_page_field = $album->sort_column;
+ $sort_page_direction = $album->sort_order;
+
+ // Determine search type (AND/OR) and generate an array of the tag ids.
+ $tag_ids = Array();
+ foreach (explode(",", $album_tags[0]->tags) as $tag_name) {
+ $tag = ORM::factory("tag")->where("name", "=", trim($tag_name))->find();
+ if ($tag->loaded()) {
+ $tag_ids[] = $tag->id;
+ }
+ }
+ $album_tags_search_type = $album_tags[0]->search_type;
+
+ // Figure out how many items to display on each page.
+ $page_size = module::get_var("gallery", "page_size", 9);
+
+ // If this page was reached from a breadcrumb, figure out what page to load from the show id.
+ $show = Input::instance()->get("show");
+ if ($show) {
+ $child = ORM::factory("item", $show);
+ $index = $this->_get_position($child->$sort_page_field, $child->id, $tag_ids, "items." . $sort_page_field, $sort_page_direction, $album_tags_search_type, true);
+ if ($index) {
+ $page = ceil($index / $page_size);
+ if ($page == 1) {
+ url::redirect($str_page_url);
+ } else {
+ url::redirect($str_page_url . "?page=$page");
+ }
+ }
+ }
+
+ // Figure out how many items are in this "virtual album"
+ $count = $this->_count_records($tag_ids, $album_tags_search_type, true);
+
+ // Figure out which page # the visitor is on and
+ // don't allow the visitor to go below page 1.
+ $page = Input::instance()->get("page", 1);
+ if ($page < 1) {
+ url::redirect($str_page_url);
+ }
+
+ // First item to display.
+ $offset = ($page - 1) * $page_size;
+
+ // Figure out what the highest page number is.
+ $max_pages = ceil($count / $page_size);
+
+ // Don't let the visitor go past the last page.
+ if ($max_pages && $page > $max_pages) {
+ url::redirect($str_page_url . "/?page=$max_pages");
+ }
+
+ // Figure out which items to display on this page and store their details in $children.
+ $tag_children = $this->_get_records($tag_ids, $page_size, $offset, "items." . $sort_page_field, $sort_page_direction, $album_tags_search_type, true);
+ $children_array = Array();
+ foreach ($tag_children as $one_child) {
+ $child_tag = new Tag_Albums_Item($one_child->title, url::site("tag_albums/show/" . $one_child->id . "/0/" . $id . "/" . urlencode($one_child->name)), $one_child->type, $one_child->id);
+ $child_tag->id = $one_child->id;
+ $child_tag->view_count = $one_child->view_count;
+ $child_tag->owner = identity::lookup_user($one_child->owner_id);
+ if ($one_child->has_thumb()) {
+ $child_tag->set_thumb($one_child->thumb_url(), $one_child->thumb_width, $one_child->thumb_height);
+ }
+ $children_array[] = $child_tag;
+ }
+ $children = new Tag_Albums_Children($children_array);
+
+ // Set up the previous and next page buttons.
+ if ($page > 1) {
+ $previous_page = $page - 1;
+ $view->previous_page_link = url::site($str_page_url . "/?page={$previous_page}");
+ }
+ if ($page < $max_pages) {
+ $next_page = $page + 1;
+ $view->next_page_link = url::site($str_page_url . "/?page={$next_page}");
+ }
+
+ // Set up breadcrumbs.
+ $tag_album_breadcrumbs = Array();
+ $counter = 0;
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($album->title, "");
+ $parent_item = ORM::factory("item", $album->parent_id);
+ while ($parent_item->id != 1) {
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($parent_item->title, $parent_item->url());
+ $parent_item = ORM::factory("item", $parent_item->parent_id);
+ }
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($parent_item->title, $parent_item->url());
+ $tag_album_breadcrumbs[1]->url .= "?show=" . $album->id;
+ $tag_album_breadcrumbs = array_reverse($tag_album_breadcrumbs, true);
+
+ // Set up and display the actual page.
+ $parent_album = ORM::factory("item", $album->parent_id);
+ $template = new Theme_View("calpage.html", "collection", "Tag Albums");
+ $template->page_title = $page_title;
+ $template->set_global("page", $page);
+ $template->set_global("page_size", $page_size);
+ $template->set_global("max_pages", $max_pages);
+ $template->set_global("children", $children);
+ $template->set_global("all_siblings", $this->_get_records($tag_ids, $count, 0, "items." . $sort_page_field, $sort_page_direction, $album_tags_search_type, false));
+ $template->set_global("children_count", $count);
+ $template->set_global("parent_url", $parent_album->url()); // Used by Grey Dragon.
+ $template->content = new View("tag_albums_album.html");
+ $template->content->title = $page_title;
+ $template->content->description = $page_description;
+ $template->set_global("breadcrumbs", $tag_album_breadcrumbs);
+ print $template;
+ }
+ }
+
+ public function filter($id, $filter) {
+ // Display the index page, but only show albums for
+ // tags whose name begins with $filter.
+ $this->index($id, $filter);
+ }
+
+ public function index($id, $filter) {
+ // Load a page containing sub-albums for each tag in the gallery.
+
+ // Check to see if the user has overridden default behavior, and act accordingly.
+ if ((module::get_var("tag_albums", "tag_index_scope", "false")) || ($id == "")) {
+ $tag_album_index_type = module::get_var("tag_albums", "tag_index", "default");
+ if (($tag_album_index_type == "tagcloudpage") && (module::is_active("tag_cloud_page"))) {
+ $redirect_url = "tag_cloud_page/";
+ if ($id) {
+ $redirect_url .= "?album={$id}";
+ }
+ url::redirect($redirect_url);
+ return;
+ } elseif (($tag_album_index_type == "alltags") && (module::is_active("all_tags"))) {
+ $redirect_url = "all_tags/";
+ if ($id) {
+ $redirect_url .= "?album={$id}";
+ }
+ url::redirect($redirect_url);
+ return;
+ }
+ }
+
+ // If an ID was specified, make sure it's valid.
+ $album_tags = ORM::factory("tags_album_id")
+ ->where("id", "=", $id)
+ ->find_all();
+ if (count($album_tags) == 0) {
+ $id = 0;
+ }
+
+ // Inherit permissions, title and description from the album that linked to this page,
+ // if available, if not use the root album and some default values.
+ $album = "";
+ $page_title = module::get_var("tag_albums", "tag_page_title", "All Tags");
+ $page_description = "";
+ $str_page_url = "";
+ if ($id == 0) {
+ $album = ORM::factory("item", 1);
+ access::required("view", $album);
+ $str_page_url = "tag_albums/";
+ } else {
+ $album = ORM::factory("item", $album_tags[0]->album_id);
+ access::required("view", $album);
+ $page_title = $album->title;
+ $page_description = $album->description;
+ $str_page_url = "tag_albums/album/" . $id . "/" . urlencode($album->title);
+ }
+
+ // Figure out sort order from module preferences.
+ $sort_page_field = module::get_var("tag_albums", "tag_sort_by", "name");
+ $sort_page_direction = module::get_var("tag_albums", "tag_sort_direction", "ASC");
+
+ // Figure out how many items to display on each page.
+ $page_size = module::get_var("gallery", "page_size", 9);
+
+ // If this page was reached from a breadcrumb, figure out what page to load from the show id.
+ $show = Input::instance()->get("show");
+ if ($show) {
+ $child = ORM::factory("tag", $show);
+ $comp = "";
+ if (!strcasecmp($sort_page_direction, "DESC")) {
+ $comp = ">";
+ } else {
+ $comp = "<";
+ }
+ $index = ORM::factory("tag")
+ ->where($sort_page_field, $comp, $child->$sort_page_field)
+ ->order_by("tags." . $sort_page_field, $sort_page_direction)
+ ->count_all();
+ $tag_model = ORM::factory("tag")
+ ->where($sort_page_field, "=", $child->$sort_page_field)
+ ->order_by("tags." . $sort_page_field, $sort_page_direction)
+ ->find_all();
+ foreach ($tag_model as $one_tag) {
+ $index++;
+ if ($one_tag->id == $show) {
+ break;
+ }
+ }
+ if ($index) {
+ $page = ceil($index / $page_size);
+ if ($page == 1) {
+ url::redirect("$str_page_url");
+ } else {
+ url::redirect("$str_page_url?page=$page");
+ }
+ }
+ }
+
+ // Figure out which page # the visitor is on and
+ // don't allow the visitor to go below page 1.
+ $page = Input::instance()->get("page", 1);
+ if ($page < 1) {
+ url::redirect($str_page_url);
+ }
+
+ // First item to display.
+ $offset = ($page - 1) * $page_size;
+
+ // Determine the total number of items,
+ // for page numbering purposes.
+ $all_tags_count_model = ORM::factory("tag");
+ if ($filter != "") {
+ if ($filter == "NUM") {
+ $all_tags_count_model->open();
+ $all_tags_count_model->where("tags.name", "LIKE", "0%");
+ $counter = 1;
+ while ($counter < 10) {
+ $all_tags_count_model->or_where("tags.name", "LIKE", ($counter++) . "%");
+ }
+ $all_tags_count_model->close();
+ } else {
+ $all_tags_count_model->where("tags.name", "LIKE", $filter . "%");
+ }
+ }
+ $all_tags_count = $all_tags_count_model->count_all();
+
+ // Figure out what the highest page number is.
+ $max_pages = ceil($all_tags_count / $page_size);
+
+ // Don't let the visitor go past the last page.
+ if ($max_pages && $page > $max_pages) {
+ url::redirect("$str_page_url?page=$max_pages");
+ }
+
+ // Figure out which items to display on this page.
+ $display_tags_model = ORM::factory("tag");
+ if ($filter != "") {
+ if ($filter == "NUM") {
+ $display_tags_model->open();
+ $display_tags_model->where("tags.name", "LIKE", "0%");
+ $counter = 1;
+ while ($counter < 10) {
+ $display_tags_model->or_where("tags.name", "LIKE", ($counter++) . "%");
+ }
+ $display_tags_model->close();
+ } else {
+ $display_tags_model->where("tags.name", "LIKE", $filter . "%");
+ }
+ }
+ $display_tags_model->order_by("tags." . $sort_page_field, $sort_page_direction);
+ $display_tags = $display_tags_model->find_all($page_size, $offset);
+
+ // Set up the previous and next page buttons.
+ if ($page > 1) {
+ $previous_page = $page - 1;
+ $view->previous_page_link = url::site($str_page_url . "?page={$previous_page}");
+ }
+ if ($page < $max_pages) {
+ $next_page = $page + 1;
+ $view->next_page_link = url::site($str_page_url . "?page={$next_page}");
+ }
+
+ // Generate an arry of "fake" items, one for each tag on the page.
+ // Grab thumbnails from the most recently uploaded item for each tag, if available.
+ $children_array = Array();
+ foreach ($display_tags as $one_tag) {
+ $tag_item = ORM::factory("item")
+ ->viewable()
+ ->join("items_tags", "items.id", "items_tags.item_id")
+ ->where("items_tags.tag_id", "=", $one_tag->id)
+ ->order_by("items.id", "DESC")
+ ->find_all(1, 0);
+ $child_tag = new Tag_Albums_Item($one_tag->name, url::site("tag_albums/tag/" . $one_tag->id . "/" . $id . "/" . urlencode($one_tag->name)), "album", 0);
+ if (count($tag_item) > 0) {
+ if ($tag_item[0]->has_thumb()) {
+ $child_tag->set_thumb($tag_item[0]->thumb_url(), $tag_item[0]->thumb_width, $tag_item[0]->thumb_height);
+ }
+ }
+ $children_array[] = $child_tag;
+ }
+ $children = new Tag_Albums_Children($children_array);
+
+ // Set up breadcrumbs.
+ $tag_album_breadcrumbs = Array();
+ $parent_url = "";
+ if ($id > 0) {
+ $counter = 0;
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($album->title, "");
+ $parent_item = ORM::factory("item", $album->parent_id);
+ $parent_url = $parent_item->url();
+ while ($parent_item->id != 1) {
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($parent_item->title, $parent_item->url());
+ $parent_item = ORM::factory("item", $parent_item->parent_id);
+ }
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($parent_item->title, $parent_item->url());
+ $tag_album_breadcrumbs[1]->url .= "?show=" . $album->id;
+ $tag_album_breadcrumbs = array_reverse($tag_album_breadcrumbs, true);
+ } else {
+ $parent_url = item::root()->url();
+ $tag_album_breadcrumbs[0] = new Tag_Albums_Breadcrumb(item::root()->title, item::root()->url());
+ $tag_album_breadcrumbs[1] = new Tag_Albums_Breadcrumb($page_title, "");
+ }
+
+ // Set up and display the actual page.
+ $template = new Theme_View("calpage.html", "collection", "Tag Albums");
+ $template->page_title = $page_title;
+ $template->set_global("page", $page);
+ $template->set_global("page_size", $page_size);
+ $template->set_global("max_pages", $max_pages);
+ $template->set_global("children", $children);
+ $template->set_global("children_count", $all_tags_count);
+ $template->set_global("parent_url", $parent_url); // Used by Grey Dragon.
+ $template->content = new View("tag_albums_album.html");
+ $template->content->title = $page_title;
+ $template->content->description = $page_description;
+ $template->content->filter_text = $this->_get_filter_html($id, $filter);
+ $template->set_global("breadcrumbs", $tag_album_breadcrumbs);
+ print $template;
+ }
+
+ public function tag($id, $album_id) {
+ // Display a dynamic album containing everything tagged with a specific tag where,
+ // TAG is $id.
+ // Optionally, set the breadcrumbs to make this page look like an album where the
+ // album is $album_id.
+
+ // Make sure $album_id is valid, clear it out if it isn't.
+ $album_tags = ORM::factory("tags_album_id")
+ ->where("id", "=", $album_id)
+ ->find_all();
+ if (count($album_tags) == 0) {
+ $album_id = 0;
+ }
+
+ // Load the current tag.
+ $display_tag = ORM::factory("tag", $id);
+
+ // Figure out sort order from module preferences.
+ $sort_page_field = module::get_var("tag_albums", "subalbum_sort_by", "title");
+ $sort_page_direction = module::get_var("tag_albums", "subalbum_sort_direction", "ASC");
+
+ // Figure out the URL to this page.
+ $str_page_url = "tag_albums/tag/{$id}/{$album_id}/" . urlencode($display_tag->name);
+
+ // Figure out how many items to display on each page.
+ $page_size = module::get_var("gallery", "page_size", 9);
+
+ // If this page was reached from a breadcrumb, figure out what page to load from the show id.
+ $show = Input::instance()->get("show");
+ if ($show) {
+ $child = ORM::factory("item", $show);
+ $index = $this->_get_position($child->$sort_page_field, $child->id, Array($id), "items." . $sort_page_field, $sort_page_direction, "OR", true);
+ if ($index) {
+ $page = ceil($index / $page_size);
+ if ($page == 1) {
+ url::redirect($str_page_url);
+ } else {
+ url::redirect($str_page_url . "?page=$page");
+ }
+ }
+ }
+
+ // Figure out which page # the visitor is on and
+ // don't allow the visitor to go below page 1.
+ $page = Input::instance()->get("page", 1);
+ if ($page < 1) {
+ url::redirect($str_page_url);
+ }
+
+ // First item to display.
+ $offset = ($page - 1) * $page_size;
+
+ // Determine the total number of items,
+ // for page numbering purposes.
+ $count = $this->_count_records(Array($id), "OR", true);
+
+ // Figure out what the highest page number is.
+ $max_pages = ceil($count / $page_size);
+
+ // Don't let the visitor go past the last page.
+ if ($max_pages && $page > $max_pages) {
+ url::redirect($str_page_url . "/?page=$max_pages");
+ }
+
+ // Figure out which items to display on this page.
+ $tag_children = $this->_get_records(Array($id), $page_size, $offset, "items." . $sort_page_field, $sort_page_direction, "OR", true);
+
+ // Create an array of "fake" items to display on the page.
+ $children_array = Array();
+ foreach ($tag_children as $one_child) {
+ $child_tag = new Tag_Albums_Item($one_child->title, url::site("tag_albums/show/" . $one_child->id . "/" . $id . "/" . $album_id . "/" . urlencode($one_child->name)), $one_child->type, $one_child->id);
+ $child_tag->id = $one_child->id;
+ $child_tag->view_count = $one_child->view_count;
+ $child_tag->owner = identity::lookup_user($one_child->owner_id);
+ if ($one_child->has_thumb()) {
+ $child_tag->set_thumb($one_child->thumb_url(), $one_child->thumb_width, $one_child->thumb_height);
+ }
+ $children_array[] = $child_tag;
+ }
+ $children = new Tag_Albums_Children($children_array);
+
+ // Set up the previous and next page buttons.
+ if ($page > 1) {
+ $previous_page = $page - 1;
+ $view->previous_page_link = url::site($str_page_url . "/?page={$previous_page}");
+ }
+ if ($page < $max_pages) {
+ $next_page = $page + 1;
+ $view->next_page_link = url::site($str_page_url . "/?page={$next_page}");
+ }
+
+ // Set up breadcrumbs for the page.
+ $tag_album_breadcrumbs = Array();
+ $parent_url = "";
+ if ($album_id > 0) {
+ $counter = 0;
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($display_tag->name, "");
+ $parent_item = ORM::factory("item", $album_tags[0]->album_id);
+ if ($album_tags[0]->tags != "*") {
+ $parent_item = ORM::factory("item", $parent_item->parent_id);
+ }
+ $parent_url = $parent_item->url(); // Used by Grey Dragon.
+ while ($parent_item->id != 1) {
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($parent_item->title, $parent_item->url());
+ $parent_item = ORM::factory("item", $parent_item->parent_id);
+ }
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($parent_item->title, $parent_item->url());
+ $parent_item = ORM::factory("item", $album_tags[0]->album_id);
+ if ((module::get_var("tag_albums", "tag_index_scope", "false")) && (module::get_var("tag_albums", "tag_index", "default") != "default")) {
+ $tag_album_breadcrumbs[1]->url = url::site("tag_albums/album/" . $album_id . "/" . urlencode($parent_item->name));
+ } else {
+ $tag_album_breadcrumbs[1]->url = url::site("tag_albums/album/" . $album_id . "/" . urlencode($parent_item->name)) . "?show=" . $id;
+ }
+ $tag_album_breadcrumbs = array_reverse($tag_album_breadcrumbs, true);
+ } else {
+ $parent_url = url::site("tag_albums/");
+ $tag_album_breadcrumbs[0] = new Tag_Albums_Breadcrumb(item::root()->title, item::root()->url());
+ if (module::get_var("tag_albums", "tag_index", "default") == "default") {
+ $tag_album_breadcrumbs[1] = new Tag_Albums_Breadcrumb(module::get_var("tag_albums", "tag_page_title", "All Tags"), url::site("tag_albums/") . "?show=" . $id);
+ } else {
+ $tag_album_breadcrumbs[1] = new Tag_Albums_Breadcrumb(module::get_var("tag_albums", "tag_page_title", "All Tags"), url::site("tag_albums/"));
+ }
+ $tag_album_breadcrumbs[2] = new Tag_Albums_Breadcrumb($display_tag->name, "");
+ }
+
+ // Set up and display the actual page.
+ $template = new Theme_View("calpage.html", "collection", "Tag Albums");
+ $template->page_title = $display_tag->name;
+ $template->set_global("page", $page);
+ $template->set_global("page_size", $page_size);
+ $template->set_global("max_pages", $max_pages);
+ $template->set_global("children", $children);
+ $template->set_global("all_siblings", $this->_get_records(Array($id), $count, 0, "items." . $sort_page_field, $sort_page_direction, "OR", false));
+ $template->set_global("children_count", $count);
+ $template->set_global("parent_url", $parent_url); // Used by Grey Dragon.
+ $template->content = new View("tag_albums_album.html");
+ $template->content->title = $display_tag->name;
+ $template->set_global("breadcrumbs", $tag_album_breadcrumbs);
+ print $template;
+ }
+
+ public function show($item_id, $tag_id, $album_id) {
+ // Display the specified photo or video ($item_id) with breadcrumbs
+ // that point back to a virtual album ($tag_id / $album_id).
+
+ // Make sure #album_id is valid, clear it out if it isn't.
+ $album_tags = ORM::factory("tags_album_id")
+ ->where("id", "=", $album_id)
+ ->find_all();
+ if (count($album_tags) == 0) {
+ $album_id = 0;
+ }
+
+ // Load the tag and item, make sure the user has access to the item.
+ $display_tag = ORM::factory("tag", $tag_id);
+ $item = ORM::factory("item", $item_id);
+ access::required("view", $item);
+ $parent_url = "";
+
+ // Figure out sort order from module preferences.
+ $sort_page_field = "";
+ $sort_page_direction = "";
+ if (($tag_id > 0) || (count($album_tags) == 0)) {
+ $sort_page_field = module::get_var("tag_albums", "subalbum_sort_by", "title");
+ $sort_page_direction = module::get_var("tag_albums", "subalbum_sort_direction", "ASC");
+ } else {
+ $parent_album = ORM::factory("item", $album_tags[0]->album_id);
+ $sort_page_field = $parent_album->sort_column;
+ $sort_page_direction = $parent_album->sort_order;
+ }
+
+ // Load the number of items in the parent album, and determine previous and next items.
+ $sibling_count = "";
+ $tag_children = "";
+ $previous_item = "";
+ $next_item = "";
+ $position = 0;
+ $dynamic_siblings = "";
+ if ($tag_id > 0) {
+ $sibling_count = $this->_count_records(Array($tag_id), "OR", false);
+ $position = $this->_get_position($item->$sort_page_field, $item->id, Array($tag_id), "items." . $sort_page_field, $sort_page_direction, $album_tags_search_type, false);
+ if ($position > 1) {
+ $previous_item_object = $this->_get_records(Array($tag_id), 1, $position-2, "items." . $sort_page_field, $sort_page_direction, $album_tags_search_type, false);
+ if (count($previous_item_object) > 0) {
+ $previous_item = new Tag_Albums_Item($previous_item_object[0]->title, url::site("tag_albums/show/" . $previous_item_object[0]->id . "/" . $tag_id . "/" . $album_id . "/" . urlencode($previous_item_object[0]->name)), $previous_item_object[0]->type, $previous_item_object[0]->id);
+ }
+ }
+ $next_item_object = $this->_get_records(Array($tag_id), 1, $position, "items." . $sort_page_field, $sort_page_direction, $album_tags_search_type, false);
+ if (count($next_item_object) > 0) {
+ $next_item = new Tag_Albums_Item($next_item_object[0]->title, url::site("tag_albums/show/" . $next_item_object[0]->id . "/" . $tag_id . "/" . $album_id . "/" . urlencode($next_item_object[0]->name)), $next_item_object[0]->type, $next_item_object[0]->id);
+ }
+ $dynamic_siblings = $this->_get_records(Array($tag_id), null, null, "items." . $sort_page_field, $sort_page_direction, $album_tags_search_type, false);
+ } else {
+ $tag_ids = Array();
+ foreach (explode(",", $album_tags[0]->tags) as $tag_name) {
+ $tag = ORM::factory("tag")->where("name", "=", trim($tag_name))->find();
+ if ($tag->loaded()) {
+ $tag_ids[] = $tag->id;
+ }
+ }
+ $album_tags_search_type = $album_tags[0]->search_type;
+ $sibling_count = $this->_count_records($tag_ids, $album_tags_search_type, false);
+ $position = $this->_get_position($item->$sort_page_field, $item->id, $tag_ids, "items." . $sort_page_field, $sort_page_direction, $album_tags_search_type, false);
+ if ($position > 1) {
+ $previous_item_object = $this->_get_records($tag_ids, 1, $position-2, "items." . $sort_page_field, $sort_page_direction, $album_tags_search_type, false);
+ if (count($previous_item_object) > 0) {
+ $previous_item = new Tag_Albums_Item($previous_item_object[0]->title, url::site("tag_albums/show/" . $previous_item_object[0]->id . "/" . $tag_id . "/" . $album_id . "/" . urlencode($previous_item_object[0]->name)), $previous_item_object[0]->type);
+ }
+ }
+ $next_item_object = $this->_get_records($tag_ids, 1, $position, "items." . $sort_page_field, $sort_page_direction, $album_tags_search_type, false);
+ if (count($next_item_object) > 0) {
+ $next_item = new Tag_Albums_Item($next_item_object[0]->title, url::site("tag_albums/show/" . $next_item_object[0]->id . "/" . $tag_id . "/" . $album_id . "/" . urlencode($next_item_object[0]->name)), $next_item_object[0]->type);
+ }
+ $dynamic_siblings = $this->_get_records($tag_ids, null, null, "items." . $sort_page_field, $sort_page_direction, $album_tags_search_type, false);
+ }
+
+ // Set up breadcrumbs
+ $tag_album_breadcrumbs = Array();
+ if ($album_id > 0) {
+ $counter = 0;
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($item->title, "");
+ if ($album_tags[0]->tags == "*") {
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($display_tag->name, url::site("tag_albums/tag/" . $display_tag->id . "/" . $album_id . "/" . urlencode($display_tag->name)));
+ }
+ $parent_item = ORM::factory("item", $album_tags[0]->album_id);
+ if ($album_tags[0]->tags == "*") {
+ $parent_url = url::site("tag_albums/tag/" . $display_tag->id . "/" . $album_id . "/" . urlencode($display_tag->name));
+ } else {
+ $parent_url = $parent_item->url();
+ }
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($parent_item->title, url::site("tag_albums/album/" . $album_id . "/" . urlencode($parent_item->name)));
+ $parent_item = ORM::factory("item", $parent_item->parent_id);
+ while ($parent_item->id != 1) {
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($parent_item->title, $parent_item->url());
+ $parent_item = ORM::factory("item", $parent_item->parent_id);
+ }
+ $tag_album_breadcrumbs[$counter++] = new Tag_Albums_Breadcrumb($parent_item->title, $parent_item->url());
+ $tag_album_breadcrumbs[1]->url .= "?show=" . $item->id;
+ $tag_album_breadcrumbs = array_reverse($tag_album_breadcrumbs, true);
+ } else {
+ $tag_album_breadcrumbs[0] = new Tag_Albums_Breadcrumb(item::root()->title, item::root()->url());
+ $tag_album_breadcrumbs[1] = new Tag_Albums_Breadcrumb(module::get_var("tag_albums", "tag_page_title", "All Tags"), url::site("tag_albums/"));
+ $tag_album_breadcrumbs[2] = new Tag_Albums_Breadcrumb($display_tag->name, url::site("tag_albums/tag/" . $display_tag->id . "/" . urlencode($display_tag->name)) . "?show=" . $item->id);
+ $tag_album_breadcrumbs[3] = new Tag_Albums_Breadcrumb($item->title, "");
+ $parent_url = url::site("tag_albums/tag/" . $display_tag->id . "/" . urlencode($display_tag->name));
+ }
+
+ // Increase the items view count.
+ $item->increment_view_count();
+
+ // Load the page.
+ if ($item->is_photo()) {
+ $template = new Theme_View("calpage.html", "item", "photo");
+ $template->page_title = $item->title;
+ $template->set_global("children", Array());
+ $template->set_global("item", $item);
+ $template->set_global("previous_item", $previous_item);
+ $template->set_global("next_item", $next_item);
+ $template->set_global("is_tagalbum_page", true); // used for grey dragon
+ $template->set_global("tag_id", $tag_id); // used for grey dragon
+ $template->set_global("album_id", $album_id); // used for grey dragon
+ $template->set_global("parent_url", $parent_url); // Used by Grey Dragon.
+ $template->set_global("dynamic_siblings", $dynamic_siblings); // Used by Grey Dragon.
+ $template->set_global("children_count", 0);
+ $template->set_global("position", $position);
+ $template->set_global("sibling_count", $sibling_count);
+ $template->content = new View("photo.html");
+ $template->content->title = $item->title;
+ $template->set_global("breadcrumbs", $tag_album_breadcrumbs);
+ print $template;
+ } elseif ($item->is_movie()) {
+ $template = new Theme_View("calpage.html", "item", "movie");
+ $template->page_title = $item->title;
+ $template->set_global("children", Array());
+ $template->set_global("item", $item);
+ $template->set_global("previous_item", $previous_item);
+ $template->set_global("next_item", $next_item);
+ $template->set_global("is_tagalbum_page", true); // used for grey dragon
+ $template->set_global("tag_id", $tag_id); // used for grey dragon
+ $template->set_global("album_id", $album_id); // used for grey dragon
+ $template->set_global("parent_url", $parent_url); // Used by Grey Dragon.
+ $template->set_global("dynamic_siblings", $dynamic_siblings); // Used by Grey Dragon.
+ $template->set_global("children_count", 0);
+ $template->set_global("position", $position);
+ $template->set_global("sibling_count", $sibling_count);
+ $template->content = new View("movie.html");
+ $template->content->title = $item->title;
+ $template->set_global("breadcrumbs", $tag_album_breadcrumbs);
+ print $template;
+ } else {
+ // If it's something we don't know how to deal with, just redirect to its real page.
+ url::redirect(url::abs_site("{$item->type}s/{$item->id}"));
+ }
+ }
+
+ private function _get_position($item_title, $item_id, $tag_ids, $sort_field, $sort_direction, $search_type, $include_albums) {
+ // Determine an item's position within a virtual album.
+
+ // Convert ASC/DESC to < or > characters.
+ if (!strcasecmp($sort_direction, "DESC")) {
+ $comp = ">";
+ } else {
+ $comp = "<";
+ }
+
+ // Figure out how many items are _before the current item.
+ $items_model = ORM::factory("item");
+ if ($search_type == "AND") {
+ $items_model->select('COUNT("*") AS result_count');
+ } else {
+ $items_model->select("items.id");
+ }
+ $items_model->viewable();
+ $items_model->join("items_tags", "items.id", "items_tags.item_id");
+ $items_model->open();
+ $items_model->where("items_tags.tag_id", "=", $tag_ids[0]);
+ $counter = 1;
+ while ($counter < count($tag_ids)) {
+ $items_model->or_where("items_tags.tag_id", "=", $tag_ids[$counter]);
+ $counter++;
+ }
+ $items_model->close();
+ if ($include_albums == false) {
+ $items_model->and_where("items.type", "!=", "album");
+ }
+ $items_model->and_where($sort_field, $comp, $item_title);
+ $items_model->order_by($sort_field, $sort_direction);
+ $items_model->group_by("items.id");
+ if ($search_type == "AND") {
+ $items_model->having("result_count", "=", count($tag_ids));
+ }
+ $position = count($items_model->find_all());
+
+ // In case multiple items have identical sort criteria, query for
+ // everything with the same criteria, and increment the position
+ // one at a time until we find the right item.
+ $items_model = ORM::factory("item");
+ if ($search_type == "AND") {
+ $items_model->select("items.id");
+ $items_model->select('COUNT("*") AS result_count');
+ } else {
+ $items_model->select("items.id");
+ }
+ $items_model->viewable();
+ $items_model->join("items_tags", "items.id", "items_tags.item_id");
+ $items_model->open();
+ $items_model->where("items_tags.tag_id", "=", $tag_ids[0]);
+ $counter = 1;
+ while ($counter < count($tag_ids)) {
+ $items_model->or_where("items_tags.tag_id", "=", $tag_ids[$counter]);
+ $counter++;
+ }
+ $items_model->close();
+ if ($include_albums == false) {
+ $items_model->and_where("items.type", "!=", "album");
+ }
+ $items_model->and_where($sort_field, "=", $item_title);
+ $items_model->order_by($sort_field, $sort_direction);
+ $items_model->group_by("items.id");
+ if ($search_type == "AND") {
+ $items_model->having("result_count", "=", count($tag_ids));
+ }
+ $match_items = $items_model->find_all();
+ foreach ($match_items as $one_item) {
+ $position++;
+ if ($one_item->id == $item_id) {
+ break;
+ }
+ }
+
+ return ($position);
+ }
+
+ private function _get_records($tag_ids, $page_size, $offset, $sort_field, $sort_direction, $search_type, $include_albums) {
+ // Returns an array of items to be displayed on the current page.
+
+ $items_model = ORM::factory("item");
+ if ($search_type == "AND") {
+ // For some reason, if I do 'select("*")' the item ids all have values that are 1000+
+ // higher then they should be. So instead, I'm manually selecting each column that I need.
+ $items_model->select("items.id");
+ $items_model->select("items.name");
+ $items_model->select("items.title");
+ $items_model->select("items.view_count");
+ $items_model->select("items.owner_id");
+ $items_model->select("items.rand_key");
+ $items_model->select("items.type");
+ $items_model->select("items.thumb_width");
+ $items_model->select("items.thumb_height");
+ $items_model->select("items.left_ptr");
+ $items_model->select("items.right_ptr");
+ $items_model->select("items.relative_path_cache");
+ $items_model->select('COUNT("*") AS result_count');
+ }
+ $items_model->viewable();
+ $items_model->join("items_tags", "items.id", "items_tags.item_id");
+ $items_model->open();
+ $items_model->where("items_tags.tag_id", "=", $tag_ids[0]);
+ $counter = 1;
+ while ($counter < count($tag_ids)) {
+ $items_model->or_where("items_tags.tag_id", "=", $tag_ids[$counter]);
+ $counter++;
+ }
+ $items_model->close();
+ if ($include_albums == false) {
+ $items_model->and_where("items.type", "!=", "album");
+ }
+ $items_model->order_by($sort_field, $sort_direction);
+ $items_model->group_by("items.id");
+ if ($search_type == "AND") {
+ $items_model->having("result_count", "=", count($tag_ids));
+ }
+ return $items_model->find_all($page_size, $offset);
+ }
+
+ private function _get_filter_html($album_id, $str_filter) {
+ // Generate HTML to display filter links on the index page.
+
+ // Make sure $album_id is set.
+ if ($album_id == "") {
+ $album_id = 0;
+ }
+
+ // Generate the links.
+ $str_html = "Filter: ";
+ if ($str_filter != "") {
+ if ($album_id > 0) {
+ $album_tags = ORM::factory("tags_album_id")
+ ->where("id", "=", $album_id)
+ ->find_all();
+ $album = ORM::factory("item", $album_tags[0]->album_id);
+ $str_html .= "
name)) . "\">(All) ";
+ } else {
+ $str_html .= "
(All) ";
+ }
+ }
+ if ($str_filter == "NUM") {
+ $str_html .= "# ";
+ } else {
+ $str_html .= "
# ";
+ }
+ foreach(range('A','Z') as $letter) {
+ if ($letter == $str_filter) {
+ $str_html .= $letter . " ";
+ } else {
+ $str_html .= "
";
+ $str_html .= $letter . " ";
+ }
+ }
+
+ // Return the HTML.
+ return $str_html;
+ }
+
+ private function _count_records($tag_ids, $search_type, $include_albums) {
+ // Count the number of viewable items for the designated tag(s)
+ // and return that number.
+
+ if (count($tag_ids) == 0) {
+ // If no tags were specified, return 0.
+ return 0;
+
+ } elseif (count($tag_ids) == 1) {
+ // if one tag was specified, we can use count_all to get the number.
+ $count = ORM::factory("item")
+ ->viewable()
+ ->join("items_tags", "items.id", "items_tags.item_id")
+ ->where("items_tags.tag_id", "=", $tag_ids[0]);
+ if ($include_albums == false) {
+ $count->and_where("items.type", "!=", "album");
+ }
+ return $count->count_all();
+
+ } else {
+ // If multiple tags were specified, count_all won't work,
+ // so we'll have to do count(find_all) instead.
+ $items_model = ORM::factory("item");
+ if ($search_type == "AND") {
+ $items_model->select('COUNT("*") AS result_count');
+ } else {
+ $items_model->select('items.id');
+ }
+ $items_model->viewable();
+ $items_model->join("items_tags", "items.id", "items_tags.item_id");
+ $items_model->where("items_tags.tag_id", "=", $tag_ids[0]);
+ $counter = 1;
+ while ($counter < count($tag_ids)) {
+ $items_model->or_where("items_tags.tag_id", "=", $tag_ids[$counter]);
+ $counter++;
+ }
+ if ($include_albums == false) {
+ $items_model->and_where("items.type", "!=", "album");
+ }
+ $items_model->group_by("items.id");
+ if ($search_type == "AND") {
+ $items_model->having("result_count", "=", count($tag_ids));
+ }
+
+ return count($items_model->find_all());
+ }
+ }
+}
diff --git a/3.1/modules/tag_albums/helpers/tag_albums_block.php b/3.1/modules/tag_albums/helpers/tag_albums_block.php
new file mode 100644
index 00000000..7243722c
--- /dev/null
+++ b/3.1/modules/tag_albums/helpers/tag_albums_block.php
@@ -0,0 +1,40 @@
+ t("Tag Albums"));
+ }
+
+ static function get($block_id, $theme) {
+ $block = "";
+
+ switch ($block_id) {
+ case "tag_albums":
+ // Make a new sidebar block.
+ $block = new Block();
+ $block->css_id = "g-tag-albums";
+ $block->title = t("Tag Albums");
+ $block->content = new View("tag_albums_block.html");
+
+ break;
+ }
+ return $block;
+ }
+}
diff --git a/3.1/modules/tag_albums/helpers/tag_albums_event.php b/3.1/modules/tag_albums/helpers/tag_albums_event.php
new file mode 100644
index 00000000..033293f1
--- /dev/null
+++ b/3.1/modules/tag_albums/helpers/tag_albums_event.php
@@ -0,0 +1,110 @@
+module == "tag") {
+ $data->messages["warn"][] = t("The Tag Albums module requires the Tags module.");
+ }
+ }
+
+ static function module_change($changes) {
+ // See if the Tags module is installed,
+ // tell the user to install it if it isn't.
+ if (!module::is_active("tag") || in_array("tag", $changes->deactivate)) {
+ site_status::warning(
+ t("The Tag Albums module requires the Tags module. " .
+ "
Activate the Tags module now ",
+ array("url" => url::site("admin/modules"))),
+ "tag_albums_needs_tag");
+ } else {
+ site_status::clear("tag_albums_needs_tag");
+ }
+ }
+
+ static function admin_menu($menu, $theme) {
+ // Add a link to the admin page to the Content menu.
+ $menu->get("settings_menu")
+ ->append(Menu::factory("link")
+ ->id("tag_albums")
+ ->label(t("Tag Albums Settings"))
+ ->url(url::site("admin/tag_albums")));
+ }
+
+ static function item_edit_form($item, $form) {
+ // Create fields on the album edit screen to allow the user to link
+ // the album to a tag_albums page.
+ if (!($item->is_album())) {
+ return;
+ }
+
+ $url = url::site("tags/autocomplete");
+ $form->script("")
+ ->text("$('form input[name=tag_albums]').ready(function() {
+ $('form input[name=tag_albums]').autocomplete(
+ '$url', {max: 30, multiple: true, multipleSeparator: ',', cacheLength: 1});
+ });");
+
+ $album_tags = ORM::factory("tags_album_id")
+ ->where("album_id", "=", $item->id)
+ ->find_all();
+
+ $tag_names = "";
+ $tag_album_type = "OR";
+ if (count($album_tags) > 0) {
+ $tag_names = $album_tags[0]->tags;
+ $tag_album_type = $album_tags[0]->search_type;
+ }
+
+ $tags_album_group = $form->edit_item->group("tags_album_group");
+ $tags_album_group->dropdown("tags_album_type")
+ ->options(
+ array("OR" => t("Display items that contain ANY of the following tags:"),
+ "AND" => t("Display items that contain ALL of the following tags:")))
+ ->selected($tag_album_type);
+ $tags_album_group->input("tag_albums")
+ ->value($tag_names);
+ }
+
+ static function item_deleted($item) {
+ // Whenever an item is deleted, delete any corresponding data.
+ db::build()->delete("tags_album_ids")->where("album_id", "=", $item->id)->execute();
+ }
+
+ static function item_edit_form_completed($item, $form) {
+ // Update the database with any changes to the tag_albums field.
+ if (!($item->is_album())) {
+ return;
+ }
+
+ $record = ORM::factory("tags_album_id")->where("album_id", "=", $item->id)->find();
+
+ if ($form->edit_item->tags_album_group->tag_albums->value != "") {
+ if (!$record->loaded()) {
+ $record->album_id = $item->id;
+ }
+ $record->tags = $form->edit_item->tags_album_group->tag_albums->value;
+ $record->search_type = $form->edit_item->tags_album_group->tags_album_type->value;
+ $record->save();
+ } else {
+ db::build()->delete("tags_album_ids")->where("album_id", "=", $item->id)->execute();
+ }
+ }
+}
diff --git a/3.1/modules/tag_albums/helpers/tag_albums_installer.php b/3.1/modules/tag_albums/helpers/tag_albums_installer.php
new file mode 100644
index 00000000..ee3df5e2
--- /dev/null
+++ b/3.1/modules/tag_albums/helpers/tag_albums_installer.php
@@ -0,0 +1,69 @@
+query("CREATE TABLE IF NOT EXISTS {tags_album_ids} (
+ `id` int(9) NOT NULL auto_increment,
+ `album_id` int(9) NOT NULL,
+ `tags` varchar(2048) default NULL,
+ `search_type` varchar(128) NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY(`album_id`, `id`))
+ DEFAULT CHARSET=utf8;");
+
+ // Set up some default values.
+ module::set_var("tag_albums", "tag_sort_by", "name");
+ module::set_var("tag_albums", "tag_sort_direction", "ASC");
+ module::set_var("tag_albums", "subalbum_sort_by", "title");
+ module::set_var("tag_albums", "subalbum_sort_direction", "ASC");
+ module::set_var("tag_albums", "tag_index", "default");
+ module::set_var("tag_albums", "tag_index_scope", "0");
+ module::set_var("tag_albums", "tag_index_filter", "0");
+
+ // Set the module's version number.
+ module::set_version("tag_albums", 2);
+ }
+
+ static function upgrade($version) {
+ if ($version == 1) {
+ module::set_var("tag_albums", "tag_index", "default");
+ module::set_var("tag_albums", "tag_index_scope", "0");
+ module::set_var("tag_albums", "tag_index_filter", "0");
+ module::set_version("tag_albums", 2);
+ }
+ }
+
+ static function deactivate() {
+ site_status::clear("tag_albums_needs_tag");
+ }
+
+ static function can_activate() {
+ $messages = array();
+ if (!module::is_active("tag")) {
+ $messages["warn"][] = t("The Tag Albums module requires the Tags module.");
+ }
+ return $messages;
+ }
+
+ static function uninstall() {
+ module::delete("tag_albums");
+ }
+}
diff --git a/3.1/modules/tag_albums/helpers/tag_albums_theme.php b/3.1/modules/tag_albums/helpers/tag_albums_theme.php
new file mode 100644
index 00000000..84f9a633
--- /dev/null
+++ b/3.1/modules/tag_albums/helpers/tag_albums_theme.php
@@ -0,0 +1,34 @@
+item()) {
+ $album_tags = ORM::factory("tags_album_id")
+ ->where("album_id", "=", $theme->item->id)
+ ->find_all();
+ if (count($album_tags) > 0) {
+ url::redirect(url::abs_site("tag_albums/album/" . $album_tags[0]->id . "/" . urlencode($theme->item->name)));
+ }
+ }
+ return;
+ }
+}
diff --git a/3.1/modules/tag_albums/libraries/Tag_Albums_Breadcrumb.php b/3.1/modules/tag_albums/libraries/Tag_Albums_Breadcrumb.php
new file mode 100644
index 00000000..ba576e49
--- /dev/null
+++ b/3.1/modules/tag_albums/libraries/Tag_Albums_Breadcrumb.php
@@ -0,0 +1,31 @@
+title = $new_title;
+ $this->url = $new_url;
+ }
+}
diff --git a/3.1/modules/tag_albums/libraries/Tag_Albums_Children.php b/3.1/modules/tag_albums/libraries/Tag_Albums_Children.php
new file mode 100644
index 00000000..c6ea859d
--- /dev/null
+++ b/3.1/modules/tag_albums/libraries/Tag_Albums_Children.php
@@ -0,0 +1,48 @@
+position = 0;
+ $this->array = $children;
+ }
+
+ function rewind() {
+ $this->position = 0;
+ }
+
+ function current() {
+ return $this->array[$this->position];
+ }
+
+ function key() {
+ return $this->position;
+ }
+
+ function next() {
+ ++$this->position;
+ }
+
+ function valid() {
+ return isset($this->array[$this->position]);
+ }
+}
diff --git a/3.1/modules/tag_albums/libraries/Tag_Albums_Item.php b/3.1/modules/tag_albums/libraries/Tag_Albums_Item.php
new file mode 100644
index 00000000..d521697a
--- /dev/null
+++ b/3.1/modules/tag_albums/libraries/Tag_Albums_Item.php
@@ -0,0 +1,129 @@
+item_type == "album") {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public function has_thumb() {
+ if ($this->thumb_url != "") {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public function full_or_resize_url() {
+ if ($this->item_id > 0) {
+ $item = ORM::factory("item", $this->item_id);
+ if (access::can("view_full", $item)) {
+ return $item->file_url();
+ } else {
+ return $item->resize_url();
+ }
+ } else {
+ return "";
+ }
+ }
+
+ public function thumb_img($extra_attrs=array(), $max=null, $center_vertically=false) {
+ list ($height, $width) = $this->scale_dimensions($max);
+ if ($center_vertically && $max) {
+ // The constant is divide by 2 to calculate the file and 10 to convert to em
+ $margin_top = (int)(($max - $height) / 20);
+ $extra_attrs["style"] = "margin-top: {$margin_top}em";
+ $extra_attrs["title"] = $this->title;
+ }
+ $attrs = array_merge($extra_attrs,
+ array(
+ "src" => $this->thumb_url(),
+ "alt" => $this->title,
+ "width" => $width,
+ "height" => $height)
+ );
+ // html::image forces an absolute url which we don't want
+ return "
";
+ }
+
+ public function scale_dimensions($max) {
+ $width = $this->thumb_width;
+ $height = $this->thumb_height;
+
+ if ($width <= $max && $height <= $max) {
+ return array($height, $width);
+ }
+
+ if ($height) {
+ if (isset($max)) {
+ if ($width > $height) {
+ $height = (int)($max * $height / $width);
+ $width = $max;
+ } else {
+ $width = (int)($max * $width / $height);
+ $height = $max;
+ }
+ }
+ } else {
+ // Missing thumbnail, can happen on albums with no photos yet.
+ // @todo we should enforce a placeholder for those albums.
+ $width = 0;
+ $height = 0;
+ }
+ return array($height, $width);
+ }
+
+ public function thumb_url() {
+ return $this->thumb_url;
+ }
+
+ public function url() {
+ return $this->url;
+ }
+
+ public function set_thumb($new_url, $new_width, $new_height) {
+ $this->thumb_url = $new_url;
+ $this->thumb_width = $new_width;
+ $this->thumb_height = $new_height;
+ }
+
+ public function __construct($new_title, $new_url, $new_type, $new_id) {
+ $this->title = $new_title;
+ $this->url = $new_url;
+ $this->item_type = $new_type;
+ $this->type = $new_type;
+ $this->item_id = $new_id;
+ }
+}
diff --git a/3.1/modules/tag_albums/models/tag.php b/3.1/modules/tag_albums/models/tag.php
new file mode 100644
index 00000000..0cc47030
--- /dev/null
+++ b/3.1/modules/tag_albums/models/tag.php
@@ -0,0 +1,145 @@
+loaded()) {
+ // Set reasonable defaults
+ $this->count = 0;
+ }
+ }
+
+ /**
+ * Return all viewable items associated with this tag.
+ * @param integer $limit number of rows to limit result to
+ * @param integer $offset offset in result to start returning rows from
+ * @param string $type the type of item (album, photo)
+ * @return ORM_Iterator
+ */
+ public function items($limit=null, $offset=null, $type=null) {
+ $model = ORM::factory("item")
+ ->viewable()
+ ->join("items_tags", "items.id", "items_tags.item_id")
+ ->where("items_tags.tag_id", "=", $this->id);
+ if ($type) {
+ $model->where("items.type", "=", $type);
+ }
+ return $model->find_all($limit, $offset);
+ }
+
+ /**
+ * Return the count of all viewable items associated with this tag.
+ * @param string $type the type of item (album, photo)
+ * @return integer
+ */
+ public function items_count($type=null) {
+ $model = ORM::factory("item")
+ ->viewable()
+ ->join("items_tags", "items.id", "items_tags.item_id")
+ ->where("items_tags.tag_id", "=", $this->id);
+
+ if ($type) {
+ $model->where("items.type", "=", $type);
+ }
+ return $model->count_all();
+ }
+
+ /**
+ * Overload ORM::save() to trigger an item_related_update event for all items that are related
+ * to this tag.
+ */
+ public function save() {
+ $related_item_ids = array();
+ foreach (db::build()
+ ->select("item_id")
+ ->from("items_tags")
+ ->where("tag_id", "=", $this->id)
+ ->execute() as $row) {
+ $related_item_ids[$row->item_id] = 1;
+ }
+
+ if (isset($this->object_relations["items"])) {
+ $added = array_diff($this->changed_relations["items"], $this->object_relations["items"]);
+ $removed = array_diff($this->object_relations["items"], $this->changed_relations["items"]);
+ if (isset($this->changed_relations["items"])) {
+ $changed = array_merge($added, $removed);
+ }
+ $this->count = count($this->object_relations["items"]) + count($added) - count($removed);
+ }
+
+ $result = parent::save();
+
+ if (!empty($changed)) {
+ foreach (ORM::factory("item")->where("id", "IN", $changed)->find_all() as $item) {
+ module::event("item_related_update", $item);
+ }
+ }
+
+ return $result;
+ }
+
+ /**
+ * Overload ORM::delete() to trigger an item_related_update event for all items that are
+ * related to this tag, and delete all items_tags relationships.
+ */
+ public function delete($ignored_id=null) {
+ $related_item_ids = array();
+ foreach (db::build()
+ ->select("item_id")
+ ->from("items_tags")
+ ->where("tag_id", "=", $this->id)
+ ->execute() as $row) {
+ $related_item_ids[$row->item_id] = 1;
+ }
+
+ db::build()->delete("items_tags")->where("tag_id", "=", $this->id)->execute();
+ $result = parent::delete();
+
+ if ($related_item_ids) {
+ foreach (ORM::factory("item")
+ ->where("id", "IN", array_keys($related_item_ids))
+ ->find_all() as $item) {
+ module::event("item_related_update", $item);
+ }
+ }
+ return $result;
+ }
+
+ /**
+ * Return the server-relative url to this item, eg:
+ * /gallery3/index.php/tags/35
+ *
+ * @param string $query the query string (eg "page=3")
+ */
+ public function url($query=null) {
+ $album_id = Input::instance()->get("album");
+ if (!($album_id)) {
+ $album_id = 0;
+ }
+ $url = url::site("/tag_albums/tag/{$this->id}/{$album_id}/" . urlencode($this->name));
+ if ($query) {
+ $url .= "?$query";
+ }
+ return $url;
+ }
+}
diff --git a/3.1/modules/tag_albums/models/tags_album_id.php b/3.1/modules/tag_albums/models/tags_album_id.php
new file mode 100644
index 00000000..a9b16b4f
--- /dev/null
+++ b/3.1/modules/tag_albums/models/tags_album_id.php
@@ -0,0 +1,21 @@
+
+
+ = t("Tag Albums Admin") ?>
+
+
+
+ = $tag_albums_form ?>
+
diff --git a/3.1/modules/tag_albums/views/calpage.html.php b/3.1/modules/tag_albums/views/calpage.html.php
new file mode 100644
index 00000000..c7fdbef0
--- /dev/null
+++ b/3.1/modules/tag_albums/views/calpage.html.php
@@ -0,0 +1,167 @@
+
+
+html_attributes() ?> xml:lang="en" lang="en">
+
+
+ $theme->start_combining("script,css") ?>
+
+ if ($page_title): ?>
+ = $page_title ?>
+ else: ?>
+ if ($theme->item()): ?>
+ = $theme->item()->title ?>
+ elseif ($theme->tag()): ?>
+ = t("Photos tagged with %tag_title", array("tag_title" => $theme->tag()->name)) ?>
+ else: /* Not an item, not a tag, no page_title specified. Help! */ ?>
+ = item::root()->title ?>
+ endif ?>
+ endif ?>
+
+
"
+ type="image/x-icon" />
+
" />
+ if ($theme->page_type == "collection"): ?>
+ if (($thumb_proportion = $theme->thumb_proportion($theme->item())) != 1): ?>
+ $new_width = round($thumb_proportion * 213) ?>
+ $new_height = round($thumb_proportion * 240) ?>
+
+ endif ?>
+ endif ?>
+
+ = $theme->script("json2-min.js") ?>
+ = $theme->script("jquery.js") ?>
+ = $theme->script("jquery.form.js") ?>
+ = $theme->script("jquery-ui.js") ?>
+ = $theme->script("gallery.common.js") ?>
+ /* MSG_CANCEL is required by gallery.dialog.js */ ?>
+
+ = $theme->script("gallery.ajax.js") ?>
+ = $theme->script("gallery.dialog.js") ?>
+ = $theme->script("superfish/js/superfish.js") ?>
+ = $theme->script("jquery.localscroll.js") ?>
+
+ /* These are page specific but they get combined */ ?>
+ if ($theme->page_subtype == "photo"): ?>
+ = $theme->script("jquery.scrollTo.js") ?>
+ = $theme->script("gallery.show_full_size.js") ?>
+ elseif ($theme->page_subtype == "movie"): ?>
+ = $theme->script("flowplayer.js") ?>
+ endif ?>
+
+ = $theme->head() ?>
+
+ /* Theme specific CSS/JS goes last so that it can override module CSS/JS */ ?>
+ = $theme->script("ui.init.js") ?>
+ = $theme->css("yui/reset-fonts-grids.css") ?>
+ = $theme->css("superfish/css/superfish.css") ?>
+ = $theme->css("themeroller/ui.base.css") ?>
+ = $theme->css("screen.css") ?>
+ if (locales::is_rtl()): ?>
+ = $theme->css("screen-rtl.css") ?>
+ endif; ?>
+
+
+
+ = $theme->get_combined("css") ?>
+
+
+ = $theme->get_combined("script") ?>
+
+
+ body_attributes() ?>>
+ = $theme->page_top() ?>
+
+ = $theme->site_status() ?>
+
+
+
+
+
+ = $theme->messages() ?>
+ = $content ?>
+
+
+
+
+
+
+
+ = $theme->page_bottom() ?>
+
+
\ No newline at end of file
diff --git a/3.1/modules/tag_albums/views/tag_albums_album.html.php b/3.1/modules/tag_albums/views/tag_albums_album.html.php
new file mode 100644
index 00000000..620d3c81
--- /dev/null
+++ b/3.1/modules/tag_albums/views/tag_albums_album.html.php
@@ -0,0 +1,50 @@
+
+
+ // The g-info block was taken from album.html.php and $theme->album_top() was changed to $theme->dynamic_top().
+ // $item->title and $item->description have been changed to $title and $description.
+ //
+ // The g-album-grid block was also taken from album.html.php. The section for uploading new photos to an empty album
+ // has been removed. Also, $theme->context_menu has been removed as well (it was crashing the page).
+?>
+
+ = $theme->dynamic_top() ?>
+
= html::purify($title) ?>
+
= nl2br(html::purify($description)) ?>
+
+
+ if (isset($filter_text) && (module::get_var("tag_albums", "tag_index_filter"))): ?>
+
+
+
= $filter_text; ?>
+
+ endif ?>
+
+
+= $theme->dynamic_bottom() ?>
+
+= $theme->paginator() ?>
diff --git a/3.1/modules/tag_albums/views/tag_albums_block.html.php b/3.1/modules/tag_albums/views/tag_albums_block.html.php
new file mode 100644
index 00000000..d4b08087
--- /dev/null
+++ b/3.1/modules/tag_albums/views/tag_albums_block.html.php
@@ -0,0 +1,4 @@
+
+
diff --git a/3.1/modules/tag_cloud/module.info b/3.1/modules/tag_cloud/module.info
index af8f9ce1..72c95532 100644
--- a/3.1/modules/tag_cloud/module.info
+++ b/3.1/modules/tag_cloud/module.info
@@ -1,3 +1,7 @@
name = "Tag Cloud"
description = "3D tag cloud"
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:tag_cloud"
+discuss_url = "http://gallery.menalto.com/forum_module_tag_cloud"
diff --git a/3.1/modules/tag_cloud_page/helpers/tag_cloud_page_event.php b/3.1/modules/tag_cloud_page/helpers/tag_cloud_page_event.php
new file mode 100644
index 00000000..32f0ada0
--- /dev/null
+++ b/3.1/modules/tag_cloud_page/helpers/tag_cloud_page_event.php
@@ -0,0 +1,40 @@
+deactivate)) {
+ site_status::warning(
+ t("The Tag Cloud Page module requires the Tags module. " .
+ "
Activate the Tags module now ",
+ array("url" => url::site("admin/modules"))),
+ "tag_cloud_page_needs_tag");
+ } else {
+ site_status::clear("tag_cloud_page_needs_tag");
+ }
+ }
+
+ static function pre_deactivate($data) {
+ if ($data->module == "tag") {
+ $data->messages["warn"][] = t("The Tag Cloud Page module requires the Tags module.");
+ }
+ }
+}
diff --git a/3.1/modules/tag_cloud_page/helpers/tag_cloud_page_installer.php b/3.1/modules/tag_cloud_page/helpers/tag_cloud_page_installer.php
new file mode 100644
index 00000000..4f12115a
--- /dev/null
+++ b/3.1/modules/tag_cloud_page/helpers/tag_cloud_page_installer.php
@@ -0,0 +1,32 @@
+item) && ($theme->item->is_album())) {
$item = $theme->item;
- $all_tags = ORM::factory("tag")
+
+ // Create an ORM query for finding one instance of each tag
+ // used by children in the current album.
+ $tags_model = ORM::factory("tag")
->join("items_tags", "items_tags.tag_id", "tags.id")
->join("items", "items.id", "items_tags.item_id", "LEFT")
->where("items.parent_id", "=", $item->id)
- ->order_by("tags.id", "ASC")
- ->find_all();
+ ->order_by("tags.name", "ASC")
+ ->group_by("tags.id");
+
+ // Limit $all_tags to the first X tags if max_display_tags is set,
+ // else populate it with all tags used by this album's children.
+ $all_tags = "";
+ if (module::get_var("tagsinalbum", "max_display_tags") > 0) {
+ $all_tags = $tags_model->find_all(module::get_var("tagsinalbum", "max_display_tags"));
+ } else {
+ $all_tags = $tags_model->find_all();
+ }
+
+ // If this album has children that are tagged, display those tags.
if (count($all_tags) > 0) {
$block = new Block();
$block->css_id = "g-tags-in-album-block";
diff --git a/3.1/modules/tagsinalbum/helpers/tagsinalbum_installer.php b/3.1/modules/tagsinalbum/helpers/tagsinalbum_installer.php
index 4357ab87..09f82108 100644
--- a/3.1/modules/tagsinalbum/helpers/tagsinalbum_installer.php
+++ b/3.1/modules/tagsinalbum/helpers/tagsinalbum_installer.php
@@ -19,7 +19,15 @@
*/
class tagsinalbum_installer {
static function install() {
- module::set_version("tagsinalbum", 1);
+ module::set_var("tagsinalbum", "max_display_tags", 0);
+ module::set_version("tagsinalbum", 2);
+ }
+
+ static function upgrade($version) {
+ if ($version == 1) {
+ module::set_var("tagsinalbum", "max_display_tags", 0);
+ module::set_version("tagsinalbum", $version = 2);
+ }
}
static function deactivate() {
diff --git a/3.1/modules/tagsinalbum/module.info b/3.1/modules/tagsinalbum/module.info
index 94b7699b..cc732774 100644
--- a/3.1/modules/tagsinalbum/module.info
+++ b/3.1/modules/tagsinalbum/module.info
@@ -1,3 +1,7 @@
name = "Tags In Album"
description = "Creates a sidebar block to display tags used by photos and videos in the current album."
-version = 1
+version = 2
+author_name = "rWatcher"
+author_url = "http://codex.gallery2.org/User:RWatcher"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:tagsinalbum"
+discuss_url = "http://gallery.menalto.com/node/99171"
diff --git a/3.1/modules/tagsinalbum/views/tagsinalbum_sidebar.html.php b/3.1/modules/tagsinalbum/views/tagsinalbum_sidebar.html.php
index 803e46ee..8d9e0910 100644
--- a/3.1/modules/tagsinalbum/views/tagsinalbum_sidebar.html.php
+++ b/3.1/modules/tagsinalbum/views/tagsinalbum_sidebar.html.php
@@ -1,28 +1,11 @@
- // Create an array to store the tag names and urls in.
- $display_tags = array();
-
- // Loop through all tags in the album, copying their
- // names and urls into the array and skipping duplicates.
- $last_tagid = "";
- foreach ($all_tags as $one_tag) {
- if ($last_tagid != $one_tag->id) {
- $tag = ORM::factory("tag", $one_tag->id);
- $display_tags[] = array(html::clean($tag->name), $tag->url());
- $last_tagid = $one_tag->id;
- }
- }
-
- // Sort the array.
- asort($display_tags);
-
- // Print out the list of tags as clickable links.
+ // Loop through each tag in $all_tags, and display it as a link.
$not_first = 0;
- foreach ($display_tags as $one_tag) {
+ foreach ($all_tags as $one_tag) {
if ($not_first++ > 0) {
print ", ";
}
- print "
" . $one_tag[0] . " ";
+ print "
url() . "\">" . html::clean($one_tag->name) . " ";
}
?>
diff --git a/3.1/modules/tagsmap/controllers/admin_tagsmap.php b/3.1/modules/tagsmap/controllers/admin_tagsmap.php
index 8c9b643a..40d87119 100644
--- a/3.1/modules/tagsmap/controllers/admin_tagsmap.php
+++ b/3.1/modules/tagsmap/controllers/admin_tagsmap.php
@@ -206,8 +206,12 @@ class Admin_TagsMap_Controller extends Admin_Controller {
$startingmap_group->dropdown("google_default_type")
->label(t("Default Map Type"))
->options(
- array("G_NORMAL_MAP", "G_SATELLITE_MAP", "G_HYBRID_MAP",
- "G_PHYSICAL_MAP", "G_SATELLITE_3D_MAP"));
+ array("G_NORMAL_MAP" => "Normal",
+ "G_SATELLITE_MAP" => "Satellite",
+ "G_HYBRID_MAP" => "Hybrid",
+ "G_PHYSICAL_MAP" => "Physical",
+ "G_SATELLITE_3D_MAP" => "Google Earth"))
+ ->selected(module::get_var("tagsmap", "googlemap_type"));
// Add a save button to the form.
$form->submit("SaveSettings")->value(t("Save"));
diff --git a/3.1/modules/tagsmap/helpers/tagsmap_event.php b/3.1/modules/tagsmap/helpers/tagsmap_event.php
index 66ed8fd2..b38d9f50 100644
--- a/3.1/modules/tagsmap/helpers/tagsmap_event.php
+++ b/3.1/modules/tagsmap/helpers/tagsmap_event.php
@@ -32,6 +32,12 @@ class tagsmap_event_Core {
}
}
+ static function pre_deactivate($data) {
+ if ($data->module == "tag") {
+ $data->messages["warn"][] = t("The TagsMap module requires the Tags module.");
+ }
+ }
+
static function admin_menu($menu, $theme) {
// Add a link to the TagsMap admin page to the Content menu.
$menu->get("content_menu")
diff --git a/3.1/modules/tagsmap/helpers/tagsmap_installer.php b/3.1/modules/tagsmap/helpers/tagsmap_installer.php
index 48ad5461..4567d4df 100644
--- a/3.1/modules/tagsmap/helpers/tagsmap_installer.php
+++ b/3.1/modules/tagsmap/helpers/tagsmap_installer.php
@@ -43,6 +43,14 @@ class tagsmap_installer {
site_status::clear("tagsmap_needs_tag");
}
+ static function can_activate() {
+ $messages = array();
+ if (!module::is_active("tag")) {
+ $messages["warn"][] = t("The TagsMap module requires the Tags module.");
+ }
+ return $messages;
+ }
+
static function uninstall() {
// Delete the GPS table before uninstalling.
$db = Database::instance();
diff --git a/3.1/modules/tagsmap/module.info b/3.1/modules/tagsmap/module.info
index b916f09d..827de3eb 100644
--- a/3.1/modules/tagsmap/module.info
+++ b/3.1/modules/tagsmap/module.info
@@ -1,3 +1,7 @@
name = "TagsMap"
description = "Assign GPS coordinates to existing tags and display them on a map."
version = 2
+author_name = "rWatcher"
+author_url = "http://codex.gallery2.org/User:RWatcher"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:tagsmap"
+discuss_url = "http://gallery.menalto.com/node/89338"
diff --git a/3.1/modules/themeroller/controllers/admin_themeroller.php b/3.1/modules/themeroller/controllers/admin_themeroller.php
index 2b448431..d36074cd 100755
--- a/3.1/modules/themeroller/controllers/admin_themeroller.php
+++ b/3.1/modules/themeroller/controllers/admin_themeroller.php
@@ -84,12 +84,16 @@ class Admin_Themeroller_Controller extends Admin_Controller {
->name(t("Generate theme"));
$v->task = task::create($task_def,
- array("path" => $extract_path,
- "original_name" => $form->theme->original->value,
- "theme_name" => $form->theme->theme_name->value,
- "display_name" => $form->theme->display_name->value,
- "description" => $form->theme->description->value,
- "is_admin" => $session->get("themeroller_is_admin")));
+ array("path" => $extract_path,
+ "user_name" => SafeString::purify(identity::active_user()->name),
+ "original_name" => SafeString::purify($form->theme->original->value),
+ "theme_name" => SafeString::purify($form->theme->theme_name->value),
+ "display_name" => SafeString::purify($form->theme->display_name->value),
+ "description" => SafeString::purify($form->theme->description->value),
+ "author_url" => SafeString::purify($form->theme->author_url->value),
+ "info_url" => SafeString::purify($form->theme->info_url->value),
+ "discuss_url" => SafeString::purify($form->theme->discuss_url->value),
+ "is_admin" => $session->get("themeroller_is_admin")));
json::reply(array("html" => (string) $v));
} else {
@@ -169,9 +173,13 @@ class Admin_Themeroller_Controller extends Admin_Controller {
}
$form_group->textarea("description")->label(t("Description"))
->id("g-description")
- ->value(t("A generated theme based on the ui themeroller '%name' styling", array("name" => str_replace("admin_", "", $theme_name))))
+ ->value(t("A generated theme based on the ui themeroller '%name' styling",
+ array("name" => str_replace("admin_", "", $theme_name))))
->rules("required")
->error_messages("required", t("You must enter a theme description name"));
+ $form_group->input("author_url")->label(t("Author url"))->id("g-author-url");
+ $form_group->input("info_url")->label(t("Info url"))->id("g-info-url");
+ $form_group->input("discuss_url")->label(t("Theme Name"))->id("g-discuss-url");
$form_group->submit("")->value(t("Create"));
return $form;
diff --git a/3.1/modules/themeroller/data/views/page.html.php b/3.1/modules/themeroller/data/views/page.html.php
index ffd5a173..06851344 100644
--- a/3.1/modules/themeroller/data/views/page.html.php
+++ b/3.1/modules/themeroller/data/views/page.html.php
@@ -4,47 +4,40 @@
+ $theme->start_combining("script,css") ?>
if ($page_title): ?>
= $page_title ?>
else: ?>
if ($theme->item()): ?>
- if ($theme->item()->is_album()): ?>
- = t("Browse Album :: %album_title", array("album_title" => $theme->item()->title)) ?>
- elseif ($theme->item()->is_photo()): ?>
- = t("Photo :: %photo_title", array("photo_title" => $theme->item()->title)) ?>
- else: ?>
- = t("Movie :: %movie_title", array("movie_title" => $theme->item()->title)) ?>
- endif ?>
+ = $theme->item()->title ?>
elseif ($theme->tag()): ?>
- = t("Browse Tag :: %tag_title", array("tag_title" => $theme->tag()->name)) ?>
+ = t("Photos tagged with %tag_title", array("tag_title" => $theme->tag()->name)) ?>
else: /* Not an item, not a tag, no page_title specified. Help! */ ?>
- = t("Gallery") ?>
+ = item::root()->title ?>
endif ?>
endif ?>
-
" type="image/x-icon" />
- = $theme->css("yui/reset-fonts-grids.css") ?>
- = $theme->css("superfish/css/superfish.css") ?>
- = $theme->css("themeroller/ui.base.css") ?>
- = $theme->css("screen.css") ?>
-
+
"
+ type="image/x-icon" />
+
" />
if ($theme->page_type == "collection"): ?>
if ($thumb_proportion != 1): ?>
$new_width = round($thumb_proportion * 213) ?>
$new_height = round($thumb_proportion * 240) ?>
-
+
endif ?>
endif ?>
+
+ = $theme->script("json2-min.js") ?>
= $theme->script("jquery.js") ?>
= $theme->script("jquery.form.js") ?>
= $theme->script("jquery-ui.js") ?>
@@ -57,7 +50,6 @@
= $theme->script("gallery.dialog.js") ?>
= $theme->script("superfish/js/superfish.js") ?>
= $theme->script("jquery.localscroll.js") ?>
- = $theme->script("ui.init.js") ?>
/* These are page specific, but if we put them before $theme->head() they get combined */ ?>
if ($theme->page_subtype == "photo"): ?>
@@ -68,6 +60,26 @@
endif ?>
= $theme->head() ?>
+
+ /* Theme specific CSS/JS goes last so that it can override module CSS/JS */ ?>
+ = $theme->script("ui.init.js") ?>
+ = $theme->css("yui/reset-fonts-grids.css") ?>
+ = $theme->css("superfish/css/superfish.css") ?>
+ = $theme->css("themeroller/ui.base.css") ?>
+ = $theme->css("screen.css") ?>
+ if (locales::is_rtl()): ?>
+ = $theme->css("screen-rtl.css") ?>
+ endif; ?>
+
+
+
+ = $theme->get_combined("css") ?>
+
+
+ = $theme->get_combined("script") ?>
body_attributes() ?>>
@@ -100,19 +112,22 @@
$i = 0 ?>
foreach ($parents as $parent): ?>
>
-
+ // Adding ?show= causes Gallery3 to display the page
+ // containing that photo. For now, we just do it for
+ // the immediate parent so that when you go back up a
+ // level you're on the right page. ?>
item()->id}" : null) ?>">
- = html::purify(text::limit_chars($parent->title, 15)) ?>
+ // limit the title length to something reasonable (defaults to 15) ?>
+ = html::purify(text::limit_chars($parent->title,
+ module::get_var("gallery", "visible_title_length"))) ?>
$i++ ?>
endforeach ?>
">
- = html::purify(text::limit_chars($theme->item()->title, 15)) ?>
+ = html::purify(text::limit_chars($theme->item()->title,
+ module::get_var("gallery", "visible_title_length"))) ?>
endif ?>
diff --git a/3.1/modules/themeroller/helpers/themeroller_task.php b/3.1/modules/themeroller/helpers/themeroller_task.php
index f6fec329..48d8b312 100644
--- a/3.1/modules/themeroller/helpers/themeroller_task.php
+++ b/3.1/modules/themeroller/helpers/themeroller_task.php
@@ -208,15 +208,18 @@ class themeroller_task_Core {
break;
case "generate_screen_css":
$file = "{$theme_path}/css/screen.css";
- $v = new View(($is_admin ? "admin" : "site") . "_screen.css");
- $v->display_name = $task->get("display_name");
- foreach ($parameters["colors"] as $color => $value) {
- $v->$color = $value;
+ foreach (array("screen", "screen-rtl") as $file) {
+ $css_file = "{$theme_path}/css/$file.css";
+ $v = new View(($is_admin ? "admin" : "site") . "_{$file}.css");
+ $v->display_name = $task->get("display_name");
+ foreach ($parameters["colors"] as $color => $value) {
+ $v->$color = $value;
+ }
+ ob_start();
+ print $v->render();
+ file_put_contents($css_file, ob_get_contents());
+ ob_end_clean();
}
- ob_start();
- print $v->render();
- file_put_contents($file, ob_get_contents());
- ob_end_clean();
$completed++;
$task->log(t("Generated screen css: %path", array("path" => $file)));
$task->status = t("Screen css generated");
@@ -229,14 +232,18 @@ class themeroller_task_Core {
$task->status = t("Thumbnail generated");
$task->set("mode", "generate_theme_info");
$completed++;
- $task->log(t("Generated theme thumbnail: %path", array("path" => "{$theme_path}thumbnail.png")));
+ $task->log(t("Generated theme thumbnail: %path",
+ array("path" => "{$theme_path}thumbnail.png")));
break;
case "generate_theme_info":
$file = "{$theme_path}/theme.info";
$v = new View("theme.info");
$v->display_name = $task->get("display_name");
$v->description = $task->get("description");
- $v->user_name = identity::active_user()->name;
+ $v->user_name = $task->get("user_name");
+ $v->author_url = $task->get("author_url");
+ $v->info_url = $task->get("info_url");
+ $v->discuss_url = $task->get("discuss_url");
$v->is_admin = $is_admin;
$v->definition = json_encode($parameters["colors"]);
ob_start();
diff --git a/3.1/modules/themeroller/module.info b/3.1/modules/themeroller/module.info
index 0e50286e..aaa16bd6 100755
--- a/3.1/modules/themeroller/module.info
+++ b/3.1/modules/themeroller/module.info
@@ -1,3 +1,7 @@
-name = "Theme generator"
+name = "Theme Roller"
description = "Use a JQuery UI theme to create a Gallery3 Theme"
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:themeroller"
+discuss_url = "http://gallery.menalto.com/forum_module_themeroller"
diff --git a/3.1/modules/themeroller/views/admin_screen-rtl.css.php b/3.1/modules/themeroller/views/admin_screen-rtl.css.php
new file mode 100644
index 00000000..196d5313
--- /dev/null
+++ b/3.1/modules/themeroller/views/admin_screen-rtl.css.php
@@ -0,0 +1,299 @@
+/**
+ * Gallery 3 Admin Right yo left language styles
+ */
+
+.rtl {
+ direction: rtl;
+}
+
+ #g-header,
+ #g-content,
+ #g-sidebar,
+ #g-footer,
+ caption,
+ th,
+ #g-dialog,
+ .g-context-menu li a,
+ .g-message-box li,
+ #g-site-status li {
+ text-align: right;
+}
+
+ .g-text-right {
+ text-align: left;
+}
+
+ .g-error,
+ .g-info,
+ .g-success,
+ .g-warning,
+ #g-add-photos-status .g-success,
+ #g-add-photos-status .g-error {
+ background-position: center right;
+ padding-right: 30px !important;
+}
+
+ form li.g-error,
+ form li.g-info,
+ form li.g-success,
+ form li.g-warning {
+ padding-right: 0 !important;
+}
+
+ .g-left,
+ .g-inline li,
+ #g-content #g-album-grid .g-item,
+ .sf-menu li,
+ .g-breadcrumbs li,
+ .g-paginator li,
+ .g-buttonset li,
+ .ui-icon-left .ui-icon,
+ .g-short-form li,
+ form ul ul li,
+ input[type="submit"],
+ input[type="reset"],
+ input.checkbox,
+ input[type=checkbox],
+ input.radio,
+ input[type=radio] {
+ float: right;
+}
+
+ .g-right,
+ .ui-icon-right .ui-icon {
+ float: left;
+}
+
+ .g-inline li {
+ margin-right: 1em;
+}
+
+ .g-inline li.g-first {
+ margin-right: 0;
+}
+
+ .g-breadcrumbs li {
+ background: transparent url('../images/ico-separator-rtl.png') no-repeat scroll right center;
+ padding: 1em 18px 1em 8px;
+}
+
+ .g-breadcrumbs .g-first {
+ background: none;
+ padding-right: 0;
+}
+
+ input.checkbox {
+ margin-left: .4em;
+}
+
+ #g-add-comment {
+ right: inherit;
+ left: 0;
+}
+
+ .ui-icon-left .ui-icon {
+ margin-left: .2em;
+}
+
+ .ui-icon-right .ui-icon {
+ margin-right: .2em;
+}
+
+/* RTL Corner radius ~~~~~~~~~~~~~~~~~~~~~~ */
+ .g-buttonset .ui-corner-tl {
+ -moz-border-radius-topleft: 0;
+ -webkit-border-top-left-radius: 0;
+ border-top-left-radius: 0;
+ -moz-border-radius-topright: 5px !important;
+ -webkit-border-top-right-radius: 5px !important;
+ border-top-right-radius: 5px !important;
+}
+
+ .g-buttonset .ui-corner-tr {
+ -moz-border-radius-topright: 0;
+ -webkit-border-top-right-radius: 0;
+ border-top-right-radius: 0;
+ -moz-border-radius-topleft: 5px !important;
+ -webkit-border-top-left-radius: 5px !important;
+ border-top-left-radius: 5px !important;
+}
+
+ .g-buttonset .ui-corner-bl {
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-bottomright: 5px !important;
+ -webkit-border-bottom-right-radius: 5px !important;
+ border-bottom-right-radius: 5px !important;
+}
+
+ .g-buttonset .ui-corner-br {
+ -moz-border-radius-bottomright: 0;
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomleft: 5px !important;
+ -webkit-border-bottom-left-radius: 5px !important;
+ border-bottom-left-radius: 5px !important;
+}
+
+ .g-buttonset .ui-corner-right,
+ .ui-progressbar .ui-corner-right {
+ -moz-border-radius-topright: 0;
+ -webkit-border-top-right-radius: 0;
+ border-top-right-radius: 0;
+ -moz-border-radius-topleft: 5px !important;
+ -webkit-border-top-left-radius: 5px !important;
+ border-top-left-radius: 5px !important;
+ -moz-border-radius-bottomright: 0;
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomleft: 5px !important;
+ -webkit-border-bottom-left-radius: 5px !important;
+ border-bottom-left-radius: 5px !important;
+}
+
+ .g-buttonset .ui-corner-left,
+ .ui-progressbar .ui-corner-left {
+ -moz-border-radius-topleft: 0;
+ -webkit-border-top-left-radius: 0;
+ border-top-left-radius: 0;
+ -moz-border-radius-topright: 5px !important;
+ -webkit-border-top-right-radius: 5px !important;
+ border-top-right-radius: 5px !important;
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-bottomright: 5px !important;
+ -webkit-border-bottom-right-radius: 5px !important;
+ border-bottom-right-radius: 5px !important;
+}
+
+/* RTL Superfish ~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+ .sf-menu a {
+ border-left: none;
+ border-right:1px solid #= $borderColorContent ?>;
+}
+
+ .sf-menu a.sf-with-ul {
+ padding-left: 2.25em;
+ padding-right: 1em;
+}
+
+ .sf-sub-indicator {
+ background: url("themeroller/images/ui-icons_= $fcDefault ?>_256x240.png") no-repeat -96px -16px; /* 8-bit indexed alpha png. IE6 gets solid image only */
+ left: .75em !important;
+ right: auto;
+}
+
+ a > .sf-sub-indicator { /* give all except IE6 the correct values */
+ top: .8em;
+ background-position: -10px -100px; /* use translucent arrow for modern browsers*/
+}
+/* apply hovers to modern browsers */
+ a:focus > .sf-sub-indicator,
+ a:hover > .sf-sub-indicator,
+ a:active > .sf-sub-indicator,
+ li:hover > a > .sf-sub-indicator,
+ li.sfHover > a > .sf-sub-indicator {
+ background-position: 0 -100px; /* arrow hovers for modern browsers*/
+}
+
+/* point right for anchors in subs */
+ .sf-menu ul .sf-sub-indicator { background-position: 0 0; }
+ .sf-menu ul a > .sf-sub-indicator { background-position: -10px 0; }
+/* apply hovers to modern browsers */
+ .sf-menu ul a:focus > .sf-sub-indicator,
+ .sf-menu ul a:hover > .sf-sub-indicator,
+ .sf-menu ul a:active > .sf-sub-indicator,
+ .sf-menu ul li:hover > a > .sf-sub-indicator,
+ .sf-menu ul li.sfHover > a > .sf-sub-indicator {
+ background-position: 0 0; /* arrow hovers for modern browsers*/
+}
+
+ .sf-menu li:hover ul,
+ .sf-menu li.sfHover ul {
+ right: 0;
+ left: auto;
+}
+
+ ul.sf-menu li li:hover ul,
+ ul.sf-menu li li.sfHover ul {
+ right: 12em; /* match ul width */
+ left: auto;
+}
+ ul.sf-menu li li li:hover ul,
+ ul.sf-menu li li li.sfHover ul {
+ right: 12em; /* match ul width */
+ left: auto;
+}
+
+/*** shadows for all but IE6 ***/
+ .sf-shadow ul {
+ background: url('../images/superfish-shadow.png') no-repeat bottom left;
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-topright: 0;
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-top-right-radius: 0;
+ -webkit-border-bottom-left-radius: 0;
+ -moz-border-radius-topleft: 17px;
+ -moz-border-radius-bottomright: 17px;
+ -webkit-border-top-left-radius: 17px;
+ -webkit-border-bottom-right-radius: 17px;
+ border-top-left-radius: 17px;
+ border-bottom-right-radius: 17px;
+}
+
+/* RTL ThemeRoller ~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+ .ui-dialog .ui-dialog-titlebar {
+ padding: 0.5em 1em 0.3em 0.3em;
+}
+
+ .ui-dialog .ui-dialog-title {
+ float: right;
+}
+
+ .ui-dialog .ui-dialog-titlebar-close {
+ left: 0.3em;
+ right: auto;
+}
+
+ #g-content #g-album-grid .g-item,
+ #g-site-theme,
+ #g-admin-theme,
+ .g-selected img,
+ .g-available .g-block img,
+ #g-content #g-photo-stream .g-item,
+ li.g-group,
+ #g-server-add-admin {
+ float: right;
+}
+
+ #g-admin-graphics .g-available .g-block {
+ float: right;
+ margin-left: 1em;
+ margin-right: 0em;
+}
+
+ #g-site-admin-menu {
+ left: auto;
+ right: 150px;
+}
+
+ #g-header #g-login-menu {
+ float: left;
+}
+
+ #g-header #g-login-menu li {
+ margin-left: 0;
+ padding-left: 0;
+ padding-right: 1.2em;
+}
+
+ .g-selected img,
+ .g-available .g-block img {
+ margin: 0 0 1em 1em;
+}
+
diff --git a/3.1/modules/themeroller/views/admin_screen.css.php b/3.1/modules/themeroller/views/admin_screen.css.php
index 54ea97f4..68659be2 100644
--- a/3.1/modules/themeroller/views/admin_screen.css.php
+++ b/3.1/modules/themeroller/views/admin_screen.css.php
@@ -13,7 +13,6 @@
* 7) Navigation and menus
* 8) jQuery and jQuery UI
* 9) Module color overrides
- * 10) Right-to-left language styles
*
* @todo Review g-buttonset-vertical
*/
@@ -98,7 +97,16 @@ a:hover,
text-decoration: none;
}
+/* Lists ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+ul.g-text li,
+.g-text ul li {
+ list-style-type: disc;
+ margin-left: 1em;
+}
+
/* Forms ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
form {
margin: 0;
}
@@ -415,11 +423,6 @@ th {
background-color: #= $bgColorContent ?>;
}
-ul.enumeration li {
- list-style-type: disc;
- margin-left: 20px;
-}
-
/*** ******************************************************************
* 3) Page layout containers
*********************************************************************/
@@ -1126,303 +1129,3 @@ a > .sf-sub-indicator {
.g-default-group .g-user {
color: #= $fcDefault ?> !important;
}
-
-/** *******************************************************************
- * 10) Right to left styles
- *********************************************************************/
-
-.rtl {
- direction: rtl;
-}
-
-.rtl #g-header,
-.rtl #g-content,
-.rtl #g-sidebar,
-.rtl #g-footer,
-.rtl caption,
-.rtl th,
-.rtl #g-dialog,
-.rtl .g-context-menu li a,
-.rtl .g-message-box li,
-.rtl #g-site-status li {
- text-align: right;
-}
-
-.rtl .g-text-right {
- text-align: left;
-}
-
-.rtl .g-error,
-.rtl .g-info,
-.rtl .g-success,
-.rtl .g-warning,
-.rtl #g-add-photos-status .g-success,
-.rtl #g-add-photos-status .g-error {
- background-position: center right;
- padding-right: 30px !important;
-}
-
-.rtl form li.g-error,
-.rtl form li.g-info,
-.rtl form li.g-success,
-.rtl form li.g-warning {
- padding-right: 0 !important;
-}
-
-.rtl .g-left,
-.rtl .g-inline li,
-.rtl #g-content #g-album-grid .g-item,
-.rtl .sf-menu li,
-.rtl .g-breadcrumbs li,
-.rtl .g-paginator li,
-.rtl .g-buttonset li,
-.rtl .ui-icon-left .ui-icon,
-.rtl .g-short-form li,
-.rtl form ul ul li,
-.rtl input[type="submit"],
-.rtl input[type="reset"],
-.rtl input.checkbox,
-.rtl input[type=checkbox],
-.rtl input.radio,
-.rtl input[type=radio] {
- float: right;
-}
-
-.rtl .g-right,
-.rtl .ui-icon-right .ui-icon {
- float: left;
-}
-
-.rtl .g-inline li {
- margin-right: 1em;
-}
-
-.rtl .g-inline li.g-first {
- margin-right: 0;
-}
-
-.rtl .g-breadcrumbs li {
- background: transparent url('../images/ico-separator-rtl.png') no-repeat scroll right center;
- padding: 1em 18px 1em 8px;
-}
-
-.rtl .g-breadcrumbs .g-first {
- background: none;
- padding-right: 0;
-}
-
-.rtl input.checkbox {
- margin-left: .4em;
-}
-
-.rtl #g-add-comment {
- right: inherit;
- left: 0;
-}
-
-.rtl .ui-icon-left .ui-icon {
- margin-left: .2em;
-}
-
-.rtl .ui-icon-right .ui-icon {
- margin-right: .2em;
-}
-
-/* RTL Corner radius ~~~~~~~~~~~~~~~~~~~~~~ */
-.rtl .g-buttonset .ui-corner-tl {
- -moz-border-radius-topleft: 0;
- -webkit-border-top-left-radius: 0;
- border-top-left-radius: 0;
- -moz-border-radius-topright: 5px !important;
- -webkit-border-top-right-radius: 5px !important;
- border-top-right-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-tr {
- -moz-border-radius-topright: 0;
- -webkit-border-top-right-radius: 0;
- border-top-right-radius: 0;
- -moz-border-radius-topleft: 5px !important;
- -webkit-border-top-left-radius: 5px !important;
- border-top-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-bl {
- -moz-border-radius-bottomleft: 0;
- -webkit-border-bottom-left-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-bottomright: 5px !important;
- -webkit-border-bottom-right-radius: 5px !important;
- border-bottom-right-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-br {
- -moz-border-radius-bottomright: 0;
- -webkit-border-bottom-right-radius: 0;
- border-bottom-right-radius: 0;
- -moz-border-radius-bottomleft: 5px !important;
- -webkit-border-bottom-left-radius: 5px !important;
- border-bottom-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-right,
-.rtl .ui-progressbar .ui-corner-right {
- -moz-border-radius-topright: 0;
- -webkit-border-top-right-radius: 0;
- border-top-right-radius: 0;
- -moz-border-radius-topleft: 5px !important;
- -webkit-border-top-left-radius: 5px !important;
- border-top-left-radius: 5px !important;
- -moz-border-radius-bottomright: 0;
- -webkit-border-bottom-right-radius: 0;
- border-bottom-right-radius: 0;
- -moz-border-radius-bottomleft: 5px !important;
- -webkit-border-bottom-left-radius: 5px !important;
- border-bottom-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-left,
-.rtl .ui-progressbar .ui-corner-left {
- -moz-border-radius-topleft: 0;
- -webkit-border-top-left-radius: 0;
- border-top-left-radius: 0;
- -moz-border-radius-topright: 5px !important;
- -webkit-border-top-right-radius: 5px !important;
- border-top-right-radius: 5px !important;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-bottom-left-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-bottomright: 5px !important;
- -webkit-border-bottom-right-radius: 5px !important;
- border-bottom-right-radius: 5px !important;
-}
-
-/* RTL Superfish ~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.rtl .sf-menu a {
- border-left: none;
- border-right:1px solid #= $borderColorContent ?>;
-}
-
-.rtl .sf-menu a.sf-with-ul {
- padding-left: 2.25em;
- padding-right: 1em;
-}
-
-.rtl .sf-sub-indicator {
- background: url("themeroller/images/ui-icons_= $fcDefault ?>_256x240.png") no-repeat -96px -16px; /* 8-bit indexed alpha png. IE6 gets solid image only */
- left: .75em !important;
- right: auto;
-}
-
-.rtl a > .sf-sub-indicator { /* give all except IE6 the correct values */
- top: .8em;
- background-position: -10px -100px; /* use translucent arrow for modern browsers*/
-}
-/* apply hovers to modern browsers */
-.rtl a:focus > .sf-sub-indicator,
-.rtl a:hover > .sf-sub-indicator,
-.rtl a:active > .sf-sub-indicator,
-.rtl li:hover > a > .sf-sub-indicator,
-.rtl li.sfHover > a > .sf-sub-indicator {
- background-position: 0 -100px; /* arrow hovers for modern browsers*/
-}
-
-/* point right for anchors in subs */
-.rtl .sf-menu ul .sf-sub-indicator { background-position: 0 0; }
-.rtl .sf-menu ul a > .sf-sub-indicator { background-position: -10px 0; }
-/* apply hovers to modern browsers */
-.rtl .sf-menu ul a:focus > .sf-sub-indicator,
-.rtl .sf-menu ul a:hover > .sf-sub-indicator,
-.rtl .sf-menu ul a:active > .sf-sub-indicator,
-.rtl .sf-menu ul li:hover > a > .sf-sub-indicator,
-.rtl .sf-menu ul li.sfHover > a > .sf-sub-indicator {
- background-position: 0 0; /* arrow hovers for modern browsers*/
-}
-
-.rtl .sf-menu li:hover ul,
-.rtl .sf-menu li.sfHover ul {
- right: 0;
- left: auto;
-}
-
-.rtl ul.sf-menu li li:hover ul,
-.rtl ul.sf-menu li li.sfHover ul {
- right: 12em; /* match ul width */
- left: auto;
-}
-.rtl ul.sf-menu li li li:hover ul,
-.rtl ul.sf-menu li li li.sfHover ul {
- right: 12em; /* match ul width */
- left: auto;
-}
-
-/*** shadows for all but IE6 ***/
-.rtl .sf-shadow ul {
- background: url('../images/superfish-shadow.png') no-repeat bottom left;
- border-top-right-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-topright: 0;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-top-right-radius: 0;
- -webkit-border-bottom-left-radius: 0;
- -moz-border-radius-topleft: 17px;
- -moz-border-radius-bottomright: 17px;
- -webkit-border-top-left-radius: 17px;
- -webkit-border-bottom-right-radius: 17px;
- border-top-left-radius: 17px;
- border-bottom-right-radius: 17px;
-}
-
-/* RTL ThemeRoller ~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.rtl .ui-dialog .ui-dialog-titlebar {
- padding: 0.5em 1em 0.3em 0.3em;
-}
-
-.rtl .ui-dialog .ui-dialog-title {
- float: right;
-}
-
-.rtl .ui-dialog .ui-dialog-titlebar-close {
- left: 0.3em;
- right: auto;
-}
-
-.rtl #g-content #g-album-grid .g-item,
-.rtl #g-site-theme,
-.rtl #g-admin-theme,
-.rtl .g-selected img,
-.rtl .g-available .g-block img,
-.rtl #g-content #g-photo-stream .g-item,
-.rtl li.g-group,
-.rtl #g-server-add-admin {
- float: right;
-}
-
-.rtl #g-admin-graphics .g-available .g-block {
- float: right;
- margin-left: 1em;
- margin-right: 0em;
-}
-
-.rtl #g-site-admin-menu {
- left: auto;
- right: 150px;
-}
-
-.rtl #g-header #g-login-menu {
- float: left;
-}
-
-.rtl #g-header #g-login-menu li {
- margin-left: 0;
- padding-left: 0;
- padding-right: 1.2em;
-}
-
-.rtl .g-selected img,
-.rtl .g-available .g-block img {
- margin: 0 0 1em 1em;
-}
-
diff --git a/3.1/modules/themeroller/views/site_screen-rtl.css.php b/3.1/modules/themeroller/views/site_screen-rtl.css.php
new file mode 100644
index 00000000..991234cb
--- /dev/null
+++ b/3.1/modules/themeroller/views/site_screen-rtl.css.php
@@ -0,0 +1,320 @@
+
+/**
+ * Gallery 3 = $display_name ?> right to left language styles
+ */
+
+.rtl {
+ direction: rtl;
+}
+
+ #g-header,
+ #g-content,
+ #g-sidebar,
+ #g-footer,
+ caption,
+ th,
+ #g-dialog,
+ .g-context-menu li a,
+ .g-message-box li,
+ #g-site-status li {
+ text-align: right;
+}
+
+ .g-text-right {
+ text-align: left;
+}
+
+ .g-error,
+ .g-info,
+ .g-success,
+ .g-warning,
+ #g-add-photos-status .g-success,
+ #g-add-photos-status .g-error {
+ background-position: center right;
+ padding-right: 30px !important;
+}
+
+ form li.g-error,
+ form li.g-info,
+ form li.g-success,
+ form li.g-warning {
+ padding-right: 0 !important;
+}
+
+ .g-left,
+ .g-inline li,
+ #g-content #g-album-grid .g-item,
+ .sf-menu li,
+ .g-breadcrumbs li,
+ .g-paginator li,
+ .g-buttonset li,
+ .ui-icon-left .ui-icon,
+ .g-short-form li,
+ form ul ul li,
+ input[type="submit"],
+ input[type="reset"],
+ input.checkbox,
+ input[type=checkbox],
+ input.radio,
+ input[type=radio] {
+ float: right;
+}
+
+ .g-right,
+ .ui-icon-right .ui-icon {
+ float: left;
+}
+
+ .g-inline li {
+ margin-right: 1em;
+}
+
+ .g-inline li.g-first {
+ margin-right: 0;
+}
+
+ .g-breadcrumbs li {
+ background: transparent url('../images/ico-separator-rtl.png') no-repeat scroll right center;
+ padding: 1em 18px 1em 8px;
+}
+
+ .g-breadcrumbs .g-first {
+ background: none;
+ padding-right: 0;
+}
+
+ input.checkbox {
+ margin-left: .4em;
+}
+
+ #g-add-comment {
+ right: inherit;
+ left: 0;
+}
+
+ .ui-icon-left .ui-icon {
+ margin-left: .2em;
+}
+
+ .ui-icon-right .ui-icon {
+ margin-right: .2em;
+}
+
+/* RTL Corner radius ~~~~~~~~~~~~~~~~~~~~~~ */
+ .g-buttonset .ui-corner-tl {
+ -moz-border-radius-topleft: 0;
+ -webkit-border-top-left-radius: 0;
+ border-top-left-radius: 0;
+ -moz-border-radius-topright: 5px !important;
+ -webkit-border-top-right-radius: 5px !important;
+ border-top-right-radius: 5px !important;
+}
+
+ .g-buttonset .ui-corner-tr {
+ -moz-border-radius-topright: 0;
+ -webkit-border-top-right-radius: 0;
+ border-top-right-radius: 0;
+ -moz-border-radius-topleft: 5px !important;
+ -webkit-border-top-left-radius: 5px !important;
+ border-top-left-radius: 5px !important;
+}
+
+ .g-buttonset .ui-corner-bl {
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-bottomright: 5px !important;
+ -webkit-border-bottom-right-radius: 5px !important;
+ border-bottom-right-radius: 5px !important;
+}
+
+ .g-buttonset .ui-corner-br {
+ -moz-border-radius-bottomright: 0;
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomleft: 5px !important;
+ -webkit-border-bottom-left-radius: 5px !important;
+ border-bottom-left-radius: 5px !important;
+}
+
+ .g-buttonset .ui-corner-right,
+ .ui-progressbar .ui-corner-right {
+ -moz-border-radius-topright: 0;
+ -webkit-border-top-right-radius: 0;
+ border-top-right-radius: 0;
+ -moz-border-radius-topleft: 5px !important;
+ -webkit-border-top-left-radius: 5px !important;
+ border-top-left-radius: 5px !important;
+ -moz-border-radius-bottomright: 0;
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomleft: 5px !important;
+ -webkit-border-bottom-left-radius: 5px !important;
+ border-bottom-left-radius: 5px !important;
+}
+
+ .g-buttonset .ui-corner-left,
+ .ui-progressbar .ui-corner-left {
+ -moz-border-radius-topleft: 0;
+ -webkit-border-top-left-radius: 0;
+ border-top-left-radius: 0;
+ -moz-border-radius-topright: 5px !important;
+ -webkit-border-top-right-radius: 5px !important;
+ border-top-right-radius: 5px !important;
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-bottomright: 5px !important;
+ -webkit-border-bottom-right-radius: 5px !important;
+ border-bottom-right-radius: 5px !important;
+}
+
+/* RTL Superfish ~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+ .sf-menu a {
+ border-left: none;
+ border-right:1px solid #= $borderColorHighlight ?>;
+}
+
+ .sf-menu a.sf-with-ul {
+ padding-left: 2.25em;
+ padding-right: 1em;
+}
+
+ .sf-sub-indicator {
+ left: .75em !important;
+ right: auto;
+ background: url("themeroller/images/ui-icons_= $iconColorHighlight ?>_256x240.png") no-repeat -10px -100px; /* 8-bit indexed alpha png. IE6 gets solid image only */
+}
+
+ a > .sf-sub-indicator { /* give all except IE6 the correct values */
+ top: .8em;
+ background-position: -10px -100px; /* use translucent arrow for modern browsers*/
+}
+/* apply hovers to modern browsers */
+ a:focus > .sf-sub-indicator,
+ a:hover > .sf-sub-indicator,
+ a:active > .sf-sub-indicator,
+ li:hover > a > .sf-sub-indicator,
+ li.sfHover > a > .sf-sub-indicator {
+ background-position: 0 -100px; /* arrow hovers for modern browsers*/
+}
+
+/* point right for anchors in subs */
+ .sf-menu ul .sf-sub-indicator { background-position: 0 0; }
+ .sf-menu ul a > .sf-sub-indicator { background-position: -10px 0; }
+/* apply hovers to modern browsers */
+ .sf-menu ul a:focus > .sf-sub-indicator,
+ .sf-menu ul a:hover > .sf-sub-indicator,
+ .sf-menu ul a:active > .sf-sub-indicator,
+ .sf-menu ul li:hover > a > .sf-sub-indicator,
+ .sf-menu ul li.sfHover > a > .sf-sub-indicator {
+ background-position: 0 0; /* arrow hovers for modern browsers*/
+}
+
+ .sf-menu li:hover ul,
+ .sf-menu li.sfHover ul {
+ right: 0;
+ left: auto;
+}
+
+ ul.sf-menu li li:hover ul,
+ ul.sf-menu li li.sfHover ul {
+ right: 12em; /* match ul width */
+ left: auto;
+}
+ ul.sf-menu li li li:hover ul,
+ ul.sf-menu li li li.sfHover ul {
+ right: 12em; /* match ul width */
+ left: auto;
+}
+
+/*** shadows for all but IE6 ***/
+ .sf-shadow ul {
+ background: url('../../../lib/superfish/images/shadow.png') no-repeat bottom left;
+ padding: 0 0 9px 8px;
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-topright: 0;
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-top-right-radius: 0;
+ -webkit-border-bottom-left-radius: 0;
+ -moz-border-radius-topleft: 17px;
+ -moz-border-radius-bottomright: 17px;
+ -webkit-border-top-left-radius: 17px;
+ -webkit-border-bottom-right-radius: 17px;
+ border-top-left-radius: 17px;
+ border-bottom-right-radius: 17px;
+}
+
+/* RTL ThemeRoller ~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+ .ui-dialog .ui-dialog-titlebar {
+ padding: 0.5em 1em 0.3em 0.3em;
+}
+
+ .ui-dialog .ui-dialog-title {
+ float: right;
+}
+
+ .ui-dialog .ui-dialog-titlebar-close {
+ left: 0.3em;
+ right: auto;
+}
+
+/* RTL paginator ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+ .g-paginator .g-info {
+ width: 35%;
+}
+
+ .g-paginator .g-text-right {
+ margin-left: 0;
+}
+
+ .g-paginator .ui-icon-seek-end {
+ background-position: -80px -160px;
+}
+
+ .g-paginator .ui-icon-seek-next {
+ background-position: -48px -160px;
+}
+
+ .g-paginator .ui-icon-seek-prev {
+ background-position: -32px -160px;
+}
+
+ .g-paginator .ui-icon-seek-first {
+ background-position: -64px -160px;
+}
+
+ #g-header #g-login-menu,
+ #g-header #g-quick-search-form {
+ clear: left;
+ float: left;
+}
+
+ #g-header #g-login-menu li {
+ margin-left: 0;
+ padding-left: 0;
+ padding-right: 1.2em;
+}
+
+ #g-site-menu {
+ left: auto;
+ right: 150px;
+}
+
+ #g-view-menu #g-slideshow-link {
+ background-image: url('../images/ico-view-slideshow-rtl.png');
+}
+
+ #g-sidebar .g-block-content {
+ padding-right: 1em;
+ padding-left: 0;
+}
+
+ #g-footer #g-credits li {
+ padding-left: 1.2em !important;
+ padding-right: 0;
+}
diff --git a/3.1/modules/themeroller/views/site_screen.css.php b/3.1/modules/themeroller/views/site_screen.css.php
index 933f8c48..315611f8 100644
--- a/3.1/modules/themeroller/views/site_screen.css.php
+++ b/3.1/modules/themeroller/views/site_screen.css.php
@@ -15,7 +15,6 @@
* 8) jQuery and jQuery UI
* 9) Organize module style
* 10) Tag module styles
- * 11) Right-to-left language styles
*/
/** *******************************************************************
@@ -1217,323 +1216,3 @@ div#g-action-status {
color: #f30;
text-decoration: underline;
}
-
-/** *******************************************************************
- * 11) Right to left language styles
- *********************************************************************/
-
-.rtl {
- direction: rtl;
-}
-
-.rtl #g-header,
-.rtl #g-content,
-.rtl #g-sidebar,
-.rtl #g-footer,
-.rtl caption,
-.rtl th,
-.rtl #g-dialog,
-.rtl .g-context-menu li a,
-.rtl .g-message-box li,
-.rtl #g-site-status li {
- text-align: right;
-}
-
-.rtl .g-text-right {
- text-align: left;
-}
-
-.rtl .g-error,
-.rtl .g-info,
-.rtl .g-success,
-.rtl .g-warning,
-.rtl #g-add-photos-status .g-success,
-.rtl #g-add-photos-status .g-error {
- background-position: center right;
- padding-right: 30px !important;
-}
-
-.rtl form li.g-error,
-.rtl form li.g-info,
-.rtl form li.g-success,
-.rtl form li.g-warning {
- padding-right: 0 !important;
-}
-
-.rtl .g-left,
-.rtl .g-inline li,
-.rtl #g-content #g-album-grid .g-item,
-.rtl .sf-menu li,
-.rtl .g-breadcrumbs li,
-.rtl .g-paginator li,
-.rtl .g-buttonset li,
-.rtl .ui-icon-left .ui-icon,
-.rtl .g-short-form li,
-.rtl form ul ul li,
-.rtl input[type="submit"],
-.rtl input[type="reset"],
-.rtl input.checkbox,
-.rtl input[type=checkbox],
-.rtl input.radio,
-.rtl input[type=radio] {
- float: right;
-}
-
-.rtl .g-right,
-.rtl .ui-icon-right .ui-icon {
- float: left;
-}
-
-.rtl .g-inline li {
- margin-right: 1em;
-}
-
-.rtl .g-inline li.g-first {
- margin-right: 0;
-}
-
-.rtl .g-breadcrumbs li {
- background: transparent url('../images/ico-separator-rtl.png') no-repeat scroll right center;
- padding: 1em 18px 1em 8px;
-}
-
-.rtl .g-breadcrumbs .g-first {
- background: none;
- padding-right: 0;
-}
-
-.rtl input.checkbox {
- margin-left: .4em;
-}
-
-.rtl #g-add-comment {
- right: inherit;
- left: 0;
-}
-
-.rtl .ui-icon-left .ui-icon {
- margin-left: .2em;
-}
-
-.rtl .ui-icon-right .ui-icon {
- margin-right: .2em;
-}
-
-/* RTL Corner radius ~~~~~~~~~~~~~~~~~~~~~~ */
-.rtl .g-buttonset .ui-corner-tl {
- -moz-border-radius-topleft: 0;
- -webkit-border-top-left-radius: 0;
- border-top-left-radius: 0;
- -moz-border-radius-topright: 5px !important;
- -webkit-border-top-right-radius: 5px !important;
- border-top-right-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-tr {
- -moz-border-radius-topright: 0;
- -webkit-border-top-right-radius: 0;
- border-top-right-radius: 0;
- -moz-border-radius-topleft: 5px !important;
- -webkit-border-top-left-radius: 5px !important;
- border-top-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-bl {
- -moz-border-radius-bottomleft: 0;
- -webkit-border-bottom-left-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-bottomright: 5px !important;
- -webkit-border-bottom-right-radius: 5px !important;
- border-bottom-right-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-br {
- -moz-border-radius-bottomright: 0;
- -webkit-border-bottom-right-radius: 0;
- border-bottom-right-radius: 0;
- -moz-border-radius-bottomleft: 5px !important;
- -webkit-border-bottom-left-radius: 5px !important;
- border-bottom-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-right,
-.rtl .ui-progressbar .ui-corner-right {
- -moz-border-radius-topright: 0;
- -webkit-border-top-right-radius: 0;
- border-top-right-radius: 0;
- -moz-border-radius-topleft: 5px !important;
- -webkit-border-top-left-radius: 5px !important;
- border-top-left-radius: 5px !important;
- -moz-border-radius-bottomright: 0;
- -webkit-border-bottom-right-radius: 0;
- border-bottom-right-radius: 0;
- -moz-border-radius-bottomleft: 5px !important;
- -webkit-border-bottom-left-radius: 5px !important;
- border-bottom-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-left,
-.rtl .ui-progressbar .ui-corner-left {
- -moz-border-radius-topleft: 0;
- -webkit-border-top-left-radius: 0;
- border-top-left-radius: 0;
- -moz-border-radius-topright: 5px !important;
- -webkit-border-top-right-radius: 5px !important;
- border-top-right-radius: 5px !important;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-bottom-left-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-bottomright: 5px !important;
- -webkit-border-bottom-right-radius: 5px !important;
- border-bottom-right-radius: 5px !important;
-}
-
-/* RTL Superfish ~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.rtl .sf-menu a {
- border-left: none;
- border-right:1px solid #= $borderColorHighlight ?>;
-}
-
-.rtl .sf-menu a.sf-with-ul {
- padding-left: 2.25em;
- padding-right: 1em;
-}
-
-.rtl .sf-sub-indicator {
- left: .75em !important;
- right: auto;
- background: url("themeroller/images/ui-icons_= $iconColorHighlight ?>_256x240.png") no-repeat -10px -100px; /* 8-bit indexed alpha png. IE6 gets solid image only */
-}
-
-.rtl a > .sf-sub-indicator { /* give all except IE6 the correct values */
- top: .8em;
- background-position: -10px -100px; /* use translucent arrow for modern browsers*/
-}
-/* apply hovers to modern browsers */
-.rtl a:focus > .sf-sub-indicator,
-.rtl a:hover > .sf-sub-indicator,
-.rtl a:active > .sf-sub-indicator,
-.rtl li:hover > a > .sf-sub-indicator,
-.rtl li.sfHover > a > .sf-sub-indicator {
- background-position: 0 -100px; /* arrow hovers for modern browsers*/
-}
-
-/* point right for anchors in subs */
-.rtl .sf-menu ul .sf-sub-indicator { background-position: 0 0; }
-.rtl .sf-menu ul a > .sf-sub-indicator { background-position: -10px 0; }
-/* apply hovers to modern browsers */
-.rtl .sf-menu ul a:focus > .sf-sub-indicator,
-.rtl .sf-menu ul a:hover > .sf-sub-indicator,
-.rtl .sf-menu ul a:active > .sf-sub-indicator,
-.rtl .sf-menu ul li:hover > a > .sf-sub-indicator,
-.rtl .sf-menu ul li.sfHover > a > .sf-sub-indicator {
- background-position: 0 0; /* arrow hovers for modern browsers*/
-}
-
-.rtl .sf-menu li:hover ul,
-.rtl .sf-menu li.sfHover ul {
- right: 0;
- left: auto;
-}
-
-.rtl ul.sf-menu li li:hover ul,
-.rtl ul.sf-menu li li.sfHover ul {
- right: 12em; /* match ul width */
- left: auto;
-}
-.rtl ul.sf-menu li li li:hover ul,
-.rtl ul.sf-menu li li li.sfHover ul {
- right: 12em; /* match ul width */
- left: auto;
-}
-
-/*** shadows for all but IE6 ***/
-.rtl .sf-shadow ul {
- background: url('../../../lib/superfish/images/shadow.png') no-repeat bottom left;
- padding: 0 0 9px 8px;
- border-top-right-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-topright: 0;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-top-right-radius: 0;
- -webkit-border-bottom-left-radius: 0;
- -moz-border-radius-topleft: 17px;
- -moz-border-radius-bottomright: 17px;
- -webkit-border-top-left-radius: 17px;
- -webkit-border-bottom-right-radius: 17px;
- border-top-left-radius: 17px;
- border-bottom-right-radius: 17px;
-}
-
-/* RTL ThemeRoller ~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.rtl .ui-dialog .ui-dialog-titlebar {
- padding: 0.5em 1em 0.3em 0.3em;
-}
-
-.rtl .ui-dialog .ui-dialog-title {
- float: right;
-}
-
-.rtl .ui-dialog .ui-dialog-titlebar-close {
- left: 0.3em;
- right: auto;
-}
-
-/* RTL paginator ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.rtl .g-paginator .g-info {
- width: 35%;
-}
-
-.rtl .g-paginator .g-text-right {
- margin-left: 0;
-}
-
-.rtl .g-paginator .ui-icon-seek-end {
- background-position: -80px -160px;
-}
-
-.rtl .g-paginator .ui-icon-seek-next {
- background-position: -48px -160px;
-}
-
-.rtl .g-paginator .ui-icon-seek-prev {
- background-position: -32px -160px;
-}
-
-.rtl .g-paginator .ui-icon-seek-first {
- background-position: -64px -160px;
-}
-
-.rtl #g-header #g-login-menu,
-.rtl #g-header #g-quick-search-form {
- clear: left;
- float: left;
-}
-
-.rtl #g-header #g-login-menu li {
- margin-left: 0;
- padding-left: 0;
- padding-right: 1.2em;
-}
-
-.rtl #g-site-menu {
- left: auto;
- right: 150px;
-}
-
-.rtl #g-view-menu #g-slideshow-link {
- background-image: url('../images/ico-view-slideshow-rtl.png');
-}
-
-.rtl #g-sidebar .g-block-content {
- padding-right: 1em;
- padding-left: 0;
-}
-
-.rtl #g-footer #g-credits li {
- padding-left: 1.2em !important;
- padding-right: 0;
-}
diff --git a/3.1/modules/themeroller/views/theme.info.php b/3.1/modules/themeroller/views/theme.info.php
index eb8ead8f..ba061661 100644
--- a/3.1/modules/themeroller/views/theme.info.php
+++ b/3.1/modules/themeroller/views/theme.info.php
@@ -1,9 +1,12 @@
-name = "= $display_name ?>"
-description = "= $description ?>"
+name = = $display_name->for_js() . "\n" ?>
+description = = $description->for_js() . "\n" ?>
version = 1
-author = "= $user_name ?>"
-site = "= !$is_admin ? 1 : 0?>"
-admin = "= $is_admin ? 1 : 0?>"
+author = = $user_name->for_js() . "\n" ?>
+site = = (!$is_admin ? 1 : 0) . "\n"?>
+admin = = ($is_admin ? 1 : 0) . "\n"?>
+author_url = = $user_name->for_js() . "\n" ?>
+info_url = = $info_url->for_js() . "\n" ?>
+discuss_url = = $discuss_url->for_js() . "\n" ?>
; definition = = $definition ?>
diff --git a/3.1/modules/twitter/module.info b/3.1/modules/twitter/module.info
index 50fd2577..988a4a17 100644
--- a/3.1/modules/twitter/module.info
+++ b/3.1/modules/twitter/module.info
@@ -1,3 +1,7 @@
name = "Twitter"
description = "Share Gallery albums, photos, and movies on Twitter."
version = 1
+author_name = "Chad Kieffer"
+author_url = "http://2tbsp.com/content/twitter-module-gallery-3"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:twitter"
+discuss_url = "http://gallery.menalto.com/forum_module_twitter"
diff --git a/3.1/modules/user_albums/module.info b/3.1/modules/user_albums/module.info
index 8e685e8c..548ea98e 100644
--- a/3.1/modules/user_albums/module.info
+++ b/3.1/modules/user_albums/module.info
@@ -1,3 +1,7 @@
name = "User Albums"
description = "Create a personal album for new users"
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:user_albums"
+discuss_url = "http://gallery.menalto.com/forum_module_user_albums"
diff --git a/3.1/modules/user_homes/module.info b/3.1/modules/user_homes/module.info
index eecff6c9..44ac5c26 100644
--- a/3.1/modules/user_homes/module.info
+++ b/3.1/modules/user_homes/module.info
@@ -1,3 +1,7 @@
name = "User Homes"
description = "Allows users to have home galleries that they are redirected to when logged in."
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:user_homes"
+discuss_url = "http://gallery.menalto.com/forum_module_user_homes"
diff --git a/3.1/modules/user_rest/module.info b/3.1/modules/user_rest/module.info
index a06762e1..7db6e24b 100644
--- a/3.1/modules/user_rest/module.info
+++ b/3.1/modules/user_rest/module.info
@@ -1,3 +1,7 @@
name = "REST User Resource"
description = "Provides access to user names via the RESTful API"
version = 2
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:user_rest"
+discuss_url = "http://gallery.menalto.com/forum_module_user_rest"
diff --git a/3.1/modules/videodimensions/module.info b/3.1/modules/videodimensions/module.info
index 3c377b9d..df1acc3d 100644
--- a/3.1/modules/videodimensions/module.info
+++ b/3.1/modules/videodimensions/module.info
@@ -1,3 +1,7 @@
name = "VideoDimensions"
description = "Manually edit the dimensions of a video."
version = 1
+author_name = "rWatcher"
+author_url = "http://codex.gallery2.org/User:RWatcher"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:videodimensions"
+discuss_url = "http://gallery.menalto.com/node/90069"
diff --git a/3.1/modules/videos/controllers/admin_videos.php b/3.1/modules/videos/controllers/admin_videos.php
index afeb4353..81d691cb 100644
--- a/3.1/modules/videos/controllers/admin_videos.php
+++ b/3.1/modules/videos/controllers/admin_videos.php
@@ -17,10 +17,14 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
+
+// rWatcher EDIT: This file used to be admin_server_add.php.
+// All occurences of server_add have been replaced with videos.
+
class Admin_Videos_Controller extends Admin_Controller {
public function index() {
$view = new Admin_View("admin.html");
- $view->page_title = t("Add videos from server");
+ $view->page_title = t("Add from server");
$view->content = new View("admin_videos.html");
$view->content->form = $this->_get_admin_form();
$paths = unserialize(module::get_var("videos", "authorized_paths", "a:0:{}"));
diff --git a/3.1/modules/videos/controllers/file_proxy.php b/3.1/modules/videos/controllers/file_proxy.php
new file mode 100644
index 00000000..f69bff1b
--- /dev/null
+++ b/3.1/modules/videos/controllers/file_proxy.php
@@ -0,0 +1,144 @@
+server("REQUEST_URI"));
+
+ // get rid of query parameters
+ // request_uri: gallery3/var/albums/foo/bar.jpg
+ $request_uri = preg_replace("/\?.*/", "", $request_uri);
+
+ // var_uri: gallery3/var/
+ $var_uri = url::file("var/");
+
+ // Make sure that the request is for a file inside var
+ $offset = strpos(rawurldecode($request_uri), $var_uri);
+ if ($offset !== 0) {
+ throw new Kohana_404_Exception();
+ }
+
+ // file_uri: albums/foo/bar.jpg
+ $file_uri = substr($request_uri, strlen($var_uri));
+
+ // type: albums
+ // path: foo/bar.jpg
+ list ($type, $path) = explode("/", $file_uri, 2);
+ if ($type != "resizes" && $type != "albums" && $type != "thumbs") {
+ throw new Kohana_404_Exception();
+ }
+
+ // If the last element is .album.jpg, pop that off since it's not a real item
+ $path = preg_replace("|/.album.jpg$|", "", $path);
+
+ $item = item::find_by_path($path);
+ if (!$item->loaded()) {
+ // We didn't turn it up. If we're looking for a .jpg then it's it's possible that we're
+ // requesting the thumbnail for a movie. In that case, the .flv, .mp4 or .m4v file would
+ // have been converted to a .jpg. So try some alternate types:
+ if (preg_match('/.jpg$/', $path)) {
+ // rWatcher Mod: look for videos with file extensions supported by the videos module in addition to flv mp4 and m4v
+ // Original Line: foreach (array("flv", "mp4", "m4v") as $ext) {
+ foreach (array_merge(array("flv", "mp4", "m4v"), unserialize(module::get_var("videos", "allowed_extensions"))) as $ext) {
+ $movie_path = preg_replace('/.jpg$/', ".$ext", $path);
+ $item = item::find_by_path($movie_path);
+ if ($item->loaded()) {
+ break;
+ }
+ }
+ }
+ // rWatcher Mod:
+ // If we're looking for a .flv then it's it's possible that we're requesting a flash resize
+ // for a movie.
+ if (strtolower(substr($path, strlen($path)-4)) == ".flv") {
+ $movie_path = str_ireplace(".flv", "", $path);
+ $item = ORM::factory("item")->where("relative_path_cache", "=", $movie_path)->find();
+ }
+ // END rWatcher Mod
+ }
+
+ if (!$item->loaded()) {
+ throw new Kohana_404_Exception();
+ }
+
+ // Make sure we have access to the item
+ if (!access::can("view", $item)) {
+ throw new Kohana_404_Exception();
+ }
+
+ // Make sure we have view_full access to the original
+ if ($type == "albums" && !access::can("view_full", $item)) {
+ throw new Kohana_404_Exception();
+ }
+
+ // Don't try to load a directory
+ if ($type == "albums" && $item->is_album()) {
+ throw new Kohana_404_Exception();
+ }
+
+ if ($type == "albums") {
+ $file = $item->file_path();
+ } else if ($type == "resizes") {
+ $file = $item->resize_path();
+ // rWatcher MOD
+ // If the resize is for a movie, assume it needs a .flv extension.
+ if ($item->is_movie()) {
+ $file = $file . ".flv";
+ }
+ // End rWatcher MOD
+ } else {
+ $file = $item->thumb_path();
+ }
+
+ if (!file_exists($file)) {
+ throw new Kohana_404_Exception();
+ }
+
+ header("Content-Length: " . filesize($file));
+
+ header("Pragma:");
+ // Check that the content hasn't expired or it wasn't changed since cached
+ expires::check(2592000, $item->updated);
+
+ // We don't need to save the session for this request
+ Session::instance()->abort_save();
+
+ expires::set(2592000, $item->updated); // 30 days
+
+ // Dump out the image. If the item is a movie, then its thumbnail will be a JPG.
+ if ($item->is_movie() && $type != "albums") {
+ header("Content-Type: image/jpeg");
+ } else {
+ header("Content-Type: $item->mime_type");
+ }
+ Kohana::close_buffers(false);
+ readfile($file);
+ }
+}
diff --git a/3.1/modules/videos/controllers/videos.php b/3.1/modules/videos/controllers/videos.php
index 78121ae4..34461b3e 100644
--- a/3.1/modules/videos/controllers/videos.php
+++ b/3.1/modules/videos/controllers/videos.php
@@ -17,6 +17,12 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
+
+// rWatcher Edit: This file used to be server_add.php.
+// All occurences of server_add have been replaced with videos.
+// Additional editing has also been done in three places to expand accepted file
+// extensions and to create resizes and an extra db entry for items_videos.
+
class Videos_Controller extends Admin_Controller {
public function browse($id) {
$paths = unserialize(module::get_var("videos", "authorized_paths"));
@@ -24,6 +30,12 @@ class Videos_Controller extends Admin_Controller {
$files[] = $path;
}
+ // Clean leftover task rows. There really should be support for this in the task framework
+ db::build()
+ ->where("task_id", "NOT IN", db::build()->select("id")->from("tasks"))
+ ->delete("videos_entries")
+ ->execute();
+
$item = ORM::factory("item", $id);
$view = new View("videos_tree_dialog.html");
$view->item = $item;
@@ -55,6 +67,7 @@ class Videos_Controller extends Admin_Controller {
}
if (!is_dir($file)) {
$ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
+ // rWatcher Edit
//if (!in_array($ext, array("gif", "jpeg", "jpg", "png", "flv", "mp4", "m4v"))) {
if (!in_array($ext, unserialize(module::get_var("videos", "allowed_extensions")))) {
continue;
@@ -74,23 +87,28 @@ class Videos_Controller extends Admin_Controller {
}
/**
- * Begin the task of adding files.
+ * Begin the task of adding photos.
*/
public function start() {
access::verify_csrf();
$item = ORM::factory("item", Input::instance()->get("item_id"));
- foreach (Input::instance()->post("paths") as $path) {
- if (videos::is_valid_path($path)) {
- $paths[] = array($path, null);
- }
- }
-
$task_def = Task_Definition::factory()
->callback("Videos_Controller::add")
- ->description(t("Add videos from the local server"))
+ ->description(t("Add photos or movies from the local server"))
->name(t("Add from server"));
- $task = task::create($task_def, array("item_id" => $item->id, "queue" => $paths));
+ $task = task::create($task_def, array("item_id" => $item->id));
+
+ foreach (Input::instance()->post("paths") as $path) {
+ if (videos::is_valid_path($path)) {
+ $entry = ORM::factory("videos_entry");
+ $entry->path = $path;
+ $entry->is_directory = intval(is_dir($path));
+ $entry->parent_id = null;
+ $entry->task_id = $task->id;
+ $entry->save();
+ }
+ }
json::reply(
array("result" => "started",
@@ -99,7 +117,7 @@ class Videos_Controller extends Admin_Controller {
}
/**
- * Run the task of adding files
+ * Run the task of adding photos
*/
function run($task_id) {
access::verify_csrf();
@@ -119,7 +137,7 @@ class Videos_Controller extends Admin_Controller {
/**
* This is the task code that adds photos and albums. It first examines all the target files
- * and creates a set of Server_Add_File_Models, then runs through the list of models and adds
+ * and creates a set of Server_Add_Entry_Models, then runs through the list of models and adds
* them one at a time.
*/
static function add($task) {
@@ -129,6 +147,7 @@ class Videos_Controller extends Admin_Controller {
switch ($mode) {
case "init":
$task->set("mode", "build-file-list");
+ $task->set("dirs_scanned", 0);
$task->percent_complete = 0;
$task->status = t("Starting up");
batch::start();
@@ -137,59 +156,64 @@ class Videos_Controller extends Admin_Controller {
case "build-file-list": // 0% to 10%
// We can't fit an arbitrary number of paths in a task, so store them in a separate table.
// Don't use an iterator here because we can't get enough control over it when we're dealing
- // with a deep hierarchy and we don't want to go over our time quota. The queue is in the
- // form [path, parent_id] where the parent_id refers to another Server_Add_File_Model. We
- // have this extra level of abstraction because we don't know its Item_Model id yet.
- $queue = $task->get("queue");
+ // with a deep hierarchy and we don't want to go over our time quota.
$paths = unserialize(module::get_var("videos", "authorized_paths"));
+ $dirs_scanned = $task->get("dirs_scanned");
+ while (microtime(true) - $start < 0.5) {
+ // Process every directory that doesn't yet have a parent id, these are the
+ // paths that we're importing.
+ $entry = ORM::factory("videos_entry")
+ ->where("task_id", "=", $task->id)
+ ->where("is_directory", "=", 1)
+ ->where("checked", "=", 0)
+ ->order_by("id", "ASC")
+ ->find();
- while ($queue && microtime(true) - $start < 0.5) {
- list($file, $parent_entry_id) = array_shift($queue);
- // Ignore the staging directories as directories to be imported.
- if (empty($paths[$file])) {
- $entry = ORM::factory("videos_file");
- $entry->task_id = $task->id;
- $entry->file = $file;
- $entry->parent_id = $parent_entry_id;
- $entry->save();
- $entry_id = $entry->id;
- } else {
- $entry_id = null;
- }
-
- $file = preg_quote($file);
- foreach (glob("$file/*") as $child) {
- if (is_dir($child)) {
- $queue[] = array($child, $entry_id);
- } else {
- $ext = strtolower(pathinfo($child, PATHINFO_EXTENSION));
- //if (in_array($ext, array("gif", "jpeg", "jpg", "png", "flv", "mp4", "m4v")) &&
- if (in_array($ext, unserialize(module::get_var("videos", "allowed_extensions"))) &&
- filesize($child) > 0) {
- $child_entry = ORM::factory("videos_file");
- $child_entry->task_id = $task->id;
- $child_entry->file = $child;
- $child_entry->parent_id = $entry_id;
- $child_entry->save();
- }
+ if ($entry->loaded()) {
+ $child_paths = glob(preg_quote($entry->path) . "/*");
+ if (!$child_paths) {
+ $child_paths = glob("{$entry->path}/*");
}
+ foreach ($child_paths as $child_path) {
+ if (!is_dir($child_path)) {
+ $ext = strtolower(pathinfo($child_path, PATHINFO_EXTENSION));
+ // rWatcher Edit.
+ //if (!in_array($ext, array("gif", "jpeg", "jpg", "png", "flv", "mp4", "m4v")) ||
+ // !filesize($child_path)) {
+ if (!in_array($ext, unserialize(module::get_var("videos", "allowed_extensions"))) ||
+ !filesize($child_path)) {
+ // Not importable, skip it.
+ continue;
+ }
+ }
+
+ $child_entry = ORM::factory("videos_entry");
+ $child_entry->task_id = $task->id;
+ $child_entry->path = $child_path;
+ $child_entry->parent_id = $entry->id; // null if the parent was a staging dir
+ $child_entry->is_directory = is_dir($child_path);
+ $child_entry->save();
+ }
+
+ // We've processed this entry, mark it as done.
+ $entry->checked = 1;
+ $entry->save();
+ $dirs_scanned++;
}
}
// We have no idea how long this can take because we have no idea how deep the tree
// hierarchy rabbit hole goes. Leave ourselves room here for 100 iterations and don't go
// over 10% in percent_complete.
- $task->set("queue", $queue);
+ $task->set("dirs_scanned", $dirs_scanned);
$task->percent_complete = min($task->percent_complete + 0.1, 10);
- $task->status = t2(
- "Found one file", "Found %count files",
- ORM::factory("videos_file")->where("task_id", "=", $task->id)->count_all());
+ $task->status = t2("Scanned one directory", "Scanned %count directories", $dirs_scanned);
- if (!$queue) {
+ if (!$entry->loaded()) {
$task->set("mode", "add-files");
$task->set(
"total_files",
- ORM::factory("videos_file")->where("task_id", "=", $task->id)->count_all());
+ ORM::factory("videos_entry")->where("task_id", "=", $task->id)->count_all());
$task->percent_complete = 10;
}
break;
@@ -201,7 +225,7 @@ class Videos_Controller extends Admin_Controller {
// Ordering by id ensures that we add them in the order that we created the entries, which
// will create albums first. Ignore entries which already have an Item_Model attached,
// they're done.
- $entries = ORM::factory("videos_file")
+ $entries = ORM::factory("videos_entry")
->where("task_id", "=", $task->id)
->where("item_id", "IS", null)
->order_by("id", "ASC")
@@ -220,43 +244,59 @@ class Videos_Controller extends Admin_Controller {
// Look up the parent item for this entry. By now it should exist, but if none was
// specified, then this belongs as a child of the current item.
- $parent_entry = ORM::factory("videos_file", $entry->parent_id);
+ $parent_entry = ORM::factory("videos_entry", $entry->parent_id);
if (!$parent_entry->loaded()) {
$parent = ORM::factory("item", $task->get("item_id"));
} else {
$parent = ORM::factory("item", $parent_entry->item_id);
}
- $name = basename($entry->file);
+ $name = basename($entry->path);
$title = item::convert_filename_to_title($name);
- if (is_dir($entry->file)) {
+ if ($entry->is_directory) {
$album = ORM::factory("item");
$album->type = "album";
$album->parent_id = $parent->id;
$album->name = $name;
$album->title = $title;
$album->owner_id = $owner_id;
+ $album->sort_order = $parent->sort_order;
+ $album->sort_column = $parent->sort_column;
$album->save();
$entry->item_id = $album->id;
} else {
try {
$extension = strtolower(pathinfo($name, PATHINFO_EXTENSION));
- if (in_array($extension, unserialize(module::get_var("videos", "allowed_extensions")))) {
+ if (in_array($extension, array("gif", "png", "jpg", "jpeg"))) {
+ $photo = ORM::factory("item");
+ $photo->type = "photo";
+ $photo->parent_id = $parent->id;
+ $photo->set_data_file($entry->path);
+ $photo->name = $name;
+ $photo->title = $title;
+ $photo->owner_id = $owner_id;
+ $photo->save();
+ $entry->item_id = $photo->id;
+ // rWatcher EDIT
+ //} else if (in_array($extension, array("flv", "mp4", "m4v"))) {
+ } else if (in_array($extension, unserialize(module::get_var("videos", "allowed_extensions")))) {
$movie = ORM::factory("item");
$movie->type = "movie";
$movie->parent_id = $parent->id;
- $movie->set_data_file($entry->file);
+ $movie->set_data_file($entry->path);
$movie->name = $name;
$movie->title = $title;
$movie->owner_id = $owner_id;
$movie->save();
$entry->item_id = $movie->id;
+ // rWatcher EDIT: Add record to items_video db.
$items_video = ORM::factory("items_video");
$items_video->item_id = $movie->id;
$items_video->save();
- if (file_exists($entry->file . ".flv")) {
- copy($entry->file . ".flv", $movie->resize_path() . ".flv");
- list ($vid_width, $vid_height, $mime_type) = movie::get_file_metadata($entry->file . ".flv");
+ // rWatcher EDIT: Scan for flv resizes and copy to resize directory.
+ if (file_exists($entry->path . ".flv")) {
+ copy($entry->path . ".flv", $movie->resize_path() . ".flv");
+ list ($vid_width, $vid_height, $mime_type) = movie::get_file_metadata($entry->path . ".flv");
$movie->height = $vid_height;
$movie->width = $vid_width;
$movie->save();
@@ -266,12 +306,12 @@ class Videos_Controller extends Admin_Controller {
// process. But just in, case.. set this to a non-null value so that we skip this
// entry.
$entry->item_id = 0;
- $task->log("Skipping unknown file type: $entry->file");
+ $task->log("Skipping unknown file type: {$entry->path}");
}
} catch (Exception $e) {
// This can happen if a photo file is invalid, like a BMP masquerading as a .jpg
$entry->item_id = 0;
- $task->log("Skipping invalid file: $entry->file");
+ $task->log("Skipping invalid file: {$entry->file}");
}
}
@@ -290,12 +330,11 @@ class Videos_Controller extends Admin_Controller {
$task->done = true;
$task->state = "success";
$task->percent_complete = 100;
- db::build()
- ->delete("videos_files")
+ ORM::factory("videos_entry")
->where("task_id", "=", $task->id)
- ->execute();
- message::info(t2("Successfully added one file",
- "Successfully added %count files",
+ ->delete_all();
+ message::info(t2("Successfully added one photo / album",
+ "Successfully added %count photos / albums",
$task->get("completed_files")));
}
}
diff --git a/3.1/modules/videos/css/videos.css b/3.1/modules/videos/css/videos.css
index 36746ab5..559e5481 100644
--- a/3.1/modules/videos/css/videos.css
+++ b/3.1/modules/videos/css/videos.css
@@ -1,23 +1,23 @@
-#g-server-add button {
+#g-videos button {
margin-bottom: .5em;
}
-#g-server-add-tree {
+#g-videos-tree {
cursor: pointer;
padding-left: 4px;
width: 95%;
}
-#g-server-add-tree li {
+#g-videos-tree li {
padding: 0;
float: none;
}
-#g-server-add-tree span.selected {
+#g-videos-tree span.selected {
background: #ddd;
}
-#g-server-add-tree {
+#g-videos-tree {
border: 1px solid #ccc;
height: 20em;
overflow: auto;
@@ -25,14 +25,14 @@
padding: .5em;
}
-#g-server-add ul ul li {
+#g-videos ul ul li {
padding-left: 1.2em;
}
-#g-server-add-paths li .ui-icon {
+#g-videos-paths li .ui-icon {
margin-top: .4em;
}
-#g-server-add-admin-form .textbox {
+#g-videos-admin-form .textbox {
width: 400px;
}
diff --git a/3.1/modules/videos/helpers/videos.php b/3.1/modules/videos/helpers/videos.php
index 6169e038..f6f3240d 100644
--- a/3.1/modules/videos/helpers/videos.php
+++ b/3.1/modules/videos/helpers/videos.php
@@ -17,6 +17,10 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
+
+// rWatcher edit: This file used to be server_add.php.
+// All occurences of server_add have been replaced with videos.
+
class videos_Core {
static function check_config($paths=null) {
if ($paths === null) {
diff --git a/3.1/modules/videos/helpers/videos_event.php b/3.1/modules/videos/helpers/videos_event.php
index 40f2a87f..2bcd53f0 100644
--- a/3.1/modules/videos/helpers/videos_event.php
+++ b/3.1/modules/videos/helpers/videos_event.php
@@ -17,6 +17,10 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
+
+// rWatcher Edit: This file used to be server_add_event.php.
+// All occurences of server_add have been replaced with videos.
+// Additionally, several new functions have been added.
class videos_event_Core {
static function admin_menu($menu, $theme) {
$menu->get("settings_menu")
@@ -34,7 +38,7 @@ class videos_event_Core {
is_writable($item->is_album() ? $item->file_path() : $item->parent()->file_path())) {
$menu->get("add_menu")
->append(Menu::factory("dialog")
- ->id("videos")
+ ->id("Videos")
->label(t("Add videos"))
->url(url::site("videos/browse/$item->id")));
}
diff --git a/3.1/modules/videos/helpers/videos_installer.php b/3.1/modules/videos/helpers/videos_installer.php
index 7bfca0db..36a1b423 100644
--- a/3.1/modules/videos/helpers/videos_installer.php
+++ b/3.1/modules/videos/helpers/videos_installer.php
@@ -17,36 +17,60 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
+
+// rWatcher Edit: This file was server_add_installer.
+// All occurences of server_add have been replaced with videos.
+// The installer has been edited to create an additional table and module variable.
+// The upgrader has been edited to skip everything before version 4, to keep version numbers in sync with server_add.
+
class videos_installer {
static function install() {
$db = Database::instance();
- $db->query("CREATE TABLE {videos_files} (
+ $db->query("CREATE TABLE {videos_entries} (
`id` int(9) NOT NULL auto_increment,
- `file` varchar(255) NOT NULL,
+ `checked` boolean default 0,
+ `is_directory` boolean default 0,
`item_id` int(9),
`parent_id` int(9),
+ `path` varchar(255) NOT NULL,
`task_id` int(9) NOT NULL,
PRIMARY KEY (`id`))
DEFAULT CHARSET=utf8;");
+
+ // rWatcher Edit: My Table.
$db->query("CREATE TABLE {items_videos} (
`id` int(9) NOT NULL auto_increment,
`item_id` int(9) NOT NULL,
PRIMARY KEY (`id`),
KEY (`item_id`, `id`))
DEFAULT CHARSET=utf8;");
+ // rWatcher Edit: My Variable.
module::set_var("videos", "allowed_extensions", serialize(array("avi", "mpg", "mpeg", "mov", "wmv", "asf", "mts")));
- module::set_version("videos", 1);
+
+ module::set_version("videos", 4);
videos::check_config();
}
+ static function upgrade($version) {
+ $db = Database::instance();
+
+ if ($version < 4) {
+ $db->query("DROP TABLE {videos_files}");
+ $db->query("CREATE TABLE {videos_entries} (
+ `id` int(9) NOT NULL auto_increment,
+ `checked` boolean default 0,
+ `is_directory` boolean default 0,
+ `item_id` int(9),
+ `parent_id` int(9),
+ `path` varchar(255) NOT NULL,
+ `task_id` int(9) NOT NULL,
+ PRIMARY KEY (`id`))
+ DEFAULT CHARSET=utf8;");
+ module::set_version("videos", $version = 4);
+ }
+ }
+
static function deactivate() {
site_status::clear("videos_configuration");
}
-
- static function uninstall() {
- $db = Database::instance();
- $db->query("DROP TABLE IF EXISTS {videos_files};");
- $db->query("DROP TABLE IF EXISTS {items_videos};");
- module::delete("videos");
- }
}
diff --git a/3.1/modules/videos/helpers/videos_theme.php b/3.1/modules/videos/helpers/videos_theme.php
index 4b59370f..61200985 100644
--- a/3.1/modules/videos/helpers/videos_theme.php
+++ b/3.1/modules/videos/helpers/videos_theme.php
@@ -17,6 +17,12 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
+
+// rWatcher Edit: This file used to be server_add_theme.php.
+// All occurences of server_add have been replaced with videos.
+// Additionally, the head function has been reworked to provide a
+// download link for unplayable videos and references to admin.js are now admin_videos.js.
+
class videos_theme_Core {
static function head($theme) {
$buf = "";
@@ -30,27 +36,26 @@ class videos_theme_Core {
$items_video = ORM::factory("items_video")
->where("item_id", "=", $item->id)
->find();
- if ($items_video->loaded()) {
- $view = new View("videos_display_js.html");
- //$view->embed_code = addslashes($embedded_video->embed_code);
- return $buf . $view;
+ if (($items_video->loaded()) && (!file_exists($item->resize_path() . ".flv"))) {
+ $buf .= $theme->script("videos_download.js");
}
}
+ return $buf;
}
static function admin_head($theme) {
$buf = "";
if (strpos(Router::$current_uri, "admin/videos") !== false) {
- $buf .= $theme->css("videos.css");
- $buf .= $theme->css("jquery.autocomplete.css");
+ $buf .= $theme->css("videos.css")
+ . $theme->css("jquery.autocomplete.css");
$base = url::site("__ARGS__");
$csrf = access::csrf_token();
$buf .= "";
- $buf .= $theme->script("jquery.autocomplete.js");
- $buf .= $theme->script("admin_videos.js");
+ $buf .= $theme->script("jquery.autocomplete.js")
+ . $theme->script("admin_videos.js"); // rWatcher edit.
}
return $buf;
}
-}
\ No newline at end of file
+}
diff --git a/3.1/modules/videos/js/admin_videos.js b/3.1/modules/videos/js/admin_videos.js
index 9bb61ed1..2a4f462c 100644
--- a/3.1/modules/videos/js/admin_videos.js
+++ b/3.1/modules/videos/js/admin_videos.js
@@ -2,6 +2,11 @@
* Set up autocomplete on the server path list
*
*/
+/**
+ * rWatcher Edit: This file used to be admin.js from server_add module.
+ * All occurences of server_add have been replaced with videos
+ *
+ */
$("document").ready(function() {
$("#g-path").autocomplete(
base_url.replace("__ARGS__", "admin/videos/autocomplete"), {max: 256});
diff --git a/3.1/modules/videos/js/videos.js b/3.1/modules/videos/js/videos.js
index 02dda4c0..27627193 100644
--- a/3.1/modules/videos/js/videos.js
+++ b/3.1/modules/videos/js/videos.js
@@ -1,36 +1,41 @@
+/**
+ * rWatcher Edit: This file used to be server_add.js from server_add module.
+ * All occurences of server-add have been replaced with videos
+ *
+ */
(function($) {
- $.widget("ui.gallery_server_add", {
+ $.widget("ui.gallery_videos", {
_init: function() {
var self = this;
- $("#g-server-add-add-button", this.element).click(function(event) {
+ $("#g-videos-add-button", this.element).click(function(event) {
event.preventDefault();
$(".g-progress-bar", this.element).
progressbar().
progressbar("value", 0);
- $("#g-server-add-progress", this.element).slideDown("fast", function() { self.start_add(); });
+ $("#g-videos-progress", this.element).slideDown("fast", function() { self.start_add(); });
});
- $("#g-server-add-pause-button", this.element).click(function(event) {
+ $("#g-videos-pause-button", this.element).click(function(event) {
self.pause = true;
- $("#g-server-add-pause-button", this.element).hide();
- $("#g-server-add-continue-button", this.element).show();
+ $("#g-videos-pause-button", this.element).hide();
+ $("#g-videos-continue-button", this.element).show();
});
- $("#g-server-add-continue-button", this.element).click(function(event) {
+ $("#g-videos-continue-button", this.element).click(function(event) {
self.pause = false;
- $("#g-server-add-pause-button", this.element).show();
- $("#g-server-add-continue-button", this.element).hide();
+ $("#g-videos-pause-button", this.element).show();
+ $("#g-videos-continue-button", this.element).hide();
self.run_add();
});
- $("#g-server-add-close-button", this.element).click(function(event) {
+ $("#g-videos-close-button", this.element).click(function(event) {
$("#g-dialog").dialog("close");
window.location.reload();
});
- $("#g-server-add-tree span.g-directory", this.element).dblclick(function(event) {
+ $("#g-videos-tree span.g-directory", this.element).dblclick(function(event) {
self.open_dir(event);
});
- $("#g-server-add-tree span.g-file, #g-server-add-tree span.g-directory", this.element).click(function(event) {
+ $("#g-videos-tree span.g-file, #g-videos-tree span.g-directory", this.element).click(function(event) {
self.select_file(event);
});
- $("#g-server-add-tree span.g-directory", this.element).dblclick(function(event) {
+ $("#g-videos-tree span.g-directory", this.element).dblclick(function(event) {
self.open_dir(event);
});
$("#g-dialog").bind("dialogclose", function(event, ui) {
@@ -48,8 +53,8 @@
paths.push($(this).attr("ref"));
});
- $("#g-server-add-add-button", this.element).hide();
- $("#g-server-add-pause-button", this.element).show();
+ $("#g-videos-add-button", this.element).hide();
+ $("#g-videos-pause-button", this.element).show();
$.ajax({
url: START_URL,
@@ -77,10 +82,10 @@
$("#g-status").html(data.status);
$(".g-progress-bar", self.element).progressbar("value", data.percent_complete);
if (data.done) {
- $("#g-server-add-progress", this.element).slideUp();
- $("#g-server-add-add-button", this.element).show();
- $("#g-server-add-pause-button", this.element).hide();
- $("#g-server-add-continue-button", this.element).hide();
+ $("#g-videos-progress", this.element).slideUp();
+ $("#g-videos-add-button", this.element).show();
+ $("#g-videos-pause-button", this.element).hide();
+ $("#g-videos-continue-button", this.element).hide();
} else {
if (!self.pause) {
setTimeout(function() { self.run_add(); }, 25);
@@ -99,11 +104,11 @@
$.ajax({
url: GET_CHILDREN_URL.replace("__PATH__", path),
success: function(data, textStatus) {
- $("#g-server-add-tree", self.element).html(data);
- $("#g-server-add-tree span.g-directory", self.element).dblclick(function(event) {
+ $("#g-videos-tree", self.element).html(data);
+ $("#g-videos-tree span.g-directory", self.element).dblclick(function(event) {
self.open_dir(event);
});
- $("#g-server-add-tree span.g-file, #g-server-add-tree span.g-directory", this.element).click(function(event) {
+ $("#g-videos-tree span.g-file, #g-videos-tree span.g-directory", this.element).click(function(event) {
self.select_file(event);
});
}
@@ -115,10 +120,10 @@
*/
select_file: function (event) {
$(event.target).toggleClass("selected");
- if ($("#g-server-add span.selected").length) {
- $("#g-server-add-add-button").enable(true).removeClass("ui-state-disabled");
+ if ($("#g-videos span.selected").length) {
+ $("#g-videos-add-button").enable(true).removeClass("ui-state-disabled");
} else {
- $("#g-server-add-add-button").enable(false).addClass("ui-state-disabled");
+ $("#g-videos-add-button").enable(false).addClass("ui-state-disabled");
}
}
});
diff --git a/3.1/modules/videos/js/videos_download.js b/3.1/modules/videos/js/videos_download.js
new file mode 100644
index 00000000..b0777ec2
--- /dev/null
+++ b/3.1/modules/videos/js/videos_download.js
@@ -0,0 +1,8 @@
+/**
+ * rWatcher Edit: This file is one of mine.
+ *
+ */
+$("document").ready(function() {
+ var original_url = document.getElementById('g-videos-full-url');
+ $("#g-movie").replaceWith("
");
+});
diff --git a/3.1/modules/videos/models/item.php b/3.1/modules/videos/models/item.php
new file mode 100644
index 00000000..171d664c
--- /dev/null
+++ b/3.1/modules/videos/models/item.php
@@ -0,0 +1,1030 @@
+loaded()) {
+ // Set reasonable defaults
+ $this->created = time();
+ $this->rand_key = random::percent();
+ $this->thumb_dirty = 1;
+ $this->resize_dirty = 1;
+ $this->sort_column = "created";
+ $this->sort_order = "ASC";
+ $this->owner_id = identity::active_user()->id;
+ }
+ }
+
+ /**
+ * Add a set of restrictions to any following queries to restrict access only to items
+ * viewable by the active user.
+ * @chainable
+ */
+ public function viewable() {
+ return item::viewable($this);
+ }
+
+ /**
+ * Is this item an album?
+ * @return true if it's an album
+ */
+ public function is_album() {
+ return $this->type == 'album';
+ }
+
+ /**
+ * Is this item a photo?
+ * @return true if it's a photo
+ */
+ public function is_photo() {
+ return $this->type == 'photo';
+ }
+
+ /**
+ * Is this item a movie?
+ * @return true if it's a movie
+ */
+ public function is_movie() {
+ return $this->type == 'movie';
+ }
+
+ public function delete($ignored_id=null) {
+ if (!$this->loaded()) {
+ // Concurrent deletes may result in this item already being gone. Ignore it.
+ return;
+ }
+
+ if ($this->id == 1) {
+ $v = new Validation(array("id"));
+ $v->add_error("id", "cant_delete_root_album");
+ ORM_Validation_Exception::handle_validation($this->table_name, $v);
+ }
+
+ $old = clone $this;
+ module::event("item_before_delete", $this);
+
+ $parent = $this->parent();
+ if ($parent->album_cover_item_id == $this->id) {
+ item::remove_album_cover($parent);
+ }
+
+ $path = $this->file_path();
+ $resize_path = $this->resize_path();
+ $thumb_path = $this->thumb_path();
+
+ parent::delete();
+ if (is_dir($path)) {
+ // Take some precautions against accidentally deleting way too much
+ $delete_resize_path = dirname($resize_path);
+ $delete_thumb_path = dirname($thumb_path);
+ if ($delete_resize_path == VARPATH . "resizes" ||
+ $delete_thumb_path == VARPATH . "thumbs" ||
+ $path == VARPATH . "albums") {
+ throw new Exception(
+ "@todo DELETING_TOO_MUCH ($delete_resize_path, $delete_thumb_path, $path)");
+ }
+ @dir::unlink($path);
+ @dir::unlink($delete_resize_path);
+ @dir::unlink($delete_thumb_path);
+ } else {
+ @unlink($path);
+ @unlink($resize_path);
+ @unlink($thumb_path);
+ }
+
+ module::event("item_deleted", $old);
+ }
+
+ /**
+ * Specify the path to the data file associated with this item. To actually associate it,
+ * you still have to call save().
+ * @chainable
+ */
+ public function set_data_file($data_file) {
+ $this->data_file = $data_file;
+ return $this;
+ }
+
+ /**
+ * Return the server-relative url to this item, eg:
+ * /gallery3/index.php/BobsWedding?page=2
+ * /gallery3/index.php/BobsWedding/Eating-Cake.jpg
+ *
+ * @param string $query the query string (eg "show=3")
+ */
+ public function url($query=null) {
+ $url = url::site($this->relative_url());
+ if ($query) {
+ $url .= "?$query";
+ }
+ return $url;
+ }
+
+ /**
+ * Return the full url to this item, eg:
+ * http://example.com/gallery3/index.php/BobsWedding?page=2
+ * http://example.com/gallery3/index.php/BobsWedding/Eating-Cake.jpg
+ *
+ * @param string $query the query string (eg "show=3")
+ */
+ public function abs_url($query=null) {
+ $url = url::abs_site($this->relative_url());
+ if ($query) {
+ $url .= "?$query";
+ }
+ return $url;
+ }
+
+ /**
+ * album: /var/albums/album1/album2
+ * photo: /var/albums/album1/album2/photo.jpg
+ */
+ public function file_path() {
+ return VARPATH . "albums/" . urldecode($this->relative_path());
+ }
+
+ /**
+ * album: http://example.com/gallery3/var/resizes/album1/
+ * photo: http://example.com/gallery3/var/albums/album1/photo.jpg
+ */
+ public function file_url($full_uri=false) {
+ $relative_path = "var/albums/" . $this->relative_path();
+ $cache_buster = $this->_cache_buster($this->file_path());
+ return ($full_uri ? url::abs_file($relative_path) : url::file($relative_path))
+ . $cache_buster;
+ }
+
+ /**
+ * album: /var/resizes/album1/.thumb.jpg
+ * photo: /var/albums/album1/photo.thumb.jpg
+ */
+ public function thumb_path() {
+ $base = VARPATH . "thumbs/" . urldecode($this->relative_path());
+ if ($this->is_photo()) {
+ return $base;
+ } else if ($this->is_album()) {
+ return $base . "/.album.jpg";
+ } else if ($this->is_movie()) {
+ // Replace the extension with jpg
+ return preg_replace("/...$/", "jpg", $base);
+ }
+ }
+
+ /**
+ * Return true if there is a thumbnail for this item.
+ */
+ public function has_thumb() {
+ return $this->thumb_width && $this->thumb_height;
+ }
+
+ /**
+ * album: http://example.com/gallery3/var/resizes/album1/.thumb.jpg
+ * photo: http://example.com/gallery3/var/albums/album1/photo.thumb.jpg
+ */
+ public function thumb_url($full_uri=false) {
+ $cache_buster = $this->_cache_buster($this->thumb_path());
+ $relative_path = "var/thumbs/" . $this->relative_path();
+ $base = ($full_uri ? url::abs_file($relative_path) : url::file($relative_path));
+ if ($this->is_photo()) {
+ return $base . $cache_buster;
+ } else if ($this->is_album()) {
+ return $base . "/.album.jpg" . $cache_buster;
+ } else if ($this->is_movie()) {
+ // Replace the extension with jpg
+ $base = preg_replace("/...$/", "jpg", $base);
+ return $base . $cache_buster;
+ }
+ }
+
+ /**
+ * album: /var/resizes/album1/.resize.jpg
+ * photo: /var/albums/album1/photo.resize.jpg
+ */
+ public function resize_path() {
+ return VARPATH . "resizes/" . urldecode($this->relative_path()) .
+ ($this->is_album() ? "/.album.jpg" : "");
+ }
+
+ /**
+ * album: http://example.com/gallery3/var/resizes/album1/.resize.jpg
+ * photo: http://example.com/gallery3/var/albums/album1/photo.resize.jpg
+ */
+ public function resize_url($full_uri=false) {
+ $relative_path = "var/resizes/" . $this->relative_path();
+ $cache_buster = $this->_cache_buster($this->resize_path());
+ return ($full_uri ? url::abs_file($relative_path) : url::file($relative_path)) .
+ ($this->is_album() ? "/.album.jpg" : "") . $cache_buster;
+ }
+
+ /**
+ * Rebuild the relative_path_cache and relative_url_cache.
+ */
+ private function _build_relative_caches() {
+ $names = array();
+ $slugs = array();
+ foreach (db::build()
+ ->select(array("name", "slug"))
+ ->from("items")
+ ->where("left_ptr", "<=", $this->left_ptr)
+ ->where("right_ptr", ">=", $this->right_ptr)
+ ->where("id", "<>", 1)
+ ->order_by("left_ptr", "ASC")
+ ->execute() as $row) {
+ // Don't encode the names segment
+ $names[] = rawurlencode($row->name);
+ $slugs[] = rawurlencode($row->slug);
+ }
+ $this->relative_path_cache = implode($names, "/");
+ $this->relative_url_cache = implode($slugs, "/");
+ return $this;
+ }
+
+ /**
+ * Return the relative path to this item's file. Note that the components of the path are
+ * urlencoded so if you want to use this as a filesystem path, you need to call urldecode
+ * on it.
+ * @return string
+ */
+ public function relative_path() {
+ if (!$this->loaded()) {
+ return;
+ }
+
+ if (!isset($this->relative_path_cache)) {
+ $this->_build_relative_caches()->save();
+ }
+ return $this->relative_path_cache;
+ }
+
+ /**
+ * Return the relative url to this item's file.
+ * @return string
+ */
+ public function relative_url() {
+ if (!$this->loaded()) {
+ return;
+ }
+
+ if (!isset($this->relative_url_cache)) {
+ $this->_build_relative_caches()->save();
+ }
+ return $this->relative_url_cache;
+ }
+
+ /**
+ * @see ORM::__get()
+ */
+ public function __get($column) {
+ if ($column == "owner") {
+ // This relationship depends on an outside module, which may not be present so handle
+ // failures gracefully.
+ try {
+ return identity::lookup_user($this->owner_id);
+ } catch (Exception $e) {
+ return null;
+ }
+ } else {
+ return parent::__get($column);
+ }
+ }
+
+ /**
+ * Handle any business logic necessary to create or modify an item.
+ * @see ORM::save()
+ *
+ * @return ORM Item_Model
+ */
+ public function save() {
+ $significant_changes = $this->changed;
+ unset($significant_changes["view_count"]);
+ unset($significant_changes["relative_url_cache"]);
+ unset($significant_changes["relative_path_cache"]);
+
+ if ((!empty($this->changed) && $significant_changes) || isset($this->data_file)) {
+ $this->updated = time();
+ if (!$this->loaded()) {
+ // Create a new item.
+ module::event("item_before_create", $this);
+
+ // Set a weight if it's missing. We don't do this in the constructor because it's not a
+ // simple assignment.
+ if (empty($this->weight)) {
+ $this->weight = item::get_max_weight();
+ }
+
+ // Make an url friendly slug from the name, if necessary
+ if (empty($this->slug)) {
+ $tmp = pathinfo($this->name, PATHINFO_FILENAME);
+ $tmp = preg_replace("/[^A-Za-z0-9-_]+/", "-", $tmp);
+ $this->slug = trim($tmp, "-");
+
+ // If the filename is all invalid characters, then the slug may be empty here. Pick a
+ // random value.
+ if (empty($this->slug)) {
+ $this->slug = (string)rand(1000, 9999);
+ }
+ }
+
+ // Get the width, height and mime type from our data file for photos and movies.
+ if ($this->is_photo() || $this->is_movie()) {
+ if ($this->is_photo()) {
+ list ($this->width, $this->height, $this->mime_type, $extension) =
+ photo::get_file_metadata($this->data_file);
+ } else if ($this->is_movie()) {
+ list ($this->width, $this->height, $this->mime_type, $extension) =
+ movie::get_file_metadata($this->data_file);
+ }
+
+ // Force an extension onto the name if necessary
+ $pi = pathinfo($this->data_file);
+ if (empty($pi["extension"])) {
+ $this->name = "{$this->name}.$extension";
+ }
+ }
+
+ $this->_randomize_name_or_slug_on_conflict();
+
+ parent::save();
+
+ // Build our url caches, then save again. We have to do this after it's already been
+ // saved once because we use only information from the database to build the paths. If we
+ // could depend on a save happening later we could defer this 2nd save.
+ $this->_build_relative_caches();
+ parent::save();
+
+ // Take any actions that we can only do once all our paths are set correctly after saving.
+ switch ($this->type) {
+ case "album":
+ mkdir($this->file_path());
+ mkdir(dirname($this->thumb_path()));
+ mkdir(dirname($this->resize_path()));
+ break;
+
+ case "photo":
+ case "movie":
+ // The thumb or resize may already exist in the case where a movie and a photo generate
+ // a thumbnail of the same name (eg, foo.flv movie and foo.jpg photo will generate
+ // foo.jpg thumbnail). If that happens, randomize and save again.
+ if (file_exists($this->resize_path()) ||
+ file_exists($this->thumb_path())) {
+ $pi = pathinfo($this->name);
+ $this->name = $pi["filename"] . "-" . random::int() . "." . $pi["extension"];
+ parent::save();
+ }
+
+ copy($this->data_file, $this->file_path());
+ break;
+ }
+
+ // This will almost definitely trigger another save, so put it at the end so that we're
+ // tail recursive. Null out the data file variable first, otherwise the next save will
+ // trigger an item_updated_data_file event.
+ $this->data_file = null;
+ module::event("item_created", $this);
+ } else {
+ // Update an existing item
+ module::event("item_before_update", $item);
+
+ // If any significant fields have changed, load up a copy of the original item and
+ // keep it around.
+ $original = ORM::factory("item", $this->id);
+ if (array_intersect($this->changed, array("parent_id", "name", "slug"))) {
+ $original->_build_relative_caches();
+ $this->relative_path_cache = null;
+ $this->relative_url_cache = null;
+ }
+
+ $this->_randomize_name_or_slug_on_conflict();
+
+ parent::save();
+
+ // Now update the filesystem and any database caches if there were significant value
+ // changes. If anything past this point fails, then we'll have an inconsistent database
+ // so this code should be as robust as we can make it.
+
+ // Update the MPTT pointers, if necessary. We have to do this before we generate any
+ // cached paths!
+ if ($original->parent_id != $this->parent_id) {
+ parent::move_to($this->parent());
+ }
+
+ if ($original->parent_id != $this->parent_id || $original->name != $this->name) {
+ // Move all of the items associated data files
+ @rename($original->file_path(), $this->file_path());
+ if ($this->is_album()) {
+ @rename(dirname($original->resize_path()), dirname($this->resize_path()));
+ @rename(dirname($original->thumb_path()), dirname($this->thumb_path()));
+ } else {
+ @rename($original->resize_path(), $this->resize_path());
+ @rename($original->thumb_path(), $this->thumb_path());
+ }
+
+ if ($original->parent_id != $this->parent_id) {
+ // This will result in 2 events since we'll still fire the item_updated event below
+ module::event("item_moved", $this, $original->parent());
+ }
+ }
+
+ // Changing the name, slug or parent ripples downwards
+ if ($this->is_album() &&
+ ($original->name != $this->name ||
+ $original->slug != $this->slug ||
+ $original->parent_id != $this->parent_id)) {
+ db::build()
+ ->update("items")
+ ->set("relative_url_cache", null)
+ ->set("relative_path_cache", null)
+ ->where("left_ptr", ">", $this->left_ptr)
+ ->where("right_ptr", "<", $this->right_ptr)
+ ->execute();
+ }
+
+ // Replace the data file, if requested.
+ // @todo: we don't handle the case where you swap in a file of a different mime type
+ // should we prevent that in validation? or in set_data_file()
+ if ($this->data_file && ($this->is_photo() || $this->is_movie())) {
+ copy($this->data_file, $this->file_path());
+
+ // Get the width, height and mime type from our data file for photos and movies.
+ if ($this->is_photo()) {
+ list ($this->width, $this->height) = photo::get_file_metadata($this->file_path());
+ } else if ($this->is_movie()) {
+ list ($this->width, $this->height) = movie::get_file_metadata($this->file_path());
+ }
+ $this->thumb_dirty = 1;
+ $this->resize_dirty = 1;
+ }
+
+ module::event("item_updated", $original, $this);
+
+ if ($this->data_file) {
+ // Null out the data file variable here, otherwise this event will trigger another
+ // save() which will think that we're doing another file move.
+ $this->data_file = null;
+ module::event("item_updated_data_file", $this);
+ }
+ }
+ } else if (!empty($this->changed)) {
+ // Insignificant changes only. Don't fire events or do any special checking to try to keep
+ // this lightweight.
+ parent::save();
+ }
+
+ return $this;
+ }
+
+ /**
+ * Check to see if there's another item that occupies the same name or slug that this item
+ * intends to use, and if so choose a new name/slug while preserving the extension.
+ * @todo Improve this. Random numbers are not user friendly
+ */
+ private function _randomize_name_or_slug_on_conflict() {
+ $base_name = pathinfo($this->name, PATHINFO_FILENAME);
+ $base_ext = pathinfo($this->name, PATHINFO_EXTENSION);
+ $base_slug = $this->slug;
+ while (ORM::factory("item")
+ ->where("parent_id", "=", $this->parent_id)
+ ->where("id", $this->id ? "<>" : "IS NOT", $this->id)
+ ->and_open()
+ ->where("name", "=", $this->name)
+ ->or_where("slug", "=", $this->slug)
+ ->close()
+ ->find()->id) {
+ $rand = random::int();
+ if ($base_ext) {
+ $this->name = "$base_name-$rand.$base_ext";
+ } else {
+ $this->name = "$base_name-$rand";
+ }
+ $this->slug = "$base_slug-$rand";
+ }
+ }
+
+ /**
+ * Return the Item_Model representing the cover for this album.
+ * @return Item_Model or null if there's no cover
+ */
+ public function album_cover() {
+ if (!$this->is_album()) {
+ return null;
+ }
+
+ if (empty($this->album_cover_item_id)) {
+ return null;
+ }
+
+ try {
+ return model_cache::get("item", $this->album_cover_item_id);
+ } catch (Exception $e) {
+ // It's possible (unlikely) that the item was deleted, if so keep going.
+ return null;
+ }
+ }
+
+ /**
+ * Find the position of the given child id in this album. The resulting value is 1-indexed, so
+ * the first child in the album is at position 1.
+ *
+ * This method stands as a backward compatibility for gallery 3.0, and will
+ * be deprecated in version 3.1.
+ */
+ public function get_position($child, $where=array()) {
+ return item::get_position($child, $where);
+ }
+
+ /**
+ * Return an
tag for the thumbnail.
+ * @param array $extra_attrs Extra attributes to add to the img tag
+ * @param int (optional) $max Maximum size of the thumbnail (default: null)
+ * @param boolean (optional) $center_vertically Center vertically (default: false)
+ * @return string
+ */
+ public function thumb_img($extra_attrs=array(), $max=null, $center_vertically=false) {
+ list ($height, $width) = $this->scale_dimensions($max);
+ if ($center_vertically && $max) {
+ // The constant is divide by 2 to calculate the file and 10 to convert to em
+ $margin_top = (int)(($max - $height) / 20);
+ $extra_attrs["style"] = "margin-top: {$margin_top}em";
+ $extra_attrs["title"] = $this->title;
+ }
+ $attrs = array_merge($extra_attrs,
+ array(
+ "src" => $this->thumb_url(),
+ "alt" => $this->title,
+ "width" => $width,
+ "height" => $height)
+ );
+ // html::image forces an absolute url which we don't want
+ return "
";
+ }
+
+ /**
+ * Calculate the largest width/height that fits inside the given maximum, while preserving the
+ * aspect ratio. Don't upscale.
+ * @param int $max Maximum size of the largest dimension
+ * @return array
+ */
+ public function scale_dimensions($max) {
+ $width = $this->thumb_width;
+ $height = $this->thumb_height;
+
+ if ($width <= $max && $height <= $max) {
+ return array($height, $width);
+ }
+
+ if ($height) {
+ if (isset($max)) {
+ if ($width > $height) {
+ $height = (int)($max * $height / $width);
+ $width = $max;
+ } else {
+ $width = (int)($max * $width / $height);
+ $height = $max;
+ }
+ }
+ } else {
+ // Missing thumbnail, can happen on albums with no photos yet.
+ // @todo we should enforce a placeholder for those albums.
+ $width = 0;
+ $height = 0;
+ }
+ return array($height, $width);
+ }
+
+ /**
+ * Return an
tag for the resize.
+ * @param array $extra_attrs Extra attributes to add to the img tag
+ * @return string
+ */
+ public function resize_img($extra_attrs) {
+ $attrs = array_merge($extra_attrs,
+ array("src" => $this->resize_url(),
+ "alt" => $this->title,
+ "width" => $this->resize_width,
+ "height" => $this->resize_height)
+ );
+ // html::image forces an absolute url which we don't want
+ return "
";
+ }
+
+ /**
+ * Return a flowplayer
- } ?>
+// rWatcher Edit: This file used to be server_add_entry.php.
+class Videos_Entry_Model_Core extends ORM {
+}
diff --git a/3.1/modules/videos/module.info b/3.1/modules/videos/module.info
index e20588d5..d32b53dd 100644
--- a/3.1/modules/videos/module.info
+++ b/3.1/modules/videos/module.info
@@ -1,3 +1,7 @@
name = "Videos"
description = "Allows authorized users to load videos directly from your web server"
-version = 1
+version = 4
+author_name = "rWatcher"
+author_url = "http://codex.gallery2.org/User:RWatcher"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:videos"
+discuss_url = "http://gallery.menalto.com/node/98149"
diff --git a/3.1/modules/videos/views/admin_videos.html.php b/3.1/modules/videos/views/admin_videos.html.php
index 6addb355..b3f108e5 100644
--- a/3.1/modules/videos/views/admin_videos.html.php
+++ b/3.1/modules/videos/views/admin_videos.html.php
@@ -1,10 +1,11 @@
+ // rWatcher Edit: This file used to be admin_server_add.html.php ?>
= t("Add videos from server administration") ?>
= $form ?>
= t("Authorized paths") ?>
-
+
if (empty($paths)): ?>
= t("No authorized image source paths defined yet") ?>
endif ?>
diff --git a/3.1/modules/videos/views/movieplayer.html.php b/3.1/modules/videos/views/movieplayer.html.php
index 1cf46cda..ad6ea3c7 100644
--- a/3.1/modules/videos/views/movieplayer.html.php
+++ b/3.1/modules/videos/views/movieplayer.html.php
@@ -1,10 +1,15 @@
+// rWatcher Edit: This is a combination of Gallery's movieplayer.html.php file and
+// some custom edits.
+
$items_video = ORM::factory("items_video")
->where("item_id", "=", $item->id)
->find();
if ($items_video->loaded() && file_exists($item->resize_path() . ".flv")) {
print html::anchor(str_replace("?m=", ".flv?m=", $item->resize_url(true)), "", $attrs);
+ } else if ($items_video->loaded() && !(file_exists($item->resize_path() . ".flv"))) {
+ print "file_url(true) . "\" class=\"g-movie\" id=\"g-videos-full-url\"> ";
} else {
print html::anchor($item->file_url(true), "", $attrs);
}
diff --git a/3.1/modules/videos/views/videos_tree.html.php b/3.1/modules/videos/views/videos_tree.html.php
index 91354329..366d4fb4 100644
--- a/3.1/modules/videos/views/videos_tree.html.php
+++ b/3.1/modules/videos/views/videos_tree.html.php
@@ -1,4 +1,5 @@
+ // rWatcher Edit: This file used to be server_add_tree.html.php ?>
diff --git a/3.1/modules/videos/views/videos_tree_dialog.html.php b/3.1/modules/videos/views/videos_tree_dialog.html.php
index a235ffbf..a0c0f7b7 100644
--- a/3.1/modules/videos/views/videos_tree_dialog.html.php
+++ b/3.1/modules/videos/views/videos_tree_dialog.html.php
@@ -1,13 +1,14 @@
+ // rWatcher Edit: This file used to be server_add_tree_dialog.html.php, server_add has been replaced with videos ?>
-
-
= t("Add Videos to '%title'", array("title" => html::purify($item->title))) ?>
+
+
= t("Add Photos to '%title'", array("title" => html::purify($item->title))) ?>
-
= t("Videos will be added to album:") ?>
+
= t("Photos will be added to album:") ?>
$i = 0 ?>
foreach ($item->parents() as $parent): ?>
@@ -17,35 +18,35 @@
= html::purify($item->title) ?>
-
+
-
+
-
= t("Add") ?>
-
+
= t("Pause") ?>
-
+
= t("Continue") ?>
-
+
= t("Close") ?>
diff --git a/3.1/modules/win_platform/module.info b/3.1/modules/win_platform/module.info
new file mode 100644
index 00000000..de0c1a92
--- /dev/null
+++ b/3.1/modules/win_platform/module.info
@@ -0,0 +1,7 @@
+name = "Win Platform"
+description = "An alternate version of Gallery's admin dashboard platform information block for unsupported configurations."
+version = 1
+author_name = "rWatcher"
+author_url = "http://codex.gallery2.org/User:RWatcher"
+info_url = "http://codex.gallery2.org/Gallery3:Modules:win_platform"
+discuss_url = "http://gallery.menalto.com/node/102809"
diff --git a/3.1/modules/win_platform/views/admin_block_platform.html.php b/3.1/modules/win_platform/views/admin_block_platform.html.php
new file mode 100644
index 00000000..f76f479b
--- /dev/null
+++ b/3.1/modules/win_platform/views/admin_block_platform.html.php
@@ -0,0 +1,28 @@
+
+
+
+ = t("Host name: %host_name", array("host_name" => php_uname("n"))) ?>
+
+
+ = t("Operating system: %os %version", array("os" => php_uname("s"), "version" => php_uname("r"))) ?>
+
+
+
+ = t("Apache: %apache_version", array("apache_version" => function_exists("apache_get_version") ? apache_get_version() : t("Unknown"))) ?>
+
+ = t("Server software: %apache_version", array("apache_version" => getenv("SERVER_SOFTWARE") != "" ? getenv("SERVER_SOFTWARE") : t("Unknown"))) ?>
+
+
+
+ = t("PHP: %php_version", array("php_version" => phpversion())) ?>
+
+
+ = t("MySQL: %mysql_version", array("mysql_version" => Database::instance()->query("SELECT version() as v")->current()->v)) ?>
+
+
+ = t("Server load: %load_average", array("load_average" => function_exists("sys_getloadavg") ? sys_getloadavg() : t("Unknown"))) ?>
+
+
+ = t("Graphics toolkit: %toolkit", array("toolkit" => module::get_var("gallery", "graphics_toolkit"))) ?>
+
+
\ No newline at end of file
diff --git a/3.1/modules/wordpress_auth/module.info b/3.1/modules/wordpress_auth/module.info
index 25c6cee0..e22f621d 100644
--- a/3.1/modules/wordpress_auth/module.info
+++ b/3.1/modules/wordpress_auth/module.info
@@ -1,3 +1,7 @@
name = "WordPress Authentication"
description = "Use a WordPress installation for authentication"
version = 1
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Modules:wordpress_auth"
+discuss_url = "http://gallery.menalto.com/forum_module_wordpress_auth"
diff --git a/3.1/themes/browny_admin_wind/css/screen-rtl.css b/3.1/themes/browny_admin_wind/css/screen-rtl.css
new file mode 100644
index 00000000..d9b26b1e
--- /dev/null
+++ b/3.1/themes/browny_admin_wind/css/screen-rtl.css
@@ -0,0 +1,401 @@
+/**
+ * Gallery 3 Browny Admin Wind Theme Right-to-Left Screen Styles
+ */
+
+.rtl {
+ direction: rtl;
+}
+
+#g-header,
+#g-content,
+#g-sidebar,
+#g-footer,
+caption,
+th,
+#g-dialog,
+.g-context-menu li a,
+.g-message-box li,
+#g-site-status li {
+ text-align: right;
+}
+
+.g-text-right {
+ text-align: left;
+}
+
+/* Lists ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-text li,
+.g-text li {
+ margin-left: 0;
+ margin-right: 1em;
+}
+
+/* Messages ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-error,
+.g-info,
+.g-success,
+.g-warning,
+#g-add-photos-status .g-success,
+#g-add-photos-status .g-error {
+ background-position: center right;
+ padding-right: 30px !important;
+}
+
+form li.g-error,
+form li.g-info,
+form li.g-success,
+form li.g-warning {
+ padding-right: 0 !important;
+}
+
+.g-left,
+.g-inline li,
+#g-content #g-album-grid .g-item,
+.sf-menu li,
+.g-breadcrumbs li,
+.g-paginator li,
+.g-buttonset li,
+.ui-icon-left .ui-icon,
+.g-short-form li,
+form ul ul li,
+input[type="submit"],
+input[type="reset"],
+input.checkbox,
+input[type=checkbox],
+input.radio,
+input[type=radio] {
+ float: right;
+}
+
+.g-right,
+.ui-icon-right .ui-icon {
+ float: left;
+}
+
+.g-inline li {
+ margin-right: 1em;
+}
+
+.g-inline li.g-first {
+ margin-right: 0;
+}
+
+.g-breadcrumbs li {
+ background: transparent url('../images/ico-separator-rtl.gif') no-repeat scroll right center;
+ padding: 1em 18px 1em 8px;
+}
+
+.g-breadcrumbs .g-first {
+ background: none;
+ padding-right: 0;
+}
+
+input.checkbox,
+input[type="checkbox"],
+input.radio,
+input[type="radio"] {
+ margin-right: 0;
+ margin-left: .4em;
+}
+
+#g-add-comment {
+ right: inherit;
+ left: 0;
+}
+
+.ui-icon-left .ui-icon {
+ margin-left: .2em;
+}
+
+.ui-icon-right .ui-icon {
+ margin-right: .2em;
+}
+
+.g-group h4 {
+ padding: .5em .5em .5em 0;
+}
+
+.g-group .g-user {
+ padding: .2em .5em 0 0;
+}
+
+/* RTL Corner radius ~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-buttonset .ui-corner-tl {
+ -moz-border-radius-topleft: 0;
+ -webkit-border-top-left-radius: 0;
+ border-top-left-radius: 0;
+ -moz-border-radius-topright: 5px !important;
+ -webkit-border-top-right-radius: 5px !important;
+ border-top-right-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-tr {
+ -moz-border-radius-topright: 0;
+ -webkit-border-top-right-radius: 0;
+ border-top-right-radius: 0;
+ -moz-border-radius-topleft: 5px !important;
+ -webkit-border-top-left-radius: 5px !important;
+ border-top-left-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-bl {
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-bottomright: 5px !important;
+ -webkit-border-bottom-right-radius: 5px !important;
+ border-bottom-right-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-br {
+ -moz-border-radius-bottomright: 0;
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomleft: 5px !important;
+ -webkit-border-bottom-left-radius: 5px !important;
+ border-bottom-left-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-right,
+.ui-progressbar .ui-corner-right {
+ -moz-border-radius-topright: 0;
+ -webkit-border-top-right-radius: 0;
+ border-top-right-radius: 0;
+ -moz-border-radius-topleft: 5px !important;
+ -webkit-border-top-left-radius: 5px !important;
+ border-top-left-radius: 5px !important;
+ -moz-border-radius-bottomright: 0;
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomleft: 5px !important;
+ -webkit-border-bottom-left-radius: 5px !important;
+ border-bottom-left-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-left,
+.ui-progressbar .ui-corner-left {
+ -moz-border-radius-topleft: 0;
+ -webkit-border-top-left-radius: 0;
+ border-top-left-radius: 0;
+ -moz-border-radius-topright: 5px !important;
+ -webkit-border-top-right-radius: 5px !important;
+ border-top-right-radius: 5px !important;
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-bottomright: 5px !important;
+ -webkit-border-bottom-right-radius: 5px !important;
+ border-bottom-right-radius: 5px !important;
+}
+
+/* RTL Superfish ~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.sf-menu a {
+ border-left: none;
+ border-right:1px solid #fff;
+}
+
+.sf-menu a.sf-with-ul {
+ padding-left: 2.25em;
+ padding-right: 1em;
+}
+
+.sf-sub-indicator {
+ left: .75em !important;
+ right: auto;
+ background: url('../../../lib/superfish/images/arrows-ffffff-rtl.png') no-repeat -10px -100px;
+}
+
+a > .sf-sub-indicator {
+ top: .8em;
+ background-position: -10px -100px;
+}
+
+a:focus > .sf-sub-indicator,
+a:hover > .sf-sub-indicator,
+a:active > .sf-sub-indicator,
+li:hover > a > .sf-sub-indicator,
+li.sfHover > a > .sf-sub-indicator {
+ background-position: 0 -100px;
+}
+
+.sf-menu ul .sf-sub-indicator {
+ background-position: 0 0;
+}
+
+.sf-menu ul a > .sf-sub-indicator {
+ background-position: -10px 0;
+}
+
+.sf-menu ul a:focus > .sf-sub-indicator,
+.sf-menu ul a:hover > .sf-sub-indicator,
+.sf-menu ul a:active > .sf-sub-indicator,
+.sf-menu ul li:hover > a > .sf-sub-indicator,
+.sf-menu ul li.sfHover > a > .sf-sub-indicator {
+ background-position: 0 0;
+}
+
+.sf-menu li:hover ul,
+.sf-menu li.sfHover ul {
+ right: 0;
+ left: auto;
+}
+
+ul.sf-menu li li:hover ul,
+ul.sf-menu li li.sfHover ul {
+ right: 12em;
+ left: auto;
+}
+ul.sf-menu li li li:hover ul,
+ul.sf-menu li li li.sfHover ul {
+ right: 12em;
+ left: auto;
+}
+
+.sf-shadow ul {
+ background: url('../../../lib/superfish/images/shadow.png') no-repeat bottom left;
+ padding: 0 0 9px 8px;
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-topright: 0;
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-top-right-radius: 0;
+ -webkit-border-bottom-left-radius: 0;
+ -moz-border-radius-topleft: 17px;
+ -moz-border-radius-bottomright: 17px;
+ -webkit-border-top-left-radius: 17px;
+ -webkit-border-bottom-right-radius: 17px;
+ border-top-left-radius: 17px;
+ border-bottom-right-radius: 17px;
+}
+
+/* RTL ThemeRoller ~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.ui-dialog .ui-dialog-titlebar {
+ padding: 0.5em 1em 0.3em 0.3em;
+}
+
+.ui-dialog .ui-dialog-title {
+ float: right;
+}
+
+.ui-dialog .ui-dialog-titlebar-close {
+ left: 0.3em;
+ right: auto;
+}
+
+.ui-tabs .ui-tabs-nav li {
+ float: right;
+}
+
+#g-content #g-album-grid .g-item,
+#g-site-theme,
+#g-admin-theme,
+.g-selected img,
+.g-available .g-block img,
+#g-content #g-photo-stream .g-item,
+li.g-group,
+#g-server-add-admin {
+ float: right;
+}
+
+#g-site-theme {
+ margin-right: 0;
+ margin-left: 1em;
+}
+
+#g-admin-graphics .g-available .g-block {
+ float: right;
+ margin-left: 1em;
+ margin-right: 0em;
+}
+
+#g-site-admin-menu {
+ left: auto;
+ right: 240px;
+}
+
+#g-header #g-login-menu {
+ float: left;
+}
+
+#g-header #g-login-menu li {
+ margin-left: 0;
+ padding-left: 0;
+ padding-right: 1.2em;
+}
+
+
+#g-sidebar .g-block-content {
+ padding-left: 0em;
+ padding-right: 1em;
+}
+
+.g-selected img,
+.g-available .g-block img {
+ margin: 0 0 1em 1em;
+}
+
+.g-button {
+ margin: 0 0 0 4px;
+}
+
+/* RTL paginator ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-paginator .g-info {
+ width: 35%;
+}
+
+.g-paginator .g-text-right {
+ margin-left: 0;
+}
+
+.g-paginator .ui-icon-seek-end {
+ background-position: -80px -160px;
+}
+
+.g-paginator .ui-icon-seek-next {
+ background-position: -48px -160px;
+}
+
+.g-paginator .ui-icon-seek-prev {
+ background-position: -32px -160px;
+}
+
+.g-paginator .ui-icon-seek-first {
+ background-position: -64px -160px;
+}
+
+#g-header #g-login-menu,
+#g-header #g-quick-search-form {
+ clear: left;
+ float: left;
+}
+
+#g-header #g-login-menu li {
+ margin-left: 0;
+ padding-left: 0;
+ padding-right: 1.2em;
+}
+
+#g-site-menu {
+ left: auto;
+ right: 240px;
+}
+
+#g-view-menu #g-slideshow-link {
+ background-image: url('../images/ico-view-slideshow-rtl.png');
+}
+
+#g-sidebar .g-block-content {
+ padding-right: 1em;
+ padding-left: 0;
+}
+
+#g-footer #g-credits li {
+ padding-left: 1.2em !important;
+ padding-right: 0;
+}
diff --git a/3.1/themes/browny_admin_wind/css/screen.css b/3.1/themes/browny_admin_wind/css/screen.css
index fbabbcc3..2d6b78c8 100644
--- a/3.1/themes/browny_admin_wind/css/screen.css
+++ b/3.1/themes/browny_admin_wind/css/screen.css
@@ -4,23 +4,30 @@
* @requires YUI reset, font, grids CSS
*
* Sheet organization:
- * 1) Basic HTML elements
- * 2) Reusable content blocks
- * 3) Page layout containers
- * 4) Content blocks in specific layout containers
- * 5) States and interactions
- * 6) Positioning and order
- * 7) Navigation and menus
- * 8) ThemeRoller
- * 9) jQuery and jQuery UI
- * 10) Right-to-left language styles
- * 11) More Browny
+ * 0) Pre Overrides
+ * 1) Basic HTML elements
+ * 2) Reusable content blocks
+ * 3) Page layout containers
+ * 4) Content blocks in specific layout containers
+ * 5) States and interactions
+ * 6) Positioning and order
+ * 7) Navigation and menus
+ * 8) jQuery and jQuery UI
+ * 9) More Browny
*
* @todo Review g-buttonset-vertical
*/
/** *******************************************************************
- * 1) Basic HTML elements
+ * 0) Pre Overrides
+ **********************************************************************/
+
+/* ThemeRoller overrides ~~~~~~~~~~~~~~ */
+
+@import "themeroller/ui.tabs.css";
+
+/** *******************************************************************
+ * 1) Basic HTML elements
**********************************************************************/
/* ~browny~ */
@@ -29,6 +36,13 @@ body, html {
font-family: 'Century gothic', Verdana, 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
}
+select,
+input,
+button,
+textarea {
+ font: 99% 'Century gothic', Verdana, Arial, Helvetica, Clean, sans-serif;
+}
+
p {
margin-bottom: 1em;
text-shadow: 0px 1px 1px #F7F5F0;
@@ -67,13 +81,6 @@ h3 {
font-size: 1.2em;
}
-select,
-input,
-button,
-textarea {
- font: 99% 'Century gothic', Verdana, Arial, Helvetica, Clean, sans-serif;
-}
-
#l10n-client h2 {
text-shadow: none;
}
@@ -104,7 +111,25 @@ a:hover,
text-decoration: none;
}
+/* Lists ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+ul.g-text li,
+.g-text ul li {
+ list-style-type: disc;
+}
+
+ol.g-text li,
+.g-text ol li {
+ list-style-type: decimal;
+}
+
+.g-text li,
+.g-text li {
+ margin-left: 1em;
+}
+
/* Forms ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
form {
margin: 0;
}
@@ -284,22 +309,6 @@ fieldset {
margin-bottom: 0;
}
-fieldset {
- margin-bottom: 1em;
-}
-
-#g-content form ul li {
- padding: .4em 0;
-}
-
-#g-dialog form {
- width: 270px;
-}
-
-#g-dialog fieldset {
- margin-bottom: 0;
-}
-
/* Tables ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
table {
@@ -328,8 +337,22 @@ th {
white-space: nowrap;
}
+/* Text ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-text-small {
+ font-size: .8em;
+}
+
+.g-text-big {
+ font-size: 1.2em;
+}
+
+.g-text-right {
+ text-align: right;
+}
+
/** *******************************************************************
- * 2) Reusable content blocks
+ * 2) Reusable content blocks
*********************************************************************/
.g-block,
@@ -393,7 +416,8 @@ th {
.g-unavailable {
border-color: #999;
- opacity: 0.4;
+ color: black;
+ opacity: .6;
}
.g-info td {
@@ -401,10 +425,6 @@ th {
background-image: none;
}
-#g-maintenance-mode ul.g-message-block {
- margin-top: .5em;
-}
-
.g-success td {
background-color: transparent;
background-image: none;
@@ -427,15 +447,12 @@ th {
background-color: #fff;
}
-ul.enumeration li {
- list-style-type: disc;
- margin-left: 20px;
-}
-
/*** ******************************************************************
- * 3) Page layout containers
+ * 3) Page layout containers
*********************************************************************/
+
/* Dimension and scale ~~~~~~~~~~~~~~~~~~~ */
+
.g-one-quarter {
width: 25%;
}
@@ -512,7 +529,7 @@ ul.enumeration li {
}
/** *******************************************************************
- * 4) Content blocks in specific layout containers
+ * 4) Content blocks in specific layout containers
*********************************************************************/
/* Header ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
@@ -607,7 +624,7 @@ ul.enumeration li {
margin-right: 1em;
}
-/* Block admin ~~~~~~~~~~~~~~~~~~~~~~~~~ */
+/* Block admin ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
.g-admin-blocks-list {
float: left;
@@ -633,12 +650,14 @@ ul.enumeration li {
padding: .3em .8em;
}
-/* In-line editing ~~~~~~~~~~~~~~~~~~~~ */
+/* In-line editing ~~~~~~~~~~~~~~~~~~~~~~ */
+
#g-in-place-edit-message {
background-color: #FFF;
}
-/* Language options ~~~~~~~~~~~~~~~~~~~~~~~~ */
+/* Language options ~~~~~~~~~~~~~~~~~~~~~ */
+
#g-share-translations-form fieldset {
border: 0px;
margin: 0px;
@@ -823,7 +842,7 @@ form .g-error {
}
/** *******************************************************************
- * 7) Navigation and menus
+ * 7) Navigation and menus
*********************************************************************/
/* Site Menu ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
@@ -840,16 +859,9 @@ form .g-error {
}
/** *******************************************************************
- * 8) ThemeRoller Theme
- **********************************************************************/
-/* ~browny~ */
-
-/* ThemeRoller overrides ~~~~~~~~~~~~~~ */
-@import "themeroller/ui.tabs.css";
-
-/** *******************************************************************
- * 9) jQuery and jQuery UI
+ * 8) jQuery and jQuery UI
*********************************************************************/
+
/* Generic block container ~~~~~~~~~~~~~~~ */
.g-block {
@@ -923,16 +935,16 @@ button {
display: inline-block;
}
-/* Status and validation messages ~~~~ */
+/* Status and validation messages ~~~~~~~~~ */
.g-message-block {
background-position: .4em .3em;
border: 1px solid #ccc;
padding: 0;
+ margin-bottom: 1em;
}
#g-action-status {
- margin-bottom: 1em;
}
#g-action-status li,
@@ -1002,7 +1014,7 @@ div#g-action-status {
width: 40%;
}
-/* Dialogs and panels ~~~~~~~~~~~~~~~~~~ */
+/* Dialogs and panels ~~~~~~~~~~~~~~~~~~~~ */
#g-dialog {
text-align: left;
@@ -1021,7 +1033,7 @@ div#g-action-status {
padding: 1em;
}
-/* Inline layout ~~~~~~~~~~ */
+/* Inline layout ~~~~~~~~~~~~~~~~~~~~~~~~ */
.g-inline li {
float: left;
@@ -1033,19 +1045,20 @@ div#g-action-status {
margin-left: 0;
}
-/* Superfish menu overrides ~~~~~~~~~~~ */
+/* Superfish menu overrides ~~~~~~~~~~~~~~ */
+
.sf-menu ul {
- width: 12em;
+ width: 12em;
}
ul.sf-menu li li:hover ul,
ul.sf-menu li li.sfHover ul {
- left: 12em;
+ left: 12em;
}
ul.sf-menu li li li:hover ul,
ul.sf-menu li li li.sfHover ul {
- left: 12em;
+ left: 12em;
}
/* ~browny~ */
@@ -1061,13 +1074,13 @@ ul.sf-menu li li li.sfHover ul {
/* ~browny~ */
.sf-menu a {
- border-top: 1px solid #e0cbae;
+ border-top: 1px solid #e0cbae;
}
/* ~browny~ */
.sf-menu li {
- background: #d3b07e url('../images/ui-bg_highlight-soft_45_d3b07e_1x100.png') 50% 50% repeat-x;
- text-shadow: 0px 1px 1px #fff;
+ background: #d3b07e url('../images/ui-bg_highlight-soft_45_d3b07e_1x100.png') 50% 50% repeat-x;
+ text-shadow: 0px 1px 1px #fff;
}
/* ~browny~ */
@@ -1076,11 +1089,16 @@ ul.sf-menu li li li.sfHover ul {
.sf-menu a:focus,
.sf-menu a:hover,
.sf-menu a:active {
- background: #e0cbae;
+ background: #e0cbae;
}
/* jQuery UI Dialog ~~~~~~~~~~~~~~~~~~~ */
+.ui-widget-overlay {
+ background: #000;
+ opacity: .7;
+}
+
#g-admin-dashboard .ui-state-highlight,
#g-sidebar .ui-state-highlight {
height: 2em;
@@ -1109,317 +1127,17 @@ ul.sf-menu li li li.sfHover ul {
}
/** *******************************************************************
- * 10) Right to left styles
- *********************************************************************/
-
-.rtl {
- direction: rtl;
-}
-
-.rtl #g-header,
-.rtl #g-content,
-.rtl #g-sidebar,
-.rtl #g-footer,
-.rtl caption,
-.rtl th,
-.rtl #g-dialog,
-.rtl .g-context-menu li a,
-.rtl .g-message-box li,
-.rtl #g-site-status li {
- text-align: right;
-}
-
-.rtl .g-text-right {
- text-align: left;
-}
-
-.rtl .g-error,
-.rtl .g-info,
-.rtl .g-success,
-.rtl .g-warning,
-.rtl #g-add-photos-status .g-success,
-.rtl #g-add-photos-status .g-error {
- background-position: center right;
- padding-right: 30px !important;
-}
-
-.rtl form li.g-error,
-.rtl form li.g-info,
-.rtl form li.g-success,
-.rtl form li.g-warning {
- padding-right: 0 !important;
-}
-
-.rtl .g-left,
-.rtl .g-inline li,
-.rtl #g-content #g-album-grid .g-item,
-.rtl .sf-menu li,
-.rtl .g-breadcrumbs li,
-.rtl .g-paginator li,
-.rtl .g-buttonset li,
-.rtl .ui-icon-left .ui-icon,
-.rtl .g-short-form li,
-.rtl form ul ul li,
-.rtl input[type="submit"],
-.rtl input[type="reset"],
-.rtl input.checkbox,
-.rtl input[type=checkbox],
-.rtl input.radio,
-.rtl input[type=radio] {
- float: right;
-}
-
-.rtl .g-right,
-.rtl .ui-icon-right .ui-icon {
- float: left;
-}
-
-.rtl .g-inline li {
- margin-right: 1em;
-}
-
-.rtl .g-inline li.g-first {
- margin-right: 0;
-}
-
-.rtl .g-breadcrumbs li {
- background: transparent url('../images/ico-separator-rtl.gif') no-repeat scroll right center;
- padding: 1em 18px 1em 8px;
-}
-
-.rtl .g-breadcrumbs .g-first {
- background: none;
- padding-right: 0;
-}
-
-.rtl input.checkbox {
- margin-left: .4em;
-}
-
-.rtl #g-add-comment {
- right: inherit;
- left: 0;
-}
-
-.rtl .ui-icon-left .ui-icon {
- margin-left: .2em;
-}
-
-.rtl .ui-icon-right .ui-icon {
- margin-right: .2em;
-}
-
-/* RTL Corner radius ~~~~~~~~~~~~~~~~~~~~~~ */
-.rtl .g-buttonset .ui-corner-tl {
- -moz-border-radius-topleft: 0;
- -webkit-border-top-left-radius: 0;
- border-top-left-radius: 0;
- -moz-border-radius-topright: 5px !important;
- -webkit-border-top-right-radius: 5px !important;
- border-top-right-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-tr {
- -moz-border-radius-topright: 0;
- -webkit-border-top-right-radius: 0;
- border-top-right-radius: 0;
- -moz-border-radius-topleft: 5px !important;
- -webkit-border-top-left-radius: 5px !important;
- border-top-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-bl {
- -moz-border-radius-bottomleft: 0;
- -webkit-border-bottom-left-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-bottomright: 5px !important;
- -webkit-border-bottom-right-radius: 5px !important;
- border-bottom-right-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-br {
- -moz-border-radius-bottomright: 0;
- -webkit-border-bottom-right-radius: 0;
- border-bottom-right-radius: 0;
- -moz-border-radius-bottomleft: 5px !important;
- -webkit-border-bottom-left-radius: 5px !important;
- border-bottom-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-right,
-.rtl .ui-progressbar .ui-corner-right {
- -moz-border-radius-topright: 0;
- -webkit-border-top-right-radius: 0;
- border-top-right-radius: 0;
- -moz-border-radius-topleft: 5px !important;
- -webkit-border-top-left-radius: 5px !important;
- border-top-left-radius: 5px !important;
- -moz-border-radius-bottomright: 0;
- -webkit-border-bottom-right-radius: 0;
- border-bottom-right-radius: 0;
- -moz-border-radius-bottomleft: 5px !important;
- -webkit-border-bottom-left-radius: 5px !important;
- border-bottom-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-left,
-.rtl .ui-progressbar .ui-corner-left {
- -moz-border-radius-topleft: 0;
- -webkit-border-top-left-radius: 0;
- border-top-left-radius: 0;
- -moz-border-radius-topright: 5px !important;
- -webkit-border-top-right-radius: 5px !important;
- border-top-right-radius: 5px !important;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-bottom-left-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-bottomright: 5px !important;
- -webkit-border-bottom-right-radius: 5px !important;
- border-bottom-right-radius: 5px !important;
-}
-
-/* RTL Superfish ~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.rtl .sf-menu a {
- border-left: none;
- border-right:1px solid #fff;
-}
-
-.rtl .sf-menu a.sf-with-ul {
- padding-left: 2.25em;
- padding-right: 1em;
-}
-
-.rtl .sf-sub-indicator {
- left: .75em !important;
- right: auto;
- background: url('../../../lib/superfish/images/arrows-ffffff-rtl.png') no-repeat -10px -100px; /* 8-bit indexed alpha png. IE6 gets solid image only */
-}
-.rtl a > .sf-sub-indicator { /* give all except IE6 the correct values */
- top: .8em;
- background-position: -10px -100px; /* use translucent arrow for modern browsers*/
-}
-/* apply hovers to modern browsers */
-.rtl a:focus > .sf-sub-indicator,
-.rtl a:hover > .sf-sub-indicator,
-.rtl a:active > .sf-sub-indicator,
-.rtl li:hover > a > .sf-sub-indicator,
-.rtl li.sfHover > a > .sf-sub-indicator {
- background-position: 0 -100px; /* arrow hovers for modern browsers*/
-}
-
-/* point right for anchors in subs */
-.rtl .sf-menu ul .sf-sub-indicator { background-position: 0 0; }
-.rtl .sf-menu ul a > .sf-sub-indicator { background-position: -10px 0; }
-/* apply hovers to modern browsers */
-.rtl .sf-menu ul a:focus > .sf-sub-indicator,
-.rtl .sf-menu ul a:hover > .sf-sub-indicator,
-.rtl .sf-menu ul a:active > .sf-sub-indicator,
-.rtl .sf-menu ul li:hover > a > .sf-sub-indicator,
-.rtl .sf-menu ul li.sfHover > a > .sf-sub-indicator {
- background-position: 0 0; /* arrow hovers for modern browsers*/
-}
-
-.rtl .sf-menu li:hover ul,
-.rtl .sf-menu li.sfHover ul {
- right: 0;
- left: auto;
-}
-
-.rtl ul.sf-menu li li:hover ul,
-.rtl ul.sf-menu li li.sfHover ul {
- right: 12em; /* match ul width */
- left: auto;
-}
-.rtl ul.sf-menu li li li:hover ul,
-.rtl ul.sf-menu li li li.sfHover ul {
- right: 12em; /* match ul width */
- left: auto;
-}
-
-/*** shadows for all but IE6 ***/
-.rtl .sf-shadow ul {
- background: url('../../../lib/superfish/images/shadow.png') no-repeat bottom left;
- padding: 0 0 9px 8px;
- border-top-right-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-topright: 0;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-top-right-radius: 0;
- -webkit-border-bottom-left-radius: 0;
- -moz-border-radius-topleft: 17px;
- -moz-border-radius-bottomright: 17px;
- -webkit-border-top-left-radius: 17px;
- -webkit-border-bottom-right-radius: 17px;
- border-top-left-radius: 17px;
- border-bottom-right-radius: 17px;
-}
-
-/* RTL ThemeRoller ~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.rtl .ui-dialog .ui-dialog-titlebar {
- padding: 0.5em 1em 0.3em 0.3em;
-}
-
-.rtl .ui-dialog .ui-dialog-title {
- float: right;
-}
-
-.rtl .ui-dialog .ui-dialog-titlebar-close {
- left: 0.3em;
- right: auto;
-}
-
-.rtl #g-content #g-album-grid .g-item,
-.rtl #g-site-theme,
-.rtl #g-admin-theme,
-.rtl .g-selected img,
-.rtl .g-available .g-block img,
-.rtl #g-content #g-photo-stream .g-item,
-.rtl li.g-group,
-.rtl #g-server-add-admin {
- float: right;
-}
-
-.rtl #g-admin-graphics .g-available .g-block {
- float: right;
- margin-left: 1em;
- margin-right: 0em;
-}
-
-.rtl #g-site-admin-menu {
- left: auto;
- right: 240px;
-}
-
-.rtl #g-header #g-login-menu {
- float: left;
-}
-
-.rtl #g-header #g-login-menu li {
- margin-left: 0;
- padding-left: 0;
- padding-right: 1.2em;
-}
-
-/* ~browny~ */
-.rtl .g-selected img,
-.rtl .g-available .g-block img {
- margin: 0 0 1em 1em;
-}
-
-/** *******************************************************************
- * 11) More Browny (Extra overrides for better Browny look)
+ * 9) More Browny (Extra overrides for better Browny look)
*********************************************************************/
/* /lib/gallery.common.css ~~~~~~~~~~~~ */
.g-success {
-background: #fcf9ce url('../images/ico-success.png') no-repeat .4em 50%
+ background: #fcf9ce url('../images/ico-success.png') no-repeat .4em 50%
}
.g-even {
- background: transparent;
+ background: transparent;
}
.g-odd {
diff --git a/3.1/themes/browny_admin_wind/images/ico-denied-inactive.png b/3.1/themes/browny_admin_wind/images/ico-denied-inactive.png
new file mode 100644
index 00000000..56db3ff5
Binary files /dev/null and b/3.1/themes/browny_admin_wind/images/ico-denied-inactive.png differ
diff --git a/3.1/themes/browny_admin_wind/images/ico-denied-passive.png b/3.1/themes/browny_admin_wind/images/ico-denied-passive.png
new file mode 100644
index 00000000..1e992230
Binary files /dev/null and b/3.1/themes/browny_admin_wind/images/ico-denied-passive.png differ
diff --git a/3.1/themes/browny_admin_wind/images/ico-denied.png b/3.1/themes/browny_admin_wind/images/ico-denied.png
new file mode 100644
index 00000000..08f24936
Binary files /dev/null and b/3.1/themes/browny_admin_wind/images/ico-denied.png differ
diff --git a/3.1/themes/browny_admin_wind/images/ico-lock.png b/3.1/themes/browny_admin_wind/images/ico-lock.png
new file mode 100644
index 00000000..2ebc4f6f
Binary files /dev/null and b/3.1/themes/browny_admin_wind/images/ico-lock.png differ
diff --git a/3.1/themes/browny_admin_wind/images/ico-success-passive.png b/3.1/themes/browny_admin_wind/images/ico-success-passive.png
new file mode 100644
index 00000000..7afba8cf
Binary files /dev/null and b/3.1/themes/browny_admin_wind/images/ico-success-passive.png differ
diff --git a/3.1/themes/browny_admin_wind/images/logo.png b/3.1/themes/browny_admin_wind/images/logo.png
index 6ffa889b..b430321b 100644
Binary files a/3.1/themes/browny_admin_wind/images/logo.png and b/3.1/themes/browny_admin_wind/images/logo.png differ
diff --git a/3.1/themes/browny_admin_wind/theme.info b/3.1/themes/browny_admin_wind/theme.info
index e3a020d0..51566b56 100644
--- a/3.1/themes/browny_admin_wind/theme.info
+++ b/3.1/themes/browny_admin_wind/theme.info
@@ -1,6 +1,10 @@
name = "Browny Wind"
description = "The default Wind Admin theme with a browny style."
version = 1
-author = "Ma'moun M. Diraneyya"
+author = "Mamouneyya"
admin = 1
site = 0
+author_name = "Ma'moun Diraneyya"
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Themes:browny_admin_wind"
+discuss_url = "http://gallery.menalto.com/node/95007"
diff --git a/3.1/themes/browny_admin_wind/views/admin.html.php b/3.1/themes/browny_admin_wind/views/admin.html.php
index c8041069..9a149149 100644
--- a/3.1/themes/browny_admin_wind/views/admin.html.php
+++ b/3.1/themes/browny_admin_wind/views/admin.html.php
@@ -1,9 +1,10 @@
-
+html_attributes() ?> xml:lang="en" lang="en">
+ $theme->start_combining("script,css") ?>
if ($page_title): ?>
= t("Gallery Admin: %page_title", array("page_title" => $page_title)) ?>
@@ -11,31 +12,46 @@
= t("Admin dashboard") ?>
endif ?>
-
" type="image/x-icon" />
+
"
+ type="image/x-icon" />
+
" />
+ = $theme->script("jquery.js") ?>
+ = $theme->script("jquery.form.js") ?>
+ = $theme->script("jquery-ui.js") ?>
+ = $theme->script("gallery.common.js") ?>
+ /* MSG_CANCEL is required by gallery.dialog.js */ ?>
+
+ = $theme->script("gallery.ajax.js") ?>
+ = $theme->script("gallery.dialog.js") ?>
+ = $theme->script("superfish/js/superfish.js") ?>
+ = $theme->script("jquery.scrollTo.js") ?>
+
+ = $theme->admin_head() ?>
+
+ /* Theme specific CSS/JS goes last so that it can override module CSS/JS */ ?>
+ = $theme->script("ui.init.js") ?>
= $theme->css("yui/reset-fonts-grids.css") ?>
= $theme->css("themeroller/ui.base.css") ?>
= $theme->css("superfish/css/superfish.css") ?>
= $theme->css("screen.css") ?>
+ if (locales::is_rtl()): ?>
+ = $theme->css("screen-rtl.css") ?>
+ endif; ?>
- = $theme->script("jquery.js") ?>
- = $theme->script("jquery.form.js") ?>
- = $theme->script("jquery-ui.js") ?>
- = $theme->script("gallery.common.js") ?>
- /* MSG_CANCEL is required by gallery.dialog.js */ ?>
-
- = $theme->script("gallery.ajax.js") ?>
- = $theme->script("gallery.dialog.js") ?>
- = $theme->script("superfish/js/superfish.js") ?>
- = $theme->script("ui.init.js") ?>
+
+ = $theme->get_combined("css") ?>
- = $theme->admin_head() ?>
+
+ = $theme->get_combined("script") ?>
body_attributes() ?>>
diff --git a/3.1/themes/browny_admin_wind/views/pager.html.php b/3.1/themes/browny_admin_wind/views/pager.html.php
deleted file mode 100644
index 5fff5845..00000000
--- a/3.1/themes/browny_admin_wind/views/pager.html.php
+++ /dev/null
@@ -1,44 +0,0 @@
-
- // See http://docs.kohanaphp.com/libraries/pagination ?>
-
diff --git a/3.1/themes/browny_admin_wind/views/paginator.html.php b/3.1/themes/browny_admin_wind/views/paginator.html.php
new file mode 100644
index 00000000..b46d9741
--- /dev/null
+++ b/3.1/themes/browny_admin_wind/views/paginator.html.php
@@ -0,0 +1,88 @@
+
+
+// This is a generic paginator for admin collections. Depending on the page type, there are
+// different sets of variables available. With this data, you can make a paginator that
+// lets you say "You're viewing photo 5 of 35", or "You're viewing photos 10 - 18 of 37"
+// for album views.
+
+//
+// Available variables for all page types:
+// $page_type - "collection", "item", or "other"
+// $page_subtype - "album", "movie", "photo", "tag", etc.
+// $previous_page_url - the url to the previous page, if there is one
+// $next_page_url - the url to the next page, if there is one
+// $total - the total number of photos in this album
+//
+// Available for the "collection" page types:
+// $page - what page number we're on
+// $max_pages - the maximum page number
+// $page_size - the page size
+// $first_page_url - the url to the first page, or null if we're on the first page
+// $last_page_url - the url to the last page, or null if we're on the last page
+// $first_visible_position - the position number of the first visible photo on this page
+// $last_visible_position - the position number of the last visible photo on this page
+//
+// Available for "item" page types:
+// $position - the position number of this photo
+//
+?>
+
+ if ($total): ?>
+
+
+ if ($page_type == "collection"): ?>
+ if (isset($first_page_url)): ?>
+
+ = t("First") ?>
+ else: ?>
+
+ = t("First") ?>
+ endif ?>
+ endif ?>
+
+ if (isset($previous_page_url)): ?>
+
+ = t("Previous") ?>
+ else: ?>
+
+ = t("Previous") ?>
+ endif ?>
+
+
+
+ if ($total): ?>
+ if ($page_type == "collection"): ?>
+ = /* @todo This message isn't easily localizable */
+ t2("Viewing %from_number of %count",
+ "Viewing %from_number - %to_number of %count",
+ $total,
+ array("from_number" => $first_visible_position,
+ "to_number" => $last_visible_position,
+ "count" => $total)) ?>
+ else: ?>
+ = t("%position of %total", array("position" => $position, "total" => $total)) ?>
+ endif ?>
+ endif ?>
+
+
+
+ if (isset($next_page_url)): ?>
+
+ = t("Next") ?>
+ else: ?>
+
+ = t("Next") ?>
+ endif ?>
+
+ if ($page_type == "collection"): ?>
+ if (isset($last_page_url)): ?>
+
+ = t("Last") ?>
+ else: ?>
+
+ = t("Last") ?>
+ endif ?>
+ endif ?>
+
+
+ endif ?>
\ No newline at end of file
diff --git a/3.1/themes/browny_wind/css/screen-rtl.css b/3.1/themes/browny_wind/css/screen-rtl.css
new file mode 100644
index 00000000..3a0ece7b
--- /dev/null
+++ b/3.1/themes/browny_wind/css/screen-rtl.css
@@ -0,0 +1,393 @@
+/**
+ * Gallery 3 Browny Wind Theme Right-to-Left Screen Styles
+ */
+
+.rtl {
+ direction: rtl;
+}
+
+#g-header,
+#g-content,
+#g-sidebar,
+#g-footer,
+caption,
+th,
+#g-dialog,
+.g-context-menu li a,
+.g-message-box li,
+#g-site-status li {
+ text-align: right;
+}
+
+.g-text-right {
+ text-align: left;
+}
+
+/* Lists ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-text li,
+.g-text li {
+ margin-left: 0;
+ margin-right: 1em;
+}
+
+/* Messages ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-error,
+.g-info,
+.g-success,
+.g-warning,
+#g-add-photos-status .g-success,
+#g-add-photos-status .g-error {
+ background-position: center right;
+ padding-right: 30px !important;
+}
+
+form li.g-error,
+form li.g-info,
+form li.g-success,
+form li.g-warning {
+ padding-right: 0 !important;
+}
+
+.g-left,
+.g-inline li,
+#g-content #g-album-grid .g-item,
+.sf-menu li,
+.g-breadcrumbs li,
+.g-paginator li,
+.g-buttonset li,
+.ui-icon-left .ui-icon,
+.g-short-form li,
+form ul ul li,
+input[type="submit"],
+input[type="reset"],
+input.checkbox,
+input[type=checkbox],
+input.radio,
+input[type=radio] {
+ float: right;
+}
+
+.g-right,
+.ui-icon-right .ui-icon {
+ float: left;
+}
+
+.g-inline li {
+ margin-right: 1em;
+}
+
+.g-inline li.g-first {
+ margin-right: 0;
+}
+
+/* ~browny~ */
+.g-breadcrumbs li {
+ background: transparent url('../images/ico-separator-rtl.gif') no-repeat scroll right center;
+ padding: .5em 18px .5em 8px;
+}
+
+.g-breadcrumbs .g-first {
+ background: none;
+ padding-right: 0;
+}
+
+input.checkbox {
+ margin-left: .4em;
+}
+
+#g-add-comment {
+ right: inherit;
+ left: 0;
+}
+
+.ui-icon-left .ui-icon {
+ margin-left: .2em;
+}
+
+.ui-icon-right .ui-icon {
+ margin-right: .2em;
+}
+
+/* RTL Corner radius ~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-buttonset .ui-corner-tl {
+ -moz-border-radius-topleft: 0;
+ -webkit-border-top-left-radius: 0;
+ border-top-left-radius: 0;
+ -moz-border-radius-topright: 5px !important;
+ -webkit-border-top-right-radius: 5px !important;
+ border-top-right-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-tr {
+ -moz-border-radius-topright: 0;
+ -webkit-border-top-right-radius: 0;
+ border-top-right-radius: 0;
+ -moz-border-radius-topleft: 5px !important;
+ -webkit-border-top-left-radius: 5px !important;
+ border-top-left-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-bl {
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-bottomright: 5px !important;
+ -webkit-border-bottom-right-radius: 5px !important;
+ border-bottom-right-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-br {
+ -moz-border-radius-bottomright: 0;
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomleft: 5px !important;
+ -webkit-border-bottom-left-radius: 5px !important;
+ border-bottom-left-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-right,
+.ui-progressbar .ui-corner-right {
+ -moz-border-radius-topright: 0;
+ -webkit-border-top-right-radius: 0;
+ border-top-right-radius: 0;
+ -moz-border-radius-topleft: 5px !important;
+ -webkit-border-top-left-radius: 5px !important;
+ border-top-left-radius: 5px !important;
+ -moz-border-radius-bottomright: 0;
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomleft: 5px !important;
+ -webkit-border-bottom-left-radius: 5px !important;
+ border-bottom-left-radius: 5px !important;
+}
+
+.g-buttonset .ui-corner-left,
+.ui-progressbar .ui-corner-left {
+ -moz-border-radius-topleft: 0;
+ -webkit-border-top-left-radius: 0;
+ border-top-left-radius: 0;
+ -moz-border-radius-topright: 5px !important;
+ -webkit-border-top-right-radius: 5px !important;
+ border-top-right-radius: 5px !important;
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-bottomright: 5px !important;
+ -webkit-border-bottom-right-radius: 5px !important;
+ border-bottom-right-radius: 5px !important;
+}
+
+/* RTL Superfish ~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.sf-menu a {
+ border-left: none;
+ border-right:1px solid #fff;
+}
+
+.sf-menu a.sf-with-ul {
+ padding-left: 2.25em;
+ padding-right: 1em;
+}
+
+.sf-sub-indicator {
+ left: .75em !important;
+ right: auto;
+ background: url('../../../lib/superfish/images/arrows-ffffff-rtl.png') no-repeat -10px -100px;
+}
+
+a > .sf-sub-indicator {
+ top: .8em;
+ background-position: -10px -100px;
+}
+
+a:focus > .sf-sub-indicator,
+a:hover > .sf-sub-indicator,
+a:active > .sf-sub-indicator,
+li:hover > a > .sf-sub-indicator,
+li.sfHover > a > .sf-sub-indicator {
+ background-position: 0 -100px;
+}
+
+.sf-menu ul .sf-sub-indicator {
+ background-position: 0 0;
+}
+
+.sf-menu ul a > .sf-sub-indicator {
+ background-position: -10px 0;
+}
+
+.sf-menu ul a:focus > .sf-sub-indicator,
+.sf-menu ul a:hover > .sf-sub-indicator,
+.sf-menu ul a:active > .sf-sub-indicator,
+.sf-menu ul li:hover > a > .sf-sub-indicator,
+.sf-menu ul li.sfHover > a > .sf-sub-indicator {
+ background-position: 0 0;
+}
+
+.sf-menu li:hover ul,
+.sf-menu li.sfHover ul {
+ right: 0;
+ left: auto;
+}
+
+ul.sf-menu li li:hover ul,
+ul.sf-menu li li.sfHover ul {
+ right: 12em;
+ left: auto;
+}
+ul.sf-menu li li li:hover ul,
+ul.sf-menu li li li.sfHover ul {
+ right: 12em;
+ left: auto;
+}
+
+.sf-shadow ul {
+ background: url('../../../lib/superfish/images/shadow.png') no-repeat bottom left;
+ padding: 0 0 9px 8px;
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-topright: 0;
+ -moz-border-radius-bottomleft: 0;
+ -webkit-border-top-right-radius: 0;
+ -webkit-border-bottom-left-radius: 0;
+ -moz-border-radius-topleft: 17px;
+ -moz-border-radius-bottomright: 17px;
+ -webkit-border-top-left-radius: 17px;
+ -webkit-border-bottom-right-radius: 17px;
+ border-top-left-radius: 17px;
+ border-bottom-right-radius: 17px;
+}
+
+/* RTL ThemeRoller ~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.ui-dialog .ui-dialog-titlebar {
+ padding: 0.5em 1em 0.3em 0.3em;
+}
+
+.ui-dialog .ui-dialog-title {
+ float: right;
+}
+
+.ui-dialog .ui-dialog-titlebar-close {
+ left: 0.3em;
+ right: auto;
+}
+
+.ui-tabs .ui-tabs-nav li {
+ float: right;
+}
+
+/* RTL paginator ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-paginator .g-info {
+ width: 35%;
+}
+
+.g-paginator .g-text-right {
+ margin-left: 0;
+}
+
+.g-paginator .ui-icon-seek-end {
+ background-position: -80px -160px;
+}
+
+.g-paginator .ui-icon-seek-next {
+ background-position: -48px -160px;
+}
+
+.g-paginator .ui-icon-seek-prev {
+ background-position: -32px -160px;
+}
+
+.g-paginator .ui-icon-seek-first {
+ background-position: -64px -160px;
+}
+
+#g-header #g-login-menu,
+#g-header #g-quick-search-form {
+ clear: left;
+ float: left;
+}
+
+#g-header #g-login-menu li {
+ margin-left: 0;
+ padding-left: 0;
+ padding-right: 1.2em;
+}
+
+#g-site-menu {
+ left: auto;
+ right: 240px;
+}
+
+#g-view-menu #g-slideshow-link {
+ background-image: url('../images/ico-view-slideshow-rtl.png');
+}
+
+#g-sidebar .g-block-content {
+ padding-right: 1em;
+ padding-left: 0;
+}
+
+#g-footer #g-credits li {
+ padding-left: 1.2em !important;
+ padding-right: 0;
+}
+
+/* Browny ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+.g-even {
+ text-align: left;
+}
+
+.g-odd {
+ text-align: right;
+}
+
+.uploadifyQueueItem .cancel {
+ float: left;
+}
+
+#g-user-profile .g-block h2 {
+ padding-right: .8em;
+ padding-left: auto;
+}
+
+#g-user-profile .g-avatar {
+ float: right;
+ right: 0em;
+ left: auto;
+ margin: 0em .6em 0em 0em;
+}
+
+#g-user-profile #g-comment-detail .g-author a {
+ float: right;
+ right: 0em;
+ left: auto;
+ margin-left: .6em;
+ margin-right: 0em;
+}
+
+#g-user-profile #g-comment-detail div {
+ margin-right: 5em;
+ margin-left: 0em;
+}
+
+#g-user-profile h1 {
+ margin: 1.25em 4.4em 2em 0em;
+}
+
+#g-content #g-comments .g-avatar {
+ float: right;
+ margin-left: .4em;
+ margin-right: 0;
+}
+
+#g-calendar-grid {
+ padding-right: 8px;
+ padding-left: 0px;
+}
+
diff --git a/3.1/themes/browny_wind/css/screen.css b/3.1/themes/browny_wind/css/screen.css
index 01576252..1539dadb 100644
--- a/3.1/themes/browny_wind/css/screen.css
+++ b/3.1/themes/browny_wind/css/screen.css
@@ -4,21 +4,28 @@
* @requires YUI reset, font, grids CSS
*
* Sheet organization:
- * 1) Font sizes, base HTML elements
- * 2) Reusable content blocks
- * 3) Page layout containers
- * 4) Content blocks in specific layout containers
- * 5) States and interactions
- * 6) Positioning and order
- * 7) Navigation and menus
- * 8) ThemeRoller
- * 9) jQuery and jQuery UI
- * 10) Right-to-left language styles
- * 11) More Browny
+ * 0) Pre Overrides
+ * 1) Font sizes, base HTML elements
+ * 2) Reusable content blocks
+ * 3) Page layout containers
+ * 4) Content blocks in specific layout containers
+ * 5) States and interactions
+ * 6) Positioning and order
+ * 7) Navigation and menus
+ * 8) jQuery and jQuery UI
+ * 9) More Browny
*/
/** *******************************************************************
- * 1) Font sizes, base HTML elements
+ * 0) Pre Overrides
+ **********************************************************************/
+
+/* ThemeRoller overrides ~~~~~~~~~~~~~~ */
+
+@import "themeroller/ui.tabs.css";
+
+/** *******************************************************************
+ * 1) Font sizes, base HTML elements
**********************************************************************/
/* ~browny~ */
@@ -27,6 +34,25 @@ body, html {
font-family: 'Century gothic', Verdana, 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
}
+.ui-widget {
+ font-family: 'Century gothic', Verdana, 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
+}
+
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button {
+ font-family: 'Century gothic', Verdana, 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
+}
+
+#g-user-profile #g-comment-detail .g-author {
+ font-family: Cursive, Serif;
+}
+
+select,
+input,
+button,
+textarea {
+ font: 99% 'Century gothic', Verdana, Arial, Helvetica, Clean, sans-serif;
+}
+
p {
margin-bottom: 1em;
text-shadow: 0px 1px 1px #F7F5F0;
@@ -88,13 +114,6 @@ h3 {
font-size: .7em;
}
-select,
-input,
-button,
-textarea {
- font: 99% 'Century gothic', Verdana, Arial, Helvetica, Clean, sans-serif;
-}
-
#l10n-client h2 {
text-shadow: none;
}
@@ -132,7 +151,25 @@ a:hover,
padding-left: 32px;
}
+/* Lists ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+ul.g-text li,
+.g-text ul li {
+ list-style-type: disc;
+}
+
+ol.g-text li,
+.g-text ol li {
+ list-style-type: decimal;
+}
+
+.g-text li,
+.g-text li {
+ margin-left: 1em;
+}
+
/* Forms ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
form {
margin: 0;
}
@@ -323,6 +360,7 @@ td {
}
/* Text ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
.g-text-small {
font-size: .8em;
}
@@ -336,7 +374,7 @@ td {
}
/** *******************************************************************
- * 2) Reusable content blocks
+ * 2) Reusable content blocks
*********************************************************************/
/* ~browny~ */
@@ -350,10 +388,11 @@ td {
}
/*** ******************************************************************
- * 3) Page layout containers
+ * 3) Page layout containers
*********************************************************************/
/* Dimension and scale ~~~~~~~~~~~~~~~~~~~ */
+
.g-one-quarter {
width: 25%;
}
@@ -422,7 +461,7 @@ td {
}
/** *******************************************************************
- * 4) Content blocks in specific layout containers
+ * 4) Content blocks in specific layout containers
*********************************************************************/
/* Header ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
@@ -550,7 +589,8 @@ td {
background-color: #fff;
}
-/* Permissions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+/* Permissions ~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
#g-edit-permissions-form td {
background-image: none;
}
@@ -663,11 +703,11 @@ tr.g-error td.g-error,
}
tr.g-success {
- background-image: none;
+ background-image: none;
}
tr.g-success td.g-success {
- background-image: url('../images/ico-success.png');
+ background-image: url('../images/ico-success.png');
}
.g-warning,
@@ -742,17 +782,20 @@ form .g-error {
.g-last {
}
+/* ~browny~ */
.g-even {
- background-color: #fff;
+ background-color: #BAAD8B;
+ text-align: right;
}
/* ~browny~ */
.g-odd {
background-color: #EDE4D5;
+ text-align: left;
}
/** *******************************************************************
- * 7) Navigation and menus
+ * 7) Navigation and menus
*********************************************************************/
/* Login menu ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
@@ -854,16 +897,7 @@ form .g-error {
}
/** *******************************************************************
- * 8) ThemeRoller Theme
- **********************************************************************/
-/* ~browny~ */
-
-/* ThemeRoller overrides ~~~~~~~~~~~~~~~~~ */
-
-@import "themeroller/ui.tabs.css";
-
-/** *******************************************************************
- * 9) jQuery and jQuery UI
+ * 8) jQuery and jQuery UI
*********************************************************************/
/* Generic block container ~~~~~~~~~~~~~~~ */
@@ -878,18 +912,19 @@ form .g-error {
}
/* Superfish menu overrides ~~~~~~~~~~~~~~ */
+
.sf-menu ul {
- width: 12em;
+ width: 12em;
}
ul.sf-menu li li:hover ul,
ul.sf-menu li li.sfHover ul {
- left: 12em;
+ left: 12em;
}
ul.sf-menu li li li:hover ul,
ul.sf-menu li li li.sfHover ul {
- left: 12em;
+ left: 12em;
}
/* ~browny~ */
@@ -900,13 +935,13 @@ ul.sf-menu li li li.sfHover ul {
/* ~browny~ */
.sf-menu li {
- background: #d3b07e url('../images/ui-bg_highlight-soft_45_d3b07e_1x100.png') 50% 50% repeat-x;
- text-shadow: 0px 1px 1px #fff;
+ background: #d3b07e url('../images/ui-bg_highlight-soft_45_d3b07e_1x100.png') 50% 50% repeat-x;
+ text-shadow: 0px 1px 1px #fff;
}
/* ~browny~ */
.sf-menu a {
- border-top: 1px solid #e0cbae;
+ border-top: 1px solid #e0cbae;
}
/* ~browny~ */
@@ -917,19 +952,11 @@ ul.sf-menu li li li.sfHover ul {
/* ~browny~ */
.sf-menu li:hover, .sf-menu li.sfHover,
.sf-menu a:focus, .sf-menu a:hover, .sf-menu a:active {
- background: #e0cbae;
+ background: #e0cbae;
}
/* jQuery UI Dialog ~~~~~~~~~~~~~~~~~~~~~~ */
-.ui-widget {
- font-family: 'Century gothic', Verdana, 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
-}
-
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button {
- font-family: 'Century gothic', Verdana, 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
-}
-
.ui-widget-overlay {
background: #000;
opacity: .7;
@@ -998,11 +1025,11 @@ button {
.g-progress-bar {
height: 1em;
width: 100%;
- margin-top: .5em;
+ margin: .5em 0;
display: inline-block;
}
-/* Status and validation messages ~~~~ */
+/* Status and validation messages ~~~~~~~~ */
.g-message-block {
background-position: .4em .3em;
@@ -1082,7 +1109,7 @@ div#g-action-status {
width: 40%;
}
-/* Dialogs and panels ~~~~~~~~~~~~~~~~~~ */
+/* Dialogs and panels ~~~~~~~~~~~~~~~~~~~~ */
#g-dialog {
text-align: left;
@@ -1101,7 +1128,7 @@ div#g-action-status {
padding: 1em;
}
-/* Inline layout ~~~~~~~~~~ */
+/* Inline layout ~~~~~~~~~~~~~~~~~~~~~~~~ */
.g-inline li {
float: left;
@@ -1113,328 +1140,13 @@ div#g-action-status {
margin-left: 0;
}
-/** *******************************************************************
- * 10) Right to left language styles
- *********************************************************************/
-.rtl {
- direction: rtl;
-}
-
-.rtl #g-header,
-.rtl #g-content,
-.rtl #g-sidebar,
-.rtl #g-footer,
-.rtl caption,
-.rtl th,
-.rtl #g-dialog,
-.rtl .g-context-menu li a,
-.rtl .g-message-box li,
-.rtl #g-site-status li {
- text-align: right;
-}
-
-.rtl .g-text-right {
- text-align: left;
-}
-
-.rtl .g-error,
-.rtl .g-info,
-.rtl .g-success,
-.rtl .g-warning,
-.rtl #g-add-photos-status .g-success,
-.rtl #g-add-photos-status .g-error {
- background-position: center right;
- padding-right: 30px !important;
-}
-
-.rtl form li.g-error,
-.rtl form li.g-info,
-.rtl form li.g-success,
-.rtl form li.g-warning {
- padding-right: 0 !important;
-}
-
-.rtl .g-left,
-.rtl .g-inline li,
-.rtl #g-content #g-album-grid .g-item,
-.rtl .sf-menu li,
-.rtl .g-breadcrumbs li,
-.rtl .g-paginator li,
-.rtl .g-buttonset li,
-.rtl .ui-icon-left .ui-icon,
-.rtl .g-short-form li,
-.rtl form ul ul li,
-.rtl input[type="submit"],
-.rtl input[type="reset"],
-.rtl input.checkbox,
-.rtl input[type=checkbox],
-.rtl input.radio,
-.rtl input[type=radio] {
- float: right;
-}
-
-.rtl .g-right,
-.rtl .ui-icon-right .ui-icon {
- float: left;
-}
-
-.rtl .g-inline li {
- margin-right: 1em;
-}
-
-.rtl .g-inline li.g-first {
- margin-right: 0;
-}
-
-/* ~browny~ */
-.rtl .g-breadcrumbs li {
- background: transparent url('../images/ico-separator-rtl.gif') no-repeat scroll right center;
- padding: .5em 18px .5em 8px;
-}
-
-.rtl .g-breadcrumbs .g-first {
- background: none;
- padding-right: 0;
-}
-
-.rtl input.checkbox {
- margin-left: .4em;
-}
-
-.rtl #g-add-comment {
- right: inherit;
- left: 0;
-}
-
-.rtl .ui-icon-left .ui-icon {
- margin-left: .2em;
-}
-
-.rtl .ui-icon-right .ui-icon {
- margin-right: .2em;
-}
-
-/* RTL Corner radius ~~~~~~~~~~~~~~~~~~~~~~ */
-.rtl .g-buttonset .ui-corner-tl {
- -moz-border-radius-topleft: 0;
- -webkit-border-top-left-radius: 0;
- border-top-left-radius: 0;
- -moz-border-radius-topright: 5px !important;
- -webkit-border-top-right-radius: 5px !important;
- border-top-right-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-tr {
- -moz-border-radius-topright: 0;
- -webkit-border-top-right-radius: 0;
- border-top-right-radius: 0;
- -moz-border-radius-topleft: 5px !important;
- -webkit-border-top-left-radius: 5px !important;
- border-top-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-bl {
- -moz-border-radius-bottomleft: 0;
- -webkit-border-bottom-left-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-bottomright: 5px !important;
- -webkit-border-bottom-right-radius: 5px !important;
- border-bottom-right-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-br {
- -moz-border-radius-bottomright: 0;
- -webkit-border-bottom-right-radius: 0;
- border-bottom-right-radius: 0;
- -moz-border-radius-bottomleft: 5px !important;
- -webkit-border-bottom-left-radius: 5px !important;
- border-bottom-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-right,
-.rtl .ui-progressbar .ui-corner-right {
- -moz-border-radius-topright: 0;
- -webkit-border-top-right-radius: 0;
- border-top-right-radius: 0;
- -moz-border-radius-topleft: 5px !important;
- -webkit-border-top-left-radius: 5px !important;
- border-top-left-radius: 5px !important;
- -moz-border-radius-bottomright: 0;
- -webkit-border-bottom-right-radius: 0;
- border-bottom-right-radius: 0;
- -moz-border-radius-bottomleft: 5px !important;
- -webkit-border-bottom-left-radius: 5px !important;
- border-bottom-left-radius: 5px !important;
-}
-
-.rtl .g-buttonset .ui-corner-left,
-.rtl .ui-progressbar .ui-corner-left {
- -moz-border-radius-topleft: 0;
- -webkit-border-top-left-radius: 0;
- border-top-left-radius: 0;
- -moz-border-radius-topright: 5px !important;
- -webkit-border-top-right-radius: 5px !important;
- border-top-right-radius: 5px !important;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-bottom-left-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-bottomright: 5px !important;
- -webkit-border-bottom-right-radius: 5px !important;
- border-bottom-right-radius: 5px !important;
-}
-
-/* RTL Superfish ~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.rtl .sf-menu a {
- border-left: none;
- border-right:1px solid #fff;
-}
-
-.rtl .sf-menu a.sf-with-ul {
- padding-left: 2.25em;
- padding-right: 1em;
-}
-
-.rtl .sf-sub-indicator {
- left: .75em !important;
- right: auto;
- background: url('../../../lib/superfish/images/arrows-ffffff-rtl.png') no-repeat -10px -100px; /* 8-bit indexed alpha png. IE6 gets solid image only */
-}
-.rtl a > .sf-sub-indicator { /* give all except IE6 the correct values */
- top: .8em;
- background-position: -10px -100px; /* use translucent arrow for modern browsers*/
-}
-/* apply hovers to modern browsers */
-.rtl a:focus > .sf-sub-indicator,
-.rtl a:hover > .sf-sub-indicator,
-.rtl a:active > .sf-sub-indicator,
-.rtl li:hover > a > .sf-sub-indicator,
-.rtl li.sfHover > a > .sf-sub-indicator {
- background-position: 0 -100px; /* arrow hovers for modern browsers*/
-}
-
-/* point right for anchors in subs */
-.rtl .sf-menu ul .sf-sub-indicator { background-position: 0 0; }
-.rtl .sf-menu ul a > .sf-sub-indicator { background-position: -10px 0; }
-/* apply hovers to modern browsers */
-.rtl .sf-menu ul a:focus > .sf-sub-indicator,
-.rtl .sf-menu ul a:hover > .sf-sub-indicator,
-.rtl .sf-menu ul a:active > .sf-sub-indicator,
-.rtl .sf-menu ul li:hover > a > .sf-sub-indicator,
-.rtl .sf-menu ul li.sfHover > a > .sf-sub-indicator {
- background-position: 0 0; /* arrow hovers for modern browsers*/
-}
-
-.rtl .sf-menu li:hover ul,
-.rtl .sf-menu li.sfHover ul {
- right: 0;
- left: auto;
-}
-
-.rtl ul.sf-menu li li:hover ul,
-.rtl ul.sf-menu li li.sfHover ul {
- right: 12em; /* match ul width */
- left: auto;
-}
-.rtl ul.sf-menu li li li:hover ul,
-.rtl ul.sf-menu li li li.sfHover ul {
- right: 12em; /* match ul width */
- left: auto;
-}
-
-/*** shadows for all but IE6 ***/
-.rtl .sf-shadow ul {
- background: url('../../../lib/superfish/images/shadow.png') no-repeat bottom left;
- padding: 0 0 9px 8px;
- border-top-right-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-topright: 0;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-top-right-radius: 0;
- -webkit-border-bottom-left-radius: 0;
- -moz-border-radius-topleft: 17px;
- -moz-border-radius-bottomright: 17px;
- -webkit-border-top-left-radius: 17px;
- -webkit-border-bottom-right-radius: 17px;
- border-top-left-radius: 17px;
- border-bottom-right-radius: 17px;
-}
-
-/* RTL ThemeRoller ~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.rtl .ui-dialog .ui-dialog-titlebar {
- padding: 0.5em 1em 0.3em 0.3em;
-}
-
-.rtl .ui-dialog .ui-dialog-title {
- float: right;
-}
-
-.rtl .ui-dialog .ui-dialog-titlebar-close {
- left: 0.3em;
- right: auto;
-}
-
-
-/* RTL paginator ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-.rtl .g-paginator .g-info {
- width: 35%;
-}
-
-.rtl .g-paginator .g-text-right {
- margin-left: 0;
-}
-
-.rtl .g-paginator .ui-icon-seek-end {
- background-position: -80px -160px;
-}
-
-.rtl .g-paginator .ui-icon-seek-next {
- background-position: -48px -160px;
-}
-
-.rtl .g-paginator .ui-icon-seek-prev {
- background-position: -32px -160px;
-}
-
-.rtl .g-paginator .ui-icon-seek-first {
- background-position: -64px -160px;
-}
-
-.rtl #g-header #g-login-menu,
-.rtl #g-header #g-quick-search-form {
- clear: left;
- float: left;
-}
-
-.rtl #g-header #g-login-menu li {
- margin-left: 0;
- padding-left: 0;
- padding-right: 1.2em;
-}
-
-.rtl #g-site-menu {
- left: auto;
- right: 240px;
-}
-
-.rtl #g-view-menu #g-slideshow-link {
- background-image: url('../images/ico-view-slideshow-rtl.png');
-}
-
-.rtl #g-sidebar .g-block-content {
- padding-right: 1em;
- padding-left: 0;
-}
-
-.rtl #g-footer #g-credits li {
- padding-left: 1.2em !important;
- padding-right: 0;
+/* Autocomplete ~~~~~~~~~~~~~~~~~~~~~~~~~ */
+.ac_loading {
+ background: white url('../images/loading-small.gif') right center no-repeat !important;
}
/** *******************************************************************
- * 11) More Browny (Extra overrides for better Browny look)
+ * 9) More Browny (Extra overrides for better Browny look)
*********************************************************************/
/* ~browny~ */
@@ -1461,10 +1173,6 @@ div#g-action-status {
background-color: #FAFAEB !important;
}
-.rtl .uploadifyQueueItem .cancel {
- float: left;
-}
-
.uploadifyQueue {
margin-top: 1em;
}
@@ -1497,10 +1205,6 @@ div#g-action-status {
margin-bottom: inherit;
}
-#g-user-profile #g-comment-detail .g-author {
- font-family: Cursive, Serif;
-}
-
#g-user-profile #g-comment-detail .g-author a {
float: left;
position: relative;
@@ -1520,35 +1224,6 @@ div#g-action-status {
margin-bottom: .5em;
}
-.rtl #g-user-profile .g-block h2 {
- padding-right: .8em;
- padding-left: auto;
-}
-
-.rtl #g-user-profile .g-avatar {
- float: right;
- right: 0em;
- left: auto;
- margin: 0em .6em 0em 0em;
-}
-
-.rtl #g-user-profile #g-comment-detail .g-author a {
- float: right;
- right: 0em;
- left: auto;
- margin-left: .6em;
- margin-right: 0em;
-}
-
-.rtl #g-user-profile #g-comment-detail div {
- margin-right: 5em;
- margin-left: 0em;
-}
-
-.rtl #g-user-profile h1 {
- margin: 1.25em 4.4em 2em 0em;
-}
-
/* Comments ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
#g-content #g-comments .g-avatar {
@@ -1557,12 +1232,6 @@ div#g-action-status {
margin-left: 0;
}
-.rtl #g-content #g-comments .g-avatar {
- float: right;
- margin-left: .4em;
- margin-right: 0;
-}
-
/* Organize ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
#g-organize {
@@ -1582,12 +1251,6 @@ div#g-action-status {
#g-exif-data {
font-size: .85em !important;
}
-.g-odd {
- background: #BAAD8B !important;
-}
-.g-even {
- background: #EDE4D5 !important;
-}
/* 3rd Party Modules ~~~~~~~~~~~~~~~~~~~~~ */
@@ -1602,11 +1265,6 @@ table.calendar td:hover {
background: #EDE4D5 !important;
}
-.rtl #g-calendar-grid {
- padding-right: 8px;
- padding-left: 0px;
-}
-
#g-view-menu #g-calendarview-link {
background-image: url('../images/ico-view-calendarview.png') !important;
}
@@ -1620,3 +1278,10 @@ table.calendar td:hover {
#g-view-menu #g-download-album-link {
background-image: url('../images/ico-view-downloadalbum.png');
}
+
+/* comment_block */
+.g-odd .g-thumbnail,
+.g-even .g-thumbnail {
+ margin-top: 3px;
+ margin-bottom: 3px;
+}
\ No newline at end of file
diff --git a/3.1/themes/browny_wind/js/ui.init.js b/3.1/themes/browny_wind/js/ui.init.js
index 2c67bf3a..3ee3e32e 100644
--- a/3.1/themes/browny_wind/js/ui.init.js
+++ b/3.1/themes/browny_wind/js/ui.init.js
@@ -82,7 +82,7 @@ $(document).ready(function() {
} else {
var sib_height = $(this).prev().height();
}
- if ($.browser.msie && $.browser.version >= 8) {
+ if ($.browser.msie && $.browser.version <= 8) {
sib_height = sib_height + 1;
}
$(this).css("height", sib_height);
diff --git a/3.1/themes/browny_wind/theme.info b/3.1/themes/browny_wind/theme.info
index 3f6c4c19..8ec9f1a2 100644
--- a/3.1/themes/browny_wind/theme.info
+++ b/3.1/themes/browny_wind/theme.info
@@ -1,6 +1,10 @@
name = "Browny Wind"
description = "The default Wind theme with a browny style."
version = 1
-author = "Ma'moun M. Diraneyya"
+author = "Mamouneyya"
site = 1
admin = 0
+author_name = "Ma'moun Diraneyya"
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Themes:browny_wind"
+discuss_url = "http://gallery.menalto.com/node/95007"
diff --git a/3.1/themes/browny_wind/views/no_sidebar.html.php b/3.1/themes/browny_wind/views/no_sidebar.html.php
index a9eb0e3e..58c57256 100644
--- a/3.1/themes/browny_wind/views/no_sidebar.html.php
+++ b/3.1/themes/browny_wind/views/no_sidebar.html.php
@@ -1,6 +1,11 @@
- = t("No active sidebar blocks.") ?>
- ">= t("Add blocks") ?>
+
+ if (block_manager::get_active("site_sidebar")): ?>
+ = t("Active sidebar blocks have no content.") ?>
+ else: ?>
+ = t("No active sidebar blocks.") ?>
+ endif ?>
+ ">= t("configure blocks") ?>
diff --git a/3.1/themes/browny_wind/views/page.html.php b/3.1/themes/browny_wind/views/page.html.php
index 5e4040bd..f0ee5b5f 100644
--- a/3.1/themes/browny_wind/views/page.html.php
+++ b/3.1/themes/browny_wind/views/page.html.php
@@ -1,50 +1,43 @@
-
+html_attributes() ?> xml:lang="en" lang="en">
+ $theme->start_combining("script,css") ?>
if ($page_title): ?>
= $page_title ?>
else: ?>
if ($theme->item()): ?>
- if ($theme->item()->is_album()): ?>
- = t("Browse Album :: %album_title", array("album_title" => $theme->item()->title)) ?>
- elseif ($theme->item()->is_photo()): ?>
- = t("Photo :: %photo_title", array("photo_title" => $theme->item()->title)) ?>
- else: ?>
- = t("Movie :: %movie_title", array("movie_title" => $theme->item()->title)) ?>
- endif ?>
+ = $theme->item()->title ?>
elseif ($theme->tag()): ?>
- = t("Browse Tag :: %tag_title", array("tag_title" => $theme->tag()->name)) ?>
+ = t("Photos tagged with %tag_title", array("tag_title" => $theme->tag()->name)) ?>
else: /* Not an item, not a tag, no page_title specified. Help! */ ?>
- = t("Gallery") ?>
+ = item::root()->title ?>
endif ?>
endif ?>
-
" type="image/x-icon" />
- = $theme->css("yui/reset-fonts-grids.css") ?>
- = $theme->css("superfish/css/superfish.css") ?>
- = $theme->css("themeroller/ui.base.css") ?>
- = $theme->css("screen.css") ?>
-
+
"
+ type="image/x-icon" />
+
" />
if ($theme->page_type == "collection"): ?>
if ($thumb_proportion != 1): ?>
$new_width = round($thumb_proportion * 213) ?>
$new_height = round($thumb_proportion * 240) ?>
-
+
endif ?>
endif ?>
+
+ = $theme->script("json2-min.js") ?>
= $theme->script("jquery.js") ?>
= $theme->script("jquery.form.js") ?>
= $theme->script("jquery-ui.js") ?>
@@ -57,9 +50,8 @@
= $theme->script("gallery.dialog.js") ?>
= $theme->script("superfish/js/superfish.js") ?>
= $theme->script("jquery.localscroll.js") ?>
- = $theme->script("ui.init.js") ?>
- /* These are page specific, but if we put them before $theme->head() they get combined */ ?>
+ /* These are page specific but they get combined */ ?>
if ($theme->page_subtype == "photo"): ?>
= $theme->script("jquery.scrollTo.js") ?>
= $theme->script("gallery.show_full_size.js") ?>
@@ -68,6 +60,26 @@
endif ?>
= $theme->head() ?>
+
+ /* Theme specific CSS/JS goes last so that it can override module CSS/JS */ ?>
+ = $theme->script("ui.init.js") ?>
+ = $theme->css("yui/reset-fonts-grids.css") ?>
+ = $theme->css("superfish/css/superfish.css") ?>
+ = $theme->css("themeroller/ui.base.css") ?>
+ = $theme->css("screen.css") ?>
+ if (locales::is_rtl()): ?>
+ = $theme->css("screen-rtl.css") ?>
+ endif; ?>
+
+
+
+ = $theme->get_combined("css") ?>
+
+
+ = $theme->get_combined("script") ?>
body_attributes() ?>>
@@ -80,7 +92,7 @@
= $header_text ?>
else: ?>
for_html_attr() ?>">
- for_html_attr() ?>" src="= $theme->url("images/logo.png") ?>" />
+ for_html_attr() ?>" src="= url::file("lib/images/logo.png") ?>" />
endif ?>
= $theme->user_menu() ?>
diff --git a/3.1/themes/sobriety/theme.info b/3.1/themes/sobriety/theme.info
index 545a0815..452fc2f5 100644
--- a/3.1/themes/sobriety/theme.info
+++ b/3.1/themes/sobriety/theme.info
@@ -6,3 +6,7 @@ site = 1
admin = 0
;wind commit = 3b05db2685d92ca538d7993c960b06ea32f3a8df
;wind date = Wed Jun 23 11:16:56 2010 -0700
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Themes:sobriety"
+discuss_url = "http://gallery.menalto.com/forum_theme_sobriety"
diff --git a/3.1/themes/three_nids/theme.info b/3.1/themes/three_nids/theme.info
index eb62dd07..4fb28616 100644
--- a/3.1/themes/three_nids/theme.info
+++ b/3.1/themes/three_nids/theme.info
@@ -4,3 +4,7 @@ version = 2
author = "3nids"
site = 1
admin = 0
+author_name = ""
+author_url = ""
+info_url = "http://codex.gallery2.org/Gallery3:Themes:three_nids"
+discuss_url = "http://gallery.menalto.com/forum_theme_three_nids"